// 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; 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; /// /// Initializes a new instance of the TaskCookieVisitor class. /// public TaskCookieVisitor() { taskCompletionSource = new TaskCompletionSource>(TaskCreationOptions.RunContinuationsAsynchronously); list = new List(); } /// bool ICookieVisitor.Visit(Cookie cookie, int count, int total, ref bool deleteCookie) { list.Add(cookie); if (count == (total - 1)) { taskCompletionSource.TrySetResult(list); } return true; } /// void IDisposable.Dispose() { if (list != null && list.Count == 0) { taskCompletionSource.TrySetResult(list); } list = null; } /// /// Task that can be awaited for the result to be retrieved async /// public Task> Task { get { return taskCompletionSource.Task; } } } }