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 CONTENT_PUBLIC_RENDERER_CONTENT_RENDERER_CLIENT_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_PUBLIC_RENDERER_CONTENT_RENDERER_CLIENT_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_client.h"
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ipc/ipc_message.h"
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebNavigationPolicy.h"
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebNavigationType.h"
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPageVisibilityState.h"
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/page_transition_types.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "v8/include/v8.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkBitmap;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FilePath;
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class MessageLoop;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink {
307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass WebAudioDevice;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebClipboard;
320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass WebFrame;
330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass WebLocalFrame;
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass WebMIDIAccessor;
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass WebMIDIAccessorClient;
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebMediaStreamCenter;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebMediaStreamCenterClient;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebPlugin;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebPluginContainer;
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class WebPrescientNetworking;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebRTCPeerConnectionHandler;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebRTCPeerConnectionHandlerClient;
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WebSpeechSynthesizer;
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WebSpeechSynthesizerClient;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebThemeEngine;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebURLRequest;
470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)class WebWorkerPermissionClientProxy;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct WebPluginParams;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct WebURLError;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass BrowserPluginDelegate;
54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class DocumentState;
55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class RenderFrame;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderView;
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SynchronousCompositor;
58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)struct KeySystemInfo;
59ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochstruct WebPluginInfo;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Embedder API for participating in renderer logic.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT ContentRendererClient {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ContentRendererClient() {}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notifies us that the RenderThread has been created.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RenderThreadStarted() {}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Notifies that a new RenderFrame has been created. Note that at this point,
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // render_frame->GetWebFrame()->parent() is always NULL. This will change once
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // the frame tree moves from Blink to content.
72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void RenderFrameCreated(RenderFrame* render_frame) {}
73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notifies that a new RenderView has been created.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RenderViewCreated(RenderView* render_view) {}
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets a number of views/tabs opened in this process.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetNumberOfViews(int number_of_views) {}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the bitmap to show when a plugin crashed, or NULL for none.
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual SkBitmap* GetSadPluginBitmap();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns the bitmap to show when a <webview> guest has crashed, or NULL for
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // none.
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual SkBitmap* GetSadWebViewBitmap();
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Allows the embedder to override creating a plugin. If it returns true, then
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |plugin| will contain the created plugin, although it could be NULL. If it
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // returns false, the content layer will create the plugin.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool OverrideCreatePlugin(
91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      RenderFrame* render_frame,
92a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      blink::WebLocalFrame* frame,
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebPluginParams& params,
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebPlugin** plugin);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a replacement plug-in that is shown when the plug-in at |file_path|
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // couldn't be loaded. This allows the embedder to show a custom placeholder.
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebPlugin* CreatePluginReplacement(
99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      RenderFrame* render_frame,
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& plugin_path);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Creates a delegate for browser plugin.
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual BrowserPluginDelegate* CreateBrowserPluginDelegate(
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      RenderFrame* render_frame,
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const std::string& mime_type);
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the embedder has an error page to show for the given http
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // status code. If so |error_domain| should be set to according to WebURLError
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // and the embedder's GetNavigationErrorHtml will be called afterwards to get
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the error html.
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HasErrorPage(int http_status_code,
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            std::string* error_domain);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Returns true if the embedder prefers not to show an error page for a failed
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // navigation to |url| in |render_frame|.
1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool ShouldSuppressErrorPage(RenderFrame* render_frame,
1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                       const GURL& url);
1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the information to display when a navigation error occurs.
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If |error_html| is not null then it may be set to a HTML page containing
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the details of the error and maybe links to more info.
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If |error_description| is not null it may be set to contain a brief
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // message describing the error that has occurred.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Either of the out parameters may be not written to in certain cases
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // (lack of information on the error code) so the caller should take care to
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // initialize the string values with safe defaults before the call.
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GetNavigationErrorStrings(
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      content::RenderView* render_view,
129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebFrame* frame,
130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLRequest& failed_request,
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebURLError& error,
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string* error_html,
133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      base::string16* error_description) {}
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Allows the embedder to control when media resources are loaded. Embedders
136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // can run |closure| immediately if they don't wish to defer media resource
137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // loading.
138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void DeferMediaLoad(RenderFrame* render_frame,
139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const base::Closure& closure);
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Allows the embedder to override creating a WebMediaStreamCenter. If it
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // returns NULL the content layer will create the stream center.
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebMediaStreamCenter* OverrideCreateWebMediaStreamCenter(
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebMediaStreamCenterClient* client);
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Allows the embedder to override creating a WebRTCPeerConnectionHandler. If
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // it returns NULL the content layer will create the connection handler.
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebRTCPeerConnectionHandler*
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  OverrideCreateWebRTCPeerConnectionHandler(
150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebRTCPeerConnectionHandlerClient* client);
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Allows the embedder to override creating a WebMIDIAccessor.  If it
153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // returns NULL the content layer will create the MIDI accessor.
154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebMIDIAccessor* OverrideCreateMIDIAccessor(
155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebMIDIAccessorClient* client);
156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Allows the embedder to override creating a WebAudioDevice.  If it
1587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // returns NULL the content layer will create the audio device.
159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebAudioDevice* OverrideCreateAudioDevice(
1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      double sample_rate);
1617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Allows the embedder to override the blink::WebClipboard used. If it
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // returns NULL the content layer will handle clipboard interactions.
164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebClipboard* OverrideWebClipboard();
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Allows the embedder to override the WebThemeEngine used. If it returns NULL
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the content layer will provide an engine.
168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebThemeEngine* OverrideThemeEngine();
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Allows the embedder to override the WebSpeechSynthesizer used.
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // If it returns NULL the content layer will provide an engine.
172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebSpeechSynthesizer* OverrideSpeechSynthesizer(
173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebSpeechSynthesizerClient* client);
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the renderer process should schedule the idle handler when
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // all widgets are hidden.
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool RunIdleHandlerWhenWidgetsHidden();
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if a popup window should be allowed.
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool AllowPopup();
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifdef OS_ANDROID
183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // TODO(sgurun) This callback is deprecated and will be removed as soon
184a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // as android webview completes implementation of a resource throttle based
185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // shouldoverrideurl implementation. See crbug.com/325351
186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  //
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns true if the navigation was handled by the embedder and should be
188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // ignored by WebKit. This method is used by CEF and android_webview.
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool HandleNavigation(RenderFrame* render_frame,
190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                DocumentState* document_state,
191a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                int opener_id,
192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                blink::WebFrame* frame,
193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                const blink::WebURLRequest& request,
194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                blink::WebNavigationType type,
195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                blink::WebNavigationPolicy default_policy,
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                bool is_redirect);
197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if we should fork a new process for the given navigation.
20068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // If |send_referrer| is set to false (which is the default), no referrer
20168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // header will be send for the navigation. Otherwise, the referrer header is
20268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // set according to the frame's referrer policy.
203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool ShouldFork(blink::WebFrame* frame,
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const GURL& url,
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                          const std::string& http_method,
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          bool is_initial_navigation,
207868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                          bool is_server_redirect,
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          bool* send_referrer);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notifies the embedder that the given frame is requesting the resource at
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |url|.  If the function returns true, the url is changed to |new_url|.
212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool WillSendRequest(blink::WebFrame* frame,
2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                               ui::PageTransition transition_type,
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const GURL& url,
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               const GURL& first_party_for_cookies,
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               GURL* new_url);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // See the corresponding functions in blink::WebFrameClient.
219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void DidCreateScriptContext(blink::WebFrame* frame,
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      v8::Handle<v8::Context> context,
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      int extension_group,
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      int world_id) {}
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
224f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // See blink::Platform.
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual unsigned long long VisitedLinkHash(const char* canonical_url,
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                             size_t length);
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsLinkVisited(unsigned long long link_hash);
228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebPrescientNetworking* GetPrescientNetworking();
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ShouldOverridePageVisibilityState(
230a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const RenderFrame* render_frame,
231f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebPageVisibilityState* override_state);
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
233a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  // Allows an embedder to return custom PPAPI interfaces.
234a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  virtual const void* CreatePPAPIInterface(
235a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch      const std::string& interface_name);
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
237ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // Returns true if the given Pepper plugin is external (requiring special
238ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  // startup steps).
239ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual bool IsExternalPepperPlugin(const std::string& module_name);
240ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
2417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Returns true if the page at |url| can use Pepper MediaStream APIs.
242ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  virtual bool AllowPepperMediaStreamAPI(const GURL& url);
2433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
244d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Gives the embedder a chance to register the key system(s) it supports by
245d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // populating |key_systems|.
246d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void AddKeySystems(std::vector<KeySystemInfo>* key_systems);
247d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
2483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Returns true if we should report a detailed message (including a stack
2493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // trace) for console [logs|errors|exceptions]. |source| is the WebKit-
2503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // reported source for the error; this can point to a page or a script,
251424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // and can be external or internal.
2523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual bool ShouldReportDetailedMessageForSource(
2533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const base::string16& source) const;
25458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
25558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Returns true if we should apply the cross-site document blocking policy to
25658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // this renderer process. Currently, we apply the policy only to a renderer
25758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // process running on a normal page from the web.
25858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual bool ShouldEnableSiteIsolationPolicy() const;
2590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // Creates a permission client proxy for in-renderer worker.
261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual blink::WebWorkerPermissionClientProxy*
2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      CreateWorkerPermissionClientProxy(RenderFrame* render_frame,
263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                        blink::WebFrame* frame);
264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns true if the page at |url| can use Pepper Compositor APIs.
266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool IsPluginAllowedToUseCompositorAPI(const GURL& url);
267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns true if the page at |url| can use Pepper VideoDecoder APIs.
269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool IsPluginAllowedToUseVideoDecodeAPI(const GURL& url);
270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns true if dev channel APIs are available for plugins.
272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool IsPluginAllowedToUseDevChannelAPIs();
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_PUBLIC_RENDERER_CONTENT_RENDERER_CLIENT_H_
278