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

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

Issue 1192913007: Change BodyStreamBuffer to be FetchDataConsumerHandle-based and enable backpressure in Fetch API (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase. Created 5 years, 5 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
« no previous file with comments | « Source/modules/fetch/FetchRequestData.h ('k') | Source/modules/fetch/FetchResponseData.h » ('j') | 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/FetchRequestData.h" 6 #include "modules/fetch/FetchRequestData.h"
7 7
8 #include "core/dom/ExecutionContext.h" 8 #include "core/dom/ExecutionContext.h"
9 #include "core/fetch/ResourceLoaderOptions.h" 9 #include "core/fetch/ResourceLoaderOptions.h"
10 #include "core/loader/ThreadableLoader.h" 10 #include "core/loader/ThreadableLoader.h"
11 #include "modules/fetch/BodyStreamBuffer.h"
12 #include "modules/fetch/DataConsumerTee.h"
13 #include "modules/fetch/FetchBlobDataConsumerHandle.h"
11 #include "modules/fetch/FetchHeaderList.h" 14 #include "modules/fetch/FetchHeaderList.h"
12 #include "platform/network/ResourceRequest.h" 15 #include "platform/network/ResourceRequest.h"
13 #include "public/platform/WebServiceWorkerRequest.h" 16 #include "public/platform/WebServiceWorkerRequest.h"
14 #include "public/platform/WebURLRequest.h" 17 #include "public/platform/WebURLRequest.h"
15 18
16 namespace blink { 19 namespace blink {
17 20
18 FetchRequestData* FetchRequestData::create() 21 FetchRequestData* FetchRequestData::create()
19 { 22 {
20 return new FetchRequestData(); 23 return new FetchRequestData();
21 } 24 }
22 25
23 FetchRequestData* FetchRequestData::create(const WebServiceWorkerRequest& webReq uest) 26 FetchRequestData* FetchRequestData::create(ExecutionContext* executionContext, c onst WebServiceWorkerRequest& webRequest)
24 { 27 {
25 FetchRequestData* request = FetchRequestData::create(); 28 FetchRequestData* request = FetchRequestData::create();
26 request->m_url = webRequest.url(); 29 request->m_url = webRequest.url();
27 request->m_method = webRequest.method(); 30 request->m_method = webRequest.method();
28 for (HTTPHeaderMap::const_iterator it = webRequest.headers().begin(); it != webRequest.headers().end(); ++it) 31 for (HTTPHeaderMap::const_iterator it = webRequest.headers().begin(); it != webRequest.headers().end(); ++it)
29 request->m_headerList->append(it->key, it->value); 32 request->m_headerList->append(it->key, it->value);
30 request->m_blobDataHandle = webRequest.blobDataHandle(); 33 if (webRequest.blobDataHandle())
34 request->setBuffer(BodyStreamBuffer::create(FetchBlobDataConsumerHandle: :create(executionContext, webRequest.blobDataHandle())));
31 request->setContext(webRequest.requestContext()); 35 request->setContext(webRequest.requestContext());
32 request->m_referrer.setURL(webRequest.referrer()); 36 request->m_referrer.setURL(webRequest.referrer());
33 request->setMode(webRequest.mode()); 37 request->setMode(webRequest.mode());
34 request->setCredentials(webRequest.credentialsMode()); 38 request->setCredentials(webRequest.credentialsMode());
35 request->setMIMEType(request->m_headerList->extractMIMEType()); 39 request->setMIMEType(request->m_headerList->extractMIMEType());
36 return request; 40 return request;
37 } 41 }
38 42
39 FetchRequestData* FetchRequestData::clone() const 43 FetchRequestData* FetchRequestData::clone(ExecutionContext* executionContext)
40 { 44 {
41 // TODO(yhirano): This method will be destructive.
42 FetchRequestData* request = FetchRequestData::create(); 45 FetchRequestData* request = FetchRequestData::create();
43 request->m_url = m_url; 46 request->m_url = m_url;
44 request->m_method = m_method; 47 request->m_method = m_method;
45 request->m_headerList = m_headerList->clone(); 48 request->m_headerList = m_headerList->clone();
46 request->m_unsafeRequestFlag = m_unsafeRequestFlag; 49 request->m_unsafeRequestFlag = m_unsafeRequestFlag;
47 request->m_blobDataHandle = m_blobDataHandle; 50 if (m_buffer) {
51 OwnPtr<FetchDataConsumerHandle> dest1, dest2;
52 DataConsumerTee::create(executionContext, m_buffer->releaseHandle(), &de st1, &dest2);
53 m_buffer = BodyStreamBuffer::create(dest1.release());
54 request->m_buffer = BodyStreamBuffer::create(dest2.release());
55 }
48 request->m_origin = m_origin; 56 request->m_origin = m_origin;
49 request->m_sameOriginDataURLFlag = m_sameOriginDataURLFlag; 57 request->m_sameOriginDataURLFlag = m_sameOriginDataURLFlag;
50 request->m_context = m_context; 58 request->m_context = m_context;
51 request->m_referrer = m_referrer; 59 request->m_referrer = m_referrer;
52 request->m_mode = m_mode; 60 request->m_mode = m_mode;
53 request->m_credentials = m_credentials; 61 request->m_credentials = m_credentials;
54 request->m_responseTainting = m_responseTainting; 62 request->m_responseTainting = m_responseTainting;
55 request->m_mimeType = m_mimeType; 63 request->m_mimeType = m_mimeType;
56 return request; 64 return request;
57 } 65 }
58 66
59 FetchRequestData* FetchRequestData::pass() const 67 FetchRequestData* FetchRequestData::pass(ExecutionContext* executionContext)
60 { 68 {
61 // TODO(yhirano): This method will be destructive. 69 return clone(executionContext);
62 return clone();
63 } 70 }
64 71
65 FetchRequestData::~FetchRequestData() 72 FetchRequestData::~FetchRequestData()
66 { 73 {
67 } 74 }
68 75
69 FetchRequestData::FetchRequestData() 76 FetchRequestData::FetchRequestData()
70 : m_method("GET") 77 : m_method("GET")
71 , m_headerList(FetchHeaderList::create()) 78 , m_headerList(FetchHeaderList::create())
72 , m_unsafeRequestFlag(false) 79 , m_unsafeRequestFlag(false)
73 , m_context(WebURLRequest::RequestContextUnspecified) 80 , m_context(WebURLRequest::RequestContextUnspecified)
74 , m_sameOriginDataURLFlag(false) 81 , m_sameOriginDataURLFlag(false)
75 , m_mode(WebURLRequest::FetchRequestModeNoCORS) 82 , m_mode(WebURLRequest::FetchRequestModeNoCORS)
76 , m_credentials(WebURLRequest::FetchCredentialsModeOmit) 83 , m_credentials(WebURLRequest::FetchCredentialsModeOmit)
77 , m_responseTainting(BasicTainting) 84 , m_responseTainting(BasicTainting)
78 { 85 {
79 } 86 }
80 87
81 DEFINE_TRACE(FetchRequestData) 88 DEFINE_TRACE(FetchRequestData)
82 { 89 {
90 visitor->trace(m_buffer);
83 visitor->trace(m_headerList); 91 visitor->trace(m_headerList);
84 } 92 }
85 93
86 } // namespace blink 94 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/fetch/FetchRequestData.h ('k') | Source/modules/fetch/FetchResponseData.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698