Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: third_party/WebKit/Source/modules/serviceworkers/ForeignFetchRespondWithObserver.cpp

Issue 2715663002: ServiceWorker: Factor out FetchEvent related logics from RespondWithObserver. (Closed)
Patch Set: ServiceWorker: Factor out FetchEvent related logics from RespondWithObserver. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/ForeignFetchRespondWithObserver.h" 5 #include "modules/serviceworkers/ForeignFetchRespondWithObserver.h"
6 6
7 #include "modules/fetch/Response.h" 7 #include "modules/fetch/Response.h"
8 #include "modules/serviceworkers/ForeignFetchResponse.h" 8 #include "modules/serviceworkers/ForeignFetchResponse.h"
9 #include "platform/loader/fetch/CrossOriginAccessControl.h" 9 #include "platform/loader/fetch/CrossOriginAccessControl.h"
10 10
11 namespace blink { 11 namespace blink {
12 12
13 ForeignFetchRespondWithObserver* ForeignFetchRespondWithObserver::create( 13 ForeignFetchRespondWithObserver* ForeignFetchRespondWithObserver::create(
14 ExecutionContext* context, 14 ExecutionContext* context,
15 int eventID, 15 int eventID,
16 const KURL& requestURL, 16 const KURL& requestURL,
17 WebURLRequest::FetchRequestMode requestMode, 17 WebURLRequest::FetchRequestMode requestMode,
18 WebURLRequest::FetchRedirectMode redirectMode, 18 WebURLRequest::FetchRedirectMode redirectMode,
19 WebURLRequest::FrameType frameType, 19 WebURLRequest::FrameType frameType,
20 WebURLRequest::RequestContext requestContext, 20 WebURLRequest::RequestContext requestContext,
21 PassRefPtr<SecurityOrigin> requestOrigin, 21 PassRefPtr<SecurityOrigin> requestOrigin,
22 WaitUntilObserver* observer) { 22 WaitUntilObserver* observer) {
23 return new ForeignFetchRespondWithObserver( 23 return new ForeignFetchRespondWithObserver(
24 context, eventID, requestURL, requestMode, redirectMode, frameType, 24 context, eventID, requestURL, requestMode, redirectMode, frameType,
25 requestContext, std::move(requestOrigin), observer); 25 requestContext, std::move(requestOrigin), observer);
26 } 26 }
27 27
28 void ForeignFetchRespondWithObserver::responseWasFulfilled( 28 void ForeignFetchRespondWithObserver::onResponseFulfilled(
29 const ScriptValue& value) { 29 const ScriptValue& value) {
30 ASSERT(getExecutionContext()); 30 ASSERT(getExecutionContext());
31 ExceptionState exceptionState(value.isolate(), ExceptionState::UnknownContext, 31 ExceptionState exceptionState(value.isolate(), ExceptionState::UnknownContext,
32 "ForeignFetchEvent", "respondWith"); 32 "ForeignFetchEvent", "respondWith");
33 ForeignFetchResponse foreignFetchResponse = 33 ForeignFetchResponse foreignFetchResponse =
34 ScriptValue::to<ForeignFetchResponse>(toIsolate(getExecutionContext()), 34 ScriptValue::to<ForeignFetchResponse>(toIsolate(getExecutionContext()),
35 value, exceptionState); 35 value, exceptionState);
36 if (exceptionState.hadException()) { 36 if (exceptionState.hadException()) {
37 exceptionState.clearException(); 37 exceptionState.clearException();
38 responseWasRejected(WebServiceWorkerResponseErrorNoForeignFetchResponse); 38 onResponseRejected(WebServiceWorkerResponseErrorNoForeignFetchResponse);
39 return; 39 return;
40 } 40 }
41 41
42 Response* response = foreignFetchResponse.response(); 42 Response* response = foreignFetchResponse.response();
43 const FetchResponseData* internalResponse = response->response(); 43 const FetchResponseData* internalResponse = response->response();
44 const bool isOpaque = 44 const bool isOpaque =
45 internalResponse->getType() == FetchResponseData::OpaqueType || 45 internalResponse->getType() == FetchResponseData::OpaqueType ||
46 internalResponse->getType() == FetchResponseData::OpaqueRedirectType; 46 internalResponse->getType() == FetchResponseData::OpaqueRedirectType;
47 if (internalResponse->getType() != FetchResponseData::DefaultType) 47 if (internalResponse->getType() != FetchResponseData::DefaultType)
48 internalResponse = internalResponse->internalResponse(); 48 internalResponse = internalResponse->internalResponse();
49 49
50 if (!foreignFetchResponse.hasOrigin()) { 50 if (!foreignFetchResponse.hasOrigin()) {
51 if (foreignFetchResponse.hasHeaders() && 51 if (foreignFetchResponse.hasHeaders() &&
52 !foreignFetchResponse.headers().isEmpty()) { 52 !foreignFetchResponse.headers().isEmpty()) {
53 responseWasRejected( 53 onResponseRejected(
54 WebServiceWorkerResponseErrorForeignFetchHeadersWithoutOrigin); 54 WebServiceWorkerResponseErrorForeignFetchHeadersWithoutOrigin);
55 return; 55 return;
56 } 56 }
57 57
58 // If response isn't already opaque, make it opaque. 58 // If response isn't already opaque, make it opaque.
59 if (!isOpaque) { 59 if (!isOpaque) {
60 FetchResponseData* opaqueData = 60 FetchResponseData* opaqueData =
61 internalResponse->createOpaqueFilteredResponse(); 61 internalResponse->createOpaqueFilteredResponse();
62 response = Response::create(getExecutionContext(), opaqueData); 62 response = Response::create(getExecutionContext(), opaqueData);
63 } 63 }
64 } else if (m_requestOrigin->toString() != foreignFetchResponse.origin()) { 64 } else if (m_requestOrigin->toString() != foreignFetchResponse.origin()) {
65 responseWasRejected( 65 onResponseRejected(
66 WebServiceWorkerResponseErrorForeignFetchMismatchedOrigin); 66 WebServiceWorkerResponseErrorForeignFetchMismatchedOrigin);
67 return; 67 return;
68 } else if (!isOpaque) { 68 } else if (!isOpaque) {
69 HTTPHeaderSet headers; 69 HTTPHeaderSet headers;
70 if (foreignFetchResponse.hasHeaders()) { 70 if (foreignFetchResponse.hasHeaders()) {
71 for (const String& header : foreignFetchResponse.headers()) 71 for (const String& header : foreignFetchResponse.headers())
72 headers.insert(header); 72 headers.insert(header);
73 if (response->response()->getType() == FetchResponseData::CORSType) { 73 if (response->response()->getType() == FetchResponseData::CORSType) {
74 const HTTPHeaderSet& existingHeaders = 74 const HTTPHeaderSet& existingHeaders =
75 response->response()->corsExposedHeaderNames(); 75 response->response()->corsExposedHeaderNames();
76 HTTPHeaderSet headersToRemove; 76 HTTPHeaderSet headersToRemove;
77 for (HTTPHeaderSet::iterator it = headers.begin(); it != headers.end(); 77 for (HTTPHeaderSet::iterator it = headers.begin(); it != headers.end();
78 ++it) { 78 ++it) {
79 if (!existingHeaders.contains(*it)) 79 if (!existingHeaders.contains(*it))
80 headersToRemove.insert(*it); 80 headersToRemove.insert(*it);
81 } 81 }
82 headers.removeAll(headersToRemove); 82 headers.removeAll(headersToRemove);
83 } 83 }
84 } 84 }
85 FetchResponseData* responseData = 85 FetchResponseData* responseData =
86 internalResponse->createCORSFilteredResponse(headers); 86 internalResponse->createCORSFilteredResponse(headers);
87 response = Response::create(getExecutionContext(), responseData); 87 response = Response::create(getExecutionContext(), responseData);
88 } 88 }
89 89
90 RespondWithObserver::responseWasFulfilled( 90 FetchRespondWithObserver::onResponseFulfilled(
91 ScriptValue::from(value.getScriptState(), response)); 91 ScriptValue::from(value.getScriptState(), response));
92 } 92 }
93 93
94 ForeignFetchRespondWithObserver::ForeignFetchRespondWithObserver( 94 ForeignFetchRespondWithObserver::ForeignFetchRespondWithObserver(
95 ExecutionContext* context, 95 ExecutionContext* context,
96 int eventID, 96 int eventID,
97 const KURL& requestURL, 97 const KURL& requestURL,
98 WebURLRequest::FetchRequestMode requestMode, 98 WebURLRequest::FetchRequestMode requestMode,
99 WebURLRequest::FetchRedirectMode redirectMode, 99 WebURLRequest::FetchRedirectMode redirectMode,
100 WebURLRequest::FrameType frameType, 100 WebURLRequest::FrameType frameType,
101 WebURLRequest::RequestContext requestContext, 101 WebURLRequest::RequestContext requestContext,
102 PassRefPtr<SecurityOrigin> requestOrigin, 102 PassRefPtr<SecurityOrigin> requestOrigin,
103 WaitUntilObserver* observer) 103 WaitUntilObserver* observer)
104 : RespondWithObserver(context, 104 : FetchRespondWithObserver(context,
105 eventID, 105 eventID,
106 requestURL, 106 requestURL,
107 requestMode, 107 requestMode,
108 redirectMode, 108 redirectMode,
109 frameType, 109 frameType,
110 requestContext, 110 requestContext,
111 observer), 111 observer),
112 m_requestOrigin(requestOrigin) {} 112 m_requestOrigin(requestOrigin) {}
113 113
114 } // namespace blink 114 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698