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