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

Side by Side Diff: webkit/blob/blob_storage_controller_unittest.cc

Issue 7974011: Break large blobs into multiple ipcs during creation. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 2 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 | « webkit/blob/blob_storage_controller.cc ('k') | webkit/blob/blob_url_request_job.cc » ('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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "base/file_path.h" 5 #include "base/file_path.h"
6 #include "base/memory/ref_counted.h" 6 #include "base/memory/ref_counted.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/time.h" 8 #include "base/time.h"
9 #include "net/base/upload_data.h" 9 #include "net/base/upload_data.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 17 matching lines...) Expand all
28 10, 1024, time1); 28 10, 1024, time1);
29 29
30 scoped_refptr<BlobData> blob_data2(new BlobData()); 30 scoped_refptr<BlobData> blob_data2(new BlobData());
31 blob_data2->AppendData("Data3"); 31 blob_data2->AppendData("Data3");
32 blob_data2->AppendBlob(GURL("blob://url_1"), 8, 100); 32 blob_data2->AppendBlob(GURL("blob://url_1"), 8, 100);
33 blob_data2->AppendFile(FilePath(FILE_PATH_LITERAL("File2.txt")), 33 blob_data2->AppendFile(FilePath(FILE_PATH_LITERAL("File2.txt")),
34 0, 20, time2); 34 0, 20, time2);
35 35
36 scoped_refptr<BlobData> canonicalized_blob_data2(new BlobData()); 36 scoped_refptr<BlobData> canonicalized_blob_data2(new BlobData());
37 canonicalized_blob_data2->AppendData("Data3"); 37 canonicalized_blob_data2->AppendData("Data3");
38 canonicalized_blob_data2->AppendData("Data2", 3, 2); 38 canonicalized_blob_data2->AppendData("a2___", 2);
39 canonicalized_blob_data2->AppendFile(FilePath(FILE_PATH_LITERAL("File1.txt")), 39 canonicalized_blob_data2->AppendFile(FilePath(FILE_PATH_LITERAL("File1.txt")),
40 10, 98, time1); 40 10, 98, time1);
41 canonicalized_blob_data2->AppendFile(FilePath(FILE_PATH_LITERAL("File2.txt")), 41 canonicalized_blob_data2->AppendFile(FilePath(FILE_PATH_LITERAL("File2.txt")),
42 0, 20, time2); 42 0, 20, time2);
43 43
44 scoped_ptr<BlobStorageController> blob_storage_controller( 44 BlobStorageController blob_storage_controller;
45 new BlobStorageController());
46 45
47 // Test registering a blob URL referring to the blob data containing only 46 // Test registering a blob URL referring to the blob data containing only
48 // data and file. 47 // data and file.
49 GURL blob_url1("blob://url_1"); 48 GURL blob_url1("blob://url_1");
50 blob_storage_controller->RegisterBlobUrl(blob_url1, blob_data1); 49 blob_storage_controller.AddFinishedBlob(blob_url1, blob_data1);
51 50
52 BlobData* blob_data_found = 51 BlobData* blob_data_found =
53 blob_storage_controller->GetBlobDataFromUrl(blob_url1); 52 blob_storage_controller.GetBlobDataFromUrl(blob_url1);
54 ASSERT_TRUE(blob_data_found != NULL); 53 ASSERT_TRUE(blob_data_found != NULL);
55 EXPECT_TRUE(*blob_data_found == *blob_data1); 54 EXPECT_TRUE(*blob_data_found == *blob_data1);
56 55
57 // Test registering a blob URL referring to the blob data containing data, 56 // Test registering a blob URL referring to the blob data containing data,
58 // file and blob. 57 // file and blob.
59 GURL blob_url2("blob://url_2"); 58 GURL blob_url2("blob://url_2");
60 blob_storage_controller->RegisterBlobUrl(blob_url2, blob_data2); 59 blob_storage_controller.AddFinishedBlob(blob_url2, blob_data2);
61 60
62 blob_data_found = blob_storage_controller->GetBlobDataFromUrl(blob_url2); 61 blob_data_found = blob_storage_controller.GetBlobDataFromUrl(blob_url2);
63 ASSERT_TRUE(blob_data_found != NULL); 62 ASSERT_TRUE(blob_data_found != NULL);
64 EXPECT_TRUE(*blob_data_found == *canonicalized_blob_data2); 63 EXPECT_TRUE(*blob_data_found == *canonicalized_blob_data2);
65 64
66 // Test registering a blob URL referring to existent blob URL. 65 // Test registering a blob URL referring to existent blob URL.
67 GURL blob_url3("blob://url_3"); 66 GURL blob_url3("blob://url_3");
68 blob_storage_controller->RegisterBlobUrlFrom(blob_url3, blob_url1); 67 blob_storage_controller.CloneBlob(blob_url3, blob_url1);
69 68
70 blob_data_found = blob_storage_controller->GetBlobDataFromUrl(blob_url3); 69 blob_data_found = blob_storage_controller.GetBlobDataFromUrl(blob_url3);
71 ASSERT_TRUE(blob_data_found != NULL); 70 ASSERT_TRUE(blob_data_found != NULL);
72 EXPECT_TRUE(*blob_data_found == *blob_data1); 71 EXPECT_TRUE(*blob_data_found == *blob_data1);
73 72
74 // Test unregistering a blob URL. 73 // Test unregistering a blob URL.
75 blob_storage_controller->UnregisterBlobUrl(blob_url3); 74 blob_storage_controller.RemoveBlob(blob_url3);
76 blob_data_found = blob_storage_controller->GetBlobDataFromUrl(blob_url3); 75 blob_data_found = blob_storage_controller.GetBlobDataFromUrl(blob_url3);
77 EXPECT_TRUE(!blob_data_found); 76 EXPECT_TRUE(!blob_data_found);
78 } 77 }
79 78
80 TEST(BlobStorageControllerTest, ResolveBlobReferencesInUploadData) { 79 TEST(BlobStorageControllerTest, ResolveBlobReferencesInUploadData) {
81 // Setup blob data for testing. 80 // Setup blob data for testing.
82 base::Time time1, time2; 81 base::Time time1, time2;
83 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1); 82 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1);
84 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2); 83 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2);
85 84
86 scoped_ptr<BlobStorageController> blob_storage_controller( 85 BlobStorageController blob_storage_controller;
87 new BlobStorageController());
88
89 scoped_refptr<BlobData> blob_data(new BlobData()); 86 scoped_refptr<BlobData> blob_data(new BlobData());
90 87
91 GURL blob_url0("blob://url_0"); 88 GURL blob_url0("blob://url_0");
92 blob_storage_controller->RegisterBlobUrl(blob_url0, blob_data); 89 blob_storage_controller.AddFinishedBlob(blob_url0, blob_data);
93 90
94 blob_data->AppendData("BlobData"); 91 blob_data->AppendData("BlobData");
95 blob_data->AppendFile( 92 blob_data->AppendFile(
96 FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1); 93 FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1);
97 94
98 GURL blob_url1("blob://url_1"); 95 GURL blob_url1("blob://url_1");
99 blob_storage_controller->RegisterBlobUrl(blob_url1, blob_data); 96 blob_storage_controller.AddFinishedBlob(blob_url1, blob_data);
100 97
101 GURL blob_url2("blob://url_2"); 98 GURL blob_url2("blob://url_2");
102 blob_storage_controller->RegisterBlobUrlFrom(blob_url2, blob_url1); 99 blob_storage_controller.CloneBlob(blob_url2, blob_url1);
103 100
104 GURL blob_url3("blob://url_3"); 101 GURL blob_url3("blob://url_3");
105 blob_storage_controller->RegisterBlobUrlFrom(blob_url3, blob_url2); 102 blob_storage_controller.CloneBlob(blob_url3, blob_url2);
106 103
107 // Setup upload data elements for comparison. 104 // Setup upload data elements for comparison.
108 UploadData::Element blob_element1, blob_element2; 105 UploadData::Element blob_element1, blob_element2;
109 blob_element1.SetToBytes( 106 blob_element1.SetToBytes(
110 blob_data->items().at(0).data().c_str() + 107 blob_data->items().at(0).data.c_str() +
111 static_cast<int>(blob_data->items().at(0).offset()), 108 static_cast<int>(blob_data->items().at(0).offset),
112 static_cast<int>(blob_data->items().at(0).length())); 109 static_cast<int>(blob_data->items().at(0).length));
113 blob_element2.SetToFilePathRange( 110 blob_element2.SetToFilePathRange(
114 blob_data->items().at(1).file_path(), 111 blob_data->items().at(1).file_path,
115 blob_data->items().at(1).offset(), 112 blob_data->items().at(1).offset,
116 blob_data->items().at(1).length(), 113 blob_data->items().at(1).length,
117 blob_data->items().at(1).expected_modification_time()); 114 blob_data->items().at(1).expected_modification_time);
118 115
119 UploadData::Element upload_element1, upload_element2; 116 UploadData::Element upload_element1, upload_element2;
120 upload_element1.SetToBytes("Hello", 5); 117 upload_element1.SetToBytes("Hello", 5);
121 upload_element2.SetToFilePathRange( 118 upload_element2.SetToFilePathRange(
122 FilePath(FILE_PATH_LITERAL("foo1.txt")), 0, 20, time2); 119 FilePath(FILE_PATH_LITERAL("foo1.txt")), 0, 20, time2);
123 120
124 // Test no blob reference. 121 // Test no blob reference.
125 scoped_refptr<UploadData> upload_data(new UploadData()); 122 scoped_refptr<UploadData> upload_data(new UploadData());
126 upload_data->AppendBytes( 123 upload_data->AppendBytes(
127 &upload_element1.bytes().at(0), 124 &upload_element1.bytes().at(0),
128 upload_element1.bytes().size()); 125 upload_element1.bytes().size());
129 upload_data->AppendFileRange( 126 upload_data->AppendFileRange(
130 upload_element2.file_path(), 127 upload_element2.file_path(),
131 upload_element2.file_range_offset(), 128 upload_element2.file_range_offset(),
132 upload_element2.file_range_length(), 129 upload_element2.file_range_length(),
133 upload_element2.expected_file_modification_time()); 130 upload_element2.expected_file_modification_time());
134 131
135 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 132 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
136 ASSERT_EQ(upload_data->elements()->size(), 2U); 133 ASSERT_EQ(upload_data->elements()->size(), 2U);
137 EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1); 134 EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1);
138 EXPECT_TRUE(upload_data->elements()->at(1) == upload_element2); 135 EXPECT_TRUE(upload_data->elements()->at(1) == upload_element2);
139 136
140 // Test having only one blob reference that refers to empty blob data. 137 // Test having only one blob reference that refers to empty blob data.
141 upload_data = new UploadData(); 138 upload_data = new UploadData();
142 upload_data->AppendBlob(blob_url0); 139 upload_data->AppendBlob(blob_url0);
143 140
144 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 141 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
145 ASSERT_EQ(upload_data->elements()->size(), 0U); 142 ASSERT_EQ(upload_data->elements()->size(), 0U);
146 143
147 // Test having only one blob reference. 144 // Test having only one blob reference.
148 upload_data = new UploadData(); 145 upload_data = new UploadData();
149 upload_data->AppendBlob(blob_url1); 146 upload_data->AppendBlob(blob_url1);
150 147
151 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 148 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
152 ASSERT_EQ(upload_data->elements()->size(), 2U); 149 ASSERT_EQ(upload_data->elements()->size(), 2U);
153 EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1); 150 EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1);
154 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2); 151 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2);
155 152
156 // Test having one blob reference at the beginning. 153 // Test having one blob reference at the beginning.
157 upload_data = new UploadData(); 154 upload_data = new UploadData();
158 upload_data->AppendBlob(blob_url1); 155 upload_data->AppendBlob(blob_url1);
159 upload_data->AppendBytes( 156 upload_data->AppendBytes(
160 &upload_element1.bytes().at(0), 157 &upload_element1.bytes().at(0),
161 upload_element1.bytes().size()); 158 upload_element1.bytes().size());
162 upload_data->AppendFileRange( 159 upload_data->AppendFileRange(
163 upload_element2.file_path(), 160 upload_element2.file_path(),
164 upload_element2.file_range_offset(), 161 upload_element2.file_range_offset(),
165 upload_element2.file_range_length(), 162 upload_element2.file_range_length(),
166 upload_element2.expected_file_modification_time()); 163 upload_element2.expected_file_modification_time());
167 164
168 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 165 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
169 ASSERT_EQ(upload_data->elements()->size(), 4U); 166 ASSERT_EQ(upload_data->elements()->size(), 4U);
170 EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1); 167 EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1);
171 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2); 168 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2);
172 EXPECT_TRUE(upload_data->elements()->at(2) == upload_element1); 169 EXPECT_TRUE(upload_data->elements()->at(2) == upload_element1);
173 EXPECT_TRUE(upload_data->elements()->at(3) == upload_element2); 170 EXPECT_TRUE(upload_data->elements()->at(3) == upload_element2);
174 171
175 // Test having one blob reference at the end. 172 // Test having one blob reference at the end.
176 upload_data = new UploadData(); 173 upload_data = new UploadData();
177 upload_data->AppendBytes( 174 upload_data->AppendBytes(
178 &upload_element1.bytes().at(0), 175 &upload_element1.bytes().at(0),
179 upload_element1.bytes().size()); 176 upload_element1.bytes().size());
180 upload_data->AppendFileRange( 177 upload_data->AppendFileRange(
181 upload_element2.file_path(), 178 upload_element2.file_path(),
182 upload_element2.file_range_offset(), 179 upload_element2.file_range_offset(),
183 upload_element2.file_range_length(), 180 upload_element2.file_range_length(),
184 upload_element2.expected_file_modification_time()); 181 upload_element2.expected_file_modification_time());
185 upload_data->AppendBlob(blob_url1); 182 upload_data->AppendBlob(blob_url1);
186 183
187 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 184 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
188 ASSERT_EQ(upload_data->elements()->size(), 4U); 185 ASSERT_EQ(upload_data->elements()->size(), 4U);
189 EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1); 186 EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1);
190 EXPECT_TRUE(upload_data->elements()->at(1) == upload_element2); 187 EXPECT_TRUE(upload_data->elements()->at(1) == upload_element2);
191 EXPECT_TRUE(upload_data->elements()->at(2) == blob_element1); 188 EXPECT_TRUE(upload_data->elements()->at(2) == blob_element1);
192 EXPECT_TRUE(upload_data->elements()->at(3) == blob_element2); 189 EXPECT_TRUE(upload_data->elements()->at(3) == blob_element2);
193 190
194 // Test having one blob reference in the middle. 191 // Test having one blob reference in the middle.
195 upload_data = new UploadData(); 192 upload_data = new UploadData();
196 upload_data->AppendBytes( 193 upload_data->AppendBytes(
197 &upload_element1.bytes().at(0), 194 &upload_element1.bytes().at(0),
198 upload_element1.bytes().size()); 195 upload_element1.bytes().size());
199 upload_data->AppendBlob(blob_url1); 196 upload_data->AppendBlob(blob_url1);
200 upload_data->AppendFileRange( 197 upload_data->AppendFileRange(
201 upload_element2.file_path(), 198 upload_element2.file_path(),
202 upload_element2.file_range_offset(), 199 upload_element2.file_range_offset(),
203 upload_element2.file_range_length(), 200 upload_element2.file_range_length(),
204 upload_element2.expected_file_modification_time()); 201 upload_element2.expected_file_modification_time());
205 202
206 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 203 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
207 ASSERT_EQ(upload_data->elements()->size(), 4U); 204 ASSERT_EQ(upload_data->elements()->size(), 4U);
208 EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1); 205 EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1);
209 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element1); 206 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element1);
210 EXPECT_TRUE(upload_data->elements()->at(2) == blob_element2); 207 EXPECT_TRUE(upload_data->elements()->at(2) == blob_element2);
211 EXPECT_TRUE(upload_data->elements()->at(3) == upload_element2); 208 EXPECT_TRUE(upload_data->elements()->at(3) == upload_element2);
212 209
213 // Test having multiple blob references. 210 // Test having multiple blob references.
214 upload_data = new UploadData(); 211 upload_data = new UploadData();
215 upload_data->AppendBlob(blob_url1); 212 upload_data->AppendBlob(blob_url1);
216 upload_data->AppendBytes( 213 upload_data->AppendBytes(
217 &upload_element1.bytes().at(0), 214 &upload_element1.bytes().at(0),
218 upload_element1.bytes().size()); 215 upload_element1.bytes().size());
219 upload_data->AppendBlob(blob_url2); 216 upload_data->AppendBlob(blob_url2);
220 upload_data->AppendBlob(blob_url3); 217 upload_data->AppendBlob(blob_url3);
221 upload_data->AppendFileRange( 218 upload_data->AppendFileRange(
222 upload_element2.file_path(), 219 upload_element2.file_path(),
223 upload_element2.file_range_offset(), 220 upload_element2.file_range_offset(),
224 upload_element2.file_range_length(), 221 upload_element2.file_range_length(),
225 upload_element2.expected_file_modification_time()); 222 upload_element2.expected_file_modification_time());
226 223
227 blob_storage_controller->ResolveBlobReferencesInUploadData(upload_data.get()); 224 blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get());
228 ASSERT_EQ(upload_data->elements()->size(), 8U); 225 ASSERT_EQ(upload_data->elements()->size(), 8U);
229 EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1); 226 EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1);
230 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2); 227 EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2);
231 EXPECT_TRUE(upload_data->elements()->at(2) == upload_element1); 228 EXPECT_TRUE(upload_data->elements()->at(2) == upload_element1);
232 EXPECT_TRUE(upload_data->elements()->at(3) == blob_element1); 229 EXPECT_TRUE(upload_data->elements()->at(3) == blob_element1);
233 EXPECT_TRUE(upload_data->elements()->at(4) == blob_element2); 230 EXPECT_TRUE(upload_data->elements()->at(4) == blob_element2);
234 EXPECT_TRUE(upload_data->elements()->at(5) == blob_element1); 231 EXPECT_TRUE(upload_data->elements()->at(5) == blob_element1);
235 EXPECT_TRUE(upload_data->elements()->at(6) == blob_element2); 232 EXPECT_TRUE(upload_data->elements()->at(6) == blob_element2);
236 EXPECT_TRUE(upload_data->elements()->at(7) == upload_element2); 233 EXPECT_TRUE(upload_data->elements()->at(7) == upload_element2);
237 } 234 }
238 235
239 } // namespace webkit_blob 236 } // namespace webkit_blob
OLDNEW
« no previous file with comments | « webkit/blob/blob_storage_controller.cc ('k') | webkit/blob/blob_url_request_job.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698