OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 #include "core/dom/MessageEvent.h" | 48 #include "core/dom/MessageEvent.h" |
49 #include "core/dom/MessagePortChannel.h" | 49 #include "core/dom/MessagePortChannel.h" |
50 #include "core/dom/ScriptExecutionContext.h" | 50 #include "core/dom/ScriptExecutionContext.h" |
51 #include "core/dom/default/chromium/PlatformMessagePortChannelChromium.h" | 51 #include "core/dom/default/chromium/PlatformMessagePortChannelChromium.h" |
52 #include "core/inspector/WorkerDebuggerAgent.h" | 52 #include "core/inspector/WorkerDebuggerAgent.h" |
53 #include "core/inspector/WorkerInspectorController.h" | 53 #include "core/inspector/WorkerInspectorController.h" |
54 #include "core/loader/FrameLoadRequest.h" | 54 #include "core/loader/FrameLoadRequest.h" |
55 #include "core/loader/FrameLoader.h" | 55 #include "core/loader/FrameLoader.h" |
56 #include "core/page/Page.h" | 56 #include "core/page/Page.h" |
57 #include "core/page/PageGroup.h" | 57 #include "core/page/PageGroup.h" |
58 #include "core/workers/SharedWorkerContext.h" | 58 #include "core/workers/SharedWorkerGlobalScope.h" |
59 #include "core/workers/SharedWorkerThread.h" | 59 #include "core/workers/SharedWorkerThread.h" |
60 #include "core/workers/WorkerContext.h" | 60 #include "core/workers/WorkerGlobalScope.h" |
61 #include "core/workers/WorkerLoaderProxy.h" | 61 #include "core/workers/WorkerLoaderProxy.h" |
62 #include "core/workers/WorkerThread.h" | 62 #include "core/workers/WorkerThread.h" |
63 #include "modules/webdatabase/DatabaseTask.h" | 63 #include "modules/webdatabase/DatabaseTask.h" |
64 #include "weborigin/KURL.h" | 64 #include "weborigin/KURL.h" |
65 #include "weborigin/SecurityOrigin.h" | 65 #include "weborigin/SecurityOrigin.h" |
66 | 66 |
67 using namespace WebCore; | 67 using namespace WebCore; |
68 | 68 |
69 namespace WebKit { | 69 namespace WebKit { |
70 | 70 |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 | 271 |
272 void WebSharedWorkerImpl::reportPendingActivityTask(ScriptExecutionContext* cont
ext, | 272 void WebSharedWorkerImpl::reportPendingActivityTask(ScriptExecutionContext* cont
ext, |
273 WebSharedWorkerImpl* thisPtr
, | 273 WebSharedWorkerImpl* thisPtr
, |
274 bool hasPendingActivity) | 274 bool hasPendingActivity) |
275 { | 275 { |
276 if (!thisPtr->client()) | 276 if (!thisPtr->client()) |
277 return; | 277 return; |
278 thisPtr->client()->reportPendingActivity(hasPendingActivity); | 278 thisPtr->client()->reportPendingActivity(hasPendingActivity); |
279 } | 279 } |
280 | 280 |
281 void WebSharedWorkerImpl::workerContextClosed() | 281 void WebSharedWorkerImpl::workerGlobalScopeClosed() |
282 { | 282 { |
283 WebWorkerBase::dispatchTaskToMainThread(createCallbackTask(&workerContextClo
sedTask, | 283 WebWorkerBase::dispatchTaskToMainThread(createCallbackTask(&workerGlobalScop
eClosedTask, |
284 AllowCrossThreadAccess(this))); | 284 AllowCrossThreadAccess(this))); |
285 } | 285 } |
286 | 286 |
287 void WebSharedWorkerImpl::workerContextClosedTask(ScriptExecutionContext* contex
t, | 287 void WebSharedWorkerImpl::workerGlobalScopeClosedTask(ScriptExecutionContext* co
ntext, |
288 WebSharedWorkerImpl* thisPtr) | 288 WebSharedWorkerImpl* thisPtr) |
289 { | 289 { |
290 if (thisPtr->client()) | 290 if (thisPtr->client()) |
291 thisPtr->client()->workerContextClosed(); | 291 thisPtr->client()->workerContextClosed(); |
292 | 292 |
293 thisPtr->stopWorkerThread(); | 293 thisPtr->stopWorkerThread(); |
294 } | 294 } |
295 | 295 |
296 void WebSharedWorkerImpl::workerContextDestroyed() | 296 void WebSharedWorkerImpl::workerGlobalScopeDestroyed() |
297 { | 297 { |
298 WebWorkerBase::dispatchTaskToMainThread(createCallbackTask(&workerContextDes
troyedTask, | 298 WebWorkerBase::dispatchTaskToMainThread(createCallbackTask(&workerGlobalScop
eDestroyedTask, |
299 AllowCrossThreadA
ccess(this))); | 299 AllowCrossThreadA
ccess(this))); |
300 } | 300 } |
301 | 301 |
302 void WebSharedWorkerImpl::workerContextDestroyedTask(ScriptExecutionContext* con
text, | 302 void WebSharedWorkerImpl::workerGlobalScopeDestroyedTask(ScriptExecutionContext*
context, |
303 WebSharedWorkerImpl* thisPt
r) | 303 WebSharedWorkerImpl* thisPt
r) |
304 { | 304 { |
305 if (thisPtr->client()) | 305 if (thisPtr->client()) |
306 thisPtr->client()->workerContextDestroyed(); | 306 thisPtr->client()->workerContextDestroyed(); |
307 // The lifetime of this proxy is controlled by the worker context. | 307 // The lifetime of this proxy is controlled by the worker context. |
308 delete thisPtr; | 308 delete thisPtr; |
309 } | 309 } |
310 | 310 |
311 // WorkerLoaderProxy ----------------------------------------------------------- | 311 // WorkerLoaderProxy ----------------------------------------------------------- |
312 | 312 |
313 void WebSharedWorkerImpl::postTaskToLoader(PassOwnPtr<ScriptExecutionContext::Ta
sk> task) | 313 void WebSharedWorkerImpl::postTaskToLoader(PassOwnPtr<ScriptExecutionContext::Ta
sk> task) |
314 { | 314 { |
315 ASSERT(m_loadingDocument->isDocument()); | 315 ASSERT(m_loadingDocument->isDocument()); |
316 m_loadingDocument->postTask(task); | 316 m_loadingDocument->postTask(task); |
317 } | 317 } |
318 | 318 |
319 bool WebSharedWorkerImpl::postTaskForModeToWorkerContext( | 319 bool WebSharedWorkerImpl::postTaskForModeToWorkerGlobalScope( |
320 PassOwnPtr<ScriptExecutionContext::Task> task, const String& mode) | 320 PassOwnPtr<ScriptExecutionContext::Task> task, const String& mode) |
321 { | 321 { |
322 m_workerThread->runLoop().postTaskForMode(task, mode); | 322 m_workerThread->runLoop().postTaskForMode(task, mode); |
323 return true; | 323 return true; |
324 } | 324 } |
325 | 325 |
326 WebWorkerBase* WebSharedWorkerImpl::toWebWorkerBase() | 326 WebWorkerBase* WebSharedWorkerImpl::toWebWorkerBase() |
327 { | 327 { |
328 return this; | 328 return this; |
329 } | 329 } |
(...skipping 19 matching lines...) Expand all Loading... |
349 createCallbackTask(&connectTask, channel.release())); | 349 createCallbackTask(&connectTask, channel.release())); |
350 if (listener) | 350 if (listener) |
351 listener->connected(); | 351 listener->connected(); |
352 } | 352 } |
353 | 353 |
354 void WebSharedWorkerImpl::connectTask(ScriptExecutionContext* context, PassOwnPt
r<MessagePortChannel> channel) | 354 void WebSharedWorkerImpl::connectTask(ScriptExecutionContext* context, PassOwnPt
r<MessagePortChannel> channel) |
355 { | 355 { |
356 // Wrap the passed-in channel in a MessagePort, and send it off via a connec
t event. | 356 // Wrap the passed-in channel in a MessagePort, and send it off via a connec
t event. |
357 RefPtr<MessagePort> port = MessagePort::create(*context); | 357 RefPtr<MessagePort> port = MessagePort::create(*context); |
358 port->entangle(channel); | 358 port->entangle(channel); |
359 ASSERT_WITH_SECURITY_IMPLICATION(context->isWorkerContext()); | 359 ASSERT_WITH_SECURITY_IMPLICATION(context->isWorkerGlobalScope()); |
360 WorkerContext* workerContext = static_cast<WorkerContext*>(context); | 360 WorkerGlobalScope* workerGlobalScope = static_cast<WorkerGlobalScope*>(conte
xt); |
361 ASSERT_WITH_SECURITY_IMPLICATION(workerContext->isSharedWorkerContext()); | 361 ASSERT_WITH_SECURITY_IMPLICATION(workerGlobalScope->isSharedWorkerGlobalScop
e()); |
362 workerContext->dispatchEvent(createConnectEvent(port)); | 362 workerGlobalScope->dispatchEvent(createConnectEvent(port)); |
363 } | 363 } |
364 | 364 |
365 void WebSharedWorkerImpl::startWorkerContext(const WebURL& url, const WebString&
name, const WebString& userAgent, const WebString& sourceCode, const WebString&
contentSecurityPolicy, WebContentSecurityPolicyType policyType, long long) | 365 void WebSharedWorkerImpl::startWorkerContext(const WebURL& url, const WebString&
name, const WebString& userAgent, const WebString& sourceCode, const WebString&
contentSecurityPolicy, WebContentSecurityPolicyType policyType, long long) |
366 { | 366 { |
367 initializeLoader(url); | 367 initializeLoader(url); |
368 WorkerThreadStartMode startMode = m_pauseWorkerContextOnStart ? PauseWorkerC
ontextOnStart : DontPauseWorkerContextOnStart; | 368 WorkerThreadStartMode startMode = m_pauseWorkerContextOnStart ? PauseWorkerG
lobalScopeOnStart : DontPauseWorkerGlobalScopeOnStart; |
369 setWorkerThread(SharedWorkerThread::create(name, url, userAgent, | 369 setWorkerThread(SharedWorkerThread::create(name, url, userAgent, |
370 sourceCode, *this, *this, startMo
de, contentSecurityPolicy, | 370 sourceCode, *this, *this, startMo
de, contentSecurityPolicy, |
371 static_cast<WebCore::ContentSecur
ityPolicy::HeaderType>(policyType))); | 371 static_cast<WebCore::ContentSecur
ityPolicy::HeaderType>(policyType))); |
372 | 372 |
373 workerThread()->start(); | 373 workerThread()->start(); |
374 } | 374 } |
375 | 375 |
376 void WebSharedWorkerImpl::terminateWorkerContext() | 376 void WebSharedWorkerImpl::terminateWorkerContext() |
377 { | 377 { |
378 stopWorkerThread(); | 378 stopWorkerThread(); |
379 } | 379 } |
380 | 380 |
381 void WebSharedWorkerImpl::clientDestroyed() | 381 void WebSharedWorkerImpl::clientDestroyed() |
382 { | 382 { |
383 m_client = 0; | 383 m_client = 0; |
384 } | 384 } |
385 | 385 |
386 void WebSharedWorkerImpl::pauseWorkerContextOnStart() | 386 void WebSharedWorkerImpl::pauseWorkerContextOnStart() |
387 { | 387 { |
388 m_pauseWorkerContextOnStart = true; | 388 m_pauseWorkerContextOnStart = true; |
389 } | 389 } |
390 | 390 |
391 static void resumeWorkerContextTask(ScriptExecutionContext* context, bool) | 391 static void resumeWorkerContextTask(ScriptExecutionContext* context, bool) |
392 { | 392 { |
393 ASSERT_WITH_SECURITY_IMPLICATION(context->isWorkerContext()); | 393 ASSERT_WITH_SECURITY_IMPLICATION(context->isWorkerGlobalScope()); |
394 static_cast<WorkerContext*>(context)->workerInspectorController()->resume(); | 394 static_cast<WorkerGlobalScope*>(context)->workerInspectorController()->resum
e(); |
395 } | 395 } |
396 | 396 |
397 void WebSharedWorkerImpl::resumeWorkerContext() | 397 void WebSharedWorkerImpl::resumeWorkerContext() |
398 { | 398 { |
399 m_pauseWorkerContextOnStart = false; | 399 m_pauseWorkerContextOnStart = false; |
400 if (workerThread()) | 400 if (workerThread()) |
401 workerThread()->runLoop().postTaskForMode(createCallbackTask(resumeWorke
rContextTask, true), WorkerDebuggerAgent::debuggerTaskMode); | 401 workerThread()->runLoop().postTaskForMode(createCallbackTask(resumeWorke
rContextTask, true), WorkerDebuggerAgent::debuggerTaskMode); |
402 } | 402 } |
403 | 403 |
404 static void connectToWorkerContextInspectorTask(ScriptExecutionContext* context,
bool) | 404 static void connectToWorkerContextInspectorTask(ScriptExecutionContext* context,
bool) |
405 { | 405 { |
406 ASSERT_WITH_SECURITY_IMPLICATION(context->isWorkerContext()); | 406 ASSERT_WITH_SECURITY_IMPLICATION(context->isWorkerGlobalScope()); |
407 static_cast<WorkerContext*>(context)->workerInspectorController()->connectFr
ontend(); | 407 static_cast<WorkerGlobalScope*>(context)->workerInspectorController()->conne
ctFrontend(); |
408 } | 408 } |
409 | 409 |
410 void WebSharedWorkerImpl::attachDevTools() | 410 void WebSharedWorkerImpl::attachDevTools() |
411 { | 411 { |
412 workerThread()->runLoop().postTaskForMode(createCallbackTask(connectToWorker
ContextInspectorTask, true), WorkerDebuggerAgent::debuggerTaskMode); | 412 workerThread()->runLoop().postTaskForMode(createCallbackTask(connectToWorker
ContextInspectorTask, true), WorkerDebuggerAgent::debuggerTaskMode); |
413 } | 413 } |
414 | 414 |
415 static void reconnectToWorkerContextInspectorTask(ScriptExecutionContext* contex
t, const String& savedState) | 415 static void reconnectToWorkerContextInspectorTask(ScriptExecutionContext* contex
t, const String& savedState) |
416 { | 416 { |
417 ASSERT_WITH_SECURITY_IMPLICATION(context->isWorkerContext()); | 417 ASSERT_WITH_SECURITY_IMPLICATION(context->isWorkerGlobalScope()); |
418 WorkerInspectorController* ic = static_cast<WorkerContext*>(context)->worker
InspectorController(); | 418 WorkerInspectorController* ic = static_cast<WorkerGlobalScope*>(context)->wo
rkerInspectorController(); |
419 ic->restoreInspectorStateFromCookie(savedState); | 419 ic->restoreInspectorStateFromCookie(savedState); |
420 ic->resume(); | 420 ic->resume(); |
421 } | 421 } |
422 | 422 |
423 void WebSharedWorkerImpl::reattachDevTools(const WebString& savedState) | 423 void WebSharedWorkerImpl::reattachDevTools(const WebString& savedState) |
424 { | 424 { |
425 workerThread()->runLoop().postTaskForMode(createCallbackTask(reconnectToWork
erContextInspectorTask, String(savedState)), WorkerDebuggerAgent::debuggerTaskMo
de); | 425 workerThread()->runLoop().postTaskForMode(createCallbackTask(reconnectToWork
erContextInspectorTask, String(savedState)), WorkerDebuggerAgent::debuggerTaskMo
de); |
426 } | 426 } |
427 | 427 |
428 static void disconnectFromWorkerContextInspectorTask(ScriptExecutionContext* con
text, bool) | 428 static void disconnectFromWorkerContextInspectorTask(ScriptExecutionContext* con
text, bool) |
429 { | 429 { |
430 ASSERT_WITH_SECURITY_IMPLICATION(context->isWorkerContext()); | 430 ASSERT_WITH_SECURITY_IMPLICATION(context->isWorkerGlobalScope()); |
431 static_cast<WorkerContext*>(context)->workerInspectorController()->disconnec
tFrontend(); | 431 static_cast<WorkerGlobalScope*>(context)->workerInspectorController()->disco
nnectFrontend(); |
432 } | 432 } |
433 | 433 |
434 void WebSharedWorkerImpl::detachDevTools() | 434 void WebSharedWorkerImpl::detachDevTools() |
435 { | 435 { |
436 workerThread()->runLoop().postTaskForMode(createCallbackTask(disconnectFromW
orkerContextInspectorTask, true), WorkerDebuggerAgent::debuggerTaskMode); | 436 workerThread()->runLoop().postTaskForMode(createCallbackTask(disconnectFromW
orkerContextInspectorTask, true), WorkerDebuggerAgent::debuggerTaskMode); |
437 } | 437 } |
438 | 438 |
439 static void dispatchOnInspectorBackendTask(ScriptExecutionContext* context, cons
t String& message) | 439 static void dispatchOnInspectorBackendTask(ScriptExecutionContext* context, cons
t String& message) |
440 { | 440 { |
441 ASSERT_WITH_SECURITY_IMPLICATION(context->isWorkerContext()); | 441 ASSERT_WITH_SECURITY_IMPLICATION(context->isWorkerGlobalScope()); |
442 static_cast<WorkerContext*>(context)->workerInspectorController()->dispatchM
essageFromFrontend(message); | 442 static_cast<WorkerGlobalScope*>(context)->workerInspectorController()->dispa
tchMessageFromFrontend(message); |
443 } | 443 } |
444 | 444 |
445 void WebSharedWorkerImpl::dispatchDevToolsMessage(const WebString& message) | 445 void WebSharedWorkerImpl::dispatchDevToolsMessage(const WebString& message) |
446 { | 446 { |
447 workerThread()->runLoop().postTaskForMode(createCallbackTask(dispatchOnInspe
ctorBackendTask, String(message)), WorkerDebuggerAgent::debuggerTaskMode); | 447 workerThread()->runLoop().postTaskForMode(createCallbackTask(dispatchOnInspe
ctorBackendTask, String(message)), WorkerDebuggerAgent::debuggerTaskMode); |
448 WorkerDebuggerAgent::interruptAndDispatchInspectorCommands(workerThread()); | 448 WorkerDebuggerAgent::interruptAndDispatchInspectorCommands(workerThread()); |
449 } | 449 } |
450 | 450 |
451 WebSharedWorker* WebSharedWorker::create(WebSharedWorkerClient* client) | 451 WebSharedWorker* WebSharedWorker::create(WebSharedWorkerClient* client) |
452 { | 452 { |
453 return new WebSharedWorkerImpl(client); | 453 return new WebSharedWorkerImpl(client); |
454 } | 454 } |
455 | 455 |
456 } // namespace WebKit | 456 } // namespace WebKit |
OLD | NEW |