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

Side by Side Diff: Source/modules/fetch/Request.cpp

Issue 1205053002: Merge 197325 "[Fetch] Check / Set .bodyUsed in Request construct..." (Closed) Base URL: svn://svn.chromium.org/blink/branches/chromium/2403/
Patch Set: Created 5 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « LayoutTests/http/tests/fetch/script-tests/request.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "config.h" 5 #include "config.h"
6 #include "modules/fetch/Request.h" 6 #include "modules/fetch/Request.h"
7 7
8 #include "bindings/core/v8/Dictionary.h" 8 #include "bindings/core/v8/Dictionary.h"
9 #include "core/dom/Document.h" 9 #include "core/dom/Document.h"
10 #include "core/dom/ExecutionContext.h" 10 #include "core/dom/ExecutionContext.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 // FIXME: Set cache mode. 42 // FIXME: Set cache mode.
43 // TODO(yhirano): Set redirect mode. 43 // TODO(yhirano): Set redirect mode.
44 return request; 44 return request;
45 } 45 }
46 46
47 Request* Request::createRequestWithRequestOrString(ScriptState* scriptState, Req uest* inputRequest, const String& inputString, const RequestInit& init, Exceptio nState& exceptionState) 47 Request* Request::createRequestWithRequestOrString(ScriptState* scriptState, Req uest* inputRequest, const String& inputString, const RequestInit& init, Exceptio nState& exceptionState)
48 { 48 {
49 // "1. Let |temporaryBody| be null." 49 // "1. Let |temporaryBody| be null."
50 RefPtr<BlobDataHandle> temporaryBody; 50 RefPtr<BlobDataHandle> temporaryBody;
51 51
52 if (inputRequest) {
53 // We check bodyUsed even when the body is null in spite of the
54 // spec. See https://github.com/whatwg/fetch/issues/61 for details.
55 if (inputRequest->bodyUsed()) {
56 exceptionState.throwTypeError("Cannot construct a Request with a Req uest object that has already been used.");
57 return nullptr;
58 }
59 }
60
52 // "2. If |input| is a Request object and |input|'s body is non-null, run 61 // "2. If |input| is a Request object and |input|'s body is non-null, run
53 // these substeps:" 62 // these substeps:"
54 if (inputRequest && inputRequest->hasBody()) { 63 if (inputRequest && inputRequest->hasBody()) {
55 // "1. If |input|'s used flag is set, throw a TypeError." 64 // "1. If |input|'s used flag is set, throw a TypeError."
56 // "2. Set |temporaryBody| to |input|'s body." 65 // "2. Set |temporaryBody| to |input|'s body."
57 if (inputRequest->bodyUsed()) { 66 if (inputRequest->bodyUsed()) {
58 exceptionState.throwTypeError("Cannot construct a Request with a Req uest object that has already been used."); 67 exceptionState.throwTypeError("Cannot construct a Request with a Req uest object that has already been used.");
59 return nullptr; 68 return nullptr;
60 } 69 }
61 if (inputRequest->isBodyConsumed()) { 70 if (inputRequest->isBodyConsumed()) {
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 245
237 // "29. Set |r|'s body to |temporaryBody|. 246 // "29. Set |r|'s body to |temporaryBody|.
238 r->setBodyBlobHandle(temporaryBody.release()); 247 r->setBodyBlobHandle(temporaryBody.release());
239 248
240 // "30. Set |r|'s MIME type to the result of extracting a MIME type from 249 // "30. Set |r|'s MIME type to the result of extracting a MIME type from
241 // |r|'s request's header list." 250 // |r|'s request's header list."
242 r->m_request->setMIMEType(r->m_request->headerList()->extractMIMEType()); 251 r->m_request->setMIMEType(r->m_request->headerList()->extractMIMEType());
243 252
244 // "31. If |input| is a Request object and |input|'s body is non-null, run 253 // "31. If |input| is a Request object and |input|'s body is non-null, run
245 // these substeps:" 254 // these substeps:"
246 if (inputRequest && inputRequest->hasBody()) { 255 // We set bodyUsed even when the body is null in spite of the
256 // spec. See https://github.com/whatwg/fetch/issues/61 for details.
257 if (inputRequest) {
247 // "1. Set |input|'s body to null." 258 // "1. Set |input|'s body to null."
248 inputRequest->setBodyBlobHandle(nullptr); 259 inputRequest->setBodyBlobHandle(nullptr);
249 // "2. Set |input|'s used flag." 260 // "2. Set |input|'s used flag."
250 inputRequest->lockBody(PassBody); 261 inputRequest->lockBody(PassBody);
251 } 262 }
252 263
253 // "32. Return |r|." 264 // "32. Return |r|."
254 return r; 265 return r;
255 } 266 }
256 267
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 } 544 }
534 545
535 DEFINE_TRACE(Request) 546 DEFINE_TRACE(Request)
536 { 547 {
537 Body::trace(visitor); 548 Body::trace(visitor);
538 visitor->trace(m_request); 549 visitor->trace(m_request);
539 visitor->trace(m_headers); 550 visitor->trace(m_headers);
540 } 551 }
541 552
542 } // namespace blink 553 } // namespace blink
OLDNEW
« no previous file with comments | « LayoutTests/http/tests/fetch/script-tests/request.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698