| 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 "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 21 matching lines...) Expand all Loading... |
| 32 DOMWrapperWorld& world = scriptState->world(); | 32 DOMWrapperWorld& world = scriptState->world(); |
| 33 if (world.isIsolatedWorld()) | 33 if (world.isIsolatedWorld()) |
| 34 request->setOrigin(world.isolatedWorldSecurityOrigin()); | 34 request->setOrigin(world.isolatedWorldSecurityOrigin()); |
| 35 else | 35 else |
| 36 request->setOrigin(scriptState->executionContext()->securityOrigin()); | 36 request->setOrigin(scriptState->executionContext()->securityOrigin()); |
| 37 // FIXME: Set ForceOriginHeaderFlag. | 37 // FIXME: Set ForceOriginHeaderFlag. |
| 38 request->setSameOriginDataURLFlag(true); | 38 request->setSameOriginDataURLFlag(true); |
| 39 request->mutableReferrer()->setClient(); | 39 request->mutableReferrer()->setClient(); |
| 40 request->setMode(original->mode()); | 40 request->setMode(original->mode()); |
| 41 request->setCredentials(original->credentials()); | 41 request->setCredentials(original->credentials()); |
| 42 request->setRedirect(original->redirect()); |
| 42 // FIXME: Set cache mode. | 43 // FIXME: Set cache 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 // "2. If |input| is a Request object and |input|'s body is non-null, run | 52 // "2. If |input| is a Request object and |input|'s body is non-null, run |
| 53 // these substeps:" | 53 // these substeps:" |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 request->setCredentials(WebURLRequest::FetchCredentialsModeInclude); | 137 request->setCredentials(WebURLRequest::FetchCredentialsModeInclude); |
| 138 } else { | 138 } else { |
| 139 if (!inputRequest) | 139 if (!inputRequest) |
| 140 request->setCredentials(WebURLRequest::FetchCredentialsModeOmit); | 140 request->setCredentials(WebURLRequest::FetchCredentialsModeOmit); |
| 141 } | 141 } |
| 142 | 142 |
| 143 // FIXME: "14. Let |cache| be |init|'s cache member if it is present, and | 143 // FIXME: "14. Let |cache| be |init|'s cache member if it is present, and |
| 144 // |fallbackCache| otherwise." | 144 // |fallbackCache| otherwise." |
| 145 // FIXME: "15. If |cache| is non-null, set |request|'s cache mode to | 145 // FIXME: "15. If |cache| is non-null, set |request|'s cache mode to |
| 146 // |cache|." | 146 // |cache|." |
| 147 // TODO(yhirano): "16. If |init|'s redirect member is present and its is | 147 |
| 148 // manual, throw a TypeError." | 148 if (init.redirect == "manual") { |
| 149 // TODO(yhirano): "17. Let |redirect| be |init|'s redirect member if it is | 149 exceptionState.throwTypeError("'" + init.redirect + "' manual redirect m
ethod is unsupported."); |
| 150 // present, and |fallbackRedirect| otherwise." | 150 return nullptr; |
| 151 // TODO(yhirano): "18 If |redirect| is non-null, set |request|'s redirect | 151 } |
| 152 // mode to |redirect|." | 152 |
| 153 // TODO(yhirano): "19 If |request|'s redirect mode is manual, set it to | 153 if (init.redirect == "follow") { |
| 154 // follow." | 154 request->setRedirect(WebURLRequest::FetchRedirectModeFollow); |
| 155 } else if (init.redirect == "manual") { |
| 156 request->setRedirect(WebURLRequest::FetchRedirectModeFollow); |
| 157 } else if (init.redirect == "error") { |
| 158 request->setRedirect(WebURLRequest::FetchRedirectModeError); |
| 159 } else { |
| 160 if (!inputRequest) |
| 161 request->setRedirect(WebURLRequest::FetchRedirectModeFollow); |
| 162 } |
| 155 | 163 |
| 156 // "20. If |init|'s method member is present, let |method| be it and run | 164 // "20. If |init|'s method member is present, let |method| be it and run |
| 157 // these substeps:" | 165 // these substeps:" |
| 158 if (!init.method.isNull()) { | 166 if (!init.method.isNull()) { |
| 159 // "1. If |method| is not a method or method is a forbidden method, | 167 // "1. If |method| is not a method or method is a forbidden method, |
| 160 // throw a TypeError." | 168 // throw a TypeError." |
| 161 if (!isValidHTTPToken(init.method)) { | 169 if (!isValidHTTPToken(init.method)) { |
| 162 exceptionState.throwTypeError("'" + init.method + "' is not a valid
HTTP method."); | 170 exceptionState.throwTypeError("'" + init.method + "' is not a valid
HTTP method."); |
| 163 return nullptr; | 171 return nullptr; |
| 164 } | 172 } |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 return "omit"; | 455 return "omit"; |
| 448 case WebURLRequest::FetchCredentialsModeSameOrigin: | 456 case WebURLRequest::FetchCredentialsModeSameOrigin: |
| 449 return "same-origin"; | 457 return "same-origin"; |
| 450 case WebURLRequest::FetchCredentialsModeInclude: | 458 case WebURLRequest::FetchCredentialsModeInclude: |
| 451 return "include"; | 459 return "include"; |
| 452 } | 460 } |
| 453 ASSERT_NOT_REACHED(); | 461 ASSERT_NOT_REACHED(); |
| 454 return ""; | 462 return ""; |
| 455 } | 463 } |
| 456 | 464 |
| 465 String Request::redirect() const |
| 466 { |
| 467 // "The redirect attribute's getter must return request's redirect mode." |
| 468 switch (m_request->redirect()) { |
| 469 case WebURLRequest::FetchRedirectModeFollow: |
| 470 return "follow"; |
| 471 case WebURLRequest::FetchRedirectModeError: |
| 472 return "error"; |
| 473 case WebURLRequest::FetchRedirectModeManual: |
| 474 return "manual"; |
| 475 } |
| 476 ASSERT_NOT_REACHED(); |
| 477 return ""; |
| 478 } |
| 479 |
| 457 Request* Request::clone(ExceptionState& exceptionState) const | 480 Request* Request::clone(ExceptionState& exceptionState) const |
| 458 { | 481 { |
| 459 if (bodyUsed()) { | 482 if (bodyUsed()) { |
| 460 exceptionState.throwTypeError("Request body is already used"); | 483 exceptionState.throwTypeError("Request body is already used"); |
| 461 return nullptr; | 484 return nullptr; |
| 462 } | 485 } |
| 463 | 486 |
| 464 FetchRequestData* request = m_request->clone(); | 487 FetchRequestData* request = m_request->clone(); |
| 465 if (blobDataHandle() && isBodyConsumed()) { | 488 if (blobDataHandle() && isBodyConsumed()) { |
| 466 // Currently the only methods that can consume body data without | 489 // Currently the only methods that can consume body data without |
| (...skipping 17 matching lines...) Expand all Loading... |
| 484 { | 507 { |
| 485 ASSERT(!bodyUsed()); | 508 ASSERT(!bodyUsed()); |
| 486 lockBody(PassBody); | 509 lockBody(PassBody); |
| 487 return m_request->pass(); | 510 return m_request->pass(); |
| 488 } | 511 } |
| 489 | 512 |
| 490 void Request::populateWebServiceWorkerRequest(WebServiceWorkerRequest& webReques
t) const | 513 void Request::populateWebServiceWorkerRequest(WebServiceWorkerRequest& webReques
t) const |
| 491 { | 514 { |
| 492 webRequest.setMethod(method()); | 515 webRequest.setMethod(method()); |
| 493 webRequest.setRequestContext(m_request->context()); | 516 webRequest.setRequestContext(m_request->context()); |
| 517 webRequest.setRedirectMode(m_request->redirect()); |
| 494 // This strips off the fragment part. | 518 // This strips off the fragment part. |
| 495 webRequest.setURL(url()); | 519 webRequest.setURL(url()); |
| 496 | 520 |
| 497 const FetchHeaderList* headerList = m_headers->headerList(); | 521 const FetchHeaderList* headerList = m_headers->headerList(); |
| 498 for (size_t i = 0, size = headerList->size(); i < size; ++i) { | 522 for (size_t i = 0, size = headerList->size(); i < size; ++i) { |
| 499 const FetchHeaderList::Header& header = headerList->entry(i); | 523 const FetchHeaderList::Header& header = headerList->entry(i); |
| 500 webRequest.appendHeader(header.first, header.second); | 524 webRequest.appendHeader(header.first, header.second); |
| 501 } | 525 } |
| 502 | 526 |
| 503 webRequest.setReferrer(m_request->referrer().referrer().referrer, static_cas
t<WebReferrerPolicy>(m_request->referrer().referrer().referrerPolicy)); | 527 webRequest.setReferrer(m_request->referrer().referrer().referrer, static_cas
t<WebReferrerPolicy>(m_request->referrer().referrer().referrerPolicy)); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 533 } | 557 } |
| 534 | 558 |
| 535 DEFINE_TRACE(Request) | 559 DEFINE_TRACE(Request) |
| 536 { | 560 { |
| 537 Body::trace(visitor); | 561 Body::trace(visitor); |
| 538 visitor->trace(m_request); | 562 visitor->trace(m_request); |
| 539 visitor->trace(m_headers); | 563 visitor->trace(m_headers); |
| 540 } | 564 } |
| 541 | 565 |
| 542 } // namespace blink | 566 } // namespace blink |
| OLD | NEW |