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)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/shell/renderer/shell_content_renderer_client.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/debug/debugger.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/web_cache/renderer/web_cache_render_process_observer.h"
110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/common/sandbox_win.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_constants.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/renderer/render_thread.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/renderer/render_view.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/layouttest_support.h"
17b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/common/shell_switches.h"
18a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "content/shell/common/webkit_test_helpers.h"
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/shell/renderer/shell_render_frame_observer.h"
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/shell/renderer/shell_render_process_observer.h"
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/shell/renderer/shell_render_view_observer.h"
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/shell/renderer/test_runner/mock_credential_manager_client.h"
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/shell/renderer/test_runner/web_test_interfaces.h"
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "content/shell/renderer/test_runner/web_test_proxy.h"
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/shell/renderer/webkit_test_runner.h"
26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "content/test/mock_webclipboard_impl.h"
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ppapi/shared_impl/ppapi_switches.h"
28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebMediaStreamCenter.h"
297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPluginParams.h"
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebView.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "v8/include/v8.h"
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
33a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_WIN)
34a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "content/public/renderer/render_font_warmup_win.h"
35a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "third_party/WebKit/public/web/win/WebFontRendering.h"
36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "third_party/skia/include/ports/SkFontMgr.h"
37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif
38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebAudioDevice;
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebClipboard;
41a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochusing blink::WebLocalFrame;
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMIDIAccessor;
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMIDIAccessorClient;
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMediaStreamCenter;
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMediaStreamCenterClient;
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPlugin;
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPluginParams;
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebRTCPeerConnectionHandler;
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebRTCPeerConnectionHandlerClient;
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebThemeEngine;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_WIN)
55a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnamespace {
56a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// DirectWrite only has access to %WINDIR%\Fonts by default. For developer
58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// side-loading, support kRegisterFontFiles to allow access to additional fonts.
59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid RegisterSideloadedTypefaces(SkFontMgr* fontmgr) {
60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  std::vector<std::string> files = GetSideloadFontFiles();
61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  for (std::vector<std::string>::const_iterator i(files.begin());
62a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch       i != files.end();
63a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch       ++i) {
64a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    SkTypeface* typeface = fontmgr->createFromFile(i->c_str());
65a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    DoPreSandboxWarmupForTypeface(typeface);
66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    blink::WebFontRendering::addSideloadedFontForTesting(typeface);
67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
68a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
69a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}  // namespace
71a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif  // OS_WIN
72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellContentRendererClient::ShellContentRendererClient() {
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) {
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EnableWebTestProxyCreation(
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        base::Bind(&ShellContentRendererClient::WebTestProxyCreated,
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   base::Unretained(this)));
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
79a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
80a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_WIN)
810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  if (ShouldUseDirectWrite())
820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    RegisterSideloadedTypefaces(GetPreSandboxWarmupFontMgr());
83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#endif
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellContentRendererClient::~ShellContentRendererClient() {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShellContentRendererClient::RenderThreadStarted() {
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  RenderThread* thread = RenderThread::Get();
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  shell_observer_.reset(new ShellRenderProcessObserver());
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  web_cache_observer_.reset(new web_cache::WebCacheRenderProcessObserver());
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // We need to call this once before the sandbox was initialized to cache the
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // value.
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::debug::BeingDebugged();
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  thread->AddObserver(web_cache_observer_.get());
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ShellContentRendererClient::RenderFrameCreated(RenderFrame* render_frame) {
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  new ShellRenderFrameObserver(render_frame);
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShellContentRendererClient::RenderViewCreated(RenderView* render_view) {
106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  new ShellRenderViewObserver(render_view);
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebKitTestRunner* test_runner = WebKitTestRunner::Get(render_view);
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  test_runner->Reset();
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  render_view->GetWebView()->setSpellCheckClient(
113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      test_runner->proxy()->GetSpellCheckClient());
1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  render_view->GetWebView()->setCredentialManagerClient(
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      test_runner->proxy()->GetCredentialManagerClientMock());
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebTestDelegate* delegate =
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ShellRenderProcessObserver::GetInstance()->test_delegate();
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (delegate == static_cast<WebTestDelegate*>(test_runner))
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ShellRenderProcessObserver::GetInstance()->SetMainWindow(render_view);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ShellContentRendererClient::OverrideCreatePlugin(
124a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    RenderFrame* render_frame,
125a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    WebLocalFrame* frame,
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const WebPluginParams& params,
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WebPlugin** plugin) {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebMediaStreamCenter*
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ShellContentRendererClient::OverrideCreateWebMediaStreamCenter(
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WebMediaStreamCenterClient* client) {
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return NULL;
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_WEBRTC)
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebTestInterfaces* interfaces =
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ShellRenderProcessObserver::GetInstance()->test_interfaces();
1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return interfaces->CreateMediaStreamCenter(client);
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return NULL;
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebRTCPeerConnectionHandler*
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ShellContentRendererClient::OverrideCreateWebRTCPeerConnectionHandler(
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WebRTCPeerConnectionHandlerClient* client) {
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return NULL;
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_WEBRTC)
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebTestInterfaces* interfaces =
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ShellRenderProcessObserver::GetInstance()->test_interfaces();
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return interfaces->CreateWebRTCPeerConnectionHandler(client);
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return NULL;
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochWebMIDIAccessor*
160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochShellContentRendererClient::OverrideCreateMIDIAccessor(
161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    WebMIDIAccessorClient* client) {
162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  WebTestInterfaces* interfaces =
163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      ShellRenderProcessObserver::GetInstance()->test_interfaces();
1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return interfaces->CreateMIDIAccessor(client);
165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochWebAudioDevice*
1687dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochShellContentRendererClient::OverrideCreateAudioDevice(
1697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    double sample_rate) {
170c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
171c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    return NULL;
1727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  WebTestInterfaces* interfaces =
1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      ShellRenderProcessObserver::GetInstance()->test_interfaces();
1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return interfaces->CreateAudioDevice(sample_rate);
1757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
1767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebClipboard* ShellContentRendererClient::OverrideWebClipboard() {
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return NULL;
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!clipboard_)
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    clipboard_.reset(new MockWebClipboardImpl);
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return clipboard_.get();
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebThemeEngine* ShellContentRendererClient::OverrideThemeEngine() {
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree))
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return NULL;
1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return ShellRenderProcessObserver::GetInstance()
1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ->test_interfaces()
1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ->ThemeEngine();
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ShellContentRendererClient::WebTestProxyCreated(RenderView* render_view,
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                     WebTestProxyBase* proxy) {
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebKitTestRunner* test_runner = new WebKitTestRunner(render_view);
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  test_runner->set_proxy(proxy);
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!ShellRenderProcessObserver::GetInstance()->test_delegate())
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ShellRenderProcessObserver::GetInstance()->SetTestDelegate(test_runner);
199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  proxy->SetInterfaces(
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ShellRenderProcessObserver::GetInstance()->test_interfaces());
201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  test_runner->proxy()->SetDelegate(
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ShellRenderProcessObserver::GetInstance()->test_delegate());
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
205116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ShellContentRendererClient::IsPluginAllowedToUseCompositorAPI(
206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const GURL& url) {
207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return CommandLine::ForCurrentProcess()->HasSwitch(
208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      switches::kEnablePepperTesting);
209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
211116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ShellContentRendererClient::IsPluginAllowedToUseVideoDecodeAPI(
212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const GURL& url) {
213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return CommandLine::ForCurrentProcess()->HasSwitch(
214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      switches::kEnablePepperTesting);
215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
217116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ShellContentRendererClient::IsPluginAllowedToUseDevChannelAPIs() {
218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return CommandLine::ForCurrentProcess()->HasSwitch(
219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      switches::kEnablePepperTesting);
220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
223