| Index: third_party/WebKit/Source/core/workers/WorkerThreadTestHelper.h
|
| diff --git a/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp b/third_party/WebKit/Source/core/workers/WorkerThreadTestHelper.h
|
| similarity index 59%
|
| copy from third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp
|
| copy to third_party/WebKit/Source/core/workers/WorkerThreadTestHelper.h
|
| index 0d1097144fdf45efd36cad0f7cc227288f5e8cb2..0a64c67aaa5167e0798fd231d82c6236b5addc51 100644
|
| --- a/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp
|
| +++ b/third_party/WebKit/Source/core/workers/WorkerThreadTestHelper.h
|
| @@ -1,33 +1,36 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "core/workers/WorkerThread.h"
|
| -
|
| #include "bindings/core/v8/ScriptCallStack.h"
|
| +#include "bindings/core/v8/V8CacheOptions.h"
|
| #include "bindings/core/v8/V8GCController.h"
|
| +#include "core/frame/csp/ContentSecurityPolicy.h"
|
| #include "core/inspector/ConsoleMessage.h"
|
| +#include "core/workers/WorkerClients.h"
|
| +#include "core/workers/WorkerLoaderProxy.h"
|
| #include "core/workers/WorkerReportingProxy.h"
|
| +#include "core/workers/WorkerThread.h"
|
| #include "core/workers/WorkerThreadStartupData.h"
|
| #include "platform/NotImplemented.h"
|
| -#include "platform/Task.h"
|
| #include "platform/ThreadSafeFunctional.h"
|
| #include "platform/WaitableEvent.h"
|
| +#include "platform/WebThreadSupportingGC.h"
|
| +#include "platform/heap/Handle.h"
|
| +#include "platform/network/ContentSecurityPolicyParsers.h"
|
| +#include "platform/weborigin/KURL.h"
|
| +#include "platform/weborigin/SecurityOrigin.h"
|
| #include "public/platform/WebAddressSpace.h"
|
| -#include "public/platform/WebScheduler.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using testing::_;
|
| -using testing::AtMost;
|
| -using testing::Invoke;
|
| -using testing::Return;
|
| -using testing::Mock;
|
| +#include "wtf/CurrentTime.h"
|
| +#include "wtf/Forward.h"
|
| +#include "wtf/OwnPtr.h"
|
| +#include "wtf/PassOwnPtr.h"
|
| +#include "wtf/Vector.h"
|
| +#include <v8.h>
|
|
|
| namespace blink {
|
|
|
| -namespace {
|
| -
|
| class MockWorkerLoaderProxyProvider : public WorkerLoaderProxyProvider {
|
| public:
|
| MockWorkerLoaderProxyProvider() { }
|
| @@ -105,6 +108,7 @@ public:
|
| , m_thread(WebThreadSupportingGC::create("Test thread"))
|
| , m_scriptLoadedEvent(adoptPtr(new WaitableEvent()))
|
| {
|
| + ASSERT(m_thread);
|
| }
|
|
|
| ~WorkerThreadForTest() override { }
|
| @@ -112,6 +116,7 @@ public:
|
| // WorkerThread implementation:
|
| WebThreadSupportingGC& backingThread() override
|
| {
|
| + ASSERT(m_thread);
|
| return *m_thread;
|
| }
|
| void willDestroyIsolate() override
|
| @@ -135,41 +140,7 @@ public:
|
| 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
|
| - {
|
| - m_mockWorkerLoaderProxyProvider = adoptPtr(new MockWorkerLoaderProxyProvider());
|
| - m_mockWorkerReportingProxy = adoptPtr(new MockWorkerReportingProxy());
|
| - m_securityOrigin = SecurityOrigin::create(KURL(ParsedURLString, "http://fake.url/"));
|
| - m_workerThread = adoptPtr(new WorkerThreadForTest(
|
| - m_mockWorkerLoaderProxyProvider.get(),
|
| - *m_mockWorkerReportingProxy));
|
| - }
|
| -
|
| - void TearDown() override
|
| - {
|
| - m_workerThread->workerLoaderProxy()->detachProvider(m_mockWorkerLoaderProxyProvider.get());
|
| - }
|
| -
|
| - void start()
|
| - {
|
| - startWithSourceCode("//fake source code");
|
| - }
|
| -
|
| - void startWithSourceCode(const String& source)
|
| + void startWithSourceCode(SecurityOrigin* securityOrigin, const String& source)
|
| {
|
| OwnPtr<Vector<CSPHeaderAndType>> headers = adoptPtr(new Vector<CSPHeaderAndType>());
|
| CSPHeaderAndType headerAndType("contentSecurityPolicy", ContentSecurityPolicyHeaderTypeReport);
|
| @@ -177,14 +148,14 @@ public:
|
|
|
| OwnPtrWillBeRawPtr<WorkerClients> clients = nullptr;
|
|
|
| - m_workerThread->start(WorkerThreadStartupData::create(
|
| + start(WorkerThreadStartupData::create(
|
| KURL(ParsedURLString, "http://fake.url/"),
|
| "fake user agent",
|
| source,
|
| nullptr,
|
| DontPauseWorkerGlobalScopeOnStart,
|
| headers.release(),
|
| - m_securityOrigin.get(),
|
| + securityOrigin,
|
| clients.release(),
|
| WebAddressSpaceLocal,
|
| V8CacheOptionsDefault));
|
| @@ -193,64 +164,18 @@ public:
|
| void waitForInit()
|
| {
|
| OwnPtr<WaitableEvent> completionEvent = adoptPtr(new WaitableEvent());
|
| - m_workerThread->backingThread().postTask(BLINK_FROM_HERE, threadSafeBind(&WaitableEvent::signal, AllowCrossThreadAccess(completionEvent.get())));
|
| + backingThread().postTask(BLINK_FROM_HERE, threadSafeBind(&WaitableEvent::signal, AllowCrossThreadAccess(completionEvent.get())));
|
| completionEvent->wait();
|
| }
|
|
|
| -protected:
|
| - void expectWorkerLifetimeReportingCalls()
|
| - {
|
| - EXPECT_CALL(*m_mockWorkerReportingProxy, workerGlobalScopeStarted(_)).Times(1);
|
| - EXPECT_CALL(*m_mockWorkerReportingProxy, didEvaluateWorkerScript(true)).Times(1);
|
| - EXPECT_CALL(*m_mockWorkerReportingProxy, workerThreadTerminated()).Times(1);
|
| - EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope()).Times(1);
|
| - }
|
| -
|
| - RefPtr<SecurityOrigin> m_securityOrigin;
|
| - OwnPtr<MockWorkerLoaderProxyProvider> m_mockWorkerLoaderProxyProvider;
|
| - OwnPtr<MockWorkerReportingProxy> m_mockWorkerReportingProxy;
|
| - OwnPtr<WorkerThreadForTest> m_workerThread;
|
| +private:
|
| + OwnPtr<WebThreadSupportingGC> m_thread;
|
| + OwnPtr<WaitableEvent> m_scriptLoadedEvent;
|
| };
|
|
|
| -TEST_F(WorkerThreadTest, StartAndStop)
|
| +inline void notifyScriptLoadedEventToWorkerThreadForTest(WorkerThread* thread)
|
| {
|
| - expectWorkerLifetimeReportingCalls();
|
| - start();
|
| - waitForInit();
|
| - m_workerThread->terminateAndWait();
|
| -}
|
| -
|
| -TEST_F(WorkerThreadTest, StartAndStopImmediately)
|
| -{
|
| - EXPECT_CALL(*m_mockWorkerReportingProxy, workerGlobalScopeStarted(_))
|
| - .Times(AtMost(1));
|
| - EXPECT_CALL(*m_mockWorkerReportingProxy, didEvaluateWorkerScript(_))
|
| - .Times(AtMost(1));
|
| - EXPECT_CALL(*m_mockWorkerReportingProxy, workerThreadTerminated())
|
| - .Times(AtMost(1));
|
| - EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope())
|
| - .Times(AtMost(1));
|
| - start();
|
| - m_workerThread->terminateAndWait();
|
| -}
|
| -
|
| -TEST_F(WorkerThreadTest, StartAndStopOnScriptLoaded)
|
| -{
|
| - // Use a JavaScript source code that makes an infinite loop so that we can
|
| - // catch some kind of issues as a timeout.
|
| - const String source("while(true) {}");
|
| -
|
| - EXPECT_CALL(*m_mockWorkerReportingProxy, workerGlobalScopeStarted(_))
|
| - .Times(AtMost(1));
|
| - EXPECT_CALL(*m_mockWorkerReportingProxy, didEvaluateWorkerScript(_))
|
| - .Times(AtMost(1));
|
| - EXPECT_CALL(*m_mockWorkerReportingProxy, workerThreadTerminated())
|
| - .Times(AtMost(1));
|
| - EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope())
|
| - .Times(AtMost(1));
|
| - startWithSourceCode(source);
|
| - m_workerThread->waitUntilScriptLoaded();
|
| - m_workerThread->terminateAndWait();
|
| + static_cast<WorkerThreadForTest*>(thread)->scriptLoaded();
|
| }
|
|
|
| } // namespace blink
|
|
|