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

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

Issue 1233573002: [Fetch API] Remove DrainingBuffer. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 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 | « Source/modules/fetch/FetchRequestData.h ('k') | Source/modules/fetch/FetchResponseData.cpp » ('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"
(...skipping 13 matching lines...) Expand all
24 } 24 }
25 25
26 FetchRequestData* FetchRequestData::create(ExecutionContext* executionContext, c onst WebServiceWorkerRequest& webRequest) 26 FetchRequestData* FetchRequestData::create(ExecutionContext* executionContext, c onst WebServiceWorkerRequest& webRequest)
27 { 27 {
28 FetchRequestData* request = FetchRequestData::create(); 28 FetchRequestData* request = FetchRequestData::create();
29 request->m_url = webRequest.url(); 29 request->m_url = webRequest.url();
30 request->m_method = webRequest.method(); 30 request->m_method = webRequest.method();
31 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)
32 request->m_headerList->append(it->key, it->value); 32 request->m_headerList->append(it->key, it->value);
33 if (webRequest.blobDataHandle()) 33 if (webRequest.blobDataHandle())
34 request->setBuffer(BodyStreamBuffer::create(FetchBlobDataConsumerHandle: :create(executionContext, webRequest.blobDataHandle()))); 34 request->setBuffer(new BodyStreamBuffer(FetchBlobDataConsumerHandle::cre ate(executionContext, webRequest.blobDataHandle())));
35 request->setContext(webRequest.requestContext()); 35 request->setContext(webRequest.requestContext());
36 request->m_referrer.setURL(webRequest.referrer()); 36 request->m_referrer.setURL(webRequest.referrer());
37 request->setMode(webRequest.mode()); 37 request->setMode(webRequest.mode());
38 request->setCredentials(webRequest.credentialsMode()); 38 request->setCredentials(webRequest.credentialsMode());
39 request->setMIMEType(request->m_headerList->extractMIMEType()); 39 request->setMIMEType(request->m_headerList->extractMIMEType());
40 return request; 40 return request;
41 } 41 }
42 42
43 FetchRequestData* FetchRequestData::clone(ExecutionContext* executionContext) 43 FetchRequestData* FetchRequestData::cloneExceptBody()
44 { 44 {
45 FetchRequestData* request = FetchRequestData::create(); 45 FetchRequestData* request = FetchRequestData::create();
46 request->m_url = m_url; 46 request->m_url = m_url;
47 request->m_method = m_method; 47 request->m_method = m_method;
48 request->m_headerList = m_headerList->clone(); 48 request->m_headerList = m_headerList->clone();
49 request->m_unsafeRequestFlag = m_unsafeRequestFlag; 49 request->m_unsafeRequestFlag = m_unsafeRequestFlag;
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 }
56 request->m_origin = m_origin; 50 request->m_origin = m_origin;
57 request->m_sameOriginDataURLFlag = m_sameOriginDataURLFlag; 51 request->m_sameOriginDataURLFlag = m_sameOriginDataURLFlag;
58 request->m_context = m_context; 52 request->m_context = m_context;
59 request->m_referrer = m_referrer; 53 request->m_referrer = m_referrer;
60 request->m_mode = m_mode; 54 request->m_mode = m_mode;
61 request->m_credentials = m_credentials; 55 request->m_credentials = m_credentials;
62 request->m_responseTainting = m_responseTainting; 56 request->m_responseTainting = m_responseTainting;
63 request->m_mimeType = m_mimeType; 57 request->m_mimeType = m_mimeType;
64 return request; 58 return request;
65 } 59 }
66 60
61 FetchRequestData* FetchRequestData::clone(ExecutionContext* executionContext)
62 {
63 FetchRequestData* request = FetchRequestData::cloneExceptBody();
64 if (m_buffer->hasBody()) {
65 OwnPtr<FetchDataConsumerHandle> dest1, dest2;
66 // TODO(yhirano): unlock the buffer.
67 DataConsumerTee::create(executionContext, m_buffer->lock(executionContex t), &dest1, &dest2);
68 m_buffer = new BodyStreamBuffer(dest1.release());
69 request->m_buffer = new BodyStreamBuffer(dest2.release());
70 } else {
71 m_buffer = new BodyStreamBuffer;
72 }
73 return request;
74 }
75
67 FetchRequestData* FetchRequestData::pass(ExecutionContext* executionContext) 76 FetchRequestData* FetchRequestData::pass(ExecutionContext* executionContext)
68 { 77 {
69 return clone(executionContext); 78 FetchRequestData* request = FetchRequestData::cloneExceptBody();
79 request->m_buffer = m_buffer;
80 m_buffer = new BodyStreamBuffer;
81 return request;
70 } 82 }
71 83
72 FetchRequestData::~FetchRequestData() 84 FetchRequestData::~FetchRequestData()
73 { 85 {
74 } 86 }
75 87
76 FetchRequestData::FetchRequestData() 88 FetchRequestData::FetchRequestData()
77 : m_method("GET") 89 : m_method("GET")
78 , m_headerList(FetchHeaderList::create()) 90 , m_headerList(FetchHeaderList::create())
79 , m_unsafeRequestFlag(false) 91 , m_unsafeRequestFlag(false)
80 , m_context(WebURLRequest::RequestContextUnspecified) 92 , m_context(WebURLRequest::RequestContextUnspecified)
81 , m_sameOriginDataURLFlag(false) 93 , m_sameOriginDataURLFlag(false)
82 , m_mode(WebURLRequest::FetchRequestModeNoCORS) 94 , m_mode(WebURLRequest::FetchRequestModeNoCORS)
83 , m_credentials(WebURLRequest::FetchCredentialsModeOmit) 95 , m_credentials(WebURLRequest::FetchCredentialsModeOmit)
84 , m_responseTainting(BasicTainting) 96 , m_responseTainting(BasicTainting)
97 , m_buffer(new BodyStreamBuffer)
85 { 98 {
86 } 99 }
87 100
88 DEFINE_TRACE(FetchRequestData) 101 DEFINE_TRACE(FetchRequestData)
89 { 102 {
90 visitor->trace(m_buffer); 103 visitor->trace(m_buffer);
91 visitor->trace(m_headerList); 104 visitor->trace(m_headerList);
92 } 105 }
93 106
94 } // namespace blink 107 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/fetch/FetchRequestData.h ('k') | Source/modules/fetch/FetchResponseData.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698