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

Side by Side Diff: third_party/WebKit/Source/modules/fetch/Response.cpp

Issue 2821443002: Revert of Move ScriptState::GetExecutionContext (Part 5) (Closed)
Patch Set: Revert Created 3 years, 8 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 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/fetch/Response.h" 5 #include "modules/fetch/Response.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include "bindings/core/v8/Dictionary.h" 8 #include "bindings/core/v8/Dictionary.h"
9 #include "bindings/core/v8/ExceptionState.h" 9 #include "bindings/core/v8/ExceptionState.h"
10 #include "bindings/core/v8/ScriptState.h" 10 #include "bindings/core/v8/ScriptState.h"
11 #include "bindings/core/v8/V8ArrayBuffer.h" 11 #include "bindings/core/v8/V8ArrayBuffer.h"
12 #include "bindings/core/v8/V8ArrayBufferView.h" 12 #include "bindings/core/v8/V8ArrayBufferView.h"
13 #include "bindings/core/v8/V8Binding.h" 13 #include "bindings/core/v8/V8Binding.h"
14 #include "bindings/core/v8/V8Blob.h" 14 #include "bindings/core/v8/V8Blob.h"
15 #include "bindings/core/v8/V8FormData.h" 15 #include "bindings/core/v8/V8FormData.h"
16 #include "bindings/core/v8/V8PrivateProperty.h" 16 #include "bindings/core/v8/V8PrivateProperty.h"
17 #include "bindings/core/v8/V8URLSearchParams.h" 17 #include "bindings/core/v8/V8URLSearchParams.h"
18 #include "bindings/modules/v8/ByteStringSequenceSequenceOrByteStringByteStringRe cordOrHeaders.h" 18 #include "bindings/modules/v8/ByteStringSequenceSequenceOrByteStringByteStringRe cordOrHeaders.h"
19 #include "core/dom/DOMArrayBuffer.h" 19 #include "core/dom/DOMArrayBuffer.h"
20 #include "core/dom/DOMArrayBufferView.h" 20 #include "core/dom/DOMArrayBufferView.h"
21 #include "core/dom/ExecutionContext.h"
22 #include "core/dom/URLSearchParams.h" 21 #include "core/dom/URLSearchParams.h"
23 #include "core/fileapi/Blob.h" 22 #include "core/fileapi/Blob.h"
24 #include "core/frame/UseCounter.h" 23 #include "core/frame/UseCounter.h"
25 #include "core/html/FormData.h" 24 #include "core/html/FormData.h"
26 #include "core/streams/ReadableStreamOperations.h" 25 #include "core/streams/ReadableStreamOperations.h"
27 #include "modules/fetch/BlobBytesConsumer.h" 26 #include "modules/fetch/BlobBytesConsumer.h"
28 #include "modules/fetch/BodyStreamBuffer.h" 27 #include "modules/fetch/BodyStreamBuffer.h"
29 #include "modules/fetch/FormDataBytesConsumer.h" 28 #include "modules/fetch/FormDataBytesConsumer.h"
30 #include "modules/fetch/ResponseInit.h" 29 #include "modules/fetch/ResponseInit.h"
31 #include "platform/loader/fetch/FetchUtils.h" 30 #include "platform/loader/fetch/FetchUtils.h"
(...skipping 26 matching lines...) Expand all
58 response->SetResponseTime(web_response.ResponseTime()); 57 response->SetResponseTime(web_response.ResponseTime());
59 response->SetCacheStorageCacheName(web_response.CacheStorageCacheName()); 58 response->SetCacheStorageCacheName(web_response.CacheStorageCacheName());
60 59
61 for (HTTPHeaderMap::const_iterator i = web_response.Headers().begin(), 60 for (HTTPHeaderMap::const_iterator i = web_response.Headers().begin(),
62 end = web_response.Headers().end(); 61 end = web_response.Headers().end();
63 i != end; ++i) { 62 i != end; ++i) {
64 response->HeaderList()->Append(i->key, i->value); 63 response->HeaderList()->Append(i->key, i->value);
65 } 64 }
66 65
67 response->ReplaceBodyStreamBuffer(new BodyStreamBuffer( 66 response->ReplaceBodyStreamBuffer(new BodyStreamBuffer(
68 script_state, new BlobBytesConsumer(ExecutionContext::From(script_state), 67 script_state, new BlobBytesConsumer(script_state->GetExecutionContext(),
69 web_response.GetBlobDataHandle()))); 68 web_response.GetBlobDataHandle())));
70 69
71 // Filter the response according to |webResponse|'s ResponseType. 70 // Filter the response according to |webResponse|'s ResponseType.
72 switch (web_response.ResponseType()) { 71 switch (web_response.ResponseType()) {
73 case kWebServiceWorkerResponseTypeBasic: 72 case kWebServiceWorkerResponseTypeBasic:
74 response = response->CreateBasicFilteredResponse(); 73 response = response->CreateBasicFilteredResponse();
75 break; 74 break;
76 case kWebServiceWorkerResponseTypeCORS: { 75 case kWebServiceWorkerResponseTypeCORS: {
77 HTTPHeaderSet header_names; 76 HTTPHeaderSet header_names;
78 for (const auto& header : web_response.CorsExposedHeaderNames()) 77 for (const auto& header : web_response.CorsExposedHeaderNames())
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 return Create(script_state, nullptr, String(), ResponseInit(), 127 return Create(script_state, nullptr, String(), ResponseInit(),
129 exception_state); 128 exception_state);
130 } 129 }
131 130
132 Response* Response::Create(ScriptState* script_state, 131 Response* Response::Create(ScriptState* script_state,
133 ScriptValue body_value, 132 ScriptValue body_value,
134 const ResponseInit& init, 133 const ResponseInit& init,
135 ExceptionState& exception_state) { 134 ExceptionState& exception_state) {
136 v8::Local<v8::Value> body = body_value.V8Value(); 135 v8::Local<v8::Value> body = body_value.V8Value();
137 v8::Isolate* isolate = script_state->GetIsolate(); 136 v8::Isolate* isolate = script_state->GetIsolate();
138 ExecutionContext* execution_context = ExecutionContext::From(script_state); 137 ExecutionContext* execution_context = script_state->GetExecutionContext();
139 138
140 BodyStreamBuffer* body_buffer = nullptr; 139 BodyStreamBuffer* body_buffer = nullptr;
141 String content_type; 140 String content_type;
142 if (body_value.IsUndefined() || body_value.IsNull()) { 141 if (body_value.IsUndefined() || body_value.IsNull()) {
143 // Note: The IDL processor cannot handle this situation. See 142 // Note: The IDL processor cannot handle this situation. See
144 // https://crbug.com/335871. 143 // https://crbug.com/335871.
145 } else if (V8Blob::hasInstance(body, isolate)) { 144 } else if (V8Blob::hasInstance(body, isolate)) {
146 Blob* blob = V8Blob::toImpl(body.As<v8::Object>()); 145 Blob* blob = V8Blob::toImpl(body.As<v8::Object>());
147 body_buffer = new BodyStreamBuffer( 146 body_buffer = new BodyStreamBuffer(
148 script_state, 147 script_state,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 207
209 // "2. If |init|'s statusText member does not match the Reason-Phrase 208 // "2. If |init|'s statusText member does not match the Reason-Phrase
210 // token production, throw a TypeError." 209 // token production, throw a TypeError."
211 if (!IsValidReasonPhrase(init.statusText())) { 210 if (!IsValidReasonPhrase(init.statusText())) {
212 exception_state.ThrowTypeError("Invalid statusText"); 211 exception_state.ThrowTypeError("Invalid statusText");
213 return nullptr; 212 return nullptr;
214 } 213 }
215 214
216 // "3. Let |r| be a new Response object, associated with a new response, 215 // "3. Let |r| be a new Response object, associated with a new response,
217 // Headers object, and Body object." 216 // Headers object, and Body object."
218 Response* r = new Response(ExecutionContext::From(script_state)); 217 Response* r = new Response(script_state->GetExecutionContext());
219 218
220 // "4. Set |r|'s response's status to |init|'s status member." 219 // "4. Set |r|'s response's status to |init|'s status member."
221 r->response_->SetStatus(init.status()); 220 r->response_->SetStatus(init.status());
222 221
223 // "5. Set |r|'s response's status message to |init|'s statusText member." 222 // "5. Set |r|'s response's status message to |init|'s statusText member."
224 r->response_->SetStatusMessage(AtomicString(init.statusText())); 223 r->response_->SetStatusMessage(AtomicString(init.statusText()));
225 224
226 // "6. If |init|'s headers member is present, run these substeps:" 225 // "6. If |init|'s headers member is present, run these substeps:"
227 if (init.hasHeaders()) { 226 if (init.hasHeaders()) {
228 // "1. Empty |r|'s response's header list." 227 // "1. Empty |r|'s response's header list."
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 276
278 Response* Response::Create(ExecutionContext* context, 277 Response* Response::Create(ExecutionContext* context,
279 FetchResponseData* response) { 278 FetchResponseData* response) {
280 return new Response(context, response); 279 return new Response(context, response);
281 } 280 }
282 281
283 Response* Response::Create(ScriptState* script_state, 282 Response* Response::Create(ScriptState* script_state,
284 const WebServiceWorkerResponse& web_response) { 283 const WebServiceWorkerResponse& web_response) {
285 FetchResponseData* response_data = 284 FetchResponseData* response_data =
286 CreateFetchResponseDataFromWebResponse(script_state, web_response); 285 CreateFetchResponseDataFromWebResponse(script_state, web_response);
287 return new Response(ExecutionContext::From(script_state), response_data); 286 return new Response(script_state->GetExecutionContext(), response_data);
288 } 287 }
289 288
290 Response* Response::error(ScriptState* script_state) { 289 Response* Response::error(ScriptState* script_state) {
291 FetchResponseData* response_data = 290 FetchResponseData* response_data =
292 FetchResponseData::CreateNetworkErrorResponse(); 291 FetchResponseData::CreateNetworkErrorResponse();
293 Response* r = 292 Response* r =
294 new Response(ExecutionContext::From(script_state), response_data); 293 new Response(script_state->GetExecutionContext(), response_data);
295 r->headers_->SetGuard(Headers::kImmutableGuard); 294 r->headers_->SetGuard(Headers::kImmutableGuard);
296 return r; 295 return r;
297 } 296 }
298 297
299 Response* Response::redirect(ScriptState* script_state, 298 Response* Response::redirect(ScriptState* script_state,
300 const String& url, 299 const String& url,
301 unsigned short status, 300 unsigned short status,
302 ExceptionState& exception_state) { 301 ExceptionState& exception_state) {
303 KURL parsed_url = ExecutionContext::From(script_state)->CompleteURL(url); 302 KURL parsed_url = script_state->GetExecutionContext()->CompleteURL(url);
304 if (!parsed_url.IsValid()) { 303 if (!parsed_url.IsValid()) {
305 exception_state.ThrowTypeError("Failed to parse URL from " + url); 304 exception_state.ThrowTypeError("Failed to parse URL from " + url);
306 return nullptr; 305 return nullptr;
307 } 306 }
308 307
309 if (!NetworkUtils::IsRedirectResponseCode(status)) { 308 if (!NetworkUtils::IsRedirectResponseCode(status)) {
310 exception_state.ThrowRangeError("Invalid status code"); 309 exception_state.ThrowRangeError("Invalid status code");
311 return nullptr; 310 return nullptr;
312 } 311 }
313 312
314 Response* r = new Response(ExecutionContext::From(script_state)); 313 Response* r = new Response(script_state->GetExecutionContext());
315 r->headers_->SetGuard(Headers::kImmutableGuard); 314 r->headers_->SetGuard(Headers::kImmutableGuard);
316 r->response_->SetStatus(status); 315 r->response_->SetStatus(status);
317 r->response_->HeaderList()->Set("Location", parsed_url); 316 r->response_->HeaderList()->Set("Location", parsed_url);
318 317
319 return r; 318 return r;
320 } 319 }
321 320
322 String Response::type() const { 321 String Response::type() const {
323 // "The type attribute's getter must return response's type." 322 // "The type attribute's getter must return response's type."
324 switch (response_->GetType()) { 323 switch (response_->GetType()) {
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 .Set(response.As<v8::Object>(), body_buffer); 462 .Set(response.As<v8::Object>(), body_buffer);
464 } 463 }
465 464
466 DEFINE_TRACE(Response) { 465 DEFINE_TRACE(Response) {
467 Body::Trace(visitor); 466 Body::Trace(visitor);
468 visitor->Trace(response_); 467 visitor->Trace(response_);
469 visitor->Trace(headers_); 468 visitor->Trace(headers_);
470 } 469 }
471 470
472 } // namespace blink 471 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/modules/fetch/Request.cpp ('k') | third_party/WebKit/Source/modules/fetch/ResponseTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698