[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/gamepad_controller.h" |
sadrul | 4340577 | 2015-10-15 23:12:37 | [diff] [blame] | 17 | #include "components/test_runner/gc_controller.h" |
jochen | 73e711c | 2015-06-03 10:01:46 | [diff] [blame] | 18 | #include "components/test_runner/test_runner.h" |
19 | #include "components/test_runner/text_input_controller.h" | ||||
lfg | 05e4137 | 2016-07-22 15:38:10 | [diff] [blame] | 20 | #include "components/test_runner/web_view_test_proxy.h" |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 21 | #include "third_party/WebKit/public/platform/WebURL.h" |
22 | #include "third_party/WebKit/public/web/WebCache.h" | ||||
23 | #include "third_party/WebKit/public/web/WebKit.h" | ||||
24 | #include "third_party/WebKit/public/web/WebView.h" | ||||
25 | |||||
jochen | f5f3175 | 2015-06-03 12:06:34 | [diff] [blame] | 26 | namespace test_runner { |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 27 | |
28 | TestInterfaces::TestInterfaces() | ||||
lukasza | 8ee983a | 2016-04-22 17:47:44 | [diff] [blame] | 29 | : test_runner_(new TestRunner(this)), |
benwells | 0c0d3f1 | 2015-05-25 01:03:17 | [diff] [blame] | 30 | delegate_(nullptr), |
lukasza | 8973c52 | 2016-04-27 16:32:28 | [diff] [blame] | 31 | main_view_(nullptr) { |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 32 | blink::setLayoutTestMode(true); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 33 | // NOTE: please don't put feature specific enable flags here, |
34 | // instead add them to RuntimeEnabledFeatures.in | ||||
35 | |||||
36 | ResetAll(); | ||||
37 | } | ||||
38 | |||||
39 | TestInterfaces::~TestInterfaces() { | ||||
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 40 | // gamepad_controller_ doesn't depend on WebView. |
lukasza | 8973c52 | 2016-04-27 16:32:28 | [diff] [blame] | 41 | test_runner_->SetMainView(nullptr); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 42 | |
lukasza | f41da4b | 2016-04-14 22:33:20 | [diff] [blame] | 43 | // gamepad_controller_ ignores SetDelegate(nullptr) |
lukasza | f41da4b | 2016-04-14 22:33:20 | [diff] [blame] | 44 | test_runner_->SetDelegate(nullptr); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 45 | } |
46 | |||||
lukasza | 8973c52 | 2016-04-27 16:32:28 | [diff] [blame] | 47 | void TestInterfaces::SetMainView(blink::WebView* web_view) { |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 48 | // gamepad_controller_ doesn't depend on WebView. |
lukasza | 8973c52 | 2016-04-27 16:32:28 | [diff] [blame] | 49 | main_view_ = web_view; |
50 | test_runner_->SetMainView(web_view); | ||||
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 51 | } |
52 | |||||
53 | void TestInterfaces::SetDelegate(WebTestDelegate* delegate) { | ||||
[email protected] | 9c41b46 | 2014-08-19 15:51:34 | [diff] [blame] | 54 | gamepad_controller_ = GamepadController::Create(delegate); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 55 | test_runner_->SetDelegate(delegate); |
56 | delegate_ = delegate; | ||||
57 | } | ||||
58 | |||||
59 | void TestInterfaces::BindTo(blink::WebFrame* frame) { | ||||
[email protected] | 9c41b46 | 2014-08-19 15:51:34 | [diff] [blame] | 60 | if (gamepad_controller_) |
61 | gamepad_controller_->Install(frame); | ||||
sadrul | 4340577 | 2015-10-15 23:12:37 | [diff] [blame] | 62 | GCController::Install(frame); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 63 | } |
64 | |||||
65 | void TestInterfaces::ResetTestHelperControllers() { | ||||
[email protected] | 9c41b46 | 2014-08-19 15:51:34 | [diff] [blame] | 66 | if (gamepad_controller_) |
67 | gamepad_controller_->Reset(); | ||||
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 68 | blink::WebCache::clear(); |
lukasza | 335bb76 | 2016-04-22 16:44:03 | [diff] [blame] | 69 | |
lfg | 05e4137 | 2016-07-22 15:38:10 | [diff] [blame] | 70 | for (WebViewTestProxyBase* web_view_test_proxy_base : window_list_) |
71 | web_view_test_proxy_base->Reset(); | ||||
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 72 | } |
73 | |||||
74 | void TestInterfaces::ResetAll() { | ||||
75 | ResetTestHelperControllers(); | ||||
76 | test_runner_->Reset(); | ||||
77 | } | ||||
78 | |||||
79 | void TestInterfaces::SetTestIsRunning(bool running) { | ||||
80 | test_runner_->SetTestIsRunning(running); | ||||
81 | } | ||||
82 | |||||
83 | void TestInterfaces::ConfigureForTestWithURL(const blink::WebURL& test_url, | ||||
84 | bool generate_pixels) { | ||||
85 | std::string spec = GURL(test_url).spec(); | ||||
yurys | da0493f | 2014-10-01 07:55:23 | [diff] [blame] | 86 | size_t path_start = spec.rfind("LayoutTests/"); |
87 | if (path_start != std::string::npos) | ||||
88 | spec = spec.substr(path_start); | ||||
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 89 | test_runner_->setShouldGeneratePixelResults(generate_pixels); |
90 | if (spec.find("loading/") != std::string::npos) | ||||
91 | test_runner_->setShouldDumpFrameLoadCallbacks(true); | ||||
92 | if (spec.find("/dumpAsText/") != std::string::npos) { | ||||
93 | test_runner_->setShouldDumpAsText(true); | ||||
94 | test_runner_->setShouldGeneratePixelResults(false); | ||||
95 | } | ||||
96 | if (spec.find("/inspector/") != std::string::npos || | ||||
97 | spec.find("/inspector-enabled/") != std::string::npos) | ||||
abhishek.a21 | ca9b560 | 2014-09-19 07:33:33 | [diff] [blame] | 98 | test_runner_->ClearDevToolsLocalStorage(); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 99 | if (spec.find("/inspector/") != std::string::npos) { |
100 | // Subfolder name determines default panel to open. | ||||
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 101 | std::string test_path = spec.substr(spec.find("/inspector/") + 11); |
pfeldman | 6672e7d | 2015-04-14 10:08:58 | [diff] [blame] | 102 | base::DictionaryValue settings; |
103 | settings.SetString("testPath", base::GetQuotedJSONString(spec)); | ||||
104 | std::string settings_string; | ||||
estade | 8d04646 | 2015-05-16 01:02:34 | [diff] [blame] | 105 | base::JSONWriter::Write(settings, &settings_string); |
pfeldman | 6672e7d | 2015-04-14 10:08:58 | [diff] [blame] | 106 | test_runner_->ShowDevTools(settings_string, std::string()); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 107 | } |
108 | if (spec.find("/viewsource/") != std::string::npos) { | ||||
109 | test_runner_->setShouldEnableViewSource(true); | ||||
110 | test_runner_->setShouldGeneratePixelResults(false); | ||||
111 | test_runner_->setShouldDumpAsMarkup(true); | ||||
112 | } | ||||
tkent | 2edc979d | 2016-05-27 04:58:25 | [diff] [blame] | 113 | if (spec.find("/imported/wpt/") != std::string::npos || |
tkent | d37f3cf | 2016-10-13 03:52:42 | [diff] [blame] | 114 | spec.find("/imported/csswg-test/") != std::string::npos || |
115 | spec.find("://web-platform.test") != std::string::npos) | ||||
tkent | 2edc979d | 2016-05-27 04:58:25 | [diff] [blame] | 116 | test_runner_->set_is_web_platform_tests_mode(); |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 117 | } |
118 | |||||
lfg | 05e4137 | 2016-07-22 15:38:10 | [diff] [blame] | 119 | void TestInterfaces::WindowOpened(WebViewTestProxyBase* proxy) { |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 120 | window_list_.push_back(proxy); |
121 | } | ||||
122 | |||||
lfg | 05e4137 | 2016-07-22 15:38:10 | [diff] [blame] | 123 | void TestInterfaces::WindowClosed(WebViewTestProxyBase* proxy) { |
124 | std::vector<WebViewTestProxyBase*>::iterator pos = | ||||
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 125 | std::find(window_list_.begin(), window_list_.end(), proxy); |
126 | if (pos == window_list_.end()) { | ||||
127 | NOTREACHED(); | ||||
128 | return; | ||||
129 | } | ||||
130 | window_list_.erase(pos); | ||||
lukasza | 8973c52 | 2016-04-27 16:32:28 | [diff] [blame] | 131 | |
132 | if (proxy->web_view() == main_view_) | ||||
133 | SetMainView(nullptr); | ||||
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 134 | } |
135 | |||||
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 136 | TestRunner* TestInterfaces::GetTestRunner() { |
137 | return test_runner_.get(); | ||||
138 | } | ||||
139 | |||||
140 | WebTestDelegate* TestInterfaces::GetDelegate() { | ||||
141 | return delegate_; | ||||
142 | } | ||||
143 | |||||
lfg | 05e4137 | 2016-07-22 15:38:10 | [diff] [blame] | 144 | const std::vector<WebViewTestProxyBase*>& TestInterfaces::GetWindowList() { |
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 145 | return window_list_; |
146 | } | ||||
147 | |||||
148 | blink::WebThemeEngine* TestInterfaces::GetThemeEngine() { | ||||
149 | if (!test_runner_->UseMockTheme()) | ||||
150 | return 0; | ||||
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 151 | if (!theme_engine_.get()) |
152 | theme_engine_.reset(new MockWebThemeEngine()); | ||||
[email protected] | 8ed8bf43 | 2014-08-11 19:47:55 | [diff] [blame] | 153 | return theme_engine_.get(); |
154 | } | ||||
155 | |||||
jochen | f5f3175 | 2015-06-03 12:06:34 | [diff] [blame] | 156 | } // namespace test_runner |