// Copyright © 2015 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 { /// /// A request context provides request handling for a set of related browser or URL request objects. /// A request context can be specified when creating a new browser by setting the /// property (Passing in via the constructor for the OffScreen /// control is preferred). /// Browser objects with different request contexts will never be hosted in the same render process. /// Browser objects with the same request context may or may not be hosted in the same render process /// depending on the process model.Browser objects created indirectly via the JavaScript window.open /// function or targeted links will share the same render process and the same request context as /// the source browser. /// public interface IRequestContext : IDisposable { /// /// Gets a value indicating whether the RequestContext has been disposed of. /// bool IsDisposed { get; } /// /// Returns true if this object is pointing to the same context object. /// /// context to compare /// Returns true if the same bool IsSame(IRequestContext context); /// /// Returns true if this object is sharing the same storage as the specified context. /// /// context to compare /// Returns true if same storage bool IsSharingWith(IRequestContext context); /// /// Returns true if this object is the global context. The global context is /// used by default when creating a browser or URL request with a NULL context /// argument. /// bool IsGlobal { get; } /// /// Returns the default cookie manager for this object. This will be the global /// cookie manager if this object is the global request context. /// /// If callback is non-NULL it will be executed asynchronously on the CEF IO thread /// after the manager's storage has been initialized. /// Returns the default cookie manager for this object ICookieManager GetCookieManager(ICompletionCallback callback); /// /// Register a scheme handler factory for the specified schemeName and optional domainName. /// An empty domainName value for a standard scheme will cause the factory to match all domain /// names. The domainName value will be ignored for non-standard schemes. If schemeName is /// a built-in scheme and no handler is returned by factory then the built-in scheme handler /// factory will be called. If schemeName is a custom scheme then you must also implement the /// CefApp::OnRegisterCustomSchemes() method in all processes. This function may be called multiple /// times to change or remove the factory that matches the specified schemeName and optional /// domainName. /// /// Scheme Name /// Optional domain name /// Scheme handler factory /// Returns false if an error occurs. bool RegisterSchemeHandlerFactory(string schemeName, string domainName, ISchemeHandlerFactory factory); /// /// Clear all registered scheme handler factories. /// /// Returns false on error. bool ClearSchemeHandlerFactories(); /// /// Returns the cache path for this object. If empty an "incognito mode" /// in-memory cache is being used. /// string CachePath { get; } /// /// Returns true if a preference with the specified name exists. This method /// must be called on the CEF UI thread. /// /// name of preference /// bool if the preference exists /// Use Cef.UIThreadTaskFactory to execute this method if required, /// and ChromiumWebBrowser.IsBrowserInitializedChanged are both /// executed on the CEF UI thread, so can be called directly. /// When CefSettings.MultiThreadedMessageLoop == false (the default is true) then the main /// application thread will be the CEF UI thread. bool HasPreference(string name); /// /// Returns the value for the preference with the specified name. Returns /// NULL if the preference does not exist. The returned object contains a copy /// of the underlying preference value and modifications to the returned object /// will not modify the underlying preference value. This method must be called /// on the CEF UI thread. /// /// preference name /// Returns the value for the preference with the specified name /// Use Cef.UIThreadTaskFactory to execute this method if required, /// and ChromiumWebBrowser.IsBrowserInitializedChanged are both /// executed on the CEF UI thread, so can be called directly. /// When CefSettings.MultiThreadedMessageLoop == false (the default is true) then the main /// application thread will be the CEF UI thread. object GetPreference(string name); /// /// Returns all preferences as a dictionary. The returned /// object contains a copy of the underlying preference values and /// modifications to the returned object will not modify the underlying /// preference values. This method must be called on the browser process UI /// thread. /// /// If true then /// preferences currently at their default value will be included. /// Preferences (dictionary can have sub dictionaries) IDictionary GetAllPreferences(bool includeDefaults); /// /// Returns true if the preference with the specified name can be modified /// using SetPreference. As one example preferences set via the command-line /// usually cannot be modified. This method must be called on the CEF UI thread. /// /// preference key /// Returns true if the preference with the specified name can be modified /// using SetPreference /// Use Cef.UIThreadTaskFactory to execute this method if required, /// and ChromiumWebBrowser.IsBrowserInitializedChanged are both /// executed on the CEF UI thread, so can be called directly. /// When CefSettings.MultiThreadedMessageLoop == false (the default is true) then the main /// application thread will be the CEF UI thread. bool CanSetPreference(string name); /// /// Set the value associated with preference name. If value is null the /// preference will be restored to its default value. If setting the preference /// fails then error will be populated with a detailed description of the /// problem. This method must be called on the CEF UI thread. /// Preferences set via the command-line usually cannot be modified. /// /// preference key /// preference value /// out error /// Returns true if the value is set successfully and false otherwise. /// Use Cef.UIThreadTaskFactory to execute this method if required, /// and ChromiumWebBrowser.IsBrowserInitializedChanged are both /// executed on the CEF UI thread, so can be called directly. /// When CefSettings.MultiThreadedMessageLoop == false (the default is true) then the main /// application thread will be the CEF UI thread. bool SetPreference(string name, object value, out string error); /// /// Clears all certificate exceptions that were added as part of handling /// . If you call this it is /// recommended that you also call or you risk not /// being prompted again for server certificates if you reconnect quickly. /// /// If is non-NULL it will be executed on the CEF UI thread after /// completion. This param is optional void ClearCertificateExceptions(ICompletionCallback callback); /// /// Clears all HTTP authentication credentials that were added as part of handling /// . /// /// If is non-NULL it will be executed on the CEF UI thread after /// completion. This param is optional void ClearHttpAuthCredentials(ICompletionCallback callback = null); /// /// Clears all active and idle connections that Chromium currently has. /// This is only recommended if you have released all other CEF objects but /// don't yet want to call Cef.Shutdown(). /// /// If is non-NULL it will be executed on the CEF UI thread after /// completion. This param is optional void CloseAllConnections(ICompletionCallback callback); /// /// Attempts to resolve origin to a list of associated IP addresses. /// /// host name to resolve /// A task that represents the Resoolve Host operation. The value of the TResult parameter contains ResolveCallbackResult. Task ResolveHostAsync(Uri origin); /// /// Used internally to get the underlying instance. /// Unlikely you'll use this yourself. /// /// the inner most instance [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)] IRequestContext UnWrap(); } }