| 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" |
| 11 #include "modules/fetch/Request.h" | 11 #include "modules/fetch/Request.h" |
| 12 #include "modules/fetch/Response.h" | 12 #include "modules/fetch/Response.h" |
| 13 #include "modules/serviceworkers/ServiceWorkerError.h" | 13 #include "modules/serviceworkers/ServiceWorkerError.h" |
| 14 #include "modules/serviceworkers/ServiceWorkerGlobalScope.h" | 14 #include "modules/serviceworkers/ServiceWorkerGlobalScope.h" |
| 15 #include "public/platform/WebURLResponse.h" |
| 15 #include "public/platform/modules/serviceworker/WebServiceWorkerError.h" | 16 #include "public/platform/modules/serviceworker/WebServiceWorkerError.h" |
| 16 #include "public/platform/modules/serviceworker/WebServiceWorkerResponse.h" | |
| 17 #include "wtf/PtrUtil.h" | 17 #include "wtf/PtrUtil.h" |
| 18 #include "wtf/RefPtr.h" | 18 #include "wtf/RefPtr.h" |
| 19 | 19 |
| 20 namespace blink { | 20 namespace blink { |
| 21 | 21 |
| 22 FetchEvent* FetchEvent::create(ScriptState* scriptState, | 22 FetchEvent* FetchEvent::create(ScriptState* scriptState, |
| 23 const AtomicString& type, | 23 const AtomicString& type, |
| 24 const FetchEventInit& initializer) { | 24 const FetchEventInit& initializer) { |
| 25 return new FetchEvent(scriptState, type, initializer, nullptr, nullptr, | 25 return new FetchEvent(scriptState, type, initializer, nullptr, nullptr, |
| 26 false); | 26 false); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 scriptState, event.As<v8::Object>(), | 100 scriptState, event.As<v8::Object>(), |
| 101 V8HiddenValue::requestInFetchEvent(scriptState->isolate()), request); | 101 V8HiddenValue::requestInFetchEvent(scriptState->isolate()), request); |
| 102 // From the same reason as above, setHiddenValue can return false. | 102 // From the same reason as above, setHiddenValue can return false. |
| 103 // TODO(yhirano): Add an assertion that it returns true once the | 103 // TODO(yhirano): Add an assertion that it returns true once the |
| 104 // graceful shutdown mechanism is introduced. | 104 // graceful shutdown mechanism is introduced. |
| 105 } | 105 } |
| 106 } | 106 } |
| 107 | 107 |
| 108 void FetchEvent::onNavigationPreloadResponse( | 108 void FetchEvent::onNavigationPreloadResponse( |
| 109 ScriptState* scriptState, | 109 ScriptState* scriptState, |
| 110 std::unique_ptr<WebServiceWorkerResponse> response, | 110 std::unique_ptr<WebURLResponse> response, |
| 111 std::unique_ptr<WebDataConsumerHandle> dataConsumeHandle) { | 111 std::unique_ptr<WebDataConsumerHandle> dataConsumeHandle) { |
| 112 if (!scriptState->contextIsValid()) | 112 if (!scriptState->contextIsValid()) |
| 113 return; | 113 return; |
| 114 DCHECK(m_preloadResponseProperty); | 114 DCHECK(m_preloadResponseProperty); |
| 115 ScriptState::Scope scope(scriptState); | 115 ScriptState::Scope scope(scriptState); |
| 116 FetchResponseData* responseData = FetchResponseData::createWithBuffer( | 116 FetchResponseData* responseData = FetchResponseData::createWithBuffer( |
| 117 new BodyStreamBuffer(scriptState, new BytesConsumerForDataConsumerHandle( | 117 new BodyStreamBuffer(scriptState, new BytesConsumerForDataConsumerHandle( |
| 118 scriptState->getExecutionContext(), | 118 scriptState->getExecutionContext(), |
| 119 std::move(dataConsumeHandle)))); | 119 std::move(dataConsumeHandle)))); |
| 120 const WebVector<WebURL>& webURLList = response->urlList(); | |
| 121 // Navigation preload doesn't support redirect. | |
| 122 DCHECK_EQ(1u, webURLList.size()); | |
| 123 Vector<KURL> urlList(1); | 120 Vector<KURL> urlList(1); |
| 124 urlList[0] = webURLList[0]; | 121 urlList[0] = response->url(); |
| 125 responseData->setURLList(urlList); | 122 responseData->setURLList(urlList); |
| 126 responseData->setStatus(response->status()); | 123 responseData->setStatus(response->httpStatusCode()); |
| 127 responseData->setStatusMessage(response->statusText()); | 124 responseData->setStatusMessage(response->httpStatusText()); |
| 128 responseData->setResponseTime(response->responseTime()); | 125 responseData->setResponseTime(response->toResourceResponse().responseTime()); |
| 129 for (const auto& header : response->headers()) | 126 const HTTPHeaderMap& headers( |
| 127 response->toResourceResponse().httpHeaderFields()); |
| 128 for (const auto& header : headers) { |
| 130 responseData->headerList()->append(header.key, header.value); | 129 responseData->headerList()->append(header.key, header.value); |
| 130 } |
| 131 FetchResponseData* taintedResponse = | 131 FetchResponseData* taintedResponse = |
| 132 responseData->createBasicFilteredResponse(); | 132 responseData->createBasicFilteredResponse(); |
| 133 m_preloadResponseProperty->resolve( | 133 m_preloadResponseProperty->resolve( |
| 134 Response::create(scriptState->getExecutionContext(), taintedResponse)); | 134 Response::create(scriptState->getExecutionContext(), taintedResponse)); |
| 135 } | 135 } |
| 136 | 136 |
| 137 void FetchEvent::onNavigationPreloadError( | 137 void FetchEvent::onNavigationPreloadError( |
| 138 ScriptState* scriptState, | 138 ScriptState* scriptState, |
| 139 std::unique_ptr<WebServiceWorkerError> error) { | 139 std::unique_ptr<WebServiceWorkerError> error) { |
| 140 if (!scriptState->contextIsValid()) | 140 if (!scriptState->contextIsValid()) |
| 141 return; | 141 return; |
| 142 DCHECK(m_preloadResponseProperty); | 142 DCHECK(m_preloadResponseProperty); |
| 143 m_preloadResponseProperty->reject( | 143 m_preloadResponseProperty->reject( |
| 144 ServiceWorkerError::take(nullptr, *error.get())); | 144 ServiceWorkerError::take(nullptr, *error.get())); |
| 145 } | 145 } |
| 146 | 146 |
| 147 DEFINE_TRACE(FetchEvent) { | 147 DEFINE_TRACE(FetchEvent) { |
| 148 visitor->trace(m_observer); | 148 visitor->trace(m_observer); |
| 149 visitor->trace(m_request); | 149 visitor->trace(m_request); |
| 150 visitor->trace(m_preloadResponseProperty); | 150 visitor->trace(m_preloadResponseProperty); |
| 151 ExtendableEvent::trace(visitor); | 151 ExtendableEvent::trace(visitor); |
| 152 } | 152 } |
| 153 | 153 |
| 154 } // namespace blink | 154 } // namespace blink |
| OLD | NEW |