| OLD | NEW | 
|     1 // Copyright 2014 The Chromium Authors. All rights reserved. |     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 |     2 // Use of this source code is governed by a BSD-style license that can be | 
|     3 // found in the LICENSE file. |     3 // found in the LICENSE file. | 
|     4  |     4  | 
|     5 #include "content/shell/test_runner/test_runner.h" |     5 #include "content/shell/test_runner/test_runner.h" | 
|     6  |     6  | 
|     7 #include <stddef.h> |     7 #include <stddef.h> | 
|     8 #include <limits> |     8 #include <limits> | 
|     9 #include <utility> |     9 #include <utility> | 
|    10  |    10  | 
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|    92 } |    92 } | 
|    93  |    93  | 
|    94 }  // namespace |    94 }  // namespace | 
|    95  |    95  | 
|    96 class TestRunnerBindings : public gin::Wrappable<TestRunnerBindings> { |    96 class TestRunnerBindings : public gin::Wrappable<TestRunnerBindings> { | 
|    97  public: |    97  public: | 
|    98   static gin::WrapperInfo kWrapperInfo; |    98   static gin::WrapperInfo kWrapperInfo; | 
|    99  |    99  | 
|   100   static void Install(base::WeakPtr<TestRunner> test_runner, |   100   static void Install(base::WeakPtr<TestRunner> test_runner, | 
|   101                       base::WeakPtr<TestRunnerForSpecificView> view_test_runner, |   101                       base::WeakPtr<TestRunnerForSpecificView> view_test_runner, | 
|   102                       WebLocalFrame* frame); |   102                       WebLocalFrame* frame, | 
 |   103                       bool is_web_platform_tests_mode); | 
|   103  |   104  | 
|   104  private: |   105  private: | 
|   105   explicit TestRunnerBindings( |   106   explicit TestRunnerBindings( | 
|   106       base::WeakPtr<TestRunner> test_runner, |   107       base::WeakPtr<TestRunner> test_runner, | 
|   107       base::WeakPtr<TestRunnerForSpecificView> view_test_runner); |   108       base::WeakPtr<TestRunnerForSpecificView> view_test_runner); | 
|   108   ~TestRunnerBindings() override; |   109   ~TestRunnerBindings() override; | 
|   109  |   110  | 
|   110   // gin::Wrappable: |   111   // gin::Wrappable: | 
|   111   gin::ObjectTemplateBuilder GetObjectTemplateBuilder( |   112   gin::ObjectTemplateBuilder GetObjectTemplateBuilder( | 
|   112       v8::Isolate* isolate) override; |   113       v8::Isolate* isolate) override; | 
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   297  |   298  | 
|   298   DISALLOW_COPY_AND_ASSIGN(TestRunnerBindings); |   299   DISALLOW_COPY_AND_ASSIGN(TestRunnerBindings); | 
|   299 }; |   300 }; | 
|   300  |   301  | 
|   301 gin::WrapperInfo TestRunnerBindings::kWrapperInfo = {gin::kEmbedderNativeGin}; |   302 gin::WrapperInfo TestRunnerBindings::kWrapperInfo = {gin::kEmbedderNativeGin}; | 
|   302  |   303  | 
|   303 // static |   304 // static | 
|   304 void TestRunnerBindings::Install( |   305 void TestRunnerBindings::Install( | 
|   305     base::WeakPtr<TestRunner> test_runner, |   306     base::WeakPtr<TestRunner> test_runner, | 
|   306     base::WeakPtr<TestRunnerForSpecificView> view_test_runner, |   307     base::WeakPtr<TestRunnerForSpecificView> view_test_runner, | 
|   307     WebLocalFrame* frame) { |   308     WebLocalFrame* frame, | 
 |   309     bool is_web_platform_tests_mode) { | 
|   308   v8::Isolate* isolate = blink::mainThreadIsolate(); |   310   v8::Isolate* isolate = blink::mainThreadIsolate(); | 
|   309   v8::HandleScope handle_scope(isolate); |   311   v8::HandleScope handle_scope(isolate); | 
|   310   v8::Local<v8::Context> context = frame->mainWorldScriptContext(); |   312   v8::Local<v8::Context> context = frame->mainWorldScriptContext(); | 
|   311   if (context.IsEmpty()) |   313   if (context.IsEmpty()) | 
|   312     return; |   314     return; | 
|   313  |   315  | 
|   314   v8::Context::Scope context_scope(context); |   316   v8::Context::Scope context_scope(context); | 
|   315  |   317  | 
|   316   TestRunnerBindings* wrapped = |   318   TestRunnerBindings* wrapped = | 
|   317       new TestRunnerBindings(test_runner, view_test_runner); |   319       new TestRunnerBindings(test_runner, view_test_runner); | 
|   318   gin::Handle<TestRunnerBindings> bindings = |   320   gin::Handle<TestRunnerBindings> bindings = | 
|   319       gin::CreateHandle(isolate, wrapped); |   321       gin::CreateHandle(isolate, wrapped); | 
|   320   if (bindings.IsEmpty()) |   322   if (bindings.IsEmpty()) | 
|   321     return; |   323     return; | 
|   322   v8::Local<v8::Object> global = context->Global(); |   324   v8::Local<v8::Object> global = context->Global(); | 
|   323   v8::Local<v8::Value> v8_bindings = bindings.ToV8(); |   325   v8::Local<v8::Value> v8_bindings = bindings.ToV8(); | 
|   324  |   326  | 
|   325   std::vector<std::string> names; |   327   std::vector<std::string> names; | 
|   326   names.push_back("testRunner"); |   328   names.push_back("testRunner"); | 
|   327   names.push_back("layoutTestController"); |   329   names.push_back("layoutTestController"); | 
|   328   for (size_t i = 0; i < names.size(); ++i) |   330   for (size_t i = 0; i < names.size(); ++i) | 
|   329     global->Set(gin::StringToV8(isolate, names[i].c_str()), v8_bindings); |   331     global->Set(gin::StringToV8(isolate, names[i].c_str()), v8_bindings); | 
 |   332  | 
 |   333   // The web-platform-tests suite require that reference comparison is delayed | 
 |   334   // for any test with a 'reftest-wait' class on the root element, until that | 
 |   335   // class attribute is removed. To support this approach, we inject some | 
 |   336   // JavaScript that implements the same behavior using TestRunner. | 
 |   337   // | 
 |   338   // See http://web-platform-tests.org/writing-tests/reftests.html for more | 
 |   339   // details about reference tests in the web-platform-tests suite. | 
 |   340   if (is_web_platform_tests_mode) { | 
 |   341     frame->executeScript(blink::WebString( | 
 |   342         R"(window.addEventListener('load', function() { | 
 |   343           if (!window.testRunner) { | 
 |   344             return; | 
 |   345           } | 
 |   346           const target = document.documentElement; | 
 |   347           if (target != null && target.classList.contains('reftest-wait')) { | 
 |   348             window.testRunner.waitUntilDone(); | 
 |   349             const observer = new MutationObserver(function(mutations) { | 
 |   350               mutations.forEach(function(mutation) { | 
 |   351                 if (!target.classList.contains('reftest-wait')) { | 
 |   352                   window.testRunner.notifyDone(); | 
 |   353                 } | 
 |   354               }); | 
 |   355             }); | 
 |   356             const config = {attributes: true}; | 
 |   357             observer.observe(target, config); | 
 |   358           } | 
 |   359         });)")); | 
 |   360   } | 
|   330 } |   361 } | 
|   331  |   362  | 
|   332 TestRunnerBindings::TestRunnerBindings( |   363 TestRunnerBindings::TestRunnerBindings( | 
|   333     base::WeakPtr<TestRunner> runner, |   364     base::WeakPtr<TestRunner> runner, | 
|   334     base::WeakPtr<TestRunnerForSpecificView> view_runner) |   365     base::WeakPtr<TestRunnerForSpecificView> view_runner) | 
|   335     : runner_(runner), view_runner_(view_runner) {} |   366     : runner_(runner), view_runner_(view_runner) {} | 
|   336  |   367  | 
|   337 TestRunnerBindings::~TestRunnerBindings() {} |   368 TestRunnerBindings::~TestRunnerBindings() {} | 
|   338  |   369  | 
|   339 gin::ObjectTemplateBuilder TestRunnerBindings::GetObjectTemplateBuilder( |   370 gin::ObjectTemplateBuilder TestRunnerBindings::GetObjectTemplateBuilder( | 
| (...skipping 1279 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1619       effective_connection_type_( |  1650       effective_connection_type_( | 
|  1620           blink::WebEffectiveConnectionType::TypeUnknown), |  1651           blink::WebEffectiveConnectionType::TypeUnknown), | 
|  1621       weak_factory_(this) {} |  1652       weak_factory_(this) {} | 
|  1622  |  1653  | 
|  1623 TestRunner::~TestRunner() {} |  1654 TestRunner::~TestRunner() {} | 
|  1624  |  1655  | 
|  1625 void TestRunner::Install( |  1656 void TestRunner::Install( | 
|  1626     WebLocalFrame* frame, |  1657     WebLocalFrame* frame, | 
|  1627     base::WeakPtr<TestRunnerForSpecificView> view_test_runner) { |  1658     base::WeakPtr<TestRunnerForSpecificView> view_test_runner) { | 
|  1628   TestRunnerBindings::Install(weak_factory_.GetWeakPtr(), view_test_runner, |  1659   TestRunnerBindings::Install(weak_factory_.GetWeakPtr(), view_test_runner, | 
|  1629                               frame); |  1660                               frame, is_web_platform_tests_mode()); | 
|  1630 } |  1661 } | 
|  1631  |  1662  | 
|  1632 void TestRunner::SetDelegate(WebTestDelegate* delegate) { |  1663 void TestRunner::SetDelegate(WebTestDelegate* delegate) { | 
|  1633   delegate_ = delegate; |  1664   delegate_ = delegate; | 
|  1634   mock_content_settings_client_->SetDelegate(delegate); |  1665   mock_content_settings_client_->SetDelegate(delegate); | 
|  1635   spellcheck_->SetDelegate(delegate); |  1666   spellcheck_->SetDelegate(delegate); | 
|  1636   if (speech_recognizer_) |  1667   if (speech_recognizer_) | 
|  1637     speech_recognizer_->SetDelegate(delegate); |  1668     speech_recognizer_->SetDelegate(delegate); | 
|  1638 } |  1669 } | 
|  1639  |  1670  | 
| (...skipping 1168 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2808  |  2839  | 
|  2809 void TestRunner::NotifyDone() { |  2840 void TestRunner::NotifyDone() { | 
|  2810   if (layout_test_runtime_flags_.wait_until_done() && !topLoadingFrame() && |  2841   if (layout_test_runtime_flags_.wait_until_done() && !topLoadingFrame() && | 
|  2811       !will_navigate_ && work_queue_.is_empty()) |  2842       !will_navigate_ && work_queue_.is_empty()) | 
|  2812     delegate_->TestFinished(); |  2843     delegate_->TestFinished(); | 
|  2813   layout_test_runtime_flags_.set_wait_until_done(false); |  2844   layout_test_runtime_flags_.set_wait_until_done(false); | 
|  2814   OnLayoutTestRuntimeFlagsChanged(); |  2845   OnLayoutTestRuntimeFlagsChanged(); | 
|  2815 } |  2846 } | 
|  2816  |  2847  | 
|  2817 }  // namespace test_runner |  2848 }  // namespace test_runner | 
| OLD | NEW |