// 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 extensions. /// The methods of this class will be called on the CEF UI thread. /// See for information about extension loading. /// public interface IExtensionHandler : IDisposable { /// /// Called if the request fails. /// /// error code void OnExtensionLoadFailed(CefErrorCode errorCode); /// /// Called if the request succeeds. /// /// is the loaded extension. void OnExtensionLoaded(IExtension extension); /// /// Called after the IExtension.Unload request has completed. /// /// is the unloaded extension void OnExtensionUnloaded(IExtension extension); /// /// Called when an extension needs a browser to host a background script specified via the "background" manifest key. /// The browser will have no visible window and cannot be displayed. To allow creation of the browser optionally /// modify newBrowser and settings and return false. To cancel creation of the browser /// (and consequently cancel load of the background script) return true. Successful creation will be indicated by a call to /// ILifeSpanHandler.OnAfterCreated, and IBrowserHost.IsBackgroundHost /// will return true for the resulting browser. See https://developer.chrome.com/extensions/event_pages for more information /// about extension background script usage. /// /// is the extension that is loading the background script /// is an internally generated reference to an HTML page that will be used to /// load the background script via a script src attribute /// browser settings /// To cancel creation of the browser (and consequently cancel load of the background script) return true, otherwise return false. bool OnBeforeBackgroundBrowser(IExtension extension, string url, IBrowserSettings settings); /// /// Called when an extension API (e.g. chrome.tabs.create) requests creation of a new browser. /// Successful creation will be indicated by a call to . /// /// the source of the API call /// the source of the API call /// may optionally be specified via the windowId property or /// returned via the GetActiveBrowser() callback and provides the default for the new browser /// is the position value optionally specified via the index property /// is the URL that will be loaded in the browser /// is true if the new browser should be active when opened /// optionally modify if you are going to allow creation of the browser /// optionally modify browser settings /// To cancel creation of the browser return true. To allow creation return false and optionally modify windowInfo and settings bool OnBeforeBrowser(IExtension extension, IBrowser browser, IBrowser activeBrowser, int index, string url, bool active, IWindowInfo windowInfo, IBrowserSettings settings); /// /// Called when no tabId is specified to an extension API call that accepts a tabId parameter (e.g. chrome.tabs.*). /// /// extension the call originates from /// browser the call originates from /// Incognito browsers should not be considered unless the source extension has incognito /// access enabled, inwhich case this will be true /// Return the browser that will be acted on by the API call or return null to act on . /// The returned browser must share the same IRequestContext as IBrowser GetActiveBrowser(IExtension extension, IBrowser browser, bool includeIncognito); /// /// Called when the tabId associated with is specified to an extension API call that accepts a tabId /// parameter (e.g. chrome.tabs.*). /// /// extension the call originates from /// browser the call originates from /// Access to incognito browsers should not be allowed unless the source extension has /// incognito access /// enabled, in which case this will be true. /// /// Return true to allow access of false to deny access. bool CanAccessBrowser(IExtension extension, IBrowser browser, bool includeIncognito, IBrowser targetBrowser); /// /// Called to retrieve an extension resource that would normally be loaded from disk /// (e.g. if a file parameter is specified to chrome.tabs.executeScript). /// Localization substitutions will not be applied to resources handled via this method. /// /// extension the call originates from /// browser the call originates from /// is the requested relative file path. /// callback used to handle custom resource requests /// To handle the resource request return true and execute either synchronously or asynchronously. /// For the default behavior which reads the resource from the extension directory on disk return false bool GetExtensionResource(IExtension extension, IBrowser browser, string file, IGetExtensionResourceCallback callback); } }