| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/FetchEvent.h" | 5 #include "modules/serviceworkers/FetchEvent.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ScriptState.h" | 7 #include "bindings/core/v8/ScriptState.h" |
| 8 #include "bindings/core/v8/ToV8.h" | 8 #include "bindings/core/v8/ToV8.h" |
| 9 #include "bindings/core/v8/V8HiddenValue.h" | 9 #include "bindings/core/v8/V8HiddenValue.h" |
| 10 #include "modules/fetch/BytesConsumerForDataConsumerHandle.h" | 10 #include "modules/fetch/BytesConsumerForDataConsumerHandle.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 return EventNames::FetchEvent; | 64 return EventNames::FetchEvent; |
| 65 } | 65 } |
| 66 | 66 |
| 67 FetchEvent::FetchEvent(ScriptState* scriptState, | 67 FetchEvent::FetchEvent(ScriptState* scriptState, |
| 68 const AtomicString& type, | 68 const AtomicString& type, |
| 69 const FetchEventInit& initializer, | 69 const FetchEventInit& initializer, |
| 70 RespondWithObserver* respondWithObserver, | 70 RespondWithObserver* respondWithObserver, |
| 71 WaitUntilObserver* waitUntilObserver, | 71 WaitUntilObserver* waitUntilObserver, |
| 72 bool navigationPreloadSent) | 72 bool navigationPreloadSent) |
| 73 : ExtendableEvent(type, initializer, waitUntilObserver), | 73 : ExtendableEvent(type, initializer, waitUntilObserver), |
| 74 m_scriptState(scriptState), | |
| 75 m_observer(respondWithObserver), | 74 m_observer(respondWithObserver), |
| 76 m_preloadResponseProperty(new PreloadResponseProperty( | 75 m_preloadResponseProperty(new PreloadResponseProperty( |
| 77 scriptState->getExecutionContext(), | 76 scriptState->getExecutionContext(), |
| 78 this, | 77 this, |
| 79 PreloadResponseProperty::PreloadResponse)) { | 78 PreloadResponseProperty::PreloadResponse)) { |
| 80 if (!navigationPreloadSent) { | 79 if (!navigationPreloadSent) { |
| 81 // TODO(horo): This behavior is still under the spec discussion. | 80 // TODO(horo): This behavior is still under the spec discussion. |
| 82 // https://github.com/w3c/ServiceWorker/issues/920#issuecomment-255874864 | 81 // https://github.com/w3c/ServiceWorker/issues/920#issuecomment-255874864 |
| 83 m_preloadResponseProperty->resolve(nullptr); | 82 m_preloadResponseProperty->resolve(nullptr); |
| 84 } | 83 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 103 V8HiddenValue::setHiddenValue( | 102 V8HiddenValue::setHiddenValue( |
| 104 scriptState, event.As<v8::Object>(), | 103 scriptState, event.As<v8::Object>(), |
| 105 V8HiddenValue::requestInFetchEvent(scriptState->isolate()), request); | 104 V8HiddenValue::requestInFetchEvent(scriptState->isolate()), request); |
| 106 // From the same reason as above, setHiddenValue can return false. | 105 // From the same reason as above, setHiddenValue can return false. |
| 107 // TODO(yhirano): Add an assertion that it returns true once the | 106 // TODO(yhirano): Add an assertion that it returns true once the |
| 108 // graceful shutdown mechanism is introduced. | 107 // graceful shutdown mechanism is introduced. |
| 109 } | 108 } |
| 110 } | 109 } |
| 111 | 110 |
| 112 void FetchEvent::onNavigationPreloadResponse( | 111 void FetchEvent::onNavigationPreloadResponse( |
| 112 ScriptState* scriptState, |
| 113 std::unique_ptr<WebServiceWorkerResponse> response, | 113 std::unique_ptr<WebServiceWorkerResponse> response, |
| 114 std::unique_ptr<WebDataConsumerHandle> dataConsumeHandle) { | 114 std::unique_ptr<WebDataConsumerHandle> dataConsumeHandle) { |
| 115 if (!m_scriptState->contextIsValid()) | 115 if (!scriptState->contextIsValid()) |
| 116 return; | 116 return; |
| 117 DCHECK(m_preloadResponseProperty); | 117 DCHECK(m_preloadResponseProperty); |
| 118 ScriptState::Scope scope(m_scriptState.get()); | 118 ScriptState::Scope scope(scriptState); |
| 119 FetchResponseData* responseData = | 119 FetchResponseData* responseData = FetchResponseData::createWithBuffer( |
| 120 FetchResponseData::createWithBuffer(new BodyStreamBuffer( | 120 new BodyStreamBuffer(scriptState, new BytesConsumerForDataConsumerHandle( |
| 121 m_scriptState.get(), new BytesConsumerForDataConsumerHandle( | 121 scriptState->getExecutionContext(), |
| 122 m_scriptState->getExecutionContext(), | 122 std::move(dataConsumeHandle)))); |
| 123 std::move(dataConsumeHandle)))); | |
| 124 responseData->setURL(response->url()); | 123 responseData->setURL(response->url()); |
| 125 responseData->setStatus(response->status()); | 124 responseData->setStatus(response->status()); |
| 126 responseData->setStatusMessage(response->statusText()); | 125 responseData->setStatusMessage(response->statusText()); |
| 127 responseData->setResponseTime(response->responseTime()); | 126 responseData->setResponseTime(response->responseTime()); |
| 128 for (const auto& header : response->headers()) | 127 for (const auto& header : response->headers()) |
| 129 responseData->headerList()->append(header.key, header.value); | 128 responseData->headerList()->append(header.key, header.value); |
| 130 FetchResponseData* taintedResponse = | 129 FetchResponseData* taintedResponse = |
| 131 responseData->createBasicFilteredResponse(); | 130 responseData->createBasicFilteredResponse(); |
| 132 m_preloadResponseProperty->resolve( | 131 m_preloadResponseProperty->resolve( |
| 133 Response::create(m_scriptState->getExecutionContext(), taintedResponse)); | 132 Response::create(scriptState->getExecutionContext(), taintedResponse)); |
| 134 } | 133 } |
| 135 | 134 |
| 136 void FetchEvent::onNavigationPreloadError( | 135 void FetchEvent::onNavigationPreloadError( |
| 136 ScriptState* scriptState, |
| 137 std::unique_ptr<WebServiceWorkerError> error) { | 137 std::unique_ptr<WebServiceWorkerError> error) { |
| 138 if (!m_scriptState->contextIsValid()) | 138 if (!scriptState->contextIsValid()) |
| 139 return; | 139 return; |
| 140 DCHECK(m_preloadResponseProperty); | 140 DCHECK(m_preloadResponseProperty); |
| 141 m_preloadResponseProperty->reject( | 141 m_preloadResponseProperty->reject( |
| 142 ServiceWorkerError::take(nullptr, *error.get())); | 142 ServiceWorkerError::take(nullptr, *error.get())); |
| 143 } | 143 } |
| 144 | 144 |
| 145 DEFINE_TRACE(FetchEvent) { | 145 DEFINE_TRACE(FetchEvent) { |
| 146 visitor->trace(m_observer); | 146 visitor->trace(m_observer); |
| 147 visitor->trace(m_request); | 147 visitor->trace(m_request); |
| 148 visitor->trace(m_preloadResponseProperty); | 148 visitor->trace(m_preloadResponseProperty); |
| 149 ExtendableEvent::trace(visitor); | 149 ExtendableEvent::trace(visitor); |
| 150 } | 150 } |
| 151 | 151 |
| 152 } // namespace blink | 152 } // namespace blink |
| OLD | NEW |