15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_RENDERER_CHROME_CONTENT_RENDERER_CLIENT_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_RENDERER_CHROME_CONTENT_RENDERER_CLIENT_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <set>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/content_renderer_client.h"
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ipc/ipc_channel_proxy.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class ChromeExtensionsDispatcherDelegate;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeRenderProcessObserver;
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class PrescientNetworkingDispatcher;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RendererNetPredictor;
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class SearchBouncer;
23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(ENABLE_SPELLCHECK)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SpellCheck;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SpellCheckProvider;
26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ChromeViewHostMsg_GetPluginInfo_Output;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace content {
31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochstruct WebPluginInfo;
32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Dispatcher;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Extension;
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ExtensionSet;
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class RendererPermissionsPolicyDelegate;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace prerender {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrerenderDispatcher;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace safe_browsing {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PhishingClassifierFilter;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace visitedlink {
5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class VisitedLinkSlave;
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebSecurityOrigin;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_WEBRTC)
58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class WebRtcLoggingMessageFilter;
59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif
60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeContentRendererClient : public content::ContentRendererClient {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ChromeContentRendererClient();
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ChromeContentRendererClient();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RenderThreadStarted() OVERRIDE;
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void RenderFrameCreated(content::RenderFrame* render_frame) OVERRIDE;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RenderViewCreated(content::RenderView* render_view) OVERRIDE;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetNumberOfViews(int number_of_views) OVERRIDE;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual SkBitmap* GetSadPluginBitmap() OVERRIDE;
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual SkBitmap* GetSadWebViewBitmap() OVERRIDE;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetDefaultEncoding() OVERRIDE;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool OverrideCreatePlugin(
74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      content::RenderFrame* render_frame,
75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      blink::WebLocalFrame* frame,
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebPluginParams& params,
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebPlugin** plugin) OVERRIDE;
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebPlugin* CreatePluginReplacement(
79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      content::RenderFrame* render_frame,
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& plugin_path) OVERRIDE;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HasErrorPage(int http_status_code,
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            std::string* error_domain) OVERRIDE;
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool ShouldSuppressErrorPage(content::RenderFrame* render_frame,
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                       const GURL& url) OVERRIDE;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GetNavigationErrorStrings(
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      content::RenderView* render_view,
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLRequest& failed_request,
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLError& error,
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string* error_html,
91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      base::string16* error_description) OVERRIDE;
92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void DeferMediaLoad(content::RenderFrame* render_frame,
93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const base::Closure& closure) OVERRIDE;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool RunIdleHandlerWhenWidgetsHidden() OVERRIDE;
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool AllowPopup() OVERRIDE;
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool ShouldFork(blink::WebFrame* frame,
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const GURL& url,
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                          const std::string& http_method,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          bool is_initial_navigation,
100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                          bool is_server_redirect,
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          bool* send_referrer) OVERRIDE;
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool WillSendRequest(blink::WebFrame* frame,
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               content::PageTransition transition_type,
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const GURL& url,
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               const GURL& first_party_for_cookies,
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               GURL* new_url) OVERRIDE;
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void DidCreateScriptContext(blink::WebFrame* frame,
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      v8::Handle<v8::Context> context,
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      int extension_group,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      int world_id) OVERRIDE;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual unsigned long long VisitedLinkHash(const char* canonical_url,
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                             size_t length) OVERRIDE;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsLinkVisited(unsigned long long link_hash) OVERRIDE;
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebPrescientNetworking* GetPrescientNetworking() OVERRIDE;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ShouldOverridePageVisibilityState(
116a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const content::RenderFrame* render_frame,
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebPageVisibilityState* override_state) OVERRIDE;
118a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  virtual const void* CreatePPAPIInterface(
119a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch      const std::string& interface_name) OVERRIDE;
120ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual bool IsExternalPepperPlugin(const std::string& module_name) OVERRIDE;
121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebSpeechSynthesizer* OverrideSpeechSynthesizer(
122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebSpeechSynthesizerClient* client) OVERRIDE;
1233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual bool ShouldReportDetailedMessageForSource(
1243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const base::string16& source) const OVERRIDE;
12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual bool ShouldEnableSiteIsolationPolicy() const OVERRIDE;
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebWorkerPermissionClientProxy*
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      CreateWorkerPermissionClientProxy(content::RenderFrame* render_frame,
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                        blink::WebFrame* frame) OVERRIDE;
129ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual bool AllowPepperMediaStreamAPI(const GURL& url) OVERRIDE;
130d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void AddKeySystems(
131d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      std::vector<content::KeySystemInfo>* key_systems) OVERRIDE;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Takes ownership.
1345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void SetExtensionDispatcherForTest(
1355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      extensions::Dispatcher* extension_dispatcher);
1365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  extensions::Dispatcher* GetExtensionDispatcherForTest();
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
138a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(ENABLE_SPELLCHECK)
139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Sets a new |spellcheck|. Used for testing only.
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Takes ownership of |spellcheck|.
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetSpellcheck(SpellCheck* spellcheck);
142a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static blink::WebPlugin* CreatePlugin(
145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      content::RenderFrame* render_frame,
146a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      blink::WebLocalFrame* frame,
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebPluginParams& params,
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ChromeViewHostMsg_GetPluginInfo_Output& output);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static bool IsExtensionOrSharedModuleWhitelisted(
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const GURL& url, const std::set<std::string>& whitelist);
1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  static bool WasWebRequestUsedBySomeExtensions();
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(ChromeContentRendererClientTest, NaClRestriction);
1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(ChromeContentRendererClientTest,
1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                           ShouldSuppressErrorPage);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Gets extension by the given origin, regardless of whether the extension
16168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // is active in the current process.
16268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  const extensions::Extension* GetExtensionByOrigin(
163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebSecurityOrigin& origin) const;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the frame is navigating to an URL either into or out of an
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // extension app's extent.
167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool CrossesExtensionExtents(blink::WebFrame* frame,
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const GURL& new_url,
1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                               const extensions::ExtensionSet& extensions,
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               bool is_extension_url,
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               bool is_initial_navigation);
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static GURL GetNaClContentHandlerURL(const std::string& actual_mime_type,
174ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                                       const content::WebPluginInfo& plugin);
1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Determines if a NaCl app is allowed, and modifies params to pass the app's
1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // permissions to the trusted NaCl plugin.
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsNaClAllowed(const GURL& manifest_url,
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            const GURL& app_url,
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            bool is_nacl_unrestricted,
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            const extensions::Extension* extension,
182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            blink::WebPluginParams* params);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ChromeRenderProcessObserver> chrome_observer_;
185010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<ChromeExtensionsDispatcherDelegate> extension_dispatcher_delegate_;
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<extensions::Dispatcher> extension_dispatcher_;
18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  scoped_ptr<extensions::RendererPermissionsPolicyDelegate>
18890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      permissions_policy_delegate_;
18990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  scoped_ptr<PrescientNetworkingDispatcher> prescient_networking_dispatcher_;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<RendererNetPredictor> net_predictor_;
191a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(ENABLE_SPELLCHECK)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<SpellCheck> spellcheck_;
193a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif
19490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  scoped_ptr<visitedlink::VisitedLinkSlave> visited_link_slave_;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<safe_browsing::PhishingClassifierFilter> phishing_classifier_;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<prerender::PrerenderDispatcher> prerender_dispatcher_;
197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(ENABLE_WEBRTC)
198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  scoped_refptr<WebRtcLoggingMessageFilter> webrtc_logging_message_filter_;
199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif
2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  scoped_ptr<SearchBouncer> search_bouncer_;
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_RENDERER_CHROME_CONTENT_RENDERER_CLIENT_H_
204