Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(604)

Side by Side Diff: third_party/WebKit/Source/core/workers/WorkerScriptTest.cpp

Issue 1728803002: Rename WorkerThread to WorkerScript Base URL: https://chromium.googlesource.com/chromium/src.git@workerscript-controller
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/workers/WorkerThread.h" 5 #include "core/workers/WorkerScript.h"
6 6
7 #include "bindings/core/v8/ScriptCallStack.h" 7 #include "bindings/core/v8/ScriptCallStack.h"
8 #include "bindings/core/v8/V8GCController.h" 8 #include "bindings/core/v8/V8GCController.h"
9 #include "core/inspector/ConsoleMessage.h" 9 #include "core/inspector/ConsoleMessage.h"
10 #include "core/workers/WorkerReportingProxy.h" 10 #include "core/workers/WorkerReportingProxy.h"
11 #include "core/workers/WorkerThreadStartupData.h" 11 #include "core/workers/WorkerScriptStartupData.h"
12 #include "platform/NotImplemented.h" 12 #include "platform/NotImplemented.h"
13 #include "platform/Task.h" 13 #include "platform/Task.h"
14 #include "platform/ThreadSafeFunctional.h" 14 #include "platform/ThreadSafeFunctional.h"
15 #include "platform/WaitableEvent.h" 15 #include "platform/WaitableEvent.h"
16 #include "public/platform/WebScheduler.h" 16 #include "public/platform/WebScheduler.h"
17 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
19 19
20 using testing::_; 20 using testing::_;
21 using testing::AtMost; 21 using testing::AtMost;
(...skipping 27 matching lines...) Expand all
49 MockWorkerReportingProxy() { } 49 MockWorkerReportingProxy() { }
50 ~MockWorkerReportingProxy() override { } 50 ~MockWorkerReportingProxy() override { }
51 51
52 MOCK_METHOD5(reportException, void(const String& errorMessage, int lineNumbe r, int columnNumber, const String& sourceURL, int exceptionId)); 52 MOCK_METHOD5(reportException, void(const String& errorMessage, int lineNumbe r, int columnNumber, const String& sourceURL, int exceptionId));
53 MOCK_METHOD1(reportConsoleMessage, void(PassRefPtrWillBeRawPtr<ConsoleMessag e>)); 53 MOCK_METHOD1(reportConsoleMessage, void(PassRefPtrWillBeRawPtr<ConsoleMessag e>));
54 MOCK_METHOD1(postMessageToPageInspector, void(const String&)); 54 MOCK_METHOD1(postMessageToPageInspector, void(const String&));
55 MOCK_METHOD0(postWorkerConsoleAgentEnabled, void()); 55 MOCK_METHOD0(postWorkerConsoleAgentEnabled, void());
56 MOCK_METHOD1(didEvaluateWorkerScript, void(bool success)); 56 MOCK_METHOD1(didEvaluateWorkerScript, void(bool success));
57 MOCK_METHOD1(workerGlobalScopeStarted, void(WorkerGlobalScope*)); 57 MOCK_METHOD1(workerGlobalScopeStarted, void(WorkerGlobalScope*));
58 MOCK_METHOD0(workerGlobalScopeClosed, void()); 58 MOCK_METHOD0(workerGlobalScopeClosed, void());
59 MOCK_METHOD0(workerThreadTerminated, void()); 59 MOCK_METHOD0(workerScriptTerminated, void());
60 MOCK_METHOD0(willDestroyWorkerGlobalScope, void()); 60 MOCK_METHOD0(willDestroyWorkerGlobalScope, void());
61 }; 61 };
62 62
63 void notifyScriptLoadedEventToWorkerThreadForTest(WorkerThread*); 63 void notifyScriptLoadedEventToWorkerScriptForTest(WorkerScript*);
64 64
65 class FakeWorkerGlobalScope : public WorkerGlobalScope { 65 class FakeWorkerGlobalScope : public WorkerGlobalScope {
66 public: 66 public:
67 typedef WorkerGlobalScope Base; 67 typedef WorkerGlobalScope Base;
68 68
69 FakeWorkerGlobalScope(const KURL& url, const String& userAgent, WorkerThread * thread, PassOwnPtr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, PassOwnPtrWillBeRawPtr<WorkerClients> workerClients) 69 FakeWorkerGlobalScope(const KURL& url, const String& userAgent, WorkerScript * script, PassOwnPtr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, PassOwnPtrWillBeRawPtr<WorkerClients> workerClients)
70 : WorkerGlobalScope(url, userAgent, thread, monotonicallyIncreasingTime( ), starterOriginPrivilegeData, workerClients) 70 : WorkerGlobalScope(url, userAgent, script, monotonicallyIncreasingTime( ), starterOriginPrivilegeData, workerClients)
71 , m_thread(thread) 71 , m_script(script)
72 { 72 {
73 } 73 }
74 74
75 ~FakeWorkerGlobalScope() override 75 ~FakeWorkerGlobalScope() override
76 { 76 {
77 } 77 }
78 78
79 void scriptLoaded(size_t, size_t) override 79 void scriptLoaded(size_t, size_t) override
80 { 80 {
81 notifyScriptLoadedEventToWorkerThreadForTest(m_thread); 81 notifyScriptLoadedEventToWorkerScriptForTest(m_script);
82 } 82 }
83 83
84 // EventTarget 84 // EventTarget
85 const AtomicString& interfaceName() const override 85 const AtomicString& interfaceName() const override
86 { 86 {
87 return EventTargetNames::DedicatedWorkerGlobalScope; 87 return EventTargetNames::DedicatedWorkerGlobalScope;
88 } 88 }
89 89
90 void logExceptionToConsole(const String&, int, const String&, int, int, Pass RefPtr<ScriptCallStack>) override 90 void logExceptionToConsole(const String&, int, const String&, int, int, Pass RefPtr<ScriptCallStack>) override
91 { 91 {
92 } 92 }
93 93
94 private: 94 private:
95 WorkerThread* m_thread; 95 WorkerScript* m_script;
96 }; 96 };
97 97
98 class WorkerThreadForTest : public WorkerThread { 98 class WorkerScriptForTest : public WorkerScript {
99 public: 99 public:
100 WorkerThreadForTest( 100 WorkerScriptForTest(
101 WorkerLoaderProxyProvider* mockWorkerLoaderProxyProvider, 101 WorkerLoaderProxyProvider* mockWorkerLoaderProxyProvider,
102 WorkerReportingProxy& mockWorkerReportingProxy) 102 WorkerReportingProxy& mockWorkerReportingProxy)
103 : WorkerThread(WorkerLoaderProxy::create(mockWorkerLoaderProxyProvider), mockWorkerReportingProxy) 103 : WorkerScript(WorkerLoaderProxy::create(mockWorkerLoaderProxyProvider), mockWorkerReportingProxy)
104 , m_thread(WebThreadSupportingGC::create("Test thread")) 104 , m_thread(WebThreadSupportingGC::create("Test thread"))
105 , m_scriptLoadedEvent(adoptPtr(new WaitableEvent())) 105 , m_scriptLoadedEvent(adoptPtr(new WaitableEvent()))
106 { 106 {
107 } 107 }
108 108
109 ~WorkerThreadForTest() override { } 109 ~WorkerScriptForTest() override { }
110 110
111 // WorkerThread implementation: 111 // WorkerScript implementation:
112 WebThreadSupportingGC& backingThread() override 112 WebThreadSupportingGC& backingThread() override
113 { 113 {
114 return *m_thread; 114 return *m_thread;
115 } 115 }
116 void willDestroyIsolate() override 116 void willDestroyIsolate() override
117 { 117 {
118 V8GCController::collectAllGarbageForTesting(v8::Isolate::GetCurrent()); 118 V8GCController::collectAllGarbageForTesting(v8::Isolate::GetCurrent());
119 WorkerThread::willDestroyIsolate(); 119 WorkerScript::willDestroyIsolate();
120 } 120 }
121 121
122 PassRefPtrWillBeRawPtr<WorkerGlobalScope> createWorkerGlobalScope(PassOwnPtr <WorkerThreadStartupData> startupData) override 122 PassRefPtrWillBeRawPtr<WorkerGlobalScope> createWorkerGlobalScope(PassOwnPtr <WorkerScriptStartupData> startupData) override
123 { 123 {
124 return adoptRefWillBeNoop(new FakeWorkerGlobalScope(startupData->m_scrip tURL, startupData->m_userAgent, this, startupData->m_starterOriginPrivilegeData. release(), startupData->m_workerClients.release())); 124 return adoptRefWillBeNoop(new FakeWorkerGlobalScope(startupData->m_scrip tURL, startupData->m_userAgent, this, startupData->m_starterOriginPrivilegeData. release(), startupData->m_workerClients.release()));
125 } 125 }
126 126
127 void waitUntilScriptLoaded() 127 void waitUntilScriptLoaded()
128 { 128 {
129 m_scriptLoadedEvent->wait(); 129 m_scriptLoadedEvent->wait();
130 } 130 }
131 131
132 void scriptLoaded() 132 void scriptLoaded()
133 { 133 {
134 m_scriptLoadedEvent->signal(); 134 m_scriptLoadedEvent->signal();
135 } 135 }
136 136
137 private: 137 private:
138 OwnPtr<WebThreadSupportingGC> m_thread; 138 OwnPtr<WebThreadSupportingGC> m_thread;
139 OwnPtr<WaitableEvent> m_scriptLoadedEvent; 139 OwnPtr<WaitableEvent> m_scriptLoadedEvent;
140 }; 140 };
141 141
142 void notifyScriptLoadedEventToWorkerThreadForTest(WorkerThread* thread) 142 void notifyScriptLoadedEventToWorkerScriptForTest(WorkerScript* workerScript)
143 { 143 {
144 static_cast<WorkerThreadForTest*>(thread)->scriptLoaded(); 144 static_cast<WorkerScriptForTest*>(workerScript)->scriptLoaded();
145 } 145 }
146 146
147 } // namespace 147 } // namespace
148 148
149 class WorkerThreadTest : public testing::Test { 149 class WorkerScriptTest : public testing::Test {
150 public: 150 public:
151 void SetUp() override 151 void SetUp() override
152 { 152 {
153 m_mockWorkerLoaderProxyProvider = adoptPtr(new MockWorkerLoaderProxyProv ider()); 153 m_mockWorkerLoaderProxyProvider = adoptPtr(new MockWorkerLoaderProxyProv ider());
154 m_mockWorkerReportingProxy = adoptPtr(new MockWorkerReportingProxy()); 154 m_mockWorkerReportingProxy = adoptPtr(new MockWorkerReportingProxy());
155 m_securityOrigin = SecurityOrigin::create(KURL(ParsedURLString, "http:// fake.url/")); 155 m_securityOrigin = SecurityOrigin::create(KURL(ParsedURLString, "http:// fake.url/"));
156 m_workerThread = adoptRef(new WorkerThreadForTest( 156 m_workerScript = adoptRef(new WorkerScriptForTest(
157 m_mockWorkerLoaderProxyProvider.get(), 157 m_mockWorkerLoaderProxyProvider.get(),
158 *m_mockWorkerReportingProxy)); 158 *m_mockWorkerReportingProxy));
159 } 159 }
160 160
161 void TearDown() override 161 void TearDown() override
162 { 162 {
163 m_workerThread->workerLoaderProxy()->detachProvider(m_mockWorkerLoaderPr oxyProvider.get()); 163 m_workerScript->workerLoaderProxy()->detachProvider(m_mockWorkerLoaderPr oxyProvider.get());
164 } 164 }
165 165
166 void start() 166 void start()
167 { 167 {
168 startWithSourceCode("//fake source code"); 168 startWithSourceCode("//fake source code");
169 } 169 }
170 170
171 void startWithSourceCode(const String& source) 171 void startWithSourceCode(const String& source)
172 { 172 {
173 OwnPtr<Vector<CSPHeaderAndType>> headers = adoptPtr(new Vector<CSPHeader AndType>()); 173 OwnPtr<Vector<CSPHeaderAndType>> headers = adoptPtr(new Vector<CSPHeader AndType>());
174 CSPHeaderAndType headerAndType("contentSecurityPolicy", ContentSecurityP olicyHeaderTypeReport); 174 CSPHeaderAndType headerAndType("contentSecurityPolicy", ContentSecurityP olicyHeaderTypeReport);
175 headers->append(headerAndType); 175 headers->append(headerAndType);
176 176
177 OwnPtrWillBeRawPtr<WorkerClients> clients = nullptr; 177 OwnPtrWillBeRawPtr<WorkerClients> clients = nullptr;
178 178
179 m_workerThread->start(WorkerThreadStartupData::create( 179 m_workerScript->start(WorkerScriptStartupData::create(
180 KURL(ParsedURLString, "http://fake.url/"), 180 KURL(ParsedURLString, "http://fake.url/"),
181 "fake user agent", 181 "fake user agent",
182 source, 182 source,
183 nullptr, 183 nullptr,
184 DontPauseWorkerGlobalScopeOnStart, 184 DontPauseWorkerGlobalScopeOnStart,
185 headers.release(), 185 headers.release(),
186 m_securityOrigin.get(), 186 m_securityOrigin.get(),
187 clients.release(), 187 clients.release(),
188 V8CacheOptionsDefault)); 188 V8CacheOptionsDefault));
189 } 189 }
190 190
191 void waitForInit() 191 void waitForInit()
192 { 192 {
193 OwnPtr<WaitableEvent> completionEvent = adoptPtr(new WaitableEvent()); 193 OwnPtr<WaitableEvent> completionEvent = adoptPtr(new WaitableEvent());
194 m_workerThread->backingThread().postTask(BLINK_FROM_HERE, new Task(threa dSafeBind(&WaitableEvent::signal, AllowCrossThreadAccess(completionEvent.get())) )); 194 m_workerScript->backingThread().postTask(BLINK_FROM_HERE, new Task(threa dSafeBind(&WaitableEvent::signal, AllowCrossThreadAccess(completionEvent.get())) ));
195 completionEvent->wait(); 195 completionEvent->wait();
196 } 196 }
197 197
198 protected: 198 protected:
199 void expectWorkerLifetimeReportingCalls() 199 void expectWorkerLifetimeReportingCalls()
200 { 200 {
201 EXPECT_CALL(*m_mockWorkerReportingProxy, workerGlobalScopeStarted(_)).Ti mes(1); 201 EXPECT_CALL(*m_mockWorkerReportingProxy, workerGlobalScopeStarted(_)).Ti mes(1);
202 EXPECT_CALL(*m_mockWorkerReportingProxy, didEvaluateWorkerScript(true)). Times(1); 202 EXPECT_CALL(*m_mockWorkerReportingProxy, didEvaluateWorkerScript(true)). Times(1);
203 EXPECT_CALL(*m_mockWorkerReportingProxy, workerThreadTerminated()).Times (1); 203 EXPECT_CALL(*m_mockWorkerReportingProxy, workerScriptTerminated()).Times (1);
204 EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope()) .Times(1); 204 EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope()) .Times(1);
205 } 205 }
206 206
207 RefPtr<SecurityOrigin> m_securityOrigin; 207 RefPtr<SecurityOrigin> m_securityOrigin;
208 OwnPtr<MockWorkerLoaderProxyProvider> m_mockWorkerLoaderProxyProvider; 208 OwnPtr<MockWorkerLoaderProxyProvider> m_mockWorkerLoaderProxyProvider;
209 OwnPtr<MockWorkerReportingProxy> m_mockWorkerReportingProxy; 209 OwnPtr<MockWorkerReportingProxy> m_mockWorkerReportingProxy;
210 RefPtr<WorkerThreadForTest> m_workerThread; 210 RefPtr<WorkerScriptForTest> m_workerScript;
211 }; 211 };
212 212
213 TEST_F(WorkerThreadTest, StartAndStop) 213 TEST_F(WorkerScriptTest, StartAndStop)
214 { 214 {
215 expectWorkerLifetimeReportingCalls(); 215 expectWorkerLifetimeReportingCalls();
216 start(); 216 start();
217 waitForInit(); 217 waitForInit();
218 m_workerThread->terminateAndWait(); 218 m_workerScript->terminateAndWait();
219 } 219 }
220 220
221 TEST_F(WorkerThreadTest, StartAndStopImmediately) 221 TEST_F(WorkerScriptTest, StartAndStopImmediately)
222 { 222 {
223 EXPECT_CALL(*m_mockWorkerReportingProxy, workerGlobalScopeStarted(_)) 223 EXPECT_CALL(*m_mockWorkerReportingProxy, workerGlobalScopeStarted(_))
224 .Times(AtMost(1)); 224 .Times(AtMost(1));
225 EXPECT_CALL(*m_mockWorkerReportingProxy, didEvaluateWorkerScript(_)) 225 EXPECT_CALL(*m_mockWorkerReportingProxy, didEvaluateWorkerScript(_))
226 .Times(AtMost(1)); 226 .Times(AtMost(1));
227 EXPECT_CALL(*m_mockWorkerReportingProxy, workerThreadTerminated()) 227 EXPECT_CALL(*m_mockWorkerReportingProxy, workerScriptTerminated())
228 .Times(AtMost(1)); 228 .Times(AtMost(1));
229 EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope()) 229 EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope())
230 .Times(AtMost(1)); 230 .Times(AtMost(1));
231 start(); 231 start();
232 m_workerThread->terminateAndWait(); 232 m_workerScript->terminateAndWait();
233 } 233 }
234 234
235 TEST_F(WorkerThreadTest, StartAndStopOnScriptLoaded) 235 TEST_F(WorkerScriptTest, StartAndStopOnScriptLoaded)
236 { 236 {
237 // Use a JavaScript source code that makes an infinite loop so that we can 237 // Use a JavaScript source code that makes an infinite loop so that we can
238 // catch some kind of issues as a timeout. 238 // catch some kind of issues as a timeout.
239 const String source("while(true) {}"); 239 const String source("while(true) {}");
240 240
241 EXPECT_CALL(*m_mockWorkerReportingProxy, workerGlobalScopeStarted(_)) 241 EXPECT_CALL(*m_mockWorkerReportingProxy, workerGlobalScopeStarted(_))
242 .Times(AtMost(1)); 242 .Times(AtMost(1));
243 EXPECT_CALL(*m_mockWorkerReportingProxy, didEvaluateWorkerScript(_)) 243 EXPECT_CALL(*m_mockWorkerReportingProxy, didEvaluateWorkerScript(_))
244 .Times(AtMost(1)); 244 .Times(AtMost(1));
245 EXPECT_CALL(*m_mockWorkerReportingProxy, workerThreadTerminated()) 245 EXPECT_CALL(*m_mockWorkerReportingProxy, workerScriptTerminated())
246 .Times(AtMost(1)); 246 .Times(AtMost(1));
247 EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope()) 247 EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope())
248 .Times(AtMost(1)); 248 .Times(AtMost(1));
249 startWithSourceCode(source); 249 startWithSourceCode(source);
250 m_workerThread->waitUntilScriptLoaded(); 250 m_workerScript->waitUntilScriptLoaded();
251 m_workerThread->terminateAndWait(); 251 m_workerScript->terminateAndWait();
252 } 252 }
253 253
254 } // namespace blink 254 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698