Chromium Code Reviews| 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 16 matching lines...) Expand all Loading... | |
| 27 request->setURL(original->url()); | 27 request->setURL(original->url()); |
| 28 request->setMethod(original->method()); | 28 request->setMethod(original->method()); |
| 29 request->setHeaderList(original->headerList()->clone()); | 29 request->setHeaderList(original->headerList()->clone()); |
| 30 request->setUnsafeRequestFlag(true); | 30 request->setUnsafeRequestFlag(true); |
| 31 request->setBlobDataHandle(original->blobDataHandle()); | 31 request->setBlobDataHandle(original->blobDataHandle()); |
| 32 // FIXME: Set client. | 32 // FIXME: Set client. |
| 33 request->setOrigin(SecurityOrigin::create(context->url())); | 33 request->setOrigin(SecurityOrigin::create(context->url())); |
| 34 // FIXME: Set ForceOriginHeaderFlag. | 34 // FIXME: Set ForceOriginHeaderFlag. |
| 35 request->setSameOriginDataURLFlag(true); | 35 request->setSameOriginDataURLFlag(true); |
| 36 request->mutableReferrer()->setClient(); | 36 request->mutableReferrer()->setClient(); |
| 37 request->setContext(WebURLRequest::RequestContextFetch); | |
| 38 request->setMode(original->mode()); | 37 request->setMode(original->mode()); |
| 39 request->setCredentials(original->credentials()); | 38 request->setCredentials(original->credentials()); |
| 40 // FIXME: Set cache mode. | 39 // FIXME: Set cache mode. |
| 41 return request; | 40 return request; |
| 42 } | 41 } |
| 43 | 42 |
| 44 Request* Request::createRequestWithRequestOrString(ExecutionContext* context, Re quest* inputRequest, const String& inputString, const RequestInit& init, Excepti onState& exceptionState) | 43 Request* Request::createRequestWithRequestOrString(ExecutionContext* context, Re quest* inputRequest, const String& inputString, const RequestInit& init, Excepti onState& exceptionState) |
| 45 { | 44 { |
| 46 // "1. If input is a Request object, run these substeps:" | 45 // "1. If input is a Request object, run these substeps:" |
| 47 if (inputRequest) { | 46 if (inputRequest) { |
| 48 // "1. If input's used flag is set, throw a TypeError." | 47 // "1. If input's used flag is set, throw a TypeError." |
| 49 if (inputRequest->bodyUsed()) { | 48 if (inputRequest->bodyUsed()) { |
| 50 exceptionState.throwTypeError("Cannot construct a Request with a Req uest object that has already been used."); | 49 exceptionState.throwTypeError("Cannot construct a Request with a Req uest object that has already been used."); |
| 51 return 0; | 50 return 0; |
| 52 } | 51 } |
| 53 // "2. Set input's used flag." | 52 // "2. Set input's used flag." |
| 54 inputRequest->lockBody(PassBody); | 53 inputRequest->lockBody(PassBody); |
| 55 } | 54 } |
| 56 | 55 |
| 57 // "2. Let |request| be |input|'s associated request, if |input| is a | 56 // "2. Let |request| be |input|'s associated request, if |input| is a |
| 58 // Request object, and a new request otherwise." | 57 // Request object, and a new request otherwise." |
| 59 // "3. Set |request| to a new request whose url is |request|'s url, method | 58 // "3. Set |request| to a new request whose url is |request|'s url, method |
|
yhirano
2015/04/14 07:07:11
(Mainly for module/fetch reviewers) As the spec ch
| |
| 60 // is |request|'s method, header list is a copy of |request|'s header list, | 59 // is |request|'s method, header list is a copy of |request|'s header list, |
| 61 // unsafe request flag is set, body is |request|'s body, client is entry | 60 // unsafe request flag is set, body is |request|'s body, client is entry |
| 62 // settings object, origin is entry settings object's origin, force Origin | 61 // settings object, origin is entry settings object's origin, force Origin |
| 63 // header flag is set, same-origin data URL flag is set, referrer is client, | 62 // header flag is set, same-origin data URL flag is set, referrer is client, |
| 64 // context is fetch, mode is |request|'s mode, credentials mode is | 63 // context is fetch, mode is |request|'s mode, credentials mode is |
| 65 // |request|'s credentials mode, and cache mode is |request|'s cache mode." | 64 // |request|'s credentials mode, and cache mode is |request|'s cache mode." |
| 66 FetchRequestData* request = createCopyOfFetchRequestDataForFetch(context, in putRequest ? inputRequest->request() : FetchRequestData::create()); | 65 FetchRequestData* request = createCopyOfFetchRequestDataForFetch(context, in putRequest ? inputRequest->request() : FetchRequestData::create()); |
| 67 | 66 |
| 68 if (inputRequest && inputRequest->blobDataHandle() && inputRequest->isBodyCo nsumed()) { | 67 if (inputRequest && inputRequest->blobDataHandle() && inputRequest->isBodyCo nsumed()) { |
| 69 // Currently the only methods that can consume body data without | 68 // Currently the only methods that can consume body data without |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 287 KURL Request::url() const | 286 KURL Request::url() const |
| 288 { | 287 { |
| 289 // The url attribute's getter must return request's url, serialized with the exclude fragment flag set. | 288 // The url attribute's getter must return request's url, serialized with the exclude fragment flag set. |
| 290 if (!m_request->url().hasFragmentIdentifier()) | 289 if (!m_request->url().hasFragmentIdentifier()) |
| 291 return m_request->url(); | 290 return m_request->url(); |
| 292 KURL url(m_request->url()); | 291 KURL url(m_request->url()); |
| 293 url.removeFragmentIdentifier(); | 292 url.removeFragmentIdentifier(); |
| 294 return url; | 293 return url; |
| 295 } | 294 } |
| 296 | 295 |
| 296 String Request::context() const | |
| 297 { | |
| 298 // "The context attribute's getter must return request's context" | |
| 299 switch (m_request->context()) { | |
| 300 case WebURLRequest::RequestContextUnspecified: | |
| 301 return ""; | |
| 302 case WebURLRequest::RequestContextAudio: | |
| 303 return "audio"; | |
| 304 case WebURLRequest::RequestContextBeacon: | |
| 305 return "beacon"; | |
| 306 case WebURLRequest::RequestContextCSPReport: | |
| 307 return "cspreport"; | |
| 308 case WebURLRequest::RequestContextDownload: | |
| 309 return "download"; | |
| 310 case WebURLRequest::RequestContextEmbed: | |
| 311 return "embed"; | |
| 312 case WebURLRequest::RequestContextEventSource: | |
| 313 return "eventsource"; | |
| 314 case WebURLRequest::RequestContextFavicon: | |
| 315 return "favicon"; | |
| 316 case WebURLRequest::RequestContextFetch: | |
| 317 return "fetch"; | |
| 318 case WebURLRequest::RequestContextFont: | |
| 319 return "font"; | |
| 320 case WebURLRequest::RequestContextForm: | |
| 321 return "form"; | |
| 322 case WebURLRequest::RequestContextFrame: | |
| 323 return "frame"; | |
| 324 case WebURLRequest::RequestContextHyperlink: | |
| 325 return "hyperlink"; | |
| 326 case WebURLRequest::RequestContextIframe: | |
| 327 return "iframe"; | |
| 328 case WebURLRequest::RequestContextImage: | |
| 329 return "image"; | |
| 330 case WebURLRequest::RequestContextImageSet: | |
| 331 return "imageset"; | |
| 332 case WebURLRequest::RequestContextImport: | |
| 333 return "import"; | |
| 334 case WebURLRequest::RequestContextInternal: | |
| 335 return "internal"; | |
| 336 case WebURLRequest::RequestContextLocation: | |
| 337 return "location"; | |
| 338 case WebURLRequest::RequestContextManifest: | |
| 339 return "manifest"; | |
| 340 case WebURLRequest::RequestContextObject: | |
| 341 return "object"; | |
| 342 case WebURLRequest::RequestContextPing: | |
| 343 return "ping"; | |
| 344 case WebURLRequest::RequestContextPlugin: | |
| 345 return "plugin"; | |
| 346 case WebURLRequest::RequestContextPrefetch: | |
| 347 return "prefetch"; | |
| 348 case WebURLRequest::RequestContextScript: | |
| 349 return "script"; | |
| 350 case WebURLRequest::RequestContextServiceWorker: | |
| 351 return "serviceworker"; | |
| 352 case WebURLRequest::RequestContextSharedWorker: | |
| 353 return "sharedworker"; | |
| 354 case WebURLRequest::RequestContextSubresource: | |
| 355 return "subresource"; | |
| 356 case WebURLRequest::RequestContextStyle: | |
| 357 return "style"; | |
| 358 case WebURLRequest::RequestContextTrack: | |
| 359 return "track"; | |
| 360 case WebURLRequest::RequestContextVideo: | |
| 361 return "video"; | |
| 362 case WebURLRequest::RequestContextWorker: | |
| 363 return "worker"; | |
| 364 case WebURLRequest::RequestContextXMLHttpRequest: | |
| 365 return "xmlhttprequest"; | |
| 366 case WebURLRequest::RequestContextXSLT: | |
| 367 return "xslt"; | |
| 368 } | |
| 369 ASSERT_NOT_REACHED(); | |
| 370 return ""; | |
| 371 } | |
| 372 | |
| 297 String Request::referrer() const | 373 String Request::referrer() const |
| 298 { | 374 { |
| 299 // "The referrer attribute's getter must return the empty string if | 375 // "The referrer attribute's getter must return the empty string if |
| 300 // request's referrer is no referrer, "about:client" if request's referrer | 376 // request's referrer is no referrer, "about:client" if request's referrer |
| 301 // is client and request's referrer, serialized, otherwise." | 377 // is client and request's referrer, serialized, otherwise." |
| 302 if (m_request->referrer().isNoReferrer()) | 378 if (m_request->referrer().isNoReferrer()) |
| 303 return String(); | 379 return String(); |
| 304 if (m_request->referrer().isClient()) | 380 if (m_request->referrer().isClient()) |
| 305 return String("about:client"); | 381 return String("about:client"); |
| 306 return m_request->referrer().referrer().referrer; | 382 return m_request->referrer().referrer().referrer; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 369 FetchRequestData* Request::passRequestData() | 445 FetchRequestData* Request::passRequestData() |
| 370 { | 446 { |
| 371 ASSERT(!bodyUsed()); | 447 ASSERT(!bodyUsed()); |
| 372 lockBody(PassBody); | 448 lockBody(PassBody); |
| 373 return m_request->pass(); | 449 return m_request->pass(); |
| 374 } | 450 } |
| 375 | 451 |
| 376 void Request::populateWebServiceWorkerRequest(WebServiceWorkerRequest& webReques t) const | 452 void Request::populateWebServiceWorkerRequest(WebServiceWorkerRequest& webReques t) const |
| 377 { | 453 { |
| 378 webRequest.setMethod(method()); | 454 webRequest.setMethod(method()); |
| 455 webRequest.setRequestContext(m_request->context()); | |
| 379 // This strips off the fragment part. | 456 // This strips off the fragment part. |
| 380 webRequest.setURL(url()); | 457 webRequest.setURL(url()); |
| 381 | 458 |
| 382 const FetchHeaderList* headerList = m_headers->headerList(); | 459 const FetchHeaderList* headerList = m_headers->headerList(); |
| 383 for (size_t i = 0, size = headerList->size(); i < size; ++i) { | 460 for (size_t i = 0, size = headerList->size(); i < size; ++i) { |
| 384 const FetchHeaderList::Header& header = headerList->entry(i); | 461 const FetchHeaderList::Header& header = headerList->entry(i); |
| 385 webRequest.appendHeader(header.first, header.second); | 462 webRequest.appendHeader(header.first, header.second); |
| 386 } | 463 } |
| 387 | 464 |
| 388 webRequest.setReferrer(m_request->referrer().referrer().referrer, static_cas t<WebReferrerPolicy>(m_request->referrer().referrer().referrerPolicy)); | 465 webRequest.setReferrer(m_request->referrer().referrer().referrer, static_cas t<WebReferrerPolicy>(m_request->referrer().referrer().referrerPolicy)); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 417 } | 494 } |
| 418 | 495 |
| 419 DEFINE_TRACE(Request) | 496 DEFINE_TRACE(Request) |
| 420 { | 497 { |
| 421 Body::trace(visitor); | 498 Body::trace(visitor); |
| 422 visitor->trace(m_request); | 499 visitor->trace(m_request); |
| 423 visitor->trace(m_headers); | 500 visitor->trace(m_headers); |
| 424 } | 501 } |
| 425 | 502 |
| 426 } // namespace blink | 503 } // namespace blink |
| OLD | NEW |