[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 1 | // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
jochen | 73e711c | 2015-06-03 10:01:46 | [diff] [blame] | 5 | #include "components/test_runner/test_interfaces.h" |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 6 | |
avi | 5dd91f8 | 2015-12-25 22:30:46 | [diff] [blame] | 7 | #include <stddef.h> |
| 8 | |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 9 | #include <string> |
| 10 | |
pfeldman | 6672e7d | 2015-04-14 10:08:58 | [diff] [blame] | 11 | #include "base/json/json_writer.h" |
| 12 | #include "base/json/string_escape.h" |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 13 | #include "base/logging.h" |
| 14 | #include "base/strings/stringprintf.h" |
jochen | c833781 | 2015-05-14 01:11:58 | [diff] [blame] | 15 | #include "base/values.h" |
jochen | 73e711c | 2015-06-03 10:01:46 | [diff] [blame] | 16 | #include "components/test_runner/accessibility_controller.h" |
| 17 | #include "components/test_runner/app_banner_client.h" |
jochen | 73e711c | 2015-06-03 10:01:46 | [diff] [blame] | 18 | #include "components/test_runner/gamepad_controller.h" |
sadrul | 4340577 | 2015-10-15 23:12:37 | [diff] [blame] | 19 | #include "components/test_runner/gc_controller.h" |
jochen | 73e711c | 2015-06-03 10:01:46 | [diff] [blame] | 20 | #include "components/test_runner/test_runner.h" |
| 21 | #include "components/test_runner/text_input_controller.h" |
| 22 | #include "components/test_runner/web_test_proxy.h" |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 23 | #include "third_party/WebKit/public/platform/WebURL.h" |
| 24 | #include "third_party/WebKit/public/web/WebCache.h" |
| 25 | #include "third_party/WebKit/public/web/WebKit.h" |
| 26 | #include "third_party/WebKit/public/web/WebView.h" |
| 27 | |
jochen | f5f3175 | 2015-06-03 12:06:34 | [diff] [blame] | 28 | namespace test_runner { |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 29 | |
| 30 | TestInterfaces::TestInterfaces() |
| 31 | : accessibility_controller_(new AccessibilityController()), |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 32 | text_input_controller_(new TextInputController()), |
| 33 | test_runner_(new TestRunner(this)), |
benwells | 0c0d3f1 | 2015-05-25 01:03:17 | [diff] [blame] | 34 | delegate_(nullptr), |
| 35 | app_banner_client_(nullptr) { |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 36 | blink::setLayoutTestMode(true); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 37 | // NOTE: please don't put feature specific enable flags here, |
| 38 | // instead add them to RuntimeEnabledFeatures.in |
| 39 | |
| 40 | ResetAll(); |
| 41 | } |
| 42 | |
| 43 | TestInterfaces::~TestInterfaces() { |
lukasza | f41da4b | 2016-04-14 22:33:20 | [diff] [blame] | 44 | accessibility_controller_->SetWebView(nullptr); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 45 | // gamepad_controller_ doesn't depend on WebView. |
lukasza | f41da4b | 2016-04-14 22:33:20 | [diff] [blame] | 46 | text_input_controller_->SetWebView(nullptr); |
| 47 | test_runner_->SetWebView(nullptr); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 48 | |
lukasza | f41da4b | 2016-04-14 22:33:20 | [diff] [blame] | 49 | accessibility_controller_->SetDelegate(nullptr); |
lukasza | f41da4b | 2016-04-14 22:33:20 | [diff] [blame] | 50 | // gamepad_controller_ ignores SetDelegate(nullptr) |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 51 | // text_input_controller_ doesn't depend on WebTestDelegate. |
lukasza | f41da4b | 2016-04-14 22:33:20 | [diff] [blame] | 52 | test_runner_->SetDelegate(nullptr); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 53 | } |
| 54 | |
| 55 | void TestInterfaces::SetWebView(blink::WebView* web_view, |
| 56 | WebTestProxyBase* proxy) { |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 57 | accessibility_controller_->SetWebView(web_view); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 58 | // gamepad_controller_ doesn't depend on WebView. |
| 59 | text_input_controller_->SetWebView(web_view); |
lukasza | f41da4b | 2016-04-14 22:33:20 | [diff] [blame] | 60 | test_runner_->SetWebView(web_view); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 61 | } |
| 62 | |
| 63 | void TestInterfaces::SetDelegate(WebTestDelegate* delegate) { |
| 64 | accessibility_controller_->SetDelegate(delegate); |
[email protected] | 9c41b46 | 2014-08-19 15:51:34 | [diff] [blame] | 65 | gamepad_controller_ = GamepadController::Create(delegate); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 66 | // text_input_controller_ doesn't depend on WebTestDelegate. |
| 67 | test_runner_->SetDelegate(delegate); |
| 68 | delegate_ = delegate; |
| 69 | } |
| 70 | |
| 71 | void TestInterfaces::BindTo(blink::WebFrame* frame) { |
| 72 | accessibility_controller_->Install(frame); |
[email protected] | 9c41b46 | 2014-08-19 15:51:34 | [diff] [blame] | 73 | if (gamepad_controller_) |
| 74 | gamepad_controller_->Install(frame); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 75 | text_input_controller_->Install(frame); |
| 76 | test_runner_->Install(frame); |
sadrul | 4340577 | 2015-10-15 23:12:37 | [diff] [blame] | 77 | GCController::Install(frame); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 78 | } |
| 79 | |
| 80 | void TestInterfaces::ResetTestHelperControllers() { |
| 81 | accessibility_controller_->Reset(); |
[email protected] | 9c41b46 | 2014-08-19 15:51:34 | [diff] [blame] | 82 | if (gamepad_controller_) |
| 83 | gamepad_controller_->Reset(); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 84 | // text_input_controller_ doesn't have any state to reset. |
| 85 | blink::WebCache::clear(); |
lukasza | 335bb76 | 2016-04-22 16:44:03 | [diff] [blame^] | 86 | |
| 87 | for (WebTestProxyBase* web_test_proxy_base : window_list_) |
| 88 | web_test_proxy_base->Reset(); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 89 | } |
| 90 | |
| 91 | void TestInterfaces::ResetAll() { |
| 92 | ResetTestHelperControllers(); |
| 93 | test_runner_->Reset(); |
| 94 | } |
| 95 | |
| 96 | void TestInterfaces::SetTestIsRunning(bool running) { |
| 97 | test_runner_->SetTestIsRunning(running); |
| 98 | } |
| 99 | |
| 100 | void TestInterfaces::ConfigureForTestWithURL(const blink::WebURL& test_url, |
| 101 | bool generate_pixels) { |
| 102 | std::string spec = GURL(test_url).spec(); |
yurys | da0493f | 2014-10-01 07:55:23 | [diff] [blame] | 103 | size_t path_start = spec.rfind("LayoutTests/"); |
| 104 | if (path_start != std::string::npos) |
| 105 | spec = spec.substr(path_start); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 106 | test_runner_->setShouldGeneratePixelResults(generate_pixels); |
| 107 | if (spec.find("loading/") != std::string::npos) |
| 108 | test_runner_->setShouldDumpFrameLoadCallbacks(true); |
| 109 | if (spec.find("/dumpAsText/") != std::string::npos) { |
| 110 | test_runner_->setShouldDumpAsText(true); |
| 111 | test_runner_->setShouldGeneratePixelResults(false); |
| 112 | } |
| 113 | if (spec.find("/inspector/") != std::string::npos || |
| 114 | spec.find("/inspector-enabled/") != std::string::npos) |
abhishek.a21 | ca9b560 | 2014-09-19 07:33:33 | [diff] [blame] | 115 | test_runner_->ClearDevToolsLocalStorage(); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 116 | if (spec.find("/inspector/") != std::string::npos) { |
| 117 | // Subfolder name determines default panel to open. |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 118 | std::string test_path = spec.substr(spec.find("/inspector/") + 11); |
pfeldman | 6672e7d | 2015-04-14 10:08:58 | [diff] [blame] | 119 | base::DictionaryValue settings; |
| 120 | settings.SetString("testPath", base::GetQuotedJSONString(spec)); |
| 121 | std::string settings_string; |
estade | 8d04646 | 2015-05-16 01:02:34 | [diff] [blame] | 122 | base::JSONWriter::Write(settings, &settings_string); |
pfeldman | 6672e7d | 2015-04-14 10:08:58 | [diff] [blame] | 123 | test_runner_->ShowDevTools(settings_string, std::string()); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 124 | } |
| 125 | if (spec.find("/viewsource/") != std::string::npos) { |
| 126 | test_runner_->setShouldEnableViewSource(true); |
| 127 | test_runner_->setShouldGeneratePixelResults(false); |
| 128 | test_runner_->setShouldDumpAsMarkup(true); |
| 129 | } |
| 130 | } |
| 131 | |
benwells | 0c0d3f1 | 2015-05-25 01:03:17 | [diff] [blame] | 132 | void TestInterfaces::SetAppBannerClient(AppBannerClient* app_banner_client) { |
| 133 | app_banner_client_ = app_banner_client; |
| 134 | } |
| 135 | |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 136 | void TestInterfaces::WindowOpened(WebTestProxyBase* proxy) { |
| 137 | window_list_.push_back(proxy); |
| 138 | } |
| 139 | |
| 140 | void TestInterfaces::WindowClosed(WebTestProxyBase* proxy) { |
| 141 | std::vector<WebTestProxyBase*>::iterator pos = |
| 142 | std::find(window_list_.begin(), window_list_.end(), proxy); |
| 143 | if (pos == window_list_.end()) { |
| 144 | NOTREACHED(); |
| 145 | return; |
| 146 | } |
| 147 | window_list_.erase(pos); |
| 148 | } |
| 149 | |
| 150 | AccessibilityController* TestInterfaces::GetAccessibilityController() { |
| 151 | return accessibility_controller_.get(); |
| 152 | } |
| 153 | |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 154 | TestRunner* TestInterfaces::GetTestRunner() { |
| 155 | return test_runner_.get(); |
| 156 | } |
| 157 | |
| 158 | WebTestDelegate* TestInterfaces::GetDelegate() { |
| 159 | return delegate_; |
| 160 | } |
| 161 | |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 162 | const std::vector<WebTestProxyBase*>& TestInterfaces::GetWindowList() { |
| 163 | return window_list_; |
| 164 | } |
| 165 | |
| 166 | blink::WebThemeEngine* TestInterfaces::GetThemeEngine() { |
| 167 | if (!test_runner_->UseMockTheme()) |
| 168 | return 0; |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 169 | if (!theme_engine_.get()) |
| 170 | theme_engine_.reset(new MockWebThemeEngine()); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 171 | return theme_engine_.get(); |
| 172 | } |
| 173 | |
benwells | 0c0d3f1 | 2015-05-25 01:03:17 | [diff] [blame] | 174 | AppBannerClient* TestInterfaces::GetAppBannerClient() { |
| 175 | return app_banner_client_; |
| 176 | } |
| 177 | |
jochen | f5f3175 | 2015-06-03 12:06:34 | [diff] [blame] | 178 | } // namespace test_runner |