| Index: third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp
 | 
| diff --git a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp b/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp
 | 
| index 4d347a7f9e40dde6a1f9786c12944a801fe689f1..9ba069ad2b5d617cd5328f2a9525c9f221e3112f 100644
 | 
| --- a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp
 | 
| +++ b/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp
 | 
| @@ -16,52 +16,6 @@
 | 
|  
 | 
|  namespace blink {
 | 
|  
 | 
| -class RespondWithObserver::ThenFunction final : public ScriptFunction {
 | 
| - public:
 | 
| -  enum ResolveType {
 | 
| -    kFulfilled,
 | 
| -    kRejected,
 | 
| -  };
 | 
| -
 | 
| -  static v8::Local<v8::Function> CreateFunction(ScriptState* script_state,
 | 
| -                                                RespondWithObserver* observer,
 | 
| -                                                ResolveType type) {
 | 
| -    ThenFunction* self = new ThenFunction(script_state, observer, type);
 | 
| -    return self->BindToV8Function();
 | 
| -  }
 | 
| -
 | 
| -  DEFINE_INLINE_VIRTUAL_TRACE() {
 | 
| -    visitor->Trace(observer_);
 | 
| -    ScriptFunction::Trace(visitor);
 | 
| -  }
 | 
| -
 | 
| - private:
 | 
| -  ThenFunction(ScriptState* script_state,
 | 
| -               RespondWithObserver* observer,
 | 
| -               ResolveType type)
 | 
| -      : ScriptFunction(script_state),
 | 
| -        observer_(observer),
 | 
| -        resolve_type_(type) {}
 | 
| -
 | 
| -  ScriptValue Call(ScriptValue value) override {
 | 
| -    DCHECK(observer_);
 | 
| -    DCHECK(resolve_type_ == kFulfilled || resolve_type_ == kRejected);
 | 
| -    if (resolve_type_ == kRejected) {
 | 
| -      observer_->ResponseWasRejected(
 | 
| -          kWebServiceWorkerResponseErrorPromiseRejected);
 | 
| -      value =
 | 
| -          ScriptPromise::Reject(value.GetScriptState(), value).GetScriptValue();
 | 
| -    } else {
 | 
| -      observer_->ResponseWasFulfilled(value);
 | 
| -    }
 | 
| -    observer_ = nullptr;
 | 
| -    return value;
 | 
| -  }
 | 
| -
 | 
| -  Member<RespondWithObserver> observer_;
 | 
| -  ResolveType resolve_type_;
 | 
| -};
 | 
| -
 | 
|  void RespondWithObserver::ContextDestroyed(ExecutionContext*) {
 | 
|    if (observer_) {
 | 
|      DCHECK_EQ(kPending, state_);
 | 
| @@ -80,13 +34,12 @@ void RespondWithObserver::DidDispatchEvent(
 | 
|    if (state_ != kInitial)
 | 
|      return;
 | 
|  
 | 
| -  if (dispatch_result != DispatchEventResult::kNotCanceled) {
 | 
| -    observer_->IncrementPendingActivity();
 | 
| -    ResponseWasRejected(kWebServiceWorkerResponseErrorDefaultPrevented);
 | 
| -    return;
 | 
| +  if (dispatch_result == DispatchEventResult::kNotCanceled) {
 | 
| +    OnNoResponse();
 | 
| +  } else {
 | 
| +    OnResponseRejected(kWebServiceWorkerResponseErrorDefaultPrevented);
 | 
|    }
 | 
|  
 | 
| -  OnNoResponse();
 | 
|    state_ = kDone;
 | 
|    observer_.Clear();
 | 
|  }
 | 
| @@ -101,25 +54,25 @@ void RespondWithObserver::RespondWith(ScriptState* script_state,
 | 
|    }
 | 
|  
 | 
|    state_ = kPending;
 | 
| -  observer_->IncrementPendingActivity();
 | 
| -  script_promise.Then(ThenFunction::CreateFunction(script_state, this,
 | 
| -                                                   ThenFunction::kFulfilled),
 | 
| -                      ThenFunction::CreateFunction(script_state, this,
 | 
| -                                                   ThenFunction::kRejected));
 | 
| +  observer_->WaitUntil(
 | 
| +      script_state, script_promise, exception_state,
 | 
| +      WTF::Bind(&RespondWithObserver::ResponseWasFulfilled,
 | 
| +                WrapPersistent(this)),
 | 
| +      WTF::Bind(&RespondWithObserver::ResponseWasRejected, WrapPersistent(this),
 | 
| +                kWebServiceWorkerResponseErrorPromiseRejected));
 | 
|  }
 | 
|  
 | 
|  void RespondWithObserver::ResponseWasRejected(
 | 
| -    WebServiceWorkerResponseError error) {
 | 
| +    WebServiceWorkerResponseError error,
 | 
| +    const ScriptValue& value) {
 | 
|    OnResponseRejected(error);
 | 
|    state_ = kDone;
 | 
| -  observer_->DecrementPendingActivity();
 | 
|    observer_.Clear();
 | 
|  }
 | 
|  
 | 
|  void RespondWithObserver::ResponseWasFulfilled(const ScriptValue& value) {
 | 
|    OnResponseFulfilled(value);
 | 
|    state_ = kDone;
 | 
| -  observer_->DecrementPendingActivity();
 | 
|    observer_.Clear();
 | 
|  }
 | 
|  
 | 
| 
 |