Chromium Code Reviews| Index: third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp |
| diff --git a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp |
| index fbf8875ab740445df67843a341359250e6faa213..0168a1e2fb3978b4b865595abc7b6f247ea99ba3 100644 |
| --- a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp |
| +++ b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp |
| @@ -74,183 +74,203 @@ |
| namespace blink { |
| -PassOwnPtr<ServiceWorkerGlobalScopeProxy> ServiceWorkerGlobalScopeProxy::create(WebEmbeddedWorkerImpl& embeddedWorker, Document& document, WebServiceWorkerContextClient& client) |
| +PassOwnPtrWillBeRawPtr<ServiceWorkerGlobalScopeProxy> ServiceWorkerGlobalScopeProxy::create(WebEmbeddedWorkerImpl& embeddedWorker, Document& document, WebServiceWorkerContextClient& client) |
| { |
| - return adoptPtr(new ServiceWorkerGlobalScopeProxy(embeddedWorker, document, client)); |
| + return adoptPtrWillBeNoop(new ServiceWorkerGlobalScopeProxy(embeddedWorker, document, client)); |
| } |
| ServiceWorkerGlobalScopeProxy::~ServiceWorkerGlobalScopeProxy() |
| { |
|
haraken
2015/11/17 23:53:59
Can we assert that detach() has been called?
sof
2015/11/18 08:58:09
Done; asserting for !m_embeddedWorker.
|
| } |
| +DEFINE_TRACE(ServiceWorkerGlobalScopeProxy) |
| +{ |
| + visitor->trace(m_document); |
| + visitor->trace(m_workerGlobalScope); |
| +} |
| + |
| void ServiceWorkerGlobalScopeProxy::setRegistration(WebPassOwnPtr<WebServiceWorkerRegistration::Handle> handle) |
| { |
| - ASSERT(m_workerGlobalScope); |
| - m_workerGlobalScope->setRegistration(handle); |
| + workerGlobalScope()->setRegistration(handle); |
| } |
| void ServiceWorkerGlobalScopeProxy::dispatchActivateEvent(int eventID) |
| { |
| - ASSERT(m_workerGlobalScope); |
| - WaitUntilObserver* observer = WaitUntilObserver::create(m_workerGlobalScope, WaitUntilObserver::Activate, eventID); |
| + WaitUntilObserver* observer = WaitUntilObserver::create(workerGlobalScope(), WaitUntilObserver::Activate, eventID); |
| RefPtrWillBeRawPtr<Event> event(ExtendableEvent::create(EventTypeNames::activate, ExtendableEventInit(), observer)); |
| - m_workerGlobalScope->dispatchExtendableEvent(event.release(), observer); |
| + workerGlobalScope()->dispatchExtendableEvent(event.release(), observer); |
| } |
| void ServiceWorkerGlobalScopeProxy::dispatchFetchEvent(int eventID, const WebServiceWorkerRequest& webRequest) |
| { |
| - ASSERT(m_workerGlobalScope); |
| - RespondWithObserver* observer = RespondWithObserver::create(m_workerGlobalScope, eventID, webRequest.url(), webRequest.mode(), webRequest.frameType(), webRequest.requestContext()); |
| + RespondWithObserver* observer = RespondWithObserver::create(workerGlobalScope(), eventID, webRequest.url(), webRequest.mode(), webRequest.frameType(), webRequest.requestContext()); |
| bool defaultPrevented = false; |
| - Request* request = Request::create(m_workerGlobalScope, webRequest); |
| + Request* request = Request::create(workerGlobalScope(), webRequest); |
| request->headers()->setGuard(Headers::ImmutableGuard); |
| FetchEventInit eventInit; |
| eventInit.setCancelable(true); |
| eventInit.setRequest(request); |
| eventInit.setIsReload(webRequest.isReload()); |
| RefPtrWillBeRawPtr<FetchEvent> fetchEvent(FetchEvent::create(EventTypeNames::fetch, eventInit, observer)); |
| - defaultPrevented = !m_workerGlobalScope->dispatchEvent(fetchEvent.release()); |
| + defaultPrevented = !workerGlobalScope()->dispatchEvent(fetchEvent.release()); |
| observer->didDispatchEvent(defaultPrevented); |
| } |
| void ServiceWorkerGlobalScopeProxy::dispatchGeofencingEvent(int eventID, WebGeofencingEventType eventType, const WebString& regionID, const WebCircularGeofencingRegion& region) |
| { |
| - ASSERT(m_workerGlobalScope); |
| const AtomicString& type = eventType == WebGeofencingEventTypeEnter ? EventTypeNames::geofenceenter : EventTypeNames::geofenceleave; |
| - m_workerGlobalScope->dispatchEvent(GeofencingEvent::create(type, regionID, CircularGeofencingRegion::create(regionID, region))); |
| + workerGlobalScope()->dispatchEvent(GeofencingEvent::create(type, regionID, CircularGeofencingRegion::create(regionID, region))); |
| } |
| void ServiceWorkerGlobalScopeProxy::dispatchInstallEvent(int eventID) |
| { |
| - ASSERT(m_workerGlobalScope); |
| - WaitUntilObserver* observer = WaitUntilObserver::create(m_workerGlobalScope, WaitUntilObserver::Install, eventID); |
| + WaitUntilObserver* observer = WaitUntilObserver::create(workerGlobalScope(), WaitUntilObserver::Install, eventID); |
| RefPtrWillBeRawPtr<Event> event; |
| - if (RuntimeEnabledFeatures::foreignFetchEnabled()) { |
| + if (RuntimeEnabledFeatures::foreignFetchEnabled()) |
| event = InstallEvent::create(EventTypeNames::install, ExtendableEventInit(), observer); |
| - } else { |
| + else |
| event = ExtendableEvent::create(EventTypeNames::install, ExtendableEventInit(), observer); |
| - } |
| - m_workerGlobalScope->dispatchExtendableEvent(event.release(), observer); |
| + workerGlobalScope()->dispatchExtendableEvent(event.release(), observer); |
| } |
| void ServiceWorkerGlobalScopeProxy::dispatchMessageEvent(const WebString& message, const WebMessagePortChannelArray& webChannels) |
| { |
| - ASSERT(m_workerGlobalScope); |
| - |
| - MessagePortArray* ports = MessagePort::toMessagePortArray(m_workerGlobalScope, webChannels); |
| + MessagePortArray* ports = MessagePort::toMessagePortArray(workerGlobalScope(), webChannels); |
| WebSerializedScriptValue value = WebSerializedScriptValue::fromString(message); |
| - m_workerGlobalScope->dispatchEvent(MessageEvent::create(ports, value)); |
| + workerGlobalScope()->dispatchEvent(MessageEvent::create(ports, value)); |
| } |
| void ServiceWorkerGlobalScopeProxy::dispatchNotificationClickEvent(int eventID, int64_t notificationID, const WebNotificationData& data, int actionIndex) |
| { |
| - ASSERT(m_workerGlobalScope); |
| - WaitUntilObserver* observer = WaitUntilObserver::create(m_workerGlobalScope, WaitUntilObserver::NotificationClick, eventID); |
| + WaitUntilObserver* observer = WaitUntilObserver::create(workerGlobalScope(), WaitUntilObserver::NotificationClick, eventID); |
| NotificationEventInit eventInit; |
| - eventInit.setNotification(Notification::create(m_workerGlobalScope, notificationID, data)); |
| + eventInit.setNotification(Notification::create(workerGlobalScope(), notificationID, data)); |
| if (0 <= actionIndex && actionIndex < static_cast<int>(data.actions.size())) |
| eventInit.setAction(data.actions[actionIndex].action); |
| RefPtrWillBeRawPtr<Event> event(NotificationEvent::create(EventTypeNames::notificationclick, eventInit, observer)); |
| - m_workerGlobalScope->dispatchExtendableEvent(event.release(), observer); |
| + workerGlobalScope()->dispatchExtendableEvent(event.release(), observer); |
| } |
| void ServiceWorkerGlobalScopeProxy::dispatchPushEvent(int eventID, const WebString& data) |
| { |
| - ASSERT(m_workerGlobalScope); |
| - WaitUntilObserver* observer = WaitUntilObserver::create(m_workerGlobalScope, WaitUntilObserver::Push, eventID); |
| + WaitUntilObserver* observer = WaitUntilObserver::create(workerGlobalScope(), WaitUntilObserver::Push, eventID); |
| RefPtrWillBeRawPtr<Event> event(PushEvent::create(EventTypeNames::push, PushMessageData::create(data), observer)); |
| - m_workerGlobalScope->dispatchExtendableEvent(event.release(), observer); |
| + workerGlobalScope()->dispatchExtendableEvent(event.release(), observer); |
| } |
| void ServiceWorkerGlobalScopeProxy::dispatchServicePortConnectEvent(WebServicePortConnectEventCallbacks* rawCallbacks, const WebURL& targetURL, const WebString& origin, WebServicePortID portID) |
| { |
| - ASSERT(m_workerGlobalScope); |
| OwnPtr<WebServicePortConnectEventCallbacks> callbacks = adoptPtr(rawCallbacks); |
| - ServicePortCollection* collection = WorkerNavigatorServices::services(m_workerGlobalScope, *m_workerGlobalScope->navigator()); |
| + ServicePortCollection* collection = WorkerNavigatorServices::services(workerGlobalScope(), *workerGlobalScope()->navigator()); |
| collection->dispatchConnectEvent(callbacks.release(), targetURL, origin, portID); |
| } |
| void ServiceWorkerGlobalScopeProxy::dispatchSyncEvent(int eventID, const WebSyncRegistration& registration, LastChanceOption lastChance) |
| { |
| - ASSERT(m_workerGlobalScope); |
| if (!RuntimeEnabledFeatures::backgroundSyncEnabled()) { |
| - ServiceWorkerGlobalScopeClient::from(m_workerGlobalScope)->didHandleSyncEvent(eventID, WebServiceWorkerEventResultCompleted); |
| + ServiceWorkerGlobalScopeClient::from(workerGlobalScope())->didHandleSyncEvent(eventID, WebServiceWorkerEventResultCompleted); |
| return; |
| } |
| - WaitUntilObserver* observer = WaitUntilObserver::create(m_workerGlobalScope, WaitUntilObserver::Sync, eventID); |
| + WaitUntilObserver* observer = WaitUntilObserver::create(workerGlobalScope(), WaitUntilObserver::Sync, eventID); |
| RefPtrWillBeRawPtr<Event> event(SyncEvent::create(EventTypeNames::sync, registration.tag, lastChance == IsLastChance, observer)); |
| - m_workerGlobalScope->dispatchExtendableEvent(event.release(), observer); |
| + workerGlobalScope()->dispatchExtendableEvent(event.release(), observer); |
| } |
| void ServiceWorkerGlobalScopeProxy::dispatchCrossOriginMessageEvent(const WebCrossOriginServiceWorkerClient& webClient, const WebString& message, const WebMessagePortChannelArray& webChannels) |
| { |
| - ASSERT(m_workerGlobalScope); |
| - MessagePortArray* ports = MessagePort::toMessagePortArray(m_workerGlobalScope, webChannels); |
| + MessagePortArray* ports = MessagePort::toMessagePortArray(workerGlobalScope(), webChannels); |
| WebSerializedScriptValue value = WebSerializedScriptValue::fromString(message); |
| // FIXME: Have proper source for this MessageEvent. |
| RefPtrWillBeRawPtr<MessageEvent> event = MessageEvent::create(ports, value, webClient.origin.string()); |
| event->setType(EventTypeNames::crossoriginmessage); |
| - m_workerGlobalScope->dispatchEvent(event); |
| + workerGlobalScope()->dispatchEvent(event); |
| } |
| void ServiceWorkerGlobalScopeProxy::reportException(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL, int) |
| { |
| - m_client.reportException(errorMessage, lineNumber, columnNumber, sourceURL); |
| + client().reportException(errorMessage, lineNumber, columnNumber, sourceURL); |
| } |
| void ServiceWorkerGlobalScopeProxy::reportConsoleMessage(PassRefPtrWillBeRawPtr<ConsoleMessage> consoleMessage) |
| { |
| - m_client.reportConsoleMessage(consoleMessage->source(), consoleMessage->level(), consoleMessage->message(), consoleMessage->lineNumber(), consoleMessage->url()); |
| + client().reportConsoleMessage(consoleMessage->source(), consoleMessage->level(), consoleMessage->message(), consoleMessage->lineNumber(), consoleMessage->url()); |
| } |
| void ServiceWorkerGlobalScopeProxy::postMessageToPageInspector(const String& message) |
| { |
| - m_document.postInspectorTask(BLINK_FROM_HERE, createCrossThreadTask(&WebEmbeddedWorkerImpl::postMessageToPageInspector, &m_embeddedWorker, message)); |
| + ASSERT(m_embeddedWorker); |
| + document().postInspectorTask(BLINK_FROM_HERE, createCrossThreadTask(&WebEmbeddedWorkerImpl::postMessageToPageInspector, m_embeddedWorker, message)); |
| } |
| void ServiceWorkerGlobalScopeProxy::didEvaluateWorkerScript(bool success) |
| { |
| - m_client.didEvaluateWorkerScript(success); |
| + client().didEvaluateWorkerScript(success); |
| } |
| void ServiceWorkerGlobalScopeProxy::didInitializeWorkerContext() |
| { |
| - ASSERT(m_workerGlobalScope); |
| - ScriptState::Scope scope(m_workerGlobalScope->script()->scriptState()); |
| - m_client.didInitializeWorkerContext(m_workerGlobalScope->script()->context(), WebURL(m_documentURL)); |
| + ScriptState::Scope scope(workerGlobalScope()->script()->scriptState()); |
| + client().didInitializeWorkerContext(workerGlobalScope()->script()->context(), WebURL(m_documentURL)); |
| } |
| void ServiceWorkerGlobalScopeProxy::workerGlobalScopeStarted(WorkerGlobalScope* workerGlobalScope) |
| { |
| ASSERT(!m_workerGlobalScope); |
| m_workerGlobalScope = static_cast<ServiceWorkerGlobalScope*>(workerGlobalScope); |
| - m_client.workerContextStarted(this); |
| + client().workerContextStarted(this); |
| } |
| void ServiceWorkerGlobalScopeProxy::workerGlobalScopeClosed() |
| { |
| - m_document.postTask(BLINK_FROM_HERE, createCrossThreadTask(&WebEmbeddedWorkerImpl::terminateWorkerContext, &m_embeddedWorker)); |
| + ASSERT(m_embeddedWorker); |
| + document().postTask(BLINK_FROM_HERE, createCrossThreadTask(&WebEmbeddedWorkerImpl::terminateWorkerContext, m_embeddedWorker)); |
| } |
| void ServiceWorkerGlobalScopeProxy::willDestroyWorkerGlobalScope() |
| { |
| - v8::HandleScope handleScope(m_workerGlobalScope->thread()->isolate()); |
| - m_client.willDestroyWorkerContext(m_workerGlobalScope->script()->context()); |
| + v8::HandleScope handleScope(workerGlobalScope()->thread()->isolate()); |
| + client().willDestroyWorkerContext(workerGlobalScope()->script()->context()); |
| m_workerGlobalScope = nullptr; |
| } |
| void ServiceWorkerGlobalScopeProxy::workerThreadTerminated() |
| { |
| - m_client.workerContextDestroyed(); |
| + client().workerContextDestroyed(); |
| } |
| ServiceWorkerGlobalScopeProxy::ServiceWorkerGlobalScopeProxy(WebEmbeddedWorkerImpl& embeddedWorker, Document& document, WebServiceWorkerContextClient& client) |
| - : m_embeddedWorker(embeddedWorker) |
| - , m_document(document) |
| + : m_embeddedWorker(&embeddedWorker) |
| + , m_document(&document) |
| , m_documentURL(document.url().copy()) |
| - , m_client(client) |
| + , m_client(&client) |
| , m_workerGlobalScope(nullptr) |
| { |
| } |
| +void ServiceWorkerGlobalScopeProxy::detach() |
| +{ |
| + m_embeddedWorker = nullptr; |
| + m_document = nullptr; |
| + m_client = nullptr; |
| + m_workerGlobalScope = nullptr; |
| +} |
| + |
| +WebServiceWorkerContextClient& ServiceWorkerGlobalScopeProxy::client() const |
|
haraken
2015/11/17 23:53:59
Nit: I'd inline these getters.
|
| +{ |
| + ASSERT(m_client); |
| + return *m_client; |
| +} |
| + |
| +Document& ServiceWorkerGlobalScopeProxy::document() const |
| +{ |
| + ASSERT(m_document); |
| + return *m_document; |
| +} |
| + |
| +ServiceWorkerGlobalScope* ServiceWorkerGlobalScopeProxy::workerGlobalScope() const |
| +{ |
| + ASSERT(m_workerGlobalScope); |
| + return m_workerGlobalScope; |
| +} |
| + |
| } // namespace blink |