Index: content/test/test_blink_web_unit_test_support.cc |
diff --git a/content/test/test_blink_web_unit_test_support.cc b/content/test/test_blink_web_unit_test_support.cc |
index 7405be6f417d040cb42b0292c52396f86b370043..46490b5fa7d9e23068f5007bb26a65b00666c300 100644 |
--- a/content/test/test_blink_web_unit_test_support.cc |
+++ b/content/test/test_blink_web_unit_test_support.cc |
@@ -8,7 +8,10 @@ |
#include "base/files/file_util.h" |
#include "base/files/scoped_temp_dir.h" |
#include "base/path_service.h" |
+#include "base/single_thread_task_runner.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "base/thread_task_runner_handle.h" |
+#include "base/threading/platform_thread.h" |
#include "components/scheduler/renderer/renderer_scheduler.h" |
#include "components/scheduler/renderer/webthread_impl_for_renderer_scheduler.h" |
#include "content/test/mock_webclipboard_impl.h" |
@@ -41,6 +44,41 @@ |
#include "gin/v8_initializer.h" |
#endif |
+namespace { |
+ |
+class DummyTaskRunner : public base::SingleThreadTaskRunner { |
+ public: |
+ DummyTaskRunner() : thread_id_(base::PlatformThread::CurrentId()) {} |
+ |
+ bool PostDelayedTask(const tracked_objects::Location& from_here, |
+ const base::Closure& task, |
+ base::TimeDelta delay) override { |
+ NOTREACHED(); |
+ return false; |
+ } |
+ |
+ bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, |
+ const base::Closure& task, |
+ base::TimeDelta delay) override { |
+ NOTREACHED(); |
+ return false; |
+ } |
+ |
+ // Always returns true to avoid triggering DCHECKs. |
Sami
2015/05/05 17:12:30
This comment isn't accurate anymore.
|
+ bool RunsTasksOnCurrentThread() const override { |
+ return thread_id_ == base::PlatformThread::CurrentId(); |
+ } |
+ |
+ protected: |
+ ~DummyTaskRunner() override {} |
+ |
+ base::PlatformThreadId thread_id_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DummyTaskRunner); |
+}; |
+ |
+} // namespace |
+ |
namespace content { |
TestBlinkWebUnitTestSupport::TestBlinkWebUnitTestSupport() { |
@@ -55,10 +93,23 @@ TestBlinkWebUnitTestSupport::TestBlinkWebUnitTestSupport() { |
gin::V8Initializer::LoadV8Snapshot(); |
#endif |
+ scoped_refptr<base::SingleThreadTaskRunner> dummy_task_runner; |
+ scoped_ptr<base::ThreadTaskRunnerHandle> dummy_task_runner_handle; |
if (base::MessageLoopProxy::current()) { |
renderer_scheduler_ = scheduler::RendererScheduler::Create(); |
web_thread_.reset(new scheduler::WebThreadImplForRendererScheduler( |
renderer_scheduler_.get())); |
+ } else { |
+ // Dummy task runner is initialized here because the blink::initialize |
+ // creates IsolateHolder which needs the current task runner handle. There |
+ // should be no task posted to this task runner. The message loop is not |
+ // created before this initialization because some tests need specific kinds |
+ // of message loops, and their types are not known upfront. Some tests also |
+ // create their own thread bundles or message loops, and doing the same in |
+ // TestBlinkWebUnitTestSupport would introduce a conflict. |
+ dummy_task_runner = make_scoped_refptr(new DummyTaskRunner()); |
+ dummy_task_runner_handle.reset( |
+ new base::ThreadTaskRunnerHandle(dummy_task_runner)); |
} |
blink::initialize(this); |