| 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
|
| deleted file mode 100644
|
| index eb93613514f7b0729d63172b36602e463f8e04e5..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp
|
| +++ /dev/null
|
| @@ -1,254 +0,0 @@
|
| -// Copyright 2015 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/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/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;
|
| -
|
| -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)
|
| - , 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
|
| - {
|
| - m_mockWorkerLoaderProxyProvider = adoptPtr(new MockWorkerLoaderProxyProvider());
|
| - m_mockWorkerReportingProxy = adoptPtr(new MockWorkerReportingProxy());
|
| - m_securityOrigin = SecurityOrigin::create(KURL(ParsedURLString, "http://fake.url/"));
|
| - m_workerThread = adoptRef(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)
|
| - {
|
| - 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(),
|
| - V8CacheOptionsDefault));
|
| - }
|
| -
|
| - void waitForInit()
|
| - {
|
| - OwnPtr<WaitableEvent> completionEvent = adoptPtr(new WaitableEvent());
|
| - m_workerThread->backingThread().postTask(BLINK_FROM_HERE, new Task(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;
|
| - RefPtr<WorkerThreadForTest> m_workerThread;
|
| -};
|
| -
|
| -TEST_F(WorkerThreadTest, StartAndStop)
|
| -{
|
| - 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();
|
| -}
|
| -
|
| -} // namespace blink
|
|
|