Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "bindings/core/v8/ScriptCallStack.h" | |
| 6 #include "bindings/core/v8/V8GCController.h" | |
| 7 #include "core/inspector/ConsoleMessage.h" | |
| 8 #include "core/workers/WorkerReportingProxy.h" | |
| 9 #include "core/workers/WorkerThread.h" | |
| 10 #include "core/workers/WorkerThreadStartupData.h" | |
| 11 #include "platform/NotImplemented.h" | |
| 12 #include "platform/WaitableEvent.h" | |
| 13 #include "testing/gmock/include/gmock/gmock.h" | |
|
tyoshino (SeeGerritForStatus)
2016/03/02 07:57:59
add PassOwnPtr.h
add Heap.h
add WorkerLoaderProxy.
hiroshige
2016/03/08 23:40:59
Added.
tyoshino (SeeGerritForStatus)
2016/03/09 06:26:12
Right, sorry!
| |
| 14 | |
| 15 namespace blink { | |
| 16 | |
| 17 class MockWorkerLoaderProxyProvider : public WorkerLoaderProxyProvider { | |
| 18 public: | |
| 19 MockWorkerLoaderProxyProvider() { } | |
| 20 ~MockWorkerLoaderProxyProvider() override { } | |
| 21 | |
| 22 void postTaskToLoader(PassOwnPtr<ExecutionContextTask>) override | |
| 23 { | |
| 24 notImplemented(); | |
| 25 } | |
| 26 | |
| 27 bool postTaskToWorkerGlobalScope(PassOwnPtr<ExecutionContextTask>) override | |
| 28 { | |
| 29 notImplemented(); | |
| 30 return false; | |
| 31 } | |
| 32 }; | |
| 33 | |
| 34 class MockWorkerReportingProxy : public WorkerReportingProxy { | |
| 35 public: | |
| 36 MockWorkerReportingProxy() { } | |
| 37 ~MockWorkerReportingProxy() override { } | |
| 38 | |
| 39 MOCK_METHOD5(reportException, void(const String& errorMessage, int lineNumbe r, int columnNumber, const String& sourceURL, int exceptionId)); | |
| 40 MOCK_METHOD1(reportConsoleMessage, void(PassRefPtrWillBeRawPtr<ConsoleMessag e>)); | |
| 41 MOCK_METHOD1(postMessageToPageInspector, void(const String&)); | |
| 42 MOCK_METHOD0(postWorkerConsoleAgentEnabled, void()); | |
| 43 MOCK_METHOD1(didEvaluateWorkerScript, void(bool success)); | |
| 44 MOCK_METHOD1(workerGlobalScopeStarted, void(WorkerGlobalScope*)); | |
| 45 MOCK_METHOD0(workerGlobalScopeClosed, void()); | |
| 46 MOCK_METHOD0(workerThreadTerminated, void()); | |
| 47 MOCK_METHOD0(willDestroyWorkerGlobalScope, void()); | |
| 48 }; | |
| 49 | |
| 50 void notifyScriptLoadedEventToWorkerThreadForTest(WorkerThread*); | |
| 51 | |
| 52 class FakeWorkerGlobalScope : public WorkerGlobalScope { | |
| 53 public: | |
| 54 typedef WorkerGlobalScope Base; | |
| 55 | |
| 56 FakeWorkerGlobalScope(const KURL& url, const String& userAgent, WorkerThread * thread, PassOwnPtr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, PassOwnPtrWillBeRawPtr<WorkerClients> workerClients) | |
| 57 : WorkerGlobalScope(url, userAgent, thread, monotonicallyIncreasingTime( ), starterOriginPrivilegeData, workerClients) | |
| 58 , m_thread(thread) | |
| 59 { | |
| 60 } | |
| 61 | |
| 62 ~FakeWorkerGlobalScope() override | |
| 63 { | |
| 64 } | |
| 65 | |
| 66 void scriptLoaded(size_t, size_t) override | |
| 67 { | |
| 68 notifyScriptLoadedEventToWorkerThreadForTest(m_thread); | |
| 69 } | |
| 70 | |
| 71 // EventTarget | |
| 72 const AtomicString& interfaceName() const override | |
| 73 { | |
| 74 return EventTargetNames::DedicatedWorkerGlobalScope; | |
| 75 } | |
| 76 | |
| 77 void logExceptionToConsole(const String&, int, const String&, int, int, Pass RefPtr<ScriptCallStack>) override | |
| 78 { | |
| 79 } | |
| 80 | |
| 81 private: | |
| 82 WorkerThread* m_thread; | |
| 83 }; | |
| 84 | |
| 85 class WorkerThreadForTest : public WorkerThread { | |
| 86 public: | |
| 87 WorkerThreadForTest( | |
| 88 WorkerLoaderProxyProvider* mockWorkerLoaderProxyProvider, | |
| 89 WorkerReportingProxy& mockWorkerReportingProxy) | |
| 90 : WorkerThread(WorkerLoaderProxy::create(mockWorkerLoaderProxyProvider), mockWorkerReportingProxy) | |
| 91 , m_thread(WebThreadSupportingGC::create("Test thread")) | |
| 92 , m_scriptLoadedEvent(adoptPtr(new WaitableEvent())) | |
| 93 { | |
| 94 ASSERT(m_thread); | |
| 95 } | |
| 96 | |
| 97 ~WorkerThreadForTest() override { } | |
| 98 | |
| 99 // WorkerThread implementation: | |
| 100 WebThreadSupportingGC& backingThread() override | |
| 101 { | |
| 102 ASSERT(m_thread); | |
| 103 return *m_thread; | |
| 104 } | |
| 105 void willDestroyIsolate() override | |
| 106 { | |
| 107 V8GCController::collectAllGarbageForTesting(v8::Isolate::GetCurrent()); | |
| 108 WorkerThread::willDestroyIsolate(); | |
| 109 } | |
| 110 | |
| 111 PassRefPtrWillBeRawPtr<WorkerGlobalScope> createWorkerGlobalScope(PassOwnPtr <WorkerThreadStartupData> startupData) override | |
| 112 { | |
| 113 return adoptRefWillBeNoop(new FakeWorkerGlobalScope(startupData->m_scrip tURL, startupData->m_userAgent, this, startupData->m_starterOriginPrivilegeData. release(), startupData->m_workerClients.release())); | |
| 114 } | |
| 115 | |
| 116 void waitUntilScriptLoaded() | |
| 117 { | |
| 118 m_scriptLoadedEvent->wait(); | |
| 119 } | |
| 120 | |
| 121 void scriptLoaded() | |
| 122 { | |
| 123 m_scriptLoadedEvent->signal(); | |
| 124 } | |
| 125 | |
| 126 private: | |
| 127 OwnPtr<WebThreadSupportingGC> m_thread; | |
| 128 OwnPtr<WaitableEvent> m_scriptLoadedEvent; | |
| 129 }; | |
| 130 | |
| 131 inline void notifyScriptLoadedEventToWorkerThreadForTest(WorkerThread* thread) | |
| 132 { | |
| 133 static_cast<WorkerThreadForTest*>(thread)->scriptLoaded(); | |
| 134 } | |
| 135 | |
| 136 } // namespace blink | |
| OLD | NEW |