// Copyright © 2018 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; namespace CefSharp { /// /// Implement this interface to handle events related to browser requests. /// The methods of this class will be called on the CEF IO thread unless otherwise indicated. /// public interface IResourceRequestHandler : IDisposable { /// /// Called on the CEF IO thread before a resource request is loaded. /// To optionally filter cookies for the request return a object. /// /// The ChromiumWebBrowser control /// the browser object - may be null if originating from ServiceWorker or CefURLRequest /// the frame object - may be null if originating from ServiceWorker or CefURLRequest /// the request object - can be modified in this callback. /// To optionally filter cookies for the request return a ICookieAccessFilter instance otherwise return null. ICookieAccessFilter GetCookieAccessFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request); /// /// Called on the CEF IO thread before a resource request is loaded. /// To redirect or change the resource load optionally modify . /// Modification of the request URL will be treated as a redirect /// /// The ChromiumWebBrowser control /// the browser object - may be null if originating from ServiceWorker or CefURLRequest /// the frame object - may be null if originating from ServiceWorker or CefURLRequest /// the request object - can be modified in this callback. /// Callback interface used for asynchronous continuation of url requests. /// /// Return to continue the request immediately. /// Return and call or at a later time to continue or the cancel the request asynchronously. /// Return to cancel the request immediately. /// CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback); /// /// Called on the CEF IO thread before a resource is loaded. To specify a handler for the resource return a object /// /// The browser UI control /// the browser object - may be null if originating from ServiceWorker or CefURLRequest /// the frame object - may be null if originating from ServiceWorker or CefURLRequest /// the request object - cannot be modified in this callback /// To allow the resource to load using the default network loader return null otherwise return an instance of with a valid stream IResourceHandler GetResourceHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request); /// /// Called on the CEF IO thread when a resource load is redirected. /// The parameter will contain the old URL and other request-related information. /// The parameter will contain the response that resulted in the /// redirect. The parameter will contain the new URL and can be changed if desired. /// /// The ChromiumWebBrowser control /// the browser object - may be null if originating from ServiceWorker or CefURLRequest /// the frame object - may be null if originating from ServiceWorker or CefURLRequest /// the request object - cannot be modified in this callback /// the response object - cannot be modified in this callback /// the new URL and can be changed if desired void OnResourceRedirect(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, ref string newUrl); /// /// Called on the CEF IO thread when a resource response is received. /// To allow the resource load to proceed without modification return false. To redirect or /// retry the resource load optionally modify and return true. /// Modification of the request URL will be treated as a redirect. Requests /// handled using the default network loader cannot be redirected in this /// callback. /// /// WARNING: Redirecting using this method is deprecated. Use /// OnBeforeResourceLoad or GetResourceHandler to perform redirects. /// /// The ChromiumWebBrowser control /// the browser object - may be null if originating from ServiceWorker or CefURLRequest /// the frame object - may be null if originating from ServiceWorker or CefURLRequest /// the request object /// the response object - cannot be modified in this callback /// /// To allow the resource load to proceed without modification return false. To redirect or /// retry the resource load optionally modify and return true. /// Modification of the request URL will be treated as a redirect. /// Requests handled using the default network loader cannot be redirected in this callback. /// bool OnResourceResponse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response); /// /// Called on the CEF IO thread to optionally filter resource response content. /// /// The ChromiumWebBrowser control /// the browser object - may be null if originating from ServiceWorker or CefURLRequest /// the frame object - may be null if originating from ServiceWorker or CefURLRequest /// the request object - cannot be modified in this callback /// the response object - cannot be modified in this callback /// Return an IResponseFilter to intercept this response, otherwise return null IResponseFilter GetResourceResponseFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response); /// /// Called on the CEF IO thread when a resource load has completed. /// This method will be called for all requests, including requests that are /// aborted due to CEF shutdown or destruction of the associated browser. In /// cases where the associated browser is destroyed this callback may arrive /// after the callback for that browser. The /// method can be used to test for this situation, and care /// should be taken not to call or methods that modify state /// (like LoadURL, SendProcessMessage, etc.) if the frame is invalid. /// /// The ChromiumWebBrowser control /// the browser object - may be null if originating from ServiceWorker or CefURLRequest /// the frame object - may be null if originating from ServiceWorker or CefURLRequest /// the request object - cannot be modified in this callback /// the response object - cannot be modified in this callback /// indicates the load completion status /// is the number of response bytes actually read. void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength); /// /// Called on the CEF UI thread to handle requests for URLs with an unknown protocol component. /// SECURITY WARNING: YOU SHOULD USE THIS METHOD TO ENFORCE RESTRICTIONS BASED ON SCHEME, HOST OR OTHER URL ANALYSIS BEFORE ALLOWING OS EXECUTION. /// /// The ChromiumWebBrowser control /// the browser object - may be null if originating from ServiceWorker or CefURLRequest /// the frame object - may be null if originating from ServiceWorker or CefURLRequest /// the request object - cannot be modified in this callback /// return to true to attempt execution via the registered OS protocol handler, if any. Otherwise return false. bool OnProtocolExecution(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request); } }