admin
2020-06-10 a610f2ab6e543d2cb78c1ef212ac6a74ddc067d9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// Copyright © 2014 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.
 
#pragma once
 
#include "Stdafx.h"
#include "include\cef_resource_request_handler.h"
 
#include "CefResponseWrapper.h"
#include "Request.h"
#include "CefFrameWrapper.h"
#include "CefBrowserWrapper.h"
 
namespace CefSharp
{
    namespace Internals
    {
        private class CefCookieAccessFilterAdapter : public CefCookieAccessFilter
        {
        private:
            gcroot<ICookieAccessFilter^> _handler;
            gcroot<IWebBrowser^> _browserControl;
 
        public:
            CefCookieAccessFilterAdapter(ICookieAccessFilter^ handler, IWebBrowser^ browserControl)
            {
                _handler = handler;
                _browserControl = browserControl;
            }
 
            ~CefCookieAccessFilterAdapter()
            {
                delete _handler;
                _handler = nullptr;
                _browserControl = nullptr;
            }
 
 
            bool CanSendCookie(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, CefRefPtr<CefRequest> request, const CefCookie& cookie) OVERRIDE
            {
                Request requestWrapper(request);
                auto managedCookie = TypeConversion::FromNative(cookie);
 
                //For ServiceWorker browser and frame will be null
                if (browser.get() && frame.get())
                {
 
                    CefBrowserWrapper browserWrapper(browser);
                    CefFrameWrapper frameWrapper(frame);
 
                    return _handler->CanSendCookie(_browserControl, %browserWrapper, %frameWrapper, %requestWrapper, managedCookie);
                }
 
                return _handler->CanSendCookie(_browserControl, nullptr, nullptr, %requestWrapper, managedCookie);
            }
 
            bool CanSaveCookie(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, CefRefPtr<CefRequest> request, CefRefPtr<CefResponse> response, const CefCookie& cookie) OVERRIDE
            {
                Request requestWrapper(request);
                CefResponseWrapper responseWrapper(response);
                auto managedCookie = TypeConversion::FromNative(cookie);
 
                //For ServiceWorker browser and frame will be null
                if (browser.get() && frame.get())
                {
 
                    CefBrowserWrapper browserWrapper(browser);
                    CefFrameWrapper frameWrapper(frame);
 
                    return _handler->CanSaveCookie(_browserControl, %browserWrapper, %frameWrapper, %requestWrapper, %responseWrapper, managedCookie);
                }
 
                return _handler->CanSaveCookie(_browserControl, nullptr, nullptr, %requestWrapper, %responseWrapper, managedCookie);
            }
 
            IMPLEMENT_REFCOUNTING(CefCookieAccessFilterAdapter);
        };
    }
}