| // Copyright (c) 2012 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 CHROME_RENDERER_CHROME_CONTENT_RENDERER_CLIENT_H_ |
| #define CHROME_RENDERER_CHROME_CONTENT_RENDERER_CLIENT_H_ |
| |
| #include <map> |
| #include <set> |
| #include <string> |
| #include <vector> |
| |
| #include "base/compiler_specific.h" |
| #include "base/gtest_prod_util.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/strings/string16.h" |
| #include "content/public/renderer/content_renderer_client.h" |
| #include "ipc/ipc_channel_proxy.h" |
| #include "v8/include/v8.h" |
| |
| class ChromeRenderProcessObserver; |
| #if defined(ENABLE_PRINT_PREVIEW) |
| class ChromePDFPrintClient; |
| #endif |
| class PrescientNetworkingDispatcher; |
| #if defined(ENABLE_SPELLCHECK) |
| class SpellCheck; |
| class SpellCheckProvider; |
| #endif |
| |
| struct ChromeViewHostMsg_GetPluginInfo_Output; |
| |
| namespace content { |
| class BrowserPluginDelegate; |
| struct WebPluginInfo; |
| } |
| |
| namespace network_hints { |
| class PrescientNetworkingDispatcher; |
| } |
| |
| namespace extensions { |
| class Dispatcher; |
| class Extension; |
| } |
| |
| namespace prerender { |
| class PrerenderDispatcher; |
| } |
| |
| namespace safe_browsing { |
| class PhishingClassifierFilter; |
| } |
| |
| namespace visitedlink { |
| class VisitedLinkSlave; |
| } |
| |
| namespace web_cache { |
| class WebCacheRenderProcessObserver; |
| } |
| |
| namespace blink { |
| class WebSecurityOrigin; |
| } |
| |
| namespace password_manager { |
| class CredentialManagerClient; |
| } |
| |
| #if defined(ENABLE_WEBRTC) |
| class WebRtcLoggingMessageFilter; |
| #endif |
| |
| class ChromeContentRendererClient : public content::ContentRendererClient { |
| public: |
| ChromeContentRendererClient(); |
| ~ChromeContentRendererClient() override; |
| |
| void RenderThreadStarted() override; |
| void RenderFrameCreated(content::RenderFrame* render_frame) override; |
| void RenderViewCreated(content::RenderView* render_view) override; |
| SkBitmap* GetSadPluginBitmap() override; |
| SkBitmap* GetSadWebViewBitmap() override; |
| bool OverrideCreatePlugin(content::RenderFrame* render_frame, |
| blink::WebLocalFrame* frame, |
| const blink::WebPluginParams& params, |
| blink::WebPlugin** plugin) override; |
| blink::WebPlugin* CreatePluginReplacement( |
| content::RenderFrame* render_frame, |
| const base::FilePath& plugin_path) override; |
| bool HasErrorPage(int http_status_code, std::string* error_domain) override; |
| bool ShouldSuppressErrorPage(content::RenderFrame* render_frame, |
| const GURL& url) override; |
| void GetNavigationErrorStrings(content::RenderFrame* render_frame, |
| const blink::WebURLRequest& failed_request, |
| const blink::WebURLError& error, |
| std::string* error_html, |
| base::string16* error_description) override; |
| void DeferMediaLoad(content::RenderFrame* render_frame, |
| bool has_played_media_before, |
| const base::Closure& closure) override; |
| bool RunIdleHandlerWhenWidgetsHidden() override; |
| bool AllowTimerSuspensionWhenProcessBackgrounded() override; |
| bool AllowPopup() override; |
| bool ShouldFork(blink::WebLocalFrame* frame, |
| const GURL& url, |
| const std::string& http_method, |
| bool is_initial_navigation, |
| bool is_server_redirect, |
| bool* send_referrer) override; |
| bool WillSendRequest(blink::WebFrame* frame, |
| ui::PageTransition transition_type, |
| const GURL& url, |
| const GURL& first_party_for_cookies, |
| GURL* new_url) override; |
| unsigned long long VisitedLinkHash(const char* canonical_url, |
| size_t length) override; |
| bool IsLinkVisited(unsigned long long link_hash) override; |
| blink::WebPrescientNetworking* GetPrescientNetworking() override; |
| bool ShouldOverridePageVisibilityState( |
| const content::RenderFrame* render_frame, |
| blink::WebPageVisibilityState* override_state) override; |
| const void* CreatePPAPIInterface(const std::string& interface_name) override; |
| bool IsExternalPepperPlugin(const std::string& module_name) override; |
| blink::WebSpeechSynthesizer* OverrideSpeechSynthesizer( |
| blink::WebSpeechSynthesizerClient* client) override; |
| bool ShouldReportDetailedMessageForSource( |
| const base::string16& source) const override; |
| bool ShouldGatherSiteIsolationStats() const override; |
| blink::WebWorkerContentSettingsClientProxy* |
| CreateWorkerContentSettingsClientProxy(content::RenderFrame* render_frame, |
| blink::WebFrame* frame) override; |
| bool AllowPepperMediaStreamAPI(const GURL& url) override; |
| void AddKeySystems(std::vector<media::KeySystemInfo>* key_systems) override; |
| bool IsPluginAllowedToUseDevChannelAPIs() override; |
| bool IsPluginAllowedToUseCameraDeviceAPI(const GURL& url) override; |
| bool IsPluginAllowedToUseCompositorAPI(const GURL& url) override; |
| content::BrowserPluginDelegate* CreateBrowserPluginDelegate( |
| content::RenderFrame* render_frame, |
| const std::string& mime_type, |
| const GURL& original_url) override; |
| void RecordRappor(const std::string& metric, |
| const std::string& sample) override; |
| void RecordRapporURL(const std::string& metric, const GURL& url) override; |
| scoped_ptr<blink::WebAppBannerClient> CreateAppBannerClient( |
| content::RenderFrame* render_frame) override; |
| void AddImageContextMenuProperties( |
| const blink::WebURLResponse& response, |
| std::map<std::string, std::string>* properties) override; |
| void DidInitializeServiceWorkerContextOnWorkerThread( |
| v8::Local<v8::Context> context, |
| const GURL& url) override; |
| void WillDestroyServiceWorkerContextOnWorkerThread( |
| v8::Local<v8::Context> context, |
| const GURL& url) override; |
| bool ShouldEnforceWebRTCRoutingPreferences() override; |
| |
| #if defined(ENABLE_SPELLCHECK) |
| // Sets a new |spellcheck|. Used for testing only. |
| // Takes ownership of |spellcheck|. |
| void SetSpellcheck(SpellCheck* spellcheck); |
| #endif |
| |
| #if defined(ENABLE_PLUGINS) |
| static blink::WebPlugin* CreatePlugin( |
| content::RenderFrame* render_frame, |
| blink::WebLocalFrame* frame, |
| const blink::WebPluginParams& params, |
| const ChromeViewHostMsg_GetPluginInfo_Output& output); |
| #endif |
| |
| #if defined(ENABLE_PLUGINS) && defined(ENABLE_EXTENSIONS) |
| static bool IsExtensionOrSharedModuleWhitelisted( |
| const GURL& url, const std::set<std::string>& whitelist); |
| #endif |
| |
| private: |
| FRIEND_TEST_ALL_PREFIXES(ChromeContentRendererClientTest, NaClRestriction); |
| FRIEND_TEST_ALL_PREFIXES(ChromeContentRendererClientTest, |
| ShouldSuppressErrorPage); |
| |
| static GURL GetNaClContentHandlerURL(const std::string& actual_mime_type, |
| const content::WebPluginInfo& plugin); |
| |
| #if !defined(DISABLE_NACL) |
| // Determines if a NaCl app is allowed, and modifies params to pass the app's |
| // permissions to the trusted NaCl plugin. |
| static bool IsNaClAllowed(const GURL& manifest_url, |
| const GURL& app_url, |
| bool is_nacl_unrestricted, |
| const extensions::Extension* extension, |
| blink::WebPluginParams* params); |
| #endif |
| |
| scoped_ptr<ChromeRenderProcessObserver> chrome_observer_; |
| scoped_ptr<web_cache::WebCacheRenderProcessObserver> web_cache_observer_; |
| |
| scoped_ptr<network_hints::PrescientNetworkingDispatcher> |
| prescient_networking_dispatcher_; |
| scoped_ptr<password_manager::CredentialManagerClient> |
| credential_manager_client_; |
| |
| #if defined(ENABLE_SPELLCHECK) |
| scoped_ptr<SpellCheck> spellcheck_; |
| #endif |
| scoped_ptr<visitedlink::VisitedLinkSlave> visited_link_slave_; |
| scoped_ptr<safe_browsing::PhishingClassifierFilter> phishing_classifier_; |
| scoped_ptr<prerender::PrerenderDispatcher> prerender_dispatcher_; |
| #if defined(ENABLE_WEBRTC) |
| scoped_refptr<WebRtcLoggingMessageFilter> webrtc_logging_message_filter_; |
| #endif |
| #if defined(ENABLE_PRINT_PREVIEW) |
| scoped_ptr<ChromePDFPrintClient> pdf_print_client_; |
| #endif |
| #if defined(ENABLE_PLUGINS) |
| std::set<std::string> allowed_camera_device_origins_; |
| std::set<std::string> allowed_compositor_origins_; |
| #endif |
| }; |
| |
| #endif // CHROME_RENDERER_CHROME_CONTENT_RENDERER_CLIENT_H_ |