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_render_process_observer.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/content_client.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_thread.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/renderer/render_view.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/layouttest_support.h" 12b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/common/shell_messages.h" 13b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "content/shell/common/shell_switches.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/shell/renderer/shell_content_renderer_client.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/shell/renderer/test_runner/web_test_interfaces.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/shell/renderer/webkit_test_runner.h" 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebView.h" 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "v8/include/v8.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebFrame; 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebRuntimeFeatures; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellRenderProcessObserver* g_instance = NULL; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellRenderProcessObserver* ShellRenderProcessObserver::GetInstance() { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return g_instance; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellRenderProcessObserver::ShellRenderProcessObserver() 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : main_test_runner_(NULL), 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_delegate_(NULL) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(!g_instance); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_instance = this; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderThread::Get()->AddObserver(this); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EnableRendererLayoutTestMode(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShellRenderProcessObserver::~ShellRenderProcessObserver() { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(g_instance == this); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_instance = NULL; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ShellRenderProcessObserver::SetTestDelegate(WebTestDelegate* delegate) { 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_interfaces_->SetDelegate(delegate); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_delegate_ = delegate; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ShellRenderProcessObserver::SetMainWindow(RenderView* view) { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebKitTestRunner* test_runner = WebKitTestRunner::Get(view); 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_interfaces_->SetWebView(view->GetWebView(), test_runner->proxy()); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) main_test_runner_ = test_runner; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShellRenderProcessObserver::WebKitInitialized() { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We always expose GC to layout tests. 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string flags("--expose-gc"); 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) v8::V8::SetFlagsFromString(flags.c_str(), static_cast<int>(flags.size())); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (!CommandLine::ForCurrentProcess()->HasSwitch( 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) switches::kStableReleaseMode)) { 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) WebRuntimeFeatures::enableTestOnlyFeatures(true); 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_interfaces_.reset(new WebTestInterfaces); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_interfaces_->ResetAll(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void ShellRenderProcessObserver::OnRenderProcessShutdown() { 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) test_interfaces_.reset(); 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ShellRenderProcessObserver::OnControlMessageReceived( 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message& message) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool handled = true; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(ShellRenderProcessObserver, message) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ShellViewMsg_SetWebKitSourceDir, OnSetWebKitSourceDir) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_UNHANDLED(handled = false) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_END_MESSAGE_MAP() 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handled; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ShellRenderProcessObserver::OnSetWebKitSourceDir( 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& webkit_source_dir) { 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) webkit_source_dir_ = webkit_source_dir; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 100