// Copyright © 2016 The CefSharp Authors. All rights reserved. // // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. using System; using System.Collections.Generic; using System.Threading.Tasks; using CefSharp.Internals; namespace CefSharp { /// /// Cookie Visitor implementation that uses a TaskCompletionSource /// to return a List of cookies /// public class TaskCookieVisitor : ICookieVisitor { private readonly TaskCompletionSource> taskCompletionSource; private List list; /// /// Default constructor /// public TaskCookieVisitor() { taskCompletionSource = new TaskCompletionSource>(); list = new List(); } bool ICookieVisitor.Visit(Cookie cookie, int count, int total, ref bool deleteCookie) { list.Add(cookie); if (count == (total - 1)) { //Set the result on the ThreadPool so the Task continuation is not run on the CEF UI Thread taskCompletionSource.TrySetResultAsync(list); } return true; } void IDisposable.Dispose() { if (list != null && list.Count == 0) { //Set the result on the ThreadPool so the Task continuation is not run on the CEF UI Thread taskCompletionSource.TrySetResultAsync(list); } list = null; } /// /// Task that can be awaited for the result to be retrieved async /// public Task> Task { get { return taskCompletionSource.Task; } } } }