| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 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 12 matching lines...) Expand all Loading... |
| 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 #include "web/ServiceWorkerGlobalScopeProxy.h" | 31 #include "web/ServiceWorkerGlobalScopeProxy.h" |
| 32 | 32 |
| 33 #include <memory> |
| 34 #include <utility> |
| 33 #include "bindings/core/v8/SourceLocation.h" | 35 #include "bindings/core/v8/SourceLocation.h" |
| 34 #include "bindings/core/v8/WorkerOrWorkletScriptController.h" | 36 #include "bindings/core/v8/WorkerOrWorkletScriptController.h" |
| 35 #include "core/dom/Document.h" | 37 #include "core/dom/Document.h" |
| 36 #include "core/dom/ExecutionContext.h" | 38 #include "core/dom/ExecutionContext.h" |
| 37 #include "core/dom/ExecutionContextTask.h" | 39 #include "core/dom/ExecutionContextTask.h" |
| 38 #include "core/dom/MessagePort.h" | 40 #include "core/dom/MessagePort.h" |
| 41 #include "core/dom/TaskRunnerHelper.h" |
| 39 #include "core/inspector/ConsoleMessage.h" | 42 #include "core/inspector/ConsoleMessage.h" |
| 40 #include "core/origin_trials/OriginTrials.h" | 43 #include "core/origin_trials/OriginTrials.h" |
| 41 #include "core/workers/ParentFrameTaskRunners.h" | |
| 42 #include "core/workers/WorkerGlobalScope.h" | 44 #include "core/workers/WorkerGlobalScope.h" |
| 43 #include "core/workers/WorkerThread.h" | 45 #include "core/workers/WorkerThread.h" |
| 44 #include "modules/background_sync/SyncEvent.h" | 46 #include "modules/background_sync/SyncEvent.h" |
| 45 #include "modules/fetch/Headers.h" | 47 #include "modules/fetch/Headers.h" |
| 46 #include "modules/notifications/Notification.h" | 48 #include "modules/notifications/Notification.h" |
| 47 #include "modules/notifications/NotificationEvent.h" | 49 #include "modules/notifications/NotificationEvent.h" |
| 48 #include "modules/notifications/NotificationEventInit.h" | 50 #include "modules/notifications/NotificationEventInit.h" |
| 49 #include "modules/payments/PaymentAppRequest.h" | 51 #include "modules/payments/PaymentAppRequest.h" |
| 50 #include "modules/payments/PaymentAppRequestConversion.h" | 52 #include "modules/payments/PaymentAppRequestConversion.h" |
| 51 #include "modules/payments/PaymentRequestEvent.h" | 53 #include "modules/payments/PaymentRequestEvent.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 63 #include "platform/RuntimeEnabledFeatures.h" | 65 #include "platform/RuntimeEnabledFeatures.h" |
| 64 #include "public/platform/modules/notifications/WebNotificationData.h" | 66 #include "public/platform/modules/notifications/WebNotificationData.h" |
| 65 #include "public/platform/modules/serviceworker/WebServiceWorkerEventResult.h" | 67 #include "public/platform/modules/serviceworker/WebServiceWorkerEventResult.h" |
| 66 #include "public/platform/modules/serviceworker/WebServiceWorkerRequest.h" | 68 #include "public/platform/modules/serviceworker/WebServiceWorkerRequest.h" |
| 67 #include "public/web/WebSerializedScriptValue.h" | 69 #include "public/web/WebSerializedScriptValue.h" |
| 68 #include "public/web/modules/serviceworker/WebServiceWorkerContextClient.h" | 70 #include "public/web/modules/serviceworker/WebServiceWorkerContextClient.h" |
| 69 #include "web/WebEmbeddedWorkerImpl.h" | 71 #include "web/WebEmbeddedWorkerImpl.h" |
| 70 #include "wtf/Assertions.h" | 72 #include "wtf/Assertions.h" |
| 71 #include "wtf/Functional.h" | 73 #include "wtf/Functional.h" |
| 72 #include "wtf/PtrUtil.h" | 74 #include "wtf/PtrUtil.h" |
| 73 #include <memory> | |
| 74 #include <utility> | |
| 75 | 75 |
| 76 namespace blink { | 76 namespace blink { |
| 77 | 77 |
| 78 ServiceWorkerGlobalScopeProxy* ServiceWorkerGlobalScopeProxy::create( | 78 ServiceWorkerGlobalScopeProxy* ServiceWorkerGlobalScopeProxy::create( |
| 79 WebEmbeddedWorkerImpl& embeddedWorker, | 79 WebEmbeddedWorkerImpl& embeddedWorker, |
| 80 Document& document, | 80 Document& document, |
| 81 WebServiceWorkerContextClient& client) { | 81 WebServiceWorkerContextClient& client) { |
| 82 return new ServiceWorkerGlobalScopeProxy(embeddedWorker, document, client); | 82 return new ServiceWorkerGlobalScopeProxy(embeddedWorker, document, client); |
| 83 } | 83 } |
| 84 | 84 |
| 85 ServiceWorkerGlobalScopeProxy::~ServiceWorkerGlobalScopeProxy() { | 85 ServiceWorkerGlobalScopeProxy::~ServiceWorkerGlobalScopeProxy() { |
| 86 // Verify that the proxy has been detached. | 86 // Verify that the proxy has been detached. |
| 87 DCHECK(!m_embeddedWorker); | 87 DCHECK(!m_embeddedWorker); |
| 88 } | 88 } |
| 89 | 89 |
| 90 DEFINE_TRACE(ServiceWorkerGlobalScopeProxy) { | 90 DEFINE_TRACE(ServiceWorkerGlobalScopeProxy) { |
| 91 visitor->trace(m_document); | 91 visitor->trace(m_document); |
| 92 visitor->trace(m_parentFrameTaskRunners); | |
| 93 visitor->trace(m_pendingPreloadFetchEvents); | 92 visitor->trace(m_pendingPreloadFetchEvents); |
| 94 } | 93 } |
| 95 | 94 |
| 96 void ServiceWorkerGlobalScopeProxy::setRegistration( | 95 void ServiceWorkerGlobalScopeProxy::setRegistration( |
| 97 std::unique_ptr<WebServiceWorkerRegistration::Handle> handle) { | 96 std::unique_ptr<WebServiceWorkerRegistration::Handle> handle) { |
| 98 workerGlobalScope()->setRegistration(std::move(handle)); | 97 workerGlobalScope()->setRegistration(std::move(handle)); |
| 99 } | 98 } |
| 100 | 99 |
| 101 void ServiceWorkerGlobalScopeProxy::dispatchActivateEvent(int eventID) { | 100 void ServiceWorkerGlobalScopeProxy::dispatchActivateEvent(int eventID) { |
| 102 WaitUntilObserver* observer = WaitUntilObserver::create( | 101 WaitUntilObserver* observer = WaitUntilObserver::create( |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 SourceLocation* location) { | 382 SourceLocation* location) { |
| 384 client().reportConsoleMessage(source, level, message, location->lineNumber(), | 383 client().reportConsoleMessage(source, level, message, location->lineNumber(), |
| 385 location->url()); | 384 location->url()); |
| 386 } | 385 } |
| 387 | 386 |
| 388 void ServiceWorkerGlobalScopeProxy::postMessageToPageInspector( | 387 void ServiceWorkerGlobalScopeProxy::postMessageToPageInspector( |
| 389 const String& message) { | 388 const String& message) { |
| 390 DCHECK(m_embeddedWorker); | 389 DCHECK(m_embeddedWorker); |
| 391 // The TaskType of Inspector tasks need to be Unthrottled because they need to | 390 // The TaskType of Inspector tasks need to be Unthrottled because they need to |
| 392 // run even on a suspended page. | 391 // run even on a suspended page. |
| 393 m_parentFrameTaskRunners->get(TaskType::Unthrottled) | 392 FrameTaskRunnerHelper::get(TaskType::Unthrottled, m_workerGlobalScope.get()) |
| 394 ->postTask( | 393 ->postTask( |
| 395 BLINK_FROM_HERE, | 394 BLINK_FROM_HERE, |
| 396 crossThreadBind(&WebEmbeddedWorkerImpl::postMessageToPageInspector, | 395 crossThreadBind(&WebEmbeddedWorkerImpl::postMessageToPageInspector, |
| 397 crossThreadUnretained(m_embeddedWorker), message)); | 396 crossThreadUnretained(m_embeddedWorker), message)); |
| 398 } | 397 } |
| 399 | 398 |
| 400 void ServiceWorkerGlobalScopeProxy::didCreateWorkerGlobalScope( | 399 void ServiceWorkerGlobalScopeProxy::didCreateWorkerGlobalScope( |
| 401 WorkerOrWorkletGlobalScope* workerGlobalScope) { | 400 WorkerOrWorkletGlobalScope* workerGlobalScope) { |
| 402 DCHECK(!m_workerGlobalScope); | 401 DCHECK(!m_workerGlobalScope); |
| 403 m_workerGlobalScope = | 402 m_workerGlobalScope = |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 } | 449 } |
| 451 | 450 |
| 452 ServiceWorkerGlobalScopeProxy::ServiceWorkerGlobalScopeProxy( | 451 ServiceWorkerGlobalScopeProxy::ServiceWorkerGlobalScopeProxy( |
| 453 WebEmbeddedWorkerImpl& embeddedWorker, | 452 WebEmbeddedWorkerImpl& embeddedWorker, |
| 454 Document& document, | 453 Document& document, |
| 455 WebServiceWorkerContextClient& client) | 454 WebServiceWorkerContextClient& client) |
| 456 : m_embeddedWorker(&embeddedWorker), | 455 : m_embeddedWorker(&embeddedWorker), |
| 457 m_document(&document), | 456 m_document(&document), |
| 458 m_client(&client), | 457 m_client(&client), |
| 459 m_workerGlobalScope(nullptr) { | 458 m_workerGlobalScope(nullptr) { |
| 460 // ServiceWorker can sometimes run tasks that are initiated by/associated with | |
| 461 // a document's frame but these documents can be from a different process. So | |
| 462 // we intentionally populate the task runners with null document in order to | |
| 463 // use the thread's default task runner. Note that |m_document| should not be | |
| 464 // used as it's a dummy document for loading that doesn't represent the frame | |
| 465 // of any associated document. | |
| 466 m_parentFrameTaskRunners = ParentFrameTaskRunners::create(nullptr); | |
| 467 } | 459 } |
| 468 | 460 |
| 469 void ServiceWorkerGlobalScopeProxy::detach() { | 461 void ServiceWorkerGlobalScopeProxy::detach() { |
| 470 m_embeddedWorker = nullptr; | 462 m_embeddedWorker = nullptr; |
| 471 m_document = nullptr; | 463 m_document = nullptr; |
| 472 m_client = nullptr; | 464 m_client = nullptr; |
| 473 m_workerGlobalScope = nullptr; | 465 m_workerGlobalScope = nullptr; |
| 474 } | 466 } |
| 475 | 467 |
| 476 WebServiceWorkerContextClient& ServiceWorkerGlobalScopeProxy::client() const { | 468 WebServiceWorkerContextClient& ServiceWorkerGlobalScopeProxy::client() const { |
| 477 DCHECK(m_client); | 469 DCHECK(m_client); |
| 478 return *m_client; | 470 return *m_client; |
| 479 } | 471 } |
| 480 | 472 |
| 481 Document& ServiceWorkerGlobalScopeProxy::document() const { | 473 Document& ServiceWorkerGlobalScopeProxy::document() const { |
| 482 DCHECK(m_document); | 474 DCHECK(m_document); |
| 483 return *m_document; | 475 return *m_document; |
| 484 } | 476 } |
| 485 | 477 |
| 486 ServiceWorkerGlobalScope* ServiceWorkerGlobalScopeProxy::workerGlobalScope() | 478 ServiceWorkerGlobalScope* ServiceWorkerGlobalScopeProxy::workerGlobalScope() |
| 487 const { | 479 const { |
| 488 DCHECK(m_workerGlobalScope); | 480 DCHECK(m_workerGlobalScope); |
| 489 return m_workerGlobalScope; | 481 return m_workerGlobalScope; |
| 490 } | 482 } |
| 491 | 483 |
| 492 } // namespace blink | 484 } // namespace blink |
| OLD | NEW |