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

Side by Side Diff: webkit/fileapi/file_system_operation_write_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
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 // NOTE: These tests are run as part of "unit_tests" (in chrome/test/unit) 5 // NOTE: These tests are run as part of "unit_tests" (in chrome/test/unit)
6 // rather than as part of test_shell_tests because they rely on being able 6 // rather than as part of test_shell_tests because they rely on being able
7 // to instantiate a MessageLoop of type TYPE_IO. test_shell_tests uses 7 // to instantiate a MessageLoop of type TYPE_IO. test_shell_tests uses
8 // TYPE_UI, which URLRequest doesn't allow. 8 // TYPE_UI, which URLRequest doesn't allow.
9 // 9 //
10 10
11 #include <vector>
12
11 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
12 #include "base/message_loop.h" 14 #include "base/message_loop.h"
13 #include "base/message_loop.h" 15 #include "base/message_loop.h"
14 #include "base/message_loop_proxy.h" 16 #include "base/message_loop_proxy.h"
15 #include "base/scoped_temp_dir.h" 17 #include "base/scoped_temp_dir.h"
16 #include "googleurl/src/gurl.h" 18 #include "googleurl/src/gurl.h"
17 #include "net/url_request/url_request.h" 19 #include "net/url_request/url_request.h"
18 #include "net/url_request/url_request_context.h" 20 #include "net/url_request/url_request_context.h"
19 #include "net/url_request/url_request_job.h" 21 #include "net/url_request/url_request_job.h"
20 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
21 #include "webkit/blob/blob_data.h" 23 #include "webkit/blob/blob_data.h"
22 #include "webkit/blob/blob_storage_controller.h" 24 #include "webkit/blob/blob_storage_controller.h"
23 #include "webkit/blob/blob_url_request_job.h" 25 #include "webkit/blob/blob_url_request_job.h"
24 #include "webkit/fileapi/file_system_callback_dispatcher.h" 26 #include "webkit/fileapi/file_system_callback_dispatcher.h"
25 #include "webkit/fileapi/file_system_context.h" 27 #include "webkit/fileapi/file_system_context.h"
26 #include "webkit/fileapi/file_system_file_util.h" 28 #include "webkit/fileapi/file_system_file_util.h"
27 #include "webkit/fileapi/file_system_operation.h" 29 #include "webkit/fileapi/file_system_operation.h"
28 #include "webkit/fileapi/file_system_path_manager.h" 30 #include "webkit/fileapi/file_system_path_manager.h"
29 #include "webkit/fileapi/file_system_test_helper.h" 31 #include "webkit/fileapi/file_system_test_helper.h"
30 #include "webkit/fileapi/file_system_util.h" 32 #include "webkit/fileapi/file_system_util.h"
31 #include "webkit/fileapi/local_file_util.h" 33 #include "webkit/fileapi/local_file_util.h"
32 #include "webkit/fileapi/quota_file_util.h" 34 #include "webkit/fileapi/quota_file_util.h"
33 #include "webkit/quota/quota_manager.h" 35 #include "webkit/quota/quota_manager.h"
34 36
35 using quota::QuotaManager; 37 using quota::QuotaManager;
38 using webkit_blob::BlobData;
36 39
37 namespace fileapi { 40 namespace fileapi {
38 41
39 namespace { 42 namespace {
40 43
41 class MockQuotaManager : public QuotaManager { 44 class MockQuotaManager : public QuotaManager {
42 public: 45 public:
43 MockQuotaManager(const FilePath& base_dir, int64 quota) 46 MockQuotaManager(const FilePath& base_dir, int64 quota)
44 : QuotaManager(false /* is_incognito */, base_dir, 47 : QuotaManager(false /* is_incognito */, base_dir,
45 base::MessageLoopProxy::current(), 48 base::MessageLoopProxy::current(),
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 public: 127 public:
125 TestURLRequestContext() 128 TestURLRequestContext()
126 : blob_storage_controller_(new webkit_blob::BlobStorageController) {} 129 : blob_storage_controller_(new webkit_blob::BlobStorageController) {}
127 130
128 virtual ~TestURLRequestContext() {} 131 virtual ~TestURLRequestContext() {}
129 132
130 webkit_blob::BlobStorageController* blob_storage_controller() const { 133 webkit_blob::BlobStorageController* blob_storage_controller() const {
131 return blob_storage_controller_.get(); 134 return blob_storage_controller_.get();
132 } 135 }
133 136
137 void RegisterBlobUrl(const GURL& url, const BlobData* data) {
jianli 2011/09/29 01:13:33 This helper function seems to be same as one we in
michaeln 2011/09/29 18:59:37 Done, shared as controller->AddFinishedBlob(url, d
138 blob_storage_controller_->RegisterUnfinalizedBlobUrl(url);
139 for (std::vector<BlobData::Item>::const_iterator iter =
140 data->items().begin();
141 iter != data->items().end(); ++iter) {
142 blob_storage_controller_->AppendBlobDataItem(url, *iter);
143 }
144 blob_storage_controller_->FinalizeBlob(url, data->content_type());
145 }
146
147
134 private: 148 private:
135 scoped_ptr<webkit_blob::BlobStorageController> blob_storage_controller_; 149 scoped_ptr<webkit_blob::BlobStorageController> blob_storage_controller_;
136 }; 150 };
137 151
138 static net::URLRequestJob* BlobURLRequestJobFactory(net::URLRequest* request, 152 static net::URLRequestJob* BlobURLRequestJobFactory(net::URLRequest* request,
139 const std::string& scheme) { 153 const std::string& scheme) {
140 webkit_blob::BlobStorageController* blob_storage_controller = 154 webkit_blob::BlobStorageController* blob_storage_controller =
141 static_cast<const TestURLRequestContext*>(request->context())-> 155 static_cast<const TestURLRequestContext*>(request->context())->
142 blob_storage_controller(); 156 blob_storage_controller();
143 return new webkit_blob::BlobURLRequestJob( 157 return new webkit_blob::BlobURLRequestJob(
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 return test_helper_.NewOperation(new MockDispatcher(this)); 230 return test_helper_.NewOperation(new MockDispatcher(this));
217 } 231 }
218 232
219 TEST_F(FileSystemOperationWriteTest, TestWriteSuccess) { 233 TEST_F(FileSystemOperationWriteTest, TestWriteSuccess) {
220 GURL blob_url("blob:success"); 234 GURL blob_url("blob:success");
221 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 235 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
222 blob_data->AppendData("Hello, world!\n"); 236 blob_data->AppendData("Hello, world!\n");
223 237
224 scoped_refptr<TestURLRequestContext> url_request_context( 238 scoped_refptr<TestURLRequestContext> url_request_context(
225 new TestURLRequestContext()); 239 new TestURLRequestContext());
226 url_request_context->blob_storage_controller()-> 240 url_request_context->RegisterBlobUrl(blob_url, blob_data);
227 RegisterBlobUrl(blob_url, blob_data);
228 241
229 operation()->Write(url_request_context, URLForPath(virtual_path_), blob_url, 242 operation()->Write(url_request_context, URLForPath(virtual_path_), blob_url,
230 0); 243 0);
231 MessageLoop::current()->Run(); 244 MessageLoop::current()->Run();
232 245
233 url_request_context->blob_storage_controller()->UnregisterBlobUrl(blob_url); 246 url_request_context->blob_storage_controller()->UnregisterBlobUrl(blob_url);
234 247
235 EXPECT_EQ(14, bytes_written()); 248 EXPECT_EQ(14, bytes_written());
236 EXPECT_EQ(base::PLATFORM_FILE_OK, status()); 249 EXPECT_EQ(base::PLATFORM_FILE_OK, status());
237 EXPECT_TRUE(complete()); 250 EXPECT_TRUE(complete());
238 } 251 }
239 252
240 TEST_F(FileSystemOperationWriteTest, TestWriteZero) { 253 TEST_F(FileSystemOperationWriteTest, TestWriteZero) {
241 GURL blob_url("blob:zero"); 254 GURL blob_url("blob:zero");
242 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 255 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
243 blob_data->AppendData(""); 256 blob_data->AppendData("");
244 257
245 scoped_refptr<TestURLRequestContext> url_request_context( 258 scoped_refptr<TestURLRequestContext> url_request_context(
246 new TestURLRequestContext()); 259 new TestURLRequestContext());
247 url_request_context->blob_storage_controller()-> 260 url_request_context->RegisterBlobUrl(blob_url, blob_data);
248 RegisterBlobUrl(blob_url, blob_data);
249 261
250 operation()->Write(url_request_context, URLForPath(virtual_path_), 262 operation()->Write(url_request_context, URLForPath(virtual_path_),
251 blob_url, 0); 263 blob_url, 0);
252 MessageLoop::current()->Run(); 264 MessageLoop::current()->Run();
253 265
254 url_request_context->blob_storage_controller()->UnregisterBlobUrl(blob_url); 266 url_request_context->blob_storage_controller()->UnregisterBlobUrl(blob_url);
255 267
256 EXPECT_EQ(0, bytes_written()); 268 EXPECT_EQ(0, bytes_written());
257 EXPECT_EQ(base::PLATFORM_FILE_OK, status()); 269 EXPECT_EQ(base::PLATFORM_FILE_OK, status());
258 EXPECT_TRUE(complete()); 270 EXPECT_TRUE(complete());
(...skipping 12 matching lines...) Expand all
271 EXPECT_TRUE(complete()); 283 EXPECT_TRUE(complete());
272 } 284 }
273 285
274 TEST_F(FileSystemOperationWriteTest, TestWriteInvalidFile) { 286 TEST_F(FileSystemOperationWriteTest, TestWriteInvalidFile) {
275 GURL blob_url("blob:writeinvalidfile"); 287 GURL blob_url("blob:writeinvalidfile");
276 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 288 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
277 blob_data->AppendData("It\'ll not be written."); 289 blob_data->AppendData("It\'ll not be written.");
278 290
279 scoped_refptr<TestURLRequestContext> url_request_context( 291 scoped_refptr<TestURLRequestContext> url_request_context(
280 new TestURLRequestContext()); 292 new TestURLRequestContext());
281 url_request_context->blob_storage_controller()-> 293 url_request_context->RegisterBlobUrl(blob_url, blob_data);
282 RegisterBlobUrl(blob_url, blob_data);
283 294
284 operation()->Write(url_request_context, 295 operation()->Write(url_request_context,
285 URLForPath(FilePath(FILE_PATH_LITERAL("nonexist"))), 296 URLForPath(FilePath(FILE_PATH_LITERAL("nonexist"))),
286 blob_url, 0); 297 blob_url, 0);
287 MessageLoop::current()->Run(); 298 MessageLoop::current()->Run();
288 299
289 url_request_context->blob_storage_controller()->UnregisterBlobUrl(blob_url); 300 url_request_context->blob_storage_controller()->UnregisterBlobUrl(blob_url);
290 301
291 EXPECT_EQ(0, bytes_written()); 302 EXPECT_EQ(0, bytes_written());
292 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, status()); 303 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, status());
293 EXPECT_TRUE(complete()); 304 EXPECT_TRUE(complete());
294 } 305 }
295 306
296 TEST_F(FileSystemOperationWriteTest, TestWriteDir) { 307 TEST_F(FileSystemOperationWriteTest, TestWriteDir) {
297 FilePath subdir; 308 FilePath subdir;
298 ASSERT_TRUE(file_util::CreateTemporaryDirInDir(filesystem_dir_, 309 ASSERT_TRUE(file_util::CreateTemporaryDirInDir(filesystem_dir_,
299 FILE_PATH_LITERAL("d"), 310 FILE_PATH_LITERAL("d"),
300 &subdir)); 311 &subdir));
301 FilePath virtual_subdir_path = subdir.BaseName(); 312 FilePath virtual_subdir_path = subdir.BaseName();
302 313
303 GURL blob_url("blob:writedir"); 314 GURL blob_url("blob:writedir");
304 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 315 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
305 blob_data->AppendData("It\'ll not be written, too."); 316 blob_data->AppendData("It\'ll not be written, too.");
306 317
307 scoped_refptr<TestURLRequestContext> url_request_context( 318 scoped_refptr<TestURLRequestContext> url_request_context(
308 new TestURLRequestContext()); 319 new TestURLRequestContext());
309 url_request_context->blob_storage_controller()-> 320 url_request_context->RegisterBlobUrl(blob_url, blob_data);
310 RegisterBlobUrl(blob_url, blob_data);
311 321
312 operation()->Write(url_request_context, URLForPath(virtual_subdir_path), 322 operation()->Write(url_request_context, URLForPath(virtual_subdir_path),
313 blob_url, 0); 323 blob_url, 0);
314 MessageLoop::current()->Run(); 324 MessageLoop::current()->Run();
315 325
316 url_request_context->blob_storage_controller()->UnregisterBlobUrl(blob_url); 326 url_request_context->blob_storage_controller()->UnregisterBlobUrl(blob_url);
317 327
318 EXPECT_EQ(0, bytes_written()); 328 EXPECT_EQ(0, bytes_written());
319 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ACCESS_DENIED, status()); 329 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ACCESS_DENIED, status());
320 EXPECT_TRUE(complete()); 330 EXPECT_TRUE(complete());
321 } 331 }
322 332
323 TEST_F(FileSystemOperationWriteTest, TestWriteFailureByQuota) { 333 TEST_F(FileSystemOperationWriteTest, TestWriteFailureByQuota) {
324 GURL blob_url("blob:success"); 334 GURL blob_url("blob:success");
325 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 335 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
326 blob_data->AppendData("Hello, world!\n"); 336 blob_data->AppendData("Hello, world!\n");
327 337
328 scoped_refptr<TestURLRequestContext> url_request_context( 338 scoped_refptr<TestURLRequestContext> url_request_context(
329 new TestURLRequestContext()); 339 new TestURLRequestContext());
330 url_request_context->blob_storage_controller()-> 340 url_request_context->RegisterBlobUrl(blob_url, blob_data);
331 RegisterBlobUrl(blob_url, blob_data);
332 341
333 quota_manager_->set_quota(10); 342 quota_manager_->set_quota(10);
334 operation()->Write(url_request_context, URLForPath(virtual_path_), blob_url, 343 operation()->Write(url_request_context, URLForPath(virtual_path_), blob_url,
335 0); 344 0);
336 MessageLoop::current()->Run(); 345 MessageLoop::current()->Run();
337 346
338 url_request_context->blob_storage_controller()->UnregisterBlobUrl(blob_url); 347 url_request_context->blob_storage_controller()->UnregisterBlobUrl(blob_url);
339 348
340 EXPECT_EQ(10, bytes_written()); 349 EXPECT_EQ(10, bytes_written());
341 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, status()); 350 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, status());
342 EXPECT_TRUE(complete()); 351 EXPECT_TRUE(complete());
343 } 352 }
344 353
345 // TODO(ericu,dmikurube): Add tests for Cancel. 354 // TODO(ericu,dmikurube): Add tests for Cancel.
346 355
347 } // namespace fileapi 356 } // namespace fileapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698