Index: third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp |
diff --git a/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp b/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp |
index 0d1097144fdf45efd36cad0f7cc227288f5e8cb2..8fb299c9d7693bf4a41fbf1664d1646ac85b57d8 100644 |
--- a/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp |
+++ b/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp |
@@ -4,16 +4,7 @@ |
#include "core/workers/WorkerThread.h" |
-#include "bindings/core/v8/ScriptCallStack.h" |
-#include "bindings/core/v8/V8GCController.h" |
-#include "core/inspector/ConsoleMessage.h" |
-#include "core/workers/WorkerReportingProxy.h" |
-#include "core/workers/WorkerThreadStartupData.h" |
-#include "platform/NotImplemented.h" |
-#include "platform/Task.h" |
-#include "platform/ThreadSafeFunctional.h" |
-#include "platform/WaitableEvent.h" |
-#include "public/platform/WebAddressSpace.h" |
+#include "core/workers/WorkerThreadTestHelper.h" |
#include "public/platform/WebScheduler.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -26,127 +17,6 @@ using testing::Mock; |
namespace blink { |
-namespace { |
- |
-class MockWorkerLoaderProxyProvider : public WorkerLoaderProxyProvider { |
-public: |
- MockWorkerLoaderProxyProvider() { } |
- ~MockWorkerLoaderProxyProvider() override { } |
- |
- void postTaskToLoader(PassOwnPtr<ExecutionContextTask>) override |
- { |
- notImplemented(); |
- } |
- |
- bool postTaskToWorkerGlobalScope(PassOwnPtr<ExecutionContextTask>) override |
- { |
- notImplemented(); |
- return false; |
- } |
-}; |
- |
-class MockWorkerReportingProxy : public WorkerReportingProxy { |
-public: |
- MockWorkerReportingProxy() { } |
- ~MockWorkerReportingProxy() override { } |
- |
- MOCK_METHOD5(reportException, void(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL, int exceptionId)); |
- MOCK_METHOD1(reportConsoleMessage, void(PassRefPtrWillBeRawPtr<ConsoleMessage>)); |
- MOCK_METHOD1(postMessageToPageInspector, void(const String&)); |
- MOCK_METHOD0(postWorkerConsoleAgentEnabled, void()); |
- MOCK_METHOD1(didEvaluateWorkerScript, void(bool success)); |
- MOCK_METHOD1(workerGlobalScopeStarted, void(WorkerGlobalScope*)); |
- MOCK_METHOD0(workerGlobalScopeClosed, void()); |
- MOCK_METHOD0(workerThreadTerminated, void()); |
- MOCK_METHOD0(willDestroyWorkerGlobalScope, void()); |
-}; |
- |
-void notifyScriptLoadedEventToWorkerThreadForTest(WorkerThread*); |
- |
-class FakeWorkerGlobalScope : public WorkerGlobalScope { |
-public: |
- typedef WorkerGlobalScope Base; |
- |
- FakeWorkerGlobalScope(const KURL& url, const String& userAgent, WorkerThread* thread, PassOwnPtr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, PassOwnPtrWillBeRawPtr<WorkerClients> workerClients) |
- : WorkerGlobalScope(url, userAgent, thread, monotonicallyIncreasingTime(), starterOriginPrivilegeData, workerClients, true /* withInspector */) |
- , m_thread(thread) |
- { |
- } |
- |
- ~FakeWorkerGlobalScope() override |
- { |
- } |
- |
- void scriptLoaded(size_t, size_t) override |
- { |
- notifyScriptLoadedEventToWorkerThreadForTest(m_thread); |
- } |
- |
- // EventTarget |
- const AtomicString& interfaceName() const override |
- { |
- return EventTargetNames::DedicatedWorkerGlobalScope; |
- } |
- |
- void logExceptionToConsole(const String&, int, const String&, int, int, PassRefPtr<ScriptCallStack>) override |
- { |
- } |
- |
-private: |
- WorkerThread* m_thread; |
-}; |
- |
-class WorkerThreadForTest : public WorkerThread { |
-public: |
- WorkerThreadForTest( |
- WorkerLoaderProxyProvider* mockWorkerLoaderProxyProvider, |
- WorkerReportingProxy& mockWorkerReportingProxy) |
- : WorkerThread(WorkerLoaderProxy::create(mockWorkerLoaderProxyProvider), mockWorkerReportingProxy) |
- , m_thread(WebThreadSupportingGC::create("Test thread")) |
- , m_scriptLoadedEvent(adoptPtr(new WaitableEvent())) |
- { |
- } |
- |
- ~WorkerThreadForTest() override { } |
- |
- // WorkerThread implementation: |
- WebThreadSupportingGC& backingThread() override |
- { |
- return *m_thread; |
- } |
- void willDestroyIsolate() override |
- { |
- V8GCController::collectAllGarbageForTesting(v8::Isolate::GetCurrent()); |
- WorkerThread::willDestroyIsolate(); |
- } |
- |
- PassRefPtrWillBeRawPtr<WorkerGlobalScope> createWorkerGlobalScope(PassOwnPtr<WorkerThreadStartupData> startupData) override |
- { |
- return adoptRefWillBeNoop(new FakeWorkerGlobalScope(startupData->m_scriptURL, startupData->m_userAgent, this, startupData->m_starterOriginPrivilegeData.release(), startupData->m_workerClients.release())); |
- } |
- |
- void waitUntilScriptLoaded() |
- { |
- m_scriptLoadedEvent->wait(); |
- } |
- |
- void scriptLoaded() |
- { |
- m_scriptLoadedEvent->signal(); |
- } |
- |
-private: |
- OwnPtr<WebThreadSupportingGC> m_thread; |
- OwnPtr<WaitableEvent> m_scriptLoadedEvent; |
-}; |
- |
-void notifyScriptLoadedEventToWorkerThreadForTest(WorkerThread* thread) |
-{ |
- static_cast<WorkerThreadForTest*>(thread)->scriptLoaded(); |
-} |
- |
-} // namespace |
- |
class WorkerThreadTest : public testing::Test { |
public: |
void SetUp() override |
@@ -171,30 +41,12 @@ public: |
void startWithSourceCode(const String& source) |
{ |
- OwnPtr<Vector<CSPHeaderAndType>> headers = adoptPtr(new Vector<CSPHeaderAndType>()); |
- CSPHeaderAndType headerAndType("contentSecurityPolicy", ContentSecurityPolicyHeaderTypeReport); |
- headers->append(headerAndType); |
- |
- OwnPtrWillBeRawPtr<WorkerClients> clients = nullptr; |
- |
- m_workerThread->start(WorkerThreadStartupData::create( |
- KURL(ParsedURLString, "http://fake.url/"), |
- "fake user agent", |
- source, |
- nullptr, |
- DontPauseWorkerGlobalScopeOnStart, |
- headers.release(), |
- m_securityOrigin.get(), |
- clients.release(), |
- WebAddressSpaceLocal, |
- V8CacheOptionsDefault)); |
+ m_workerThread->startWithSourceCode(m_securityOrigin.get(), source); |
} |
void waitForInit() |
{ |
- OwnPtr<WaitableEvent> completionEvent = adoptPtr(new WaitableEvent()); |
- m_workerThread->backingThread().postTask(BLINK_FROM_HERE, threadSafeBind(&WaitableEvent::signal, AllowCrossThreadAccess(completionEvent.get()))); |
- completionEvent->wait(); |
+ m_workerThread->waitForInit(); |
} |
protected: |