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

Side by Side Diff: content/browser/loader/upload_data_stream_builder_unittest.cc

Issue 23223003: Chromium Blob hacking (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/browser/loader/upload_data_stream_builder.h" 5 #include "content/browser/loader/upload_data_stream_builder.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "base/message_loop/message_loop_proxy.h" 12 #include "base/message_loop/message_loop_proxy.h"
13 #include "base/time/time.h" 13 #include "base/time/time.h"
14 #include "net/base/upload_bytes_element_reader.h" 14 #include "net/base/upload_bytes_element_reader.h"
15 #include "net/base/upload_data_stream.h" 15 #include "net/base/upload_data_stream.h"
16 #include "net/base/upload_file_element_reader.h" 16 #include "net/base/upload_file_element_reader.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "url/gurl.h" 18 #include "url/gurl.h"
19 #include "webkit/browser/blob/blob_storage_controller.h" 19 #include "webkit/browser/blob/blob_storage_context.h"
20 #include "webkit/common/resource_request_body.h" 20 #include "webkit/common/resource_request_body.h"
21 21
22 using webkit_blob::BlobData; 22 using webkit_blob::BlobData;
23 using webkit_blob::BlobStorageController; 23 using webkit_blob::BlobDataHandle;
24 using webkit_blob::BlobStorageContext;
24 using webkit_glue::ResourceRequestBody; 25 using webkit_glue::ResourceRequestBody;
25 26
26 namespace content { 27 namespace content {
27 namespace { 28 namespace {
28 29
29 bool AreElementsEqual(const net::UploadElementReader& reader, 30 bool AreElementsEqual(const net::UploadElementReader& reader,
30 const ResourceRequestBody::Element& element) { 31 const ResourceRequestBody::Element& element) {
31 switch(element.type()) { 32 switch(element.type()) {
32 case ResourceRequestBody::Element::TYPE_BYTES: { 33 case ResourceRequestBody::Element::TYPE_BYTES: {
33 const net::UploadBytesElementReader* bytes_reader = 34 const net::UploadBytesElementReader* bytes_reader =
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 EXPECT_EQ(kFileTime, r2->expected_modification_time()); 92 EXPECT_EQ(kFileTime, r2->expected_modification_time());
92 } 93 }
93 94
94 TEST(UploadDataStreamBuilderTest, ResolveBlobAndCreateUploadDataStream) { 95 TEST(UploadDataStreamBuilderTest, ResolveBlobAndCreateUploadDataStream) {
95 base::MessageLoop message_loop; 96 base::MessageLoop message_loop;
96 // Setup blob data for testing. 97 // Setup blob data for testing.
97 base::Time time1, time2; 98 base::Time time1, time2;
98 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1); 99 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1);
99 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2); 100 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2);
100 101
101 BlobStorageController blob_storage_controller; 102 BlobStorageContext blob_storage_context;
102 scoped_refptr<BlobData> blob_data(new BlobData());
103 103
104 GURL blob_url0("blob://url_0"); 104 const std::string blob_id0("id-0");
105 blob_storage_controller.AddFinishedBlob(blob_url0, blob_data.get()); 105 scoped_refptr<BlobData> blob_data(new BlobData(blob_id0));
106 scoped_ptr<BlobDataHandle> handle1 =
107 blob_storage_context.AddFinishedBlob(blob_data);
106 108
109 const std::string blob_id1("id-1");
110 blob_data = new BlobData(blob_id1);
107 blob_data->AppendData("BlobData"); 111 blob_data->AppendData("BlobData");
108 blob_data->AppendFile( 112 blob_data->AppendFile(
109 base::FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1); 113 base::FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1);
110 114 scoped_ptr<BlobDataHandle> handle2 =
111 GURL blob_url1("blob://url_1"); 115 blob_storage_context.AddFinishedBlob(blob_data);
112 blob_storage_controller.AddFinishedBlob(blob_url1, blob_data.get());
113
114 GURL blob_url2("blob://url_2");
115 blob_storage_controller.CloneBlob(blob_url2, blob_url1);
116
117 GURL blob_url3("blob://url_3");
118 blob_storage_controller.CloneBlob(blob_url3, blob_url2);
119 116
120 // Setup upload data elements for comparison. 117 // Setup upload data elements for comparison.
121 ResourceRequestBody::Element blob_element1, blob_element2; 118 ResourceRequestBody::Element blob_element1, blob_element2;
122 blob_element1.SetToBytes( 119 blob_element1.SetToBytes(
123 blob_data->items().at(0).bytes() + 120 blob_data->items().at(0).bytes() +
124 static_cast<int>(blob_data->items().at(0).offset()), 121 static_cast<int>(blob_data->items().at(0).offset()),
125 static_cast<int>(blob_data->items().at(0).length())); 122 static_cast<int>(blob_data->items().at(0).length()));
126 blob_element2.SetToFilePathRange( 123 blob_element2.SetToFilePathRange(
127 blob_data->items().at(1).path(), 124 blob_data->items().at(1).path(),
128 blob_data->items().at(1).offset(), 125 blob_data->items().at(1).offset(),
129 blob_data->items().at(1).length(), 126 blob_data->items().at(1).length(),
130 blob_data->items().at(1).expected_modification_time()); 127 blob_data->items().at(1).expected_modification_time());
131 128
132 ResourceRequestBody::Element upload_element1, upload_element2; 129 ResourceRequestBody::Element upload_element1, upload_element2;
133 upload_element1.SetToBytes("Hello", 5); 130 upload_element1.SetToBytes("Hello", 5);
134 upload_element2.SetToFilePathRange( 131 upload_element2.SetToFilePathRange(
135 base::FilePath(FILE_PATH_LITERAL("foo1.txt")), 0, 20, time2); 132 base::FilePath(FILE_PATH_LITERAL("foo1.txt")), 0, 20, time2);
136 133
137 // Test no blob reference. 134 // Test no blob reference.
138 scoped_refptr<ResourceRequestBody> request_body(new ResourceRequestBody()); 135 scoped_refptr<ResourceRequestBody> request_body(new ResourceRequestBody());
139 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); 136 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
140 request_body->AppendFileRange(upload_element2.path(), 137 request_body->AppendFileRange(upload_element2.path(),
141 upload_element2.offset(), 138 upload_element2.offset(),
142 upload_element2.length(), 139 upload_element2.length(),
143 upload_element2.expected_modification_time()); 140 upload_element2.expected_modification_time());
144 141
145 scoped_ptr<net::UploadDataStream> upload( 142 scoped_ptr<net::UploadDataStream> upload(
146 UploadDataStreamBuilder::Build(request_body.get(), 143 UploadDataStreamBuilder::Build(request_body.get(),
147 &blob_storage_controller, 144 &blob_storage_context,
148 NULL, 145 NULL,
149 base::MessageLoopProxy::current().get())); 146 base::MessageLoopProxy::current().get()));
150 147
151 ASSERT_EQ(2U, upload->element_readers().size()); 148 ASSERT_EQ(2U, upload->element_readers().size());
152 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1)); 149 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1));
153 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2)); 150 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2));
154 151
155 // Test having only one blob reference that refers to empty blob data. 152 // Test having only one blob reference that refers to empty blob data.
156 request_body = new ResourceRequestBody(); 153 request_body = new ResourceRequestBody();
157 request_body->AppendBlob(blob_url0); 154 request_body->AppendBlob(blob_id0);
158 155
159 upload = 156 upload =
160 UploadDataStreamBuilder::Build(request_body.get(), 157 UploadDataStreamBuilder::Build(request_body.get(),
161 &blob_storage_controller, 158 &blob_storage_context,
162 NULL, 159 NULL,
163 base::MessageLoopProxy::current().get()); 160 base::MessageLoopProxy::current().get());
164 ASSERT_EQ(0U, upload->element_readers().size()); 161 ASSERT_EQ(0U, upload->element_readers().size());
165 162
166 // Test having only one blob reference. 163 // Test having only one blob reference.
167 request_body = new ResourceRequestBody(); 164 request_body = new ResourceRequestBody();
168 request_body->AppendBlob(blob_url1); 165 request_body->AppendBlob(blob_id1);
169 166
170 upload = 167 upload =
171 UploadDataStreamBuilder::Build(request_body.get(), 168 UploadDataStreamBuilder::Build(request_body.get(),
172 &blob_storage_controller, 169 &blob_storage_context,
173 NULL, 170 NULL,
174 base::MessageLoopProxy::current().get()); 171 base::MessageLoopProxy::current().get());
175 ASSERT_EQ(2U, upload->element_readers().size()); 172 ASSERT_EQ(2U, upload->element_readers().size());
176 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1)); 173 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1));
177 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2)); 174 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2));
178 175
179 // Test having one blob reference at the beginning. 176 // Test having one blob reference at the beginning.
180 request_body = new ResourceRequestBody(); 177 request_body = new ResourceRequestBody();
181 request_body->AppendBlob(blob_url1); 178 request_body->AppendBlob(blob_id1);
182 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); 179 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
183 request_body->AppendFileRange(upload_element2.path(), 180 request_body->AppendFileRange(upload_element2.path(),
184 upload_element2.offset(), 181 upload_element2.offset(),
185 upload_element2.length(), 182 upload_element2.length(),
186 upload_element2.expected_modification_time()); 183 upload_element2.expected_modification_time());
187 184
188 upload = 185 upload =
189 UploadDataStreamBuilder::Build(request_body.get(), 186 UploadDataStreamBuilder::Build(request_body.get(),
190 &blob_storage_controller, 187 &blob_storage_context,
191 NULL, 188 NULL,
192 base::MessageLoopProxy::current().get()); 189 base::MessageLoopProxy::current().get());
193 ASSERT_EQ(4U, upload->element_readers().size()); 190 ASSERT_EQ(4U, upload->element_readers().size());
194 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1)); 191 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1));
195 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2)); 192 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2));
196 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1)); 193 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1));
197 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2)); 194 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2));
198 195
199 // Test having one blob reference at the end. 196 // Test having one blob reference at the end.
200 request_body = new ResourceRequestBody(); 197 request_body = new ResourceRequestBody();
201 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); 198 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
202 request_body->AppendFileRange(upload_element2.path(), 199 request_body->AppendFileRange(upload_element2.path(),
203 upload_element2.offset(), 200 upload_element2.offset(),
204 upload_element2.length(), 201 upload_element2.length(),
205 upload_element2.expected_modification_time()); 202 upload_element2.expected_modification_time());
206 request_body->AppendBlob(blob_url1); 203 request_body->AppendBlob(blob_id1);
207 204
208 upload = 205 upload =
209 UploadDataStreamBuilder::Build(request_body.get(), 206 UploadDataStreamBuilder::Build(request_body.get(),
210 &blob_storage_controller, 207 &blob_storage_context,
211 NULL, 208 NULL,
212 base::MessageLoopProxy::current().get()); 209 base::MessageLoopProxy::current().get());
213 ASSERT_EQ(4U, upload->element_readers().size()); 210 ASSERT_EQ(4U, upload->element_readers().size());
214 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1)); 211 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1));
215 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2)); 212 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2));
216 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element1)); 213 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element1));
217 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element2)); 214 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element2));
218 215
219 // Test having one blob reference in the middle. 216 // Test having one blob reference in the middle.
220 request_body = new ResourceRequestBody(); 217 request_body = new ResourceRequestBody();
221 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); 218 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
222 request_body->AppendBlob(blob_url1); 219 request_body->AppendBlob(blob_id1);
223 request_body->AppendFileRange(upload_element2.path(), 220 request_body->AppendFileRange(upload_element2.path(),
224 upload_element2.offset(), 221 upload_element2.offset(),
225 upload_element2.length(), 222 upload_element2.length(),
226 upload_element2.expected_modification_time()); 223 upload_element2.expected_modification_time());
227 224
228 upload = 225 upload =
229 UploadDataStreamBuilder::Build(request_body.get(), 226 UploadDataStreamBuilder::Build(request_body.get(),
230 &blob_storage_controller, 227 &blob_storage_context,
231 NULL, 228 NULL,
232 base::MessageLoopProxy::current().get()); 229 base::MessageLoopProxy::current().get());
233 ASSERT_EQ(4U, upload->element_readers().size()); 230 ASSERT_EQ(4U, upload->element_readers().size());
234 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1)); 231 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1));
235 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element1)); 232 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element1));
236 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element2)); 233 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element2));
237 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2)); 234 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2));
238 235
239 // Test having multiple blob references. 236 // Test having multiple blob references.
240 request_body = new ResourceRequestBody(); 237 request_body = new ResourceRequestBody();
241 request_body->AppendBlob(blob_url1); 238 request_body->AppendBlob(blob_id1);
242 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); 239 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length());
243 request_body->AppendBlob(blob_url2); 240 request_body->AppendBlob(blob_id1);
244 request_body->AppendBlob(blob_url3); 241 request_body->AppendBlob(blob_id1);
245 request_body->AppendFileRange(upload_element2.path(), 242 request_body->AppendFileRange(upload_element2.path(),
246 upload_element2.offset(), 243 upload_element2.offset(),
247 upload_element2.length(), 244 upload_element2.length(),
248 upload_element2.expected_modification_time()); 245 upload_element2.expected_modification_time());
249 246
250 upload = 247 upload =
251 UploadDataStreamBuilder::Build(request_body.get(), 248 UploadDataStreamBuilder::Build(request_body.get(),
252 &blob_storage_controller, 249 &blob_storage_context,
253 NULL, 250 NULL,
254 base::MessageLoopProxy::current().get()); 251 base::MessageLoopProxy::current().get());
255 ASSERT_EQ(8U, upload->element_readers().size()); 252 ASSERT_EQ(8U, upload->element_readers().size());
256 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1)); 253 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1));
257 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2)); 254 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2));
258 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1)); 255 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1));
259 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element1)); 256 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element1));
260 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[4], blob_element2)); 257 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[4], blob_element2));
261 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[5], blob_element1)); 258 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[5], blob_element1));
262 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[6], blob_element2)); 259 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[6], blob_element2));
263 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[7], upload_element2)); 260 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[7], upload_element2));
264 } 261 }
265 262
266 } // namespace content 263 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/loader/upload_data_stream_builder.cc ('k') | content/browser/net/view_blob_internals_job_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698