Index: third_party/WebKit/Source/modules/serviceworkers/ExtendableEvent.cpp |
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ExtendableEvent.cpp b/third_party/WebKit/Source/modules/serviceworkers/ExtendableEvent.cpp |
index b3aa4da5d83590e6461c62480be5fd65ebe31d13..eecfaa8f6553a77867654ecf396d3fcbd02bc150 100644 |
--- a/third_party/WebKit/Source/modules/serviceworkers/ExtendableEvent.cpp |
+++ b/third_party/WebKit/Source/modules/serviceworkers/ExtendableEvent.cpp |
@@ -52,18 +52,27 @@ ExtendableEvent::~ExtendableEvent() {} |
void ExtendableEvent::waitUntil(ScriptState* script_state, |
ScriptPromise script_promise, |
ExceptionState& exception_state) { |
- if (observer_) |
- observer_->WaitUntil(script_state, script_promise, exception_state); |
+ if (created_by_script_) { |
+ exception_state.ThrowDOMException( |
+ kInvalidStateError, |
+ "Can not call waitUntil on a script constructed ExtendableEvent."); |
+ return; |
+ } |
+ |
+ DCHECK(observer_); |
+ observer_->WaitUntil(script_state, script_promise, exception_state); |
} |
ExtendableEvent::ExtendableEvent(const AtomicString& type, |
const ExtendableEventInit& initializer) |
- : Event(type, initializer) {} |
+ : Event(type, initializer), created_by_script_(true) {} |
ExtendableEvent::ExtendableEvent(const AtomicString& type, |
const ExtendableEventInit& initializer, |
WaitUntilObserver* observer) |
- : Event(type, initializer), observer_(observer) {} |
+ : Event(type, initializer), |
+ created_by_script_(false), |
+ observer_(observer) {} |
const AtomicString& ExtendableEvent::InterfaceName() const { |
return EventNames::ExtendableEvent; |