| Index: third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp
|
| diff --git a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp b/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp
|
| similarity index 73%
|
| copy from third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp
|
| copy to third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp
|
| index 89e1c58e317b50f251338a7073e2bf2919aab5fe..c7ad910b531d8cae9020e0a0590339a4ffd78e74 100644
|
| --- a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp
|
| +++ b/third_party/WebKit/Source/modules/serviceworkers/FetchRespondWithObserver.cpp
|
| @@ -1,26 +1,22 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "modules/serviceworkers/RespondWithObserver.h"
|
| +#include "modules/serviceworkers/FetchRespondWithObserver.h"
|
|
|
| -#include "bindings/core/v8/ScriptFunction.h"
|
| -#include "bindings/core/v8/ScriptPromise.h"
|
| +#include <v8.h>
|
| #include "bindings/core/v8/ScriptValue.h"
|
| #include "bindings/core/v8/V8Binding.h"
|
| #include "bindings/modules/v8/V8Response.h"
|
| -#include "core/dom/ExceptionCode.h"
|
| #include "core/dom/ExecutionContext.h"
|
| #include "core/inspector/ConsoleMessage.h"
|
| +#include "core/inspector/ConsoleTypes.h"
|
| #include "core/streams/Stream.h"
|
| #include "modules/fetch/BodyStreamBuffer.h"
|
| #include "modules/fetch/BytesConsumer.h"
|
| #include "modules/serviceworkers/ServiceWorkerGlobalScopeClient.h"
|
| -#include "platform/RuntimeEnabledFeatures.h"
|
| +#include "modules/serviceworkers/WaitUntilObserver.h"
|
| #include "public/platform/modules/serviceworker/WebServiceWorkerResponse.h"
|
| -#include "wtf/Assertions.h"
|
| -#include "wtf/RefPtr.h"
|
| -#include <v8.h>
|
|
|
| namespace blink {
|
| namespace {
|
| @@ -55,7 +51,7 @@ const String getMessageForResponseError(WebServiceWorkerResponseError error,
|
| "is not no-cors";
|
| break;
|
| case WebServiceWorkerResponseErrorResponseTypeNotBasicOrDefault:
|
| - ASSERT_NOT_REACHED();
|
| + NOTREACHED();
|
| break;
|
| case WebServiceWorkerResponseErrorBodyUsed:
|
| errorMessage = errorMessage +
|
| @@ -145,55 +141,9 @@ class NoopLoaderClient final
|
|
|
| } // namespace
|
|
|
| -class RespondWithObserver::ThenFunction final : public ScriptFunction {
|
| - public:
|
| - enum ResolveType {
|
| - Fulfilled,
|
| - Rejected,
|
| - };
|
| -
|
| - static v8::Local<v8::Function> createFunction(ScriptState* scriptState,
|
| - RespondWithObserver* observer,
|
| - ResolveType type) {
|
| - ThenFunction* self = new ThenFunction(scriptState, observer, type);
|
| - return self->bindToV8Function();
|
| - }
|
| -
|
| - DEFINE_INLINE_VIRTUAL_TRACE() {
|
| - visitor->trace(m_observer);
|
| - ScriptFunction::trace(visitor);
|
| - }
|
| -
|
| - private:
|
| - ThenFunction(ScriptState* scriptState,
|
| - RespondWithObserver* observer,
|
| - ResolveType type)
|
| - : ScriptFunction(scriptState),
|
| - m_observer(observer),
|
| - m_resolveType(type) {}
|
| -
|
| - ScriptValue call(ScriptValue value) override {
|
| - ASSERT(m_observer);
|
| - ASSERT(m_resolveType == Fulfilled || m_resolveType == Rejected);
|
| - if (m_resolveType == Rejected) {
|
| - m_observer->responseWasRejected(
|
| - WebServiceWorkerResponseErrorPromiseRejected);
|
| - value =
|
| - ScriptPromise::reject(value.getScriptState(), value).getScriptValue();
|
| - } else {
|
| - m_observer->responseWasFulfilled(value);
|
| - }
|
| - m_observer = nullptr;
|
| - return value;
|
| - }
|
| -
|
| - Member<RespondWithObserver> m_observer;
|
| - ResolveType m_resolveType;
|
| -};
|
| -
|
| -RespondWithObserver::~RespondWithObserver() {}
|
| +FetchRespondWithObserver::~FetchRespondWithObserver() {}
|
|
|
| -RespondWithObserver* RespondWithObserver::create(
|
| +FetchRespondWithObserver* FetchRespondWithObserver::create(
|
| ExecutionContext* context,
|
| int fetchEventID,
|
| const KURL& requestURL,
|
| @@ -202,25 +152,14 @@ RespondWithObserver* RespondWithObserver::create(
|
| WebURLRequest::FrameType frameType,
|
| WebURLRequest::RequestContext requestContext,
|
| WaitUntilObserver* observer) {
|
| - return new RespondWithObserver(context, fetchEventID, requestURL, requestMode,
|
| - redirectMode, frameType, requestContext,
|
| - observer);
|
| + return new FetchRespondWithObserver(context, fetchEventID, requestURL,
|
| + requestMode, redirectMode, frameType,
|
| + requestContext, observer);
|
| }
|
|
|
| -void RespondWithObserver::contextDestroyed(ExecutionContext*) {
|
| - if (m_observer) {
|
| - DCHECK_EQ(Pending, m_state);
|
| - m_observer.clear();
|
| - }
|
| - m_state = Done;
|
| -}
|
| -
|
| -void RespondWithObserver::willDispatchEvent() {
|
| - m_eventDispatchTime = WTF::currentTime();
|
| -}
|
| -
|
| -void RespondWithObserver::didDispatchEvent(DispatchEventResult dispatchResult) {
|
| - ASSERT(getExecutionContext());
|
| +void FetchRespondWithObserver::didDispatchEvent(
|
| + DispatchEventResult dispatchResult) {
|
| + DCHECK(getExecutionContext());
|
| if (m_state != Initial)
|
| return;
|
|
|
| @@ -231,30 +170,14 @@ void RespondWithObserver::didDispatchEvent(DispatchEventResult dispatchResult) {
|
| }
|
|
|
| ServiceWorkerGlobalScopeClient::from(getExecutionContext())
|
| - ->respondToFetchEvent(m_fetchEventID, m_eventDispatchTime);
|
| + ->respondToFetchEvent(m_eventID, m_eventDispatchTime);
|
| m_state = Done;
|
| m_observer.clear();
|
| }
|
|
|
| -void RespondWithObserver::respondWith(ScriptState* scriptState,
|
| - ScriptPromise scriptPromise,
|
| - ExceptionState& exceptionState) {
|
| - if (m_state != Initial) {
|
| - exceptionState.throwDOMException(
|
| - InvalidStateError, "The fetch event has already been responded to.");
|
| - return;
|
| - }
|
| -
|
| - m_state = Pending;
|
| - m_observer->incrementPendingActivity();
|
| - scriptPromise.then(
|
| - ThenFunction::createFunction(scriptState, this, ThenFunction::Fulfilled),
|
| - ThenFunction::createFunction(scriptState, this, ThenFunction::Rejected));
|
| -}
|
| -
|
| -void RespondWithObserver::responseWasRejected(
|
| +void FetchRespondWithObserver::responseWasRejected(
|
| WebServiceWorkerResponseError error) {
|
| - ASSERT(getExecutionContext());
|
| + DCHECK(getExecutionContext());
|
| getExecutionContext()->addConsoleMessage(
|
| ConsoleMessage::create(JSMessageSource, WarningMessageLevel,
|
| getMessageForResponseError(error, m_requestURL)));
|
| @@ -264,14 +187,12 @@ void RespondWithObserver::responseWasRejected(
|
| WebServiceWorkerResponse webResponse;
|
| webResponse.setError(error);
|
| ServiceWorkerGlobalScopeClient::from(getExecutionContext())
|
| - ->respondToFetchEvent(m_fetchEventID, webResponse, m_eventDispatchTime);
|
| - m_state = Done;
|
| - m_observer->decrementPendingActivity();
|
| - m_observer.clear();
|
| + ->respondToFetchEvent(m_eventID, webResponse, m_eventDispatchTime);
|
| + RespondWithObserver::responseWasRejected(error);
|
| }
|
|
|
| -void RespondWithObserver::responseWasFulfilled(const ScriptValue& value) {
|
| - ASSERT(getExecutionContext());
|
| +void FetchRespondWithObserver::responseWasFulfilled(const ScriptValue& value) {
|
| + DCHECK(getExecutionContext());
|
| if (!V8Response::hasInstance(value.v8Value(),
|
| toIsolate(getExecutionContext()))) {
|
| responseWasRejected(WebServiceWorkerResponseErrorNoV8Instance);
|
| @@ -352,13 +273,11 @@ void RespondWithObserver::responseWasFulfilled(const ScriptValue& value) {
|
| }
|
| }
|
| ServiceWorkerGlobalScopeClient::from(getExecutionContext())
|
| - ->respondToFetchEvent(m_fetchEventID, webResponse, m_eventDispatchTime);
|
| - m_state = Done;
|
| - m_observer->decrementPendingActivity();
|
| - m_observer.clear();
|
| + ->respondToFetchEvent(m_eventID, webResponse, m_eventDispatchTime);
|
| + RespondWithObserver::responseWasFulfilled(value);
|
| }
|
|
|
| -RespondWithObserver::RespondWithObserver(
|
| +FetchRespondWithObserver::FetchRespondWithObserver(
|
| ExecutionContext* context,
|
| int fetchEventID,
|
| const KURL& requestURL,
|
| @@ -367,19 +286,15 @@ RespondWithObserver::RespondWithObserver(
|
| WebURLRequest::FrameType frameType,
|
| WebURLRequest::RequestContext requestContext,
|
| WaitUntilObserver* observer)
|
| - : ContextLifecycleObserver(context),
|
| - m_fetchEventID(fetchEventID),
|
| + : RespondWithObserver(context, fetchEventID, observer),
|
| m_requestURL(requestURL),
|
| m_requestMode(requestMode),
|
| m_redirectMode(redirectMode),
|
| m_frameType(frameType),
|
| - m_requestContext(requestContext),
|
| - m_state(Initial),
|
| - m_observer(observer) {}
|
| + m_requestContext(requestContext) {}
|
|
|
| -DEFINE_TRACE(RespondWithObserver) {
|
| - visitor->trace(m_observer);
|
| - ContextLifecycleObserver::trace(visitor);
|
| +DEFINE_TRACE(FetchRespondWithObserver) {
|
| + RespondWithObserver::trace(visitor);
|
| }
|
|
|
| } // namespace blink
|
|
|