Chromium Code Reviews| Index: content/shell/test_runner/test_runner.cc |
| diff --git a/content/shell/test_runner/test_runner.cc b/content/shell/test_runner/test_runner.cc |
| index bbee54dc0d5d1e32cb6e5fbc1e300168c2db5677..5fc6e25e7df202f570b7c267cd9b48adaf024e31 100644 |
| --- a/content/shell/test_runner/test_runner.cc |
| +++ b/content/shell/test_runner/test_runner.cc |
| @@ -99,7 +99,8 @@ class TestRunnerBindings : public gin::Wrappable<TestRunnerBindings> { |
| static void Install(base::WeakPtr<TestRunner> test_runner, |
| base::WeakPtr<TestRunnerForSpecificView> view_test_runner, |
| - WebLocalFrame* frame); |
| + WebLocalFrame* frame, |
| + bool is_web_platform_tests_mode); |
| private: |
| explicit TestRunnerBindings( |
| @@ -304,7 +305,8 @@ gin::WrapperInfo TestRunnerBindings::kWrapperInfo = {gin::kEmbedderNativeGin}; |
| void TestRunnerBindings::Install( |
| base::WeakPtr<TestRunner> test_runner, |
| base::WeakPtr<TestRunnerForSpecificView> view_test_runner, |
| - WebLocalFrame* frame) { |
| + WebLocalFrame* frame, |
| + bool is_web_platform_tests_mode) { |
| v8::Isolate* isolate = blink::mainThreadIsolate(); |
| v8::HandleScope handle_scope(isolate); |
| v8::Local<v8::Context> context = frame->mainWorldScriptContext(); |
| @@ -327,6 +329,35 @@ void TestRunnerBindings::Install( |
| names.push_back("layoutTestController"); |
| for (size_t i = 0; i < names.size(); ++i) |
| global->Set(gin::StringToV8(isolate, names[i].c_str()), v8_bindings); |
| + |
| + // The web-platform-tests suite require that reference comparison is delayed |
| + // for any test with a 'reftest-wait' class on the root element, until that |
| + // class attribute is removed. To support this approach, we inject some |
| + // javascript that implements the same behavior using TestRunner. |
|
qyearsley
2017/03/06 16:51:42
Nit: Some people write javascript as JavaScript.
smcgruer
2017/03/06 17:35:45
Done.
|
| + // |
| + // See http://web-platform-tests.org/writing-tests/reftests.html for more |
| + // details on web-platform-tests expectations on reference tests. |
|
qyearsley
2017/03/06 16:51:42
Possible rephrasing: "...details about reference t
smcgruer
2017/03/06 17:35:45
Done.
|
| + if (is_web_platform_tests_mode) { |
| + frame->executeScript(blink::WebString( |
| + R"(window.addEventListener('load', function() { |
| + if (!window.testRunner) { |
| + return; |
| + } |
| + const target = document.documentElement; |
| + if (target.classList.contains('reftest-wait')) { |
| + window.testRunner.waitUntilDone(); |
| + const observer = new MutationObserver(function(mutations) { |
| + mutations.forEach(function(mutation) { |
| + if (!target.classList.contains('reftest-wait')) { |
| + window.testRunner.notifyDone(); |
| + } |
| + }); |
| + }); |
| + const config = { attributes: true }; |
|
qyearsley
2017/03/06 16:51:42
Style nit: No need for spaces after "{" or before
smcgruer
2017/03/06 17:35:45
Done.
|
| + observer.observe(target, config); |
| + } |
| + });)")); |
| + } |
| } |
| TestRunnerBindings::TestRunnerBindings( |
| @@ -1626,7 +1657,7 @@ void TestRunner::Install( |
| WebLocalFrame* frame, |
| base::WeakPtr<TestRunnerForSpecificView> view_test_runner) { |
| TestRunnerBindings::Install(weak_factory_.GetWeakPtr(), view_test_runner, |
| - frame); |
| + frame, is_web_platform_tests_mode()); |
| } |
| void TestRunner::SetDelegate(WebTestDelegate* delegate) { |