| // Copyright 2015 The Chromium Embedded Framework Authors. |
| // Portions copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CEF_LIBCEF_COMMON_CONTENT_CLIENT_H_ |
| #define CEF_LIBCEF_COMMON_CONTENT_CLIENT_H_ |
| #pragma once |
| |
| #include <list> |
| #include <string> |
| #include <vector> |
| |
| #include "include/cef_app.h" |
| #include "libcef/common/resource_bundle_delegate.h" |
| |
| #include "base/compiler_specific.h" |
| #include "content/public/common/content_client.h" |
| #include "content/public/common/pepper_plugin_info.h" |
| #include "url/url_util.h" |
| |
| class CefContentClient : public content::ContentClient { |
| public: |
| static const char kPDFPluginPath[]; |
| |
| explicit CefContentClient(CefRefPtr<CefApp> application); |
| ~CefContentClient() override; |
| |
| // Returns the singleton CefContentClient instance. |
| static CefContentClient* Get(); |
| |
| // content::ContentClient methods. |
| void AddPepperPlugins( |
| std::vector<content::PepperPluginInfo>* plugins) override; |
| void AddContentDecryptionModules( |
| std::vector<content::CdmInfo>* cdms, |
| std::vector<media::CdmHostFilePath>* cdm_host_file_paths) override; |
| void AddAdditionalSchemes(Schemes* schemes) override; |
| base::string16 GetLocalizedString(int message_id) override; |
| base::string16 GetLocalizedString(int message_id, |
| const base::string16& replacement) override; |
| base::StringPiece GetDataResource(int resource_id, |
| ui::ScaleFactor scale_factor) override; |
| base::RefCountedMemory* GetDataResourceBytes(int resource_id) override; |
| gfx::Image& GetNativeImageNamed(int resource_id) override; |
| |
| // Values are registered with all processes (url/url_util.h) and with Blink |
| // (SchemeRegistry) unless otherwise indicated. |
| struct SchemeInfo { |
| // Lower-case ASCII scheme name. |
| std::string scheme_name; |
| |
| // A scheme that is subject to URL canonicalization and parsing rules as |
| // defined in the Common Internet Scheme Syntax RFC 1738 Section 3.1 |
| // available at http://www.ietf.org/rfc/rfc1738.txt. |
| // This value is not registered with Blink. |
| bool is_standard; |
| |
| // A scheme that will be treated the same as "file". For example, normal |
| // pages cannot link to or access URLs of this scheme. |
| bool is_local; |
| |
| // A scheme that can only be displayed from other content hosted with the |
| // same scheme. For example, pages in other origins cannot create iframes or |
| // hyperlinks to URLs with the scheme. For schemes that must be accessible |
| // from other schemes set this value to false, set |is_cors_enabled| to |
| // true, and use CORS "Access-Control-Allow-Origin" headers to further |
| // restrict access. |
| // This value is registered with Blink only. |
| bool is_display_isolated; |
| |
| // A scheme that will be treated the same as "https". For example, loading |
| // this scheme from other secure schemes will not trigger mixed content |
| // warnings. |
| bool is_secure; |
| |
| // A scheme that can be sent CORS requests. This value should be true in |
| // most cases where |is_standard| is true. |
| bool is_cors_enabled; |
| |
| // A scheme that can bypass Content-Security-Policy (CSP) checks. This value |
| // should be false in most cases where |is_standard| is true. |
| bool is_csp_bypassing; |
| |
| // A scheme that can perform fetch request. |
| bool is_fetch_enabled; |
| }; |
| typedef std::list<SchemeInfo> SchemeInfoList; |
| |
| // Custom scheme information will be registered first with all processes |
| // (url/url_util.h) via CefContentClient::AddAdditionalSchemes which calls |
| // AddCustomScheme, and second with Blink (SchemeRegistry) via |
| // CefContentRendererClient::WebKitInitialized which calls GetCustomSchemes. |
| void AddCustomScheme(const SchemeInfo& scheme_info); |
| const SchemeInfoList* GetCustomSchemes(); |
| bool HasCustomScheme(const std::string& scheme_name); |
| |
| CefRefPtr<CefApp> application() const { return application_; } |
| |
| void set_pack_loading_disabled(bool val) { pack_loading_disabled_ = val; } |
| bool pack_loading_disabled() const { return pack_loading_disabled_; } |
| void set_allow_pack_file_load(bool val) { allow_pack_file_load_ = val; } |
| bool allow_pack_file_load() { return allow_pack_file_load_; } |
| |
| static void SetPDFEntryFunctions( |
| content::PepperPluginInfo::GetInterfaceFunc get_interface, |
| content::PepperPluginInfo::PPP_InitializeModuleFunc initialize_module, |
| content::PepperPluginInfo::PPP_ShutdownModuleFunc shutdown_module); |
| |
| CefResourceBundleDelegate* GetCefResourceBundleDelegate() { |
| return &resource_bundle_delegate_; |
| } |
| |
| private: |
| CefRefPtr<CefApp> application_; |
| bool pack_loading_disabled_; |
| bool allow_pack_file_load_; |
| |
| // Custom schemes handled by the client. |
| SchemeInfoList scheme_info_list_; |
| bool scheme_info_list_locked_; |
| |
| CefResourceBundleDelegate resource_bundle_delegate_; |
| }; |
| |
| #endif // CEF_LIBCEF_COMMON_CONTENT_CLIENT_H_ |