Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "modules/serviceworkers/ForeignFetchEvent.h" | 5 #include "modules/serviceworkers/ForeignFetchEvent.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ToV8.h" | |
| 8 #include "bindings/core/v8/V8HiddenValue.h" | |
| 7 #include "modules/fetch/Request.h" | 9 #include "modules/fetch/Request.h" |
| 8 #include "modules/serviceworkers/ServiceWorkerGlobalScope.h" | 10 #include "modules/serviceworkers/ServiceWorkerGlobalScope.h" |
| 9 #include "wtf/RefPtr.h" | 11 #include "wtf/RefPtr.h" |
| 10 | 12 |
| 11 namespace blink { | 13 namespace blink { |
| 12 | 14 |
| 13 ForeignFetchEvent* ForeignFetchEvent::create() | 15 ForeignFetchEvent* ForeignFetchEvent::create() |
| 14 { | 16 { |
| 15 return new ForeignFetchEvent(); | 17 return new ForeignFetchEvent(); |
| 16 } | 18 } |
| 17 | 19 |
| 18 ForeignFetchEvent* ForeignFetchEvent::create(const AtomicString& type, const For eignFetchEventInit& initializer) | 20 ForeignFetchEvent* ForeignFetchEvent::create(ScriptState* scriptState, const Ato micString& type, const ForeignFetchEventInit& initializer) |
| 19 { | 21 { |
| 20 return new ForeignFetchEvent(type, initializer, nullptr); | 22 return new ForeignFetchEvent(scriptState, type, initializer, nullptr); |
| 21 } | 23 } |
| 22 | 24 |
| 23 ForeignFetchEvent* ForeignFetchEvent::create(const AtomicString& type, const For eignFetchEventInit& initializer, ForeignFetchRespondWithObserver* observer) | 25 ForeignFetchEvent* ForeignFetchEvent::create(ScriptState* scriptState, const Ato micString& type, const ForeignFetchEventInit& initializer, ForeignFetchRespondWi thObserver* observer) |
| 24 { | 26 { |
| 25 return new ForeignFetchEvent(type, initializer, observer); | 27 return new ForeignFetchEvent(scriptState, type, initializer, observer); |
| 26 } | 28 } |
| 27 | 29 |
| 28 Request* ForeignFetchEvent::request() const | 30 Request* ForeignFetchEvent::request() const |
| 29 { | 31 { |
| 30 return m_request; | 32 return m_request; |
| 31 } | 33 } |
| 32 | 34 |
| 33 String ForeignFetchEvent::origin() const | 35 String ForeignFetchEvent::origin() const |
| 34 { | 36 { |
| 35 return m_origin; | 37 return m_origin; |
| 36 } | 38 } |
| 37 | 39 |
| 38 void ForeignFetchEvent::respondWith(ScriptState* scriptState, ScriptPromise scri ptPromise, ExceptionState& exceptionState) | 40 void ForeignFetchEvent::respondWith(ScriptState* scriptState, ScriptPromise scri ptPromise, ExceptionState& exceptionState) |
| 39 { | 41 { |
| 40 stopImmediatePropagation(); | 42 stopImmediatePropagation(); |
| 41 if (m_observer) | 43 if (m_observer) |
| 42 m_observer->respondWith(scriptState, scriptPromise, exceptionState); | 44 m_observer->respondWith(scriptState, scriptPromise, exceptionState); |
| 43 } | 45 } |
| 44 | 46 |
| 45 const AtomicString& ForeignFetchEvent::interfaceName() const | 47 const AtomicString& ForeignFetchEvent::interfaceName() const |
| 46 { | 48 { |
| 47 return EventNames::ForeignFetchEvent; | 49 return EventNames::ForeignFetchEvent; |
| 48 } | 50 } |
| 49 | 51 |
| 50 ForeignFetchEvent::ForeignFetchEvent() | 52 ForeignFetchEvent::ForeignFetchEvent() |
| 51 { | 53 { |
| 52 } | 54 } |
| 53 | 55 |
| 54 ForeignFetchEvent::ForeignFetchEvent(const AtomicString& type, const ForeignFetc hEventInit& initializer, ForeignFetchRespondWithObserver* observer) | 56 ForeignFetchEvent::ForeignFetchEvent(ScriptState* scriptState, const AtomicStrin g& type, const ForeignFetchEventInit& initializer, ForeignFetchRespondWithObserv er* observer) |
| 55 : ExtendableEvent(type, initializer) | 57 : ExtendableEvent(type, initializer) |
| 56 , m_observer(observer) | 58 , m_observer(observer) |
| 57 { | 59 { |
| 58 if (initializer.hasRequest()) | |
| 59 m_request = initializer.request(); | |
| 60 if (initializer.hasOrigin()) | 60 if (initializer.hasOrigin()) |
| 61 m_origin = initializer.origin(); | 61 m_origin = initializer.origin(); |
| 62 if (initializer.hasRequest()) { | |
| 63 m_request = initializer.request(); | |
| 64 ScriptState::Scope scope(scriptState); | |
| 65 m_request = initializer.request(); | |
| 66 v8::Local<v8::Value> request = toV8(m_request, scriptState); | |
| 67 v8::Local<v8::Value> event = toV8(this, scriptState); | |
| 68 if (event.IsEmpty()) { | |
| 69 // |toV8| can return an empty handle when the worker is terminating. | |
| 70 // We don't want the renderer to crash in such cases. | |
| 71 // TODO(yhirano): Replace this branch with an assertion. | |
| 72 return; | |
| 73 } | |
| 74 DCHECK(event->IsObject()); | |
| 75 // Sets an hidden value in order to teach V8 the dependency from | |
| 76 // the event to the request. | |
| 77 V8HiddenValue::setHiddenValue(scriptState, event.As<v8::Object>(), V8Hid denValue::requestInFetchEvent(scriptState->isolate()), request); | |
| 78 // As written above, we don't check the return value. | |
| 79 // TODO(yhirano): Add an assertion. | |
|
falken
2016/06/02 08:36:32
Similar comments here as in FetchEvent (too bad th
yhirano
2016/06/02 10:10:11
I think it's OK to be duplicated because I will up
| |
| 80 } | |
| 62 } | 81 } |
| 63 | 82 |
| 64 DEFINE_TRACE(ForeignFetchEvent) | 83 DEFINE_TRACE(ForeignFetchEvent) |
| 65 { | 84 { |
| 66 visitor->trace(m_observer); | 85 visitor->trace(m_observer); |
| 67 visitor->trace(m_request); | 86 visitor->trace(m_request); |
| 68 ExtendableEvent::trace(visitor); | 87 ExtendableEvent::trace(visitor); |
| 69 } | 88 } |
| 70 | 89 |
| 71 } // namespace blink | 90 } // namespace blink |
| OLD | NEW |