// 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; }
}
}
}