// 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. #include "content/shell/shell_content_renderer_client.h" #include "base/callback.h" #include "base/command_line.h" #include "base/debug/debugger.h" #include "content/public/common/content_constants.h" #include "content/public/common/content_switches.h" #include "content/public/renderer/render_view.h" #include "content/public/test/layouttest_support.h" #include "content/shell/shell_render_process_observer.h" #include "content/shell/shell_switches.h" #include "content/shell/webkit_test_runner.h" #include "third_party/WebKit/Source/Platform/chromium/public/WebMediaStreamCenter.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginParams.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" #include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestInterfaces.h" #include "third_party/WebKit/Tools/DumpRenderTree/chromium/TestRunner/public/WebTestProxy.h" #include "v8/include/v8.h" using WebKit::WebFrame; using WebKit::WebMediaStreamCenter; using WebKit::WebMediaStreamCenterClient; using WebKit::WebPlugin; using WebKit::WebPluginParams; using WebKit::WebRTCPeerConnectionHandler; using WebKit::WebRTCPeerConnectionHandlerClient; using WebTestRunner::WebTestDelegate; using WebTestRunner::WebTestInterfaces; using WebTestRunner::WebTestProxyBase; namespace content { ShellContentRendererClient::ShellContentRendererClient() { if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) { EnableWebTestProxyCreation( base::Bind(&ShellContentRendererClient::WebTestProxyCreated, base::Unretained(this))); } } ShellContentRendererClient::~ShellContentRendererClient() { } void ShellContentRendererClient::RenderThreadStarted() { shell_observer_.reset(new ShellRenderProcessObserver()); #if defined(OS_MACOSX) // We need to call this once before the sandbox was initialized to cache the // value. base::debug::BeingDebugged(); #endif } void ShellContentRendererClient::RenderViewCreated(RenderView* render_view) { if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) return; WebKitTestRunner* test_runner = WebKitTestRunner::Get(render_view); test_runner->Reset(); render_view->GetWebView()->setSpellCheckClient( test_runner->proxy()->spellCheckClient()); WebTestDelegate* delegate = ShellRenderProcessObserver::GetInstance()->test_delegate(); if (delegate == static_cast<WebTestDelegate*>(test_runner)) ShellRenderProcessObserver::GetInstance()->SetMainWindow(render_view); } bool ShellContentRendererClient::OverrideCreatePlugin( RenderView* render_view, WebFrame* frame, const WebPluginParams& params, WebPlugin** plugin) { std::string mime_type = params.mimeType.utf8(); if (mime_type == content::kBrowserPluginMimeType) { // Allow browser plugin in content_shell only if it is forced by flag. // Returning true here disables the plugin. return !CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableBrowserPluginForAllViewTypes); } return false; } WebMediaStreamCenter* ShellContentRendererClient::OverrideCreateWebMediaStreamCenter( WebMediaStreamCenterClient* client) { if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) return NULL; #if defined(ENABLE_WEBRTC) WebTestInterfaces* interfaces = ShellRenderProcessObserver::GetInstance()->test_interfaces(); return interfaces->createMediaStreamCenter(client); #else return NULL; #endif } WebRTCPeerConnectionHandler* ShellContentRendererClient::OverrideCreateWebRTCPeerConnectionHandler( WebRTCPeerConnectionHandlerClient* client) { if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) return NULL; #if defined(ENABLE_WEBRTC) WebTestInterfaces* interfaces = ShellRenderProcessObserver::GetInstance()->test_interfaces(); return interfaces->createWebRTCPeerConnectionHandler(client); #else return NULL; #endif } void ShellContentRendererClient::WebTestProxyCreated(RenderView* render_view, WebTestProxyBase* proxy) { WebKitTestRunner* test_runner = new WebKitTestRunner(render_view); test_runner->set_proxy(proxy); if (!ShellRenderProcessObserver::GetInstance()->test_delegate()) ShellRenderProcessObserver::GetInstance()->SetTestDelegate(test_runner); proxy->setInterfaces( ShellRenderProcessObserver::GetInstance()->test_interfaces()); test_runner->proxy()->setDelegate( ShellRenderProcessObserver::GetInstance()->test_delegate()); } } // namespace content