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

Side by Side Diff: webkit/fileapi/file_writer_delegate_unittest.cc

Issue 10008047: FileWriterDelegate should not call URLRequest::Start() after Cancel(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixing.. Created 8 years, 8 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 CreateNewOperation(result_.get(), allowed_growth), 116 CreateNewOperation(result_.get(), allowed_growth),
117 test_helper_.CreatePath(file_path_), 117 test_helper_.CreatePath(file_path_),
118 offset, base::MessageLoopProxy::current())); 118 offset, base::MessageLoopProxy::current()));
119 request_.reset(new net::URLRequest(blob_url, file_writer_delegate_.get())); 119 request_.reset(new net::URLRequest(blob_url, file_writer_delegate_.get()));
120 } 120 }
121 121
122 FileSystemOperation* CreateNewOperation(Result* result, int64 quota); 122 FileSystemOperation* CreateNewOperation(Result* result, int64 quota);
123 123
124 static net::URLRequest::ProtocolFactory Factory; 124 static net::URLRequest::ProtocolFactory Factory;
125 125
126 // This should be alive until the very end of this instance.
127 MessageLoop loop_;
128
126 scoped_ptr<QuotaFileUtil> quota_file_util_; 129 scoped_ptr<QuotaFileUtil> quota_file_util_;
127 scoped_ptr<FileWriterDelegate> file_writer_delegate_; 130 scoped_ptr<FileWriterDelegate> file_writer_delegate_;
128 scoped_ptr<net::URLRequest> request_; 131 scoped_ptr<net::URLRequest> request_;
129 scoped_ptr<Result> result_; 132 scoped_ptr<Result> result_;
130 FileSystemTestOriginHelper test_helper_; 133 FileSystemTestOriginHelper test_helper_;
131 134
132 MessageLoop loop_;
133 ScopedTempDir dir_; 135 ScopedTempDir dir_;
134 FilePath file_path_; 136 FilePath file_path_;
135 PlatformFile file_; 137 PlatformFile file_;
136 138
137 static const char* content_; 139 static const char* content_;
138 }; 140 };
139 const char* FileWriterDelegateTest::content_ = NULL; 141 const char* FileWriterDelegateTest::content_ = NULL;
140 142
141 namespace { 143 namespace {
142 144
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 return operation; 220 return operation;
219 } 221 }
220 222
221 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimit) { 223 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimit) {
222 const GURL kBlobURL("blob:nolimit"); 224 const GURL kBlobURL("blob:nolimit");
223 content_ = kData; 225 content_ = kData;
224 226
225 PrepareForWrite(kBlobURL, 0, QuotaFileUtil::kNoLimit); 227 PrepareForWrite(kBlobURL, 0, QuotaFileUtil::kNoLimit);
226 228
227 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); 229 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage());
228 file_writer_delegate_->Start(file_, request_.get()); 230 file_writer_delegate_->Start(file_, request_.Pass());
229 MessageLoop::current()->Run(); 231 MessageLoop::current()->Run();
230 ASSERT_EQ(kDataSize, test_helper_.GetCachedOriginUsage()); 232 ASSERT_EQ(kDataSize, test_helper_.GetCachedOriginUsage());
231 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); 233 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage());
232 234
233 EXPECT_EQ(kDataSize, result_->bytes_written()); 235 EXPECT_EQ(kDataSize, result_->bytes_written());
234 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); 236 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
235 EXPECT_TRUE(result_->complete()); 237 EXPECT_TRUE(result_->complete());
236 238
237 file_writer_delegate_.reset(); 239 file_writer_delegate_.reset();
238 } 240 }
239 241
240 TEST_F(FileWriterDelegateTest, WriteSuccessWithJustQuota) { 242 TEST_F(FileWriterDelegateTest, WriteSuccessWithJustQuota) {
241 const GURL kBlobURL("blob:just"); 243 const GURL kBlobURL("blob:just");
242 content_ = kData; 244 content_ = kData;
243 const int64 kAllowedGrowth = kDataSize; 245 const int64 kAllowedGrowth = kDataSize;
244 PrepareForWrite(kBlobURL, 0, kAllowedGrowth); 246 PrepareForWrite(kBlobURL, 0, kAllowedGrowth);
245 247
246 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); 248 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage());
247 file_writer_delegate_->Start(file_, request_.get()); 249 file_writer_delegate_->Start(file_, request_.Pass());
248 MessageLoop::current()->Run(); 250 MessageLoop::current()->Run();
249 ASSERT_EQ(kAllowedGrowth, test_helper_.GetCachedOriginUsage()); 251 ASSERT_EQ(kAllowedGrowth, test_helper_.GetCachedOriginUsage());
250 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); 252 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage());
251 253
252 file_writer_delegate_.reset(); 254 file_writer_delegate_.reset();
253 255
254 EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); 256 EXPECT_EQ(kAllowedGrowth, result_->bytes_written());
255 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); 257 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
256 EXPECT_TRUE(result_->complete()); 258 EXPECT_TRUE(result_->complete());
257 } 259 }
258 260
259 TEST_F(FileWriterDelegateTest, WriteFailureByQuota) { 261 TEST_F(FileWriterDelegateTest, WriteFailureByQuota) {
260 const GURL kBlobURL("blob:failure"); 262 const GURL kBlobURL("blob:failure");
261 content_ = kData; 263 content_ = kData;
262 const int64 kAllowedGrowth = kDataSize - 1; 264 const int64 kAllowedGrowth = kDataSize - 1;
263 PrepareForWrite(kBlobURL, 0, kAllowedGrowth); 265 PrepareForWrite(kBlobURL, 0, kAllowedGrowth);
264 266
265 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); 267 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage());
266 file_writer_delegate_->Start(file_, request_.get()); 268 file_writer_delegate_->Start(file_, request_.Pass());
267 MessageLoop::current()->Run(); 269 MessageLoop::current()->Run();
268 ASSERT_EQ(kAllowedGrowth, test_helper_.GetCachedOriginUsage()); 270 ASSERT_EQ(kAllowedGrowth, test_helper_.GetCachedOriginUsage());
269 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); 271 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage());
270 272
271 file_writer_delegate_.reset(); 273 file_writer_delegate_.reset();
272 274
273 EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); 275 EXPECT_EQ(kAllowedGrowth, result_->bytes_written());
274 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status()); 276 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status());
275 EXPECT_TRUE(result_->complete()); 277 EXPECT_TRUE(result_->complete());
276 } 278 }
277 279
278 TEST_F(FileWriterDelegateTest, WriteZeroBytesSuccessfullyWithZeroQuota) { 280 TEST_F(FileWriterDelegateTest, WriteZeroBytesSuccessfullyWithZeroQuota) {
279 const GURL kBlobURL("blob:zero"); 281 const GURL kBlobURL("blob:zero");
280 content_ = ""; 282 content_ = "";
281 int64 kAllowedGrowth = 0; 283 int64 kAllowedGrowth = 0;
282 PrepareForWrite(kBlobURL, 0, kAllowedGrowth); 284 PrepareForWrite(kBlobURL, 0, kAllowedGrowth);
283 285
284 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); 286 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage());
285 file_writer_delegate_->Start(file_, request_.get()); 287 file_writer_delegate_->Start(file_, request_.Pass());
286 MessageLoop::current()->Run(); 288 MessageLoop::current()->Run();
287 ASSERT_EQ(kAllowedGrowth, test_helper_.GetCachedOriginUsage()); 289 ASSERT_EQ(kAllowedGrowth, test_helper_.GetCachedOriginUsage());
288 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); 290 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage());
289 291
290 file_writer_delegate_.reset(); 292 file_writer_delegate_.reset();
291 293
292 EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); 294 EXPECT_EQ(kAllowedGrowth, result_->bytes_written());
293 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); 295 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
294 EXPECT_TRUE(result_->complete()); 296 EXPECT_TRUE(result_->complete());
295 } 297 }
(...skipping 24 matching lines...) Expand all
320 322
321 // Credate another FileWriterDelegate for concurrent write. 323 // Credate another FileWriterDelegate for concurrent write.
322 result2.reset(new Result()); 324 result2.reset(new Result());
323 file_writer_delegate2.reset(new FileWriterDelegate( 325 file_writer_delegate2.reset(new FileWriterDelegate(
324 CreateNewOperation(result2.get(), QuotaFileUtil::kNoLimit), 326 CreateNewOperation(result2.get(), QuotaFileUtil::kNoLimit),
325 test_helper_.CreatePath(file_path2), 327 test_helper_.CreatePath(file_path2),
326 0, base::MessageLoopProxy::current())); 328 0, base::MessageLoopProxy::current()));
327 request2.reset(new net::URLRequest(kBlobURL2, file_writer_delegate2.get())); 329 request2.reset(new net::URLRequest(kBlobURL2, file_writer_delegate2.get()));
328 330
329 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); 331 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage());
330 file_writer_delegate_->Start(file_, request_.get()); 332 file_writer_delegate_->Start(file_, request_.Pass());
331 file_writer_delegate2->Start(file2, request2.get()); 333 file_writer_delegate2->Start(file2, request2.Pass());
332 MessageLoop::current()->Run(); 334 MessageLoop::current()->Run();
333 if (!result_->complete() || !result2->complete()) 335 if (!result_->complete() || !result2->complete())
334 MessageLoop::current()->Run(); 336 MessageLoop::current()->Run();
335 337
336 ASSERT_EQ(kDataSize * 2, test_helper_.GetCachedOriginUsage()); 338 ASSERT_EQ(kDataSize * 2, test_helper_.GetCachedOriginUsage());
337 base::FlushPlatformFile(file2); 339 base::FlushPlatformFile(file2);
338 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); 340 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage());
339 341
340 file_writer_delegate_.reset(); 342 file_writer_delegate_.reset();
341 343
(...skipping 11 matching lines...) Expand all
353 const GURL kBlobURL("blob:failure-with-updated-quota"); 355 const GURL kBlobURL("blob:failure-with-updated-quota");
354 content_ = kData; 356 content_ = kData;
355 357
356 // Writing kDataSize (=45) bytes data while allowed_growth is 100. 358 // Writing kDataSize (=45) bytes data while allowed_growth is 100.
357 int64 offset = 0; 359 int64 offset = 0;
358 int64 allowed_growth = 100; 360 int64 allowed_growth = 100;
359 ASSERT_LT(kDataSize, allowed_growth); 361 ASSERT_LT(kDataSize, allowed_growth);
360 PrepareForWrite(kBlobURL, offset, allowed_growth); 362 PrepareForWrite(kBlobURL, offset, allowed_growth);
361 363
362 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage()); 364 ASSERT_EQ(0, test_helper_.GetCachedOriginUsage());
363 file_writer_delegate_->Start(file_, request_.get()); 365 file_writer_delegate_->Start(file_, request_.Pass());
364 MessageLoop::current()->Run(); 366 MessageLoop::current()->Run();
365 ASSERT_EQ(kDataSize, test_helper_.GetCachedOriginUsage()); 367 ASSERT_EQ(kDataSize, test_helper_.GetCachedOriginUsage());
366 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); 368 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage());
367 EXPECT_EQ(kDataSize, result_->bytes_written()); 369 EXPECT_EQ(kDataSize, result_->bytes_written());
368 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); 370 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
369 EXPECT_TRUE(result_->complete()); 371 EXPECT_TRUE(result_->complete());
370 372
371 // Trying to overwrite kDataSize bytes data while allowed_growth is 20. 373 // Trying to overwrite kDataSize bytes data while allowed_growth is 20.
372 offset = 0; 374 offset = 0;
373 allowed_growth = 20; 375 allowed_growth = 20;
374 PrepareForWrite(kBlobURL, offset, allowed_growth); 376 PrepareForWrite(kBlobURL, offset, allowed_growth);
375 377
376 file_writer_delegate_->Start(file_, request_.get()); 378 file_writer_delegate_->Start(file_, request_.Pass());
377 MessageLoop::current()->Run(); 379 MessageLoop::current()->Run();
378 EXPECT_EQ(kDataSize, test_helper_.GetCachedOriginUsage()); 380 EXPECT_EQ(kDataSize, test_helper_.GetCachedOriginUsage());
379 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); 381 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage());
380 EXPECT_EQ(kDataSize, result_->bytes_written()); 382 EXPECT_EQ(kDataSize, result_->bytes_written());
381 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); 383 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
382 EXPECT_TRUE(result_->complete()); 384 EXPECT_TRUE(result_->complete());
383 385
384 // Trying to write kDataSize bytes data from offset 25 while 386 // Trying to write kDataSize bytes data from offset 25 while
385 // allowed_growth is 55. 387 // allowed_growth is 55.
386 offset = 25; 388 offset = 25;
387 allowed_growth = 55; 389 allowed_growth = 55;
388 PrepareForWrite(kBlobURL, offset, allowed_growth); 390 PrepareForWrite(kBlobURL, offset, allowed_growth);
389 391
390 file_writer_delegate_->Start(file_, request_.get()); 392 file_writer_delegate_->Start(file_, request_.Pass());
391 MessageLoop::current()->Run(); 393 MessageLoop::current()->Run();
392 EXPECT_EQ(offset + kDataSize, test_helper_.GetCachedOriginUsage()); 394 EXPECT_EQ(offset + kDataSize, test_helper_.GetCachedOriginUsage());
393 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); 395 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage());
394 EXPECT_EQ(kDataSize, result_->bytes_written()); 396 EXPECT_EQ(kDataSize, result_->bytes_written());
395 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); 397 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
396 EXPECT_TRUE(result_->complete()); 398 EXPECT_TRUE(result_->complete());
397 399
398 // Trying to overwrite 45 bytes data while allowed_growth is -20. 400 // Trying to overwrite 45 bytes data while allowed_growth is -20.
399 offset = 0; 401 offset = 0;
400 allowed_growth = -20; 402 allowed_growth = -20;
401 PrepareForWrite(kBlobURL, offset, allowed_growth); 403 PrepareForWrite(kBlobURL, offset, allowed_growth);
402 404
403 int64 pre_write_usage = ComputeCurrentOriginUsage(); 405 int64 pre_write_usage = ComputeCurrentOriginUsage();
404 file_writer_delegate_->Start(file_, request_.get()); 406 file_writer_delegate_->Start(file_, request_.Pass());
405 MessageLoop::current()->Run(); 407 MessageLoop::current()->Run();
406 EXPECT_EQ(pre_write_usage, test_helper_.GetCachedOriginUsage()); 408 EXPECT_EQ(pre_write_usage, test_helper_.GetCachedOriginUsage());
407 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); 409 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage());
408 EXPECT_EQ(kDataSize, result_->bytes_written()); 410 EXPECT_EQ(kDataSize, result_->bytes_written());
409 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); 411 EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status());
410 EXPECT_TRUE(result_->complete()); 412 EXPECT_TRUE(result_->complete());
411 413
412 // Trying to overwrite 45 bytes data with offset pre_write_usage - 20, 414 // Trying to overwrite 45 bytes data with offset pre_write_usage - 20,
413 // while allowed_growth is 10. 415 // while allowed_growth is 10.
414 const int kOverlap = 20; 416 const int kOverlap = 20;
415 offset = pre_write_usage - kOverlap; 417 offset = pre_write_usage - kOverlap;
416 allowed_growth = 10; 418 allowed_growth = 10;
417 PrepareForWrite(kBlobURL, offset, allowed_growth); 419 PrepareForWrite(kBlobURL, offset, allowed_growth);
418 420
419 file_writer_delegate_->Start(file_, request_.get()); 421 file_writer_delegate_->Start(file_, request_.Pass());
420 MessageLoop::current()->Run(); 422 MessageLoop::current()->Run();
421 EXPECT_EQ(pre_write_usage + allowed_growth, 423 EXPECT_EQ(pre_write_usage + allowed_growth,
422 test_helper_.GetCachedOriginUsage()); 424 test_helper_.GetCachedOriginUsage());
423 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage()); 425 EXPECT_EQ(ComputeCurrentOriginUsage(), test_helper_.GetCachedOriginUsage());
424 EXPECT_EQ(kOverlap + allowed_growth, result_->bytes_written()); 426 EXPECT_EQ(kOverlap + allowed_growth, result_->bytes_written());
425 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status()); 427 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status());
426 EXPECT_TRUE(result_->complete()); 428 EXPECT_TRUE(result_->complete());
427 } 429 }
428 430
429 class FileWriterDelegateUnlimitedTest : public FileWriterDelegateTest { 431 class FileWriterDelegateUnlimitedTest : public FileWriterDelegateTest {
430 protected: 432 protected:
431 virtual void SetUpTestHelper(const FilePath& path) OVERRIDE; 433 virtual void SetUpTestHelper(const FilePath& path) OVERRIDE;
432 }; 434 };
433 435
434 } // namespace fileapi 436 } // namespace fileapi
OLDNEW
« webkit/fileapi/file_writer_delegate.cc ('K') | « webkit/fileapi/file_writer_delegate.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698