16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file. 46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/shell/renderer/test_runner/test_interfaces.h" 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <string> 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/command_line.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/logging.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/strings/stringprintf.h" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/shell/common/shell_switches.h" 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/shell/renderer/test_runner/accessibility_controller.h" 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/shell/renderer/test_runner/event_sender.h" 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/shell/renderer/test_runner/gamepad_controller.h" 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/shell/renderer/test_runner/test_runner.h" 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/shell/renderer/test_runner/text_input_controller.h" 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/shell/renderer/test_runner/web_test_proxy.h" 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebURL.h" 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/WebKit/public/web/WebCache.h" 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/WebKit/public/web/WebKit.h" 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/WebKit/public/web/WebView.h" 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace content { 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TestInterfaces::TestInterfaces() 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : accessibility_controller_(new AccessibilityController()), 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) event_sender_(new EventSender(this)), 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) text_input_controller_(new TextInputController()), 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_(new TestRunner(this)), 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) delegate_(0) { 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) blink::setLayoutTestMode(true); 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch( 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) switches::kEnableFontAntialiasing)) 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) blink::setFontAntialiasingEnabledForTest(true); 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // NOTE: please don't put feature specific enable flags here, 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // instead add them to RuntimeEnabledFeatures.in 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ResetAll(); 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TestInterfaces::~TestInterfaces() { 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) accessibility_controller_->SetWebView(0); 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) event_sender_->SetWebView(0); 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // gamepad_controller_ doesn't depend on WebView. 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) text_input_controller_->SetWebView(NULL); 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->SetWebView(0, 0); 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) accessibility_controller_->SetDelegate(0); 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) event_sender_->SetDelegate(0); 5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // gamepad_controller_ ignores SetDelegate(0) 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // text_input_controller_ doesn't depend on WebTestDelegate. 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->SetDelegate(0); 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void TestInterfaces::SetWebView(blink::WebView* web_view, 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) WebTestProxyBase* proxy) { 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) proxy_ = proxy; 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) accessibility_controller_->SetWebView(web_view); 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) event_sender_->SetWebView(web_view); 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // gamepad_controller_ doesn't depend on WebView. 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) text_input_controller_->SetWebView(web_view); 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->SetWebView(web_view, proxy); 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void TestInterfaces::SetDelegate(WebTestDelegate* delegate) { 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) accessibility_controller_->SetDelegate(delegate); 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) event_sender_->SetDelegate(delegate); 7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) gamepad_controller_ = GamepadController::Create(delegate); 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // text_input_controller_ doesn't depend on WebTestDelegate. 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->SetDelegate(delegate); 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) delegate_ = delegate; 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void TestInterfaces::BindTo(blink::WebFrame* frame) { 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) accessibility_controller_->Install(frame); 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) event_sender_->Install(frame); 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (gamepad_controller_) 8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) gamepad_controller_->Install(frame); 816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) text_input_controller_->Install(frame); 826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->Install(frame); 836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void TestInterfaces::ResetTestHelperControllers() { 866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) accessibility_controller_->Reset(); 876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) event_sender_->Reset(); 8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (gamepad_controller_) 8903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) gamepad_controller_->Reset(); 906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // text_input_controller_ doesn't have any state to reset. 916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) blink::WebCache::clear(); 926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void TestInterfaces::ResetAll() { 956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ResetTestHelperControllers(); 966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->Reset(); 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void TestInterfaces::SetTestIsRunning(bool running) { 1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->SetTestIsRunning(running); 1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void TestInterfaces::ConfigureForTestWithURL(const blink::WebURL& test_url, 1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool generate_pixels) { 1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string spec = GURL(test_url).spec(); 1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->setShouldGeneratePixelResults(generate_pixels); 1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (spec.find("loading/") != std::string::npos) 1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->setShouldDumpFrameLoadCallbacks(true); 1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (spec.find("/dumpAsText/") != std::string::npos) { 1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->setShouldDumpAsText(true); 1116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->setShouldGeneratePixelResults(false); 1126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (spec.find("/inspector/") != std::string::npos || 1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) spec.find("/inspector-enabled/") != std::string::npos) 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_runner_->ClearDevToolsLocalStorage(); 1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (spec.find("/inspector/") != std::string::npos) { 1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Subfolder name determines default panel to open. 1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string settings = ""; 1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string test_path = spec.substr(spec.find("/inspector/") + 11); 1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) size_t slash_index = test_path.find("/"); 1216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (slash_index != std::string::npos) { 1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) settings = base::StringPrintf("{\"lastActivePanel\":\"\\\"%s\\\"\"}", 1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_path.substr(0, slash_index).c_str()); 1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test_runner_->ShowDevTools(settings, std::string()); 1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (spec.find("/viewsource/") != std::string::npos) { 1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->setShouldEnableViewSource(true); 1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->setShouldGeneratePixelResults(false); 1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_runner_->setShouldDumpAsMarkup(true); 1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void TestInterfaces::WindowOpened(WebTestProxyBase* proxy) { 1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) window_list_.push_back(proxy); 1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void TestInterfaces::WindowClosed(WebTestProxyBase* proxy) { 1396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::vector<WebTestProxyBase*>::iterator pos = 1406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::find(window_list_.begin(), window_list_.end(), proxy); 1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (pos == window_list_.end()) { 1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) NOTREACHED(); 1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 1446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) window_list_.erase(pos); 1466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)AccessibilityController* TestInterfaces::GetAccessibilityController() { 1496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return accessibility_controller_.get(); 1506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)EventSender* TestInterfaces::GetEventSender() { 1536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return event_sender_.get(); 1546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TestRunner* TestInterfaces::GetTestRunner() { 1576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return test_runner_.get(); 1586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)WebTestDelegate* TestInterfaces::GetDelegate() { 1616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return delegate_; 1626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)WebTestProxyBase* TestInterfaces::GetProxy() { 1656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return proxy_; 1666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const std::vector<WebTestProxyBase*>& TestInterfaces::GetWindowList() { 1696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return window_list_; 1706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)blink::WebThemeEngine* TestInterfaces::GetThemeEngine() { 1736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!test_runner_->UseMockTheme()) 1746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return 0; 1756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(OS_MACOSX) 1766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!theme_engine_.get()) 1776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) theme_engine_.reset(new MockWebThemeEngineMac()); 1786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 1796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!theme_engine_.get()) 1806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) theme_engine_.reset(new MockWebThemeEngine()); 1816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 1826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return theme_engine_.get(); 1836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace content 186