| OLD | NEW | 
|---|
| 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 #include <string> | 5 #include <string> | 
| 6 #include <vector> | 6 #include <vector> | 
| 7 | 7 | 
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" | 
| 9 #include "base/bind.h" | 9 #include "base/bind.h" | 
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 26 #include "webkit/browser/fileapi/mock_file_system_context.h" | 26 #include "webkit/browser/fileapi/mock_file_system_context.h" | 
| 27 #include "webkit/browser/fileapi/sandbox_file_stream_writer.h" | 27 #include "webkit/browser/fileapi/sandbox_file_stream_writer.h" | 
| 28 | 28 | 
| 29 namespace fileapi { | 29 namespace fileapi { | 
| 30 | 30 | 
| 31 namespace { | 31 namespace { | 
| 32 | 32 | 
| 33 const GURL kOrigin("http://example.com"); | 33 const GURL kOrigin("http://example.com"); | 
| 34 const FileSystemType kFileSystemType = kFileSystemTypeTest; | 34 const FileSystemType kFileSystemType = kFileSystemTypeTest; | 
| 35 | 35 | 
|  | 36 const char kData[] = "The quick brown fox jumps over the lazy dog.\n"; | 
|  | 37 const int kDataSize = ARRAYSIZE_UNSAFE(kData) - 1; | 
|  | 38 | 
| 36 class Result { | 39 class Result { | 
| 37  public: | 40  public: | 
| 38   Result() | 41   Result() | 
| 39       : status_(base::PLATFORM_FILE_OK), | 42       : status_(base::PLATFORM_FILE_OK), | 
| 40         bytes_written_(0), | 43         bytes_written_(0), | 
| 41         write_status_(FileWriterDelegate::SUCCESS_IO_PENDING) {} | 44         write_status_(FileWriterDelegate::SUCCESS_IO_PENDING) {} | 
| 42 | 45 | 
| 43   base::PlatformFileError status() const { return status_; } | 46   base::PlatformFileError status() const { return status_; } | 
| 44   int64 bytes_written() const { return bytes_written_; } | 47   int64 bytes_written() const { return bytes_written_; } | 
| 45   FileWriterDelegate::WriteProgressStatus write_status() const { | 48   FileWriterDelegate::WriteProgressStatus write_status() const { | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 60     } | 63     } | 
| 61   } | 64   } | 
| 62 | 65 | 
| 63  private: | 66  private: | 
| 64   // For post-operation status. | 67   // For post-operation status. | 
| 65   base::PlatformFileError status_; | 68   base::PlatformFileError status_; | 
| 66   int64 bytes_written_; | 69   int64 bytes_written_; | 
| 67   FileWriterDelegate::WriteProgressStatus write_status_; | 70   FileWriterDelegate::WriteProgressStatus write_status_; | 
| 68 }; | 71 }; | 
| 69 | 72 | 
| 70 const char kData[] = "The quick brown fox jumps over the lazy dog.\n"; |  | 
| 71 const int kDataSize = ARRAYSIZE_UNSAFE(kData) - 1; |  | 
| 72 |  | 
| 73 }  // namespace (anonymous) | 73 }  // namespace (anonymous) | 
| 74 | 74 | 
| 75 class FileWriterDelegateTest : public PlatformTest { | 75 class FileWriterDelegateTest : public PlatformTest { | 
| 76  public: | 76  public: | 
| 77   FileWriterDelegateTest() | 77   FileWriterDelegateTest() | 
| 78       : loop_(base::MessageLoop::TYPE_IO) {} | 78       : loop_(base::MessageLoop::TYPE_IO) {} | 
| 79 | 79 | 
| 80  protected: | 80  protected: | 
| 81   virtual void SetUp() OVERRIDE; | 81   virtual void SetUp() OVERRIDE; | 
| 82   virtual void TearDown() OVERRIDE; | 82   virtual void TearDown() OVERRIDE; | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 116         new FileSystemOperationContext(file_system_context_.get()); | 116         new FileSystemOperationContext(file_system_context_.get()); | 
| 117     context->set_update_observers( | 117     context->set_update_observers( | 
| 118         *file_system_context_->GetUpdateObservers(kFileSystemType)); | 118         *file_system_context_->GetUpdateObservers(kFileSystemType)); | 
| 119     context->set_root_path(dir_.path()); | 119     context->set_root_path(dir_.path()); | 
| 120     return make_scoped_ptr(context); | 120     return make_scoped_ptr(context); | 
| 121   } | 121   } | 
| 122 | 122 | 
| 123   FileWriterDelegate* CreateWriterDelegate( | 123   FileWriterDelegate* CreateWriterDelegate( | 
| 124       const char* test_file_path, | 124       const char* test_file_path, | 
| 125       int64 offset, | 125       int64 offset, | 
| 126       int64 allowed_growth, | 126       int64 allowed_growth) { | 
| 127       Result* result) { |  | 
| 128     SandboxFileStreamWriter* writer = new SandboxFileStreamWriter( | 127     SandboxFileStreamWriter* writer = new SandboxFileStreamWriter( | 
| 129         file_system_context_.get(), | 128         file_system_context_.get(), | 
| 130         GetFileSystemURL(test_file_path), | 129         GetFileSystemURL(test_file_path), | 
| 131         offset, | 130         offset, | 
| 132         *file_system_context_->GetUpdateObservers(kFileSystemType)); | 131         *file_system_context_->GetUpdateObservers(kFileSystemType)); | 
| 133     writer->set_default_quota(allowed_growth); | 132     writer->set_default_quota(allowed_growth); | 
| 134     return new FileWriterDelegate( | 133     return new FileWriterDelegate(scoped_ptr<FileStreamWriter>(writer)); | 
| 135         base::Bind(&Result::DidWrite, base::Unretained(result)), | 134   } | 
| 136         scoped_ptr<FileStreamWriter>(writer)); | 135 | 
|  | 136   FileWriterDelegate::DelegateWriteCallback GetWriteCallback(Result* result) { | 
|  | 137     return base::Bind(&Result::DidWrite, base::Unretained(result)); | 
| 137   } | 138   } | 
| 138 | 139 | 
| 139   // Creates and sets up a FileWriterDelegate for writing the given |blob_url|, | 140   // Creates and sets up a FileWriterDelegate for writing the given |blob_url|, | 
| 140   // and creates a new FileWriterDelegate for the file. | 141   // and creates a new FileWriterDelegate for the file. | 
| 141   void PrepareForWrite(const char* test_file_path, | 142   void PrepareForWrite(const char* test_file_path, | 
| 142                        const GURL& blob_url, | 143                        const GURL& blob_url, | 
| 143                        int64 offset, | 144                        int64 offset, | 
| 144                        int64 allowed_growth) { | 145                        int64 allowed_growth) { | 
| 145     result_.reset(new Result()); |  | 
| 146     file_writer_delegate_.reset( | 146     file_writer_delegate_.reset( | 
| 147         CreateWriterDelegate(test_file_path, offset, allowed_growth, | 147         CreateWriterDelegate(test_file_path, offset, allowed_growth)); | 
| 148                              result_.get())); |  | 
| 149     request_.reset(empty_context_.CreateRequest( | 148     request_.reset(empty_context_.CreateRequest( | 
| 150         blob_url, file_writer_delegate_.get())); | 149         blob_url, file_writer_delegate_.get())); | 
| 151   } | 150   } | 
| 152 | 151 | 
| 153   static net::URLRequest::ProtocolFactory Factory; | 152   static net::URLRequest::ProtocolFactory Factory; | 
| 154 | 153 | 
| 155   // This should be alive until the very end of this instance. | 154   // This should be alive until the very end of this instance. | 
| 156   base::MessageLoop loop_; | 155   base::MessageLoop loop_; | 
| 157 | 156 | 
| 158   scoped_refptr<FileSystemContext> file_system_context_; | 157   scoped_refptr<FileSystemContext> file_system_context_; | 
| 159 | 158 | 
| 160   net::URLRequestContext empty_context_; | 159   net::URLRequestContext empty_context_; | 
| 161   scoped_ptr<FileWriterDelegate> file_writer_delegate_; | 160   scoped_ptr<FileWriterDelegate> file_writer_delegate_; | 
| 162   scoped_ptr<net::URLRequest> request_; | 161   scoped_ptr<net::URLRequest> request_; | 
| 163   scoped_ptr<Result> result_; |  | 
| 164 | 162 | 
| 165   base::ScopedTempDir dir_; | 163   base::ScopedTempDir dir_; | 
| 166 | 164 | 
| 167   static const char* content_; | 165   static const char* content_; | 
| 168 }; | 166 }; | 
| 169 | 167 | 
| 170 const char* FileWriterDelegateTest::content_ = NULL; | 168 const char* FileWriterDelegateTest::content_ = NULL; | 
| 171 | 169 | 
| 172 namespace { | 170 namespace { | 
| 173 | 171 | 
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 252   file_system_context_ = NULL; | 250   file_system_context_ = NULL; | 
| 253   base::MessageLoop::current()->RunUntilIdle(); | 251   base::MessageLoop::current()->RunUntilIdle(); | 
| 254 } | 252 } | 
| 255 | 253 | 
| 256 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimit) { | 254 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimit) { | 
| 257   const GURL kBlobURL("blob:nolimit"); | 255   const GURL kBlobURL("blob:nolimit"); | 
| 258   content_ = kData; | 256   content_ = kData; | 
| 259 | 257 | 
| 260   PrepareForWrite("test", kBlobURL, 0, kint64max); | 258   PrepareForWrite("test", kBlobURL, 0, kint64max); | 
| 261 | 259 | 
|  | 260   Result result; | 
| 262   ASSERT_EQ(0, usage()); | 261   ASSERT_EQ(0, usage()); | 
| 263   file_writer_delegate_->Start(request_.Pass()); | 262   file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 
| 264   base::MessageLoop::current()->Run(); | 263   base::MessageLoop::current()->Run(); | 
| 265 | 264 | 
| 266   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 265   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 
| 267   file_writer_delegate_.reset(); | 266   file_writer_delegate_.reset(); | 
| 268 | 267 | 
| 269   ASSERT_EQ(kDataSize, usage()); | 268   ASSERT_EQ(kDataSize, usage()); | 
| 270   EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 269   EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 
| 271   EXPECT_EQ(kDataSize, result_->bytes_written()); | 270   EXPECT_EQ(kDataSize, result.bytes_written()); | 
| 272   EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 271   EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); | 
| 273 } | 272 } | 
| 274 | 273 | 
| 275 TEST_F(FileWriterDelegateTest, WriteSuccessWithJustQuota) { | 274 TEST_F(FileWriterDelegateTest, WriteSuccessWithJustQuota) { | 
| 276   const GURL kBlobURL("blob:just"); | 275   const GURL kBlobURL("blob:just"); | 
| 277   content_ = kData; | 276   content_ = kData; | 
| 278   const int64 kAllowedGrowth = kDataSize; | 277   const int64 kAllowedGrowth = kDataSize; | 
| 279   PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); | 278   PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); | 
| 280 | 279 | 
|  | 280   Result result; | 
| 281   ASSERT_EQ(0, usage()); | 281   ASSERT_EQ(0, usage()); | 
| 282   file_writer_delegate_->Start(request_.Pass()); | 282   file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 
| 283   base::MessageLoop::current()->Run(); | 283   base::MessageLoop::current()->Run(); | 
| 284   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 284   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 
| 285   file_writer_delegate_.reset(); | 285   file_writer_delegate_.reset(); | 
| 286 | 286 | 
| 287   ASSERT_EQ(kAllowedGrowth, usage()); | 287   ASSERT_EQ(kAllowedGrowth, usage()); | 
| 288   EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 288   EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 
| 289 | 289 | 
| 290   EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); | 290   EXPECT_EQ(kAllowedGrowth, result.bytes_written()); | 
| 291   EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 291   EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); | 
| 292 } | 292 } | 
| 293 | 293 | 
| 294 TEST_F(FileWriterDelegateTest, DISABLED_WriteFailureByQuota) { | 294 TEST_F(FileWriterDelegateTest, DISABLED_WriteFailureByQuota) { | 
| 295   const GURL kBlobURL("blob:failure"); | 295   const GURL kBlobURL("blob:failure"); | 
| 296   content_ = kData; | 296   content_ = kData; | 
| 297   const int64 kAllowedGrowth = kDataSize - 1; | 297   const int64 kAllowedGrowth = kDataSize - 1; | 
| 298   PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); | 298   PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); | 
| 299 | 299 | 
|  | 300   Result result; | 
| 300   ASSERT_EQ(0, usage()); | 301   ASSERT_EQ(0, usage()); | 
| 301   file_writer_delegate_->Start(request_.Pass()); | 302   file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 
| 302   base::MessageLoop::current()->Run(); | 303   base::MessageLoop::current()->Run(); | 
| 303   ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result_->write_status()); | 304   ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status()); | 
| 304   file_writer_delegate_.reset(); | 305   file_writer_delegate_.reset(); | 
| 305 | 306 | 
| 306   ASSERT_EQ(kAllowedGrowth, usage()); | 307   ASSERT_EQ(kAllowedGrowth, usage()); | 
| 307   EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 308   EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 
| 308 | 309 | 
| 309   EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); | 310   EXPECT_EQ(kAllowedGrowth, result.bytes_written()); | 
| 310   EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status()); | 311   EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result.status()); | 
| 311   ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result_->write_status()); | 312   ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status()); | 
| 312 } | 313 } | 
| 313 | 314 | 
| 314 TEST_F(FileWriterDelegateTest, WriteZeroBytesSuccessfullyWithZeroQuota) { | 315 TEST_F(FileWriterDelegateTest, WriteZeroBytesSuccessfullyWithZeroQuota) { | 
| 315   const GURL kBlobURL("blob:zero"); | 316   const GURL kBlobURL("blob:zero"); | 
| 316   content_ = ""; | 317   content_ = ""; | 
| 317   int64 kAllowedGrowth = 0; | 318   int64 kAllowedGrowth = 0; | 
| 318   PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); | 319   PrepareForWrite("test", kBlobURL, 0, kAllowedGrowth); | 
| 319 | 320 | 
|  | 321   Result result; | 
| 320   ASSERT_EQ(0, usage()); | 322   ASSERT_EQ(0, usage()); | 
| 321   file_writer_delegate_->Start(request_.Pass()); | 323   file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 
| 322   base::MessageLoop::current()->Run(); | 324   base::MessageLoop::current()->Run(); | 
| 323   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 325   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 
| 324   file_writer_delegate_.reset(); | 326   file_writer_delegate_.reset(); | 
| 325 | 327 | 
| 326   ASSERT_EQ(kAllowedGrowth, usage()); | 328   ASSERT_EQ(kAllowedGrowth, usage()); | 
| 327   EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 329   EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 
| 328 | 330 | 
| 329   EXPECT_EQ(kAllowedGrowth, result_->bytes_written()); | 331   EXPECT_EQ(kAllowedGrowth, result.bytes_written()); | 
| 330   EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 332   EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); | 
| 331   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 333   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 
| 332 } | 334 } | 
| 333 | 335 | 
| 334 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimitConcurrent) { | 336 TEST_F(FileWriterDelegateTest, WriteSuccessWithoutQuotaLimitConcurrent) { | 
| 335   scoped_ptr<FileWriterDelegate> file_writer_delegate2; | 337   scoped_ptr<FileWriterDelegate> file_writer_delegate2; | 
| 336   scoped_ptr<net::URLRequest> request2; | 338   scoped_ptr<net::URLRequest> request2; | 
| 337   scoped_ptr<Result> result2; |  | 
| 338 | 339 | 
| 339   bool created = false; | 340   bool created = false; | 
| 340   file_util()->EnsureFileExists(NewOperationContext().get(), | 341   file_util()->EnsureFileExists(NewOperationContext().get(), | 
| 341                                 GetFileSystemURL("test2"), | 342                                 GetFileSystemURL("test2"), | 
| 342                                 &created); | 343                                 &created); | 
| 343   ASSERT_TRUE(created); | 344   ASSERT_TRUE(created); | 
| 344 | 345 | 
| 345   const GURL kBlobURL("blob:nolimitconcurrent"); | 346   const GURL kBlobURL("blob:nolimitconcurrent"); | 
| 346   const GURL kBlobURL2("blob:nolimitconcurrent2"); | 347   const GURL kBlobURL2("blob:nolimitconcurrent2"); | 
| 347   content_ = kData; | 348   content_ = kData; | 
| 348 | 349 | 
| 349   PrepareForWrite("test", kBlobURL, 0, kint64max); | 350   PrepareForWrite("test", kBlobURL, 0, kint64max); | 
| 350 | 351 | 
| 351   // Credate another FileWriterDelegate for concurrent write. | 352   // Credate another FileWriterDelegate for concurrent write. | 
| 352   result2.reset(new Result()); | 353   file_writer_delegate2.reset(CreateWriterDelegate("test2", 0, kint64max)); | 
| 353   file_writer_delegate2.reset(CreateWriterDelegate( |  | 
| 354       "test2", 0, kint64max, result2.get())); |  | 
| 355   request2.reset(empty_context_.CreateRequest( | 354   request2.reset(empty_context_.CreateRequest( | 
| 356       kBlobURL2, file_writer_delegate2.get())); | 355       kBlobURL2, file_writer_delegate2.get())); | 
| 357 | 356 | 
|  | 357   Result result, result2; | 
| 358   ASSERT_EQ(0, usage()); | 358   ASSERT_EQ(0, usage()); | 
| 359   file_writer_delegate_->Start(request_.Pass()); | 359   file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 
| 360   file_writer_delegate2->Start(request2.Pass()); | 360   file_writer_delegate2->Start(request2.Pass(), GetWriteCallback(&result2)); | 
| 361   base::MessageLoop::current()->Run(); | 361   base::MessageLoop::current()->Run(); | 
| 362   if (result_->write_status() == FileWriterDelegate::SUCCESS_IO_PENDING || | 362   if (result.write_status() == FileWriterDelegate::SUCCESS_IO_PENDING || | 
| 363       result2->write_status() == FileWriterDelegate::SUCCESS_IO_PENDING) | 363       result2.write_status() == FileWriterDelegate::SUCCESS_IO_PENDING) | 
| 364     base::MessageLoop::current()->Run(); | 364     base::MessageLoop::current()->Run(); | 
| 365 | 365 | 
| 366   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 366   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 
| 367   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result2->write_status()); | 367   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result2.write_status()); | 
| 368   file_writer_delegate_.reset(); | 368   file_writer_delegate_.reset(); | 
| 369   file_writer_delegate2.reset(); | 369   file_writer_delegate2.reset(); | 
| 370 | 370 | 
| 371   ASSERT_EQ(kDataSize * 2, usage()); | 371   ASSERT_EQ(kDataSize * 2, usage()); | 
| 372   EXPECT_EQ(GetFileSizeOnDisk("test") + GetFileSizeOnDisk("test2"), usage()); | 372   EXPECT_EQ(GetFileSizeOnDisk("test") + GetFileSizeOnDisk("test2"), usage()); | 
| 373 | 373 | 
| 374   EXPECT_EQ(kDataSize, result_->bytes_written()); | 374   EXPECT_EQ(kDataSize, result.bytes_written()); | 
| 375   EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 375   EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); | 
| 376   EXPECT_EQ(kDataSize, result2->bytes_written()); | 376   EXPECT_EQ(kDataSize, result2.bytes_written()); | 
| 377   EXPECT_EQ(base::PLATFORM_FILE_OK, result2->status()); | 377   EXPECT_EQ(base::PLATFORM_FILE_OK, result2.status()); | 
| 378 } | 378 } | 
| 379 | 379 | 
| 380 TEST_F(FileWriterDelegateTest, WritesWithQuotaAndOffset) { | 380 TEST_F(FileWriterDelegateTest, WritesWithQuotaAndOffset) { | 
| 381   const GURL kBlobURL("blob:failure-with-updated-quota"); | 381   const GURL kBlobURL("blob:failure-with-updated-quota"); | 
| 382   content_ = kData; | 382   content_ = kData; | 
| 383 | 383 | 
| 384   // Writing kDataSize (=45) bytes data while allowed_growth is 100. | 384   // Writing kDataSize (=45) bytes data while allowed_growth is 100. | 
| 385   int64 offset = 0; | 385   int64 offset = 0; | 
| 386   int64 allowed_growth = 100; | 386   int64 allowed_growth = 100; | 
| 387   ASSERT_LT(kDataSize, allowed_growth); | 387   ASSERT_LT(kDataSize, allowed_growth); | 
| 388   PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 388   PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 
| 389 | 389 | 
| 390   ASSERT_EQ(0, usage()); | 390   { | 
| 391   file_writer_delegate_->Start(request_.Pass()); | 391     Result result; | 
| 392   base::MessageLoop::current()->Run(); | 392     ASSERT_EQ(0, usage()); | 
| 393   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 393     file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 
| 394   file_writer_delegate_.reset(); | 394     base::MessageLoop::current()->Run(); | 
|  | 395     ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 
|  | 396     file_writer_delegate_.reset(); | 
| 395 | 397 | 
| 396   ASSERT_EQ(kDataSize, usage()); | 398     ASSERT_EQ(kDataSize, usage()); | 
| 397   EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 399     EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 
| 398   EXPECT_EQ(kDataSize, result_->bytes_written()); | 400     EXPECT_EQ(kDataSize, result.bytes_written()); | 
| 399   EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 401     EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); | 
|  | 402   } | 
| 400 | 403 | 
| 401   // Trying to overwrite kDataSize bytes data while allowed_growth is 20. | 404   // Trying to overwrite kDataSize bytes data while allowed_growth is 20. | 
| 402   offset = 0; | 405   offset = 0; | 
| 403   allowed_growth = 20; | 406   allowed_growth = 20; | 
| 404   PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 407   PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 
| 405 | 408 | 
| 406   file_writer_delegate_->Start(request_.Pass()); | 409   { | 
| 407   base::MessageLoop::current()->Run(); | 410     Result result; | 
| 408   EXPECT_EQ(kDataSize, usage()); | 411     file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 
| 409   EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 412     base::MessageLoop::current()->Run(); | 
| 410   EXPECT_EQ(kDataSize, result_->bytes_written()); | 413     EXPECT_EQ(kDataSize, usage()); | 
| 411   EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 414     EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 
| 412   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 415     EXPECT_EQ(kDataSize, result.bytes_written()); | 
|  | 416     EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); | 
|  | 417     ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 
|  | 418   } | 
| 413 | 419 | 
| 414   // Trying to write kDataSize bytes data from offset 25 while | 420   // Trying to write kDataSize bytes data from offset 25 while | 
| 415   // allowed_growth is 55. | 421   // allowed_growth is 55. | 
| 416   offset = 25; | 422   offset = 25; | 
| 417   allowed_growth = 55; | 423   allowed_growth = 55; | 
| 418   PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 424   PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 
| 419 | 425 | 
| 420   file_writer_delegate_->Start(request_.Pass()); | 426   { | 
| 421   base::MessageLoop::current()->Run(); | 427     Result result; | 
| 422   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 428     file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 
| 423   file_writer_delegate_.reset(); | 429     base::MessageLoop::current()->Run(); | 
|  | 430     ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 
|  | 431     file_writer_delegate_.reset(); | 
| 424 | 432 | 
| 425   EXPECT_EQ(offset + kDataSize, usage()); | 433     EXPECT_EQ(offset + kDataSize, usage()); | 
| 426   EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 434     EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 
| 427   EXPECT_EQ(kDataSize, result_->bytes_written()); | 435     EXPECT_EQ(kDataSize, result.bytes_written()); | 
| 428   EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 436     EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); | 
|  | 437   } | 
| 429 | 438 | 
| 430   // Trying to overwrite 45 bytes data while allowed_growth is -20. | 439   // Trying to overwrite 45 bytes data while allowed_growth is -20. | 
| 431   offset = 0; | 440   offset = 0; | 
| 432   allowed_growth = -20; | 441   allowed_growth = -20; | 
| 433   PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 442   PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 
|  | 443   int64 pre_write_usage = GetFileSizeOnDisk("test"); | 
| 434 | 444 | 
| 435   int64 pre_write_usage = GetFileSizeOnDisk("test"); | 445   { | 
| 436   file_writer_delegate_->Start(request_.Pass()); | 446     Result result; | 
| 437   base::MessageLoop::current()->Run(); | 447     file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 
| 438   ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result_->write_status()); | 448     base::MessageLoop::current()->Run(); | 
| 439   file_writer_delegate_.reset(); | 449     ASSERT_EQ(FileWriterDelegate::SUCCESS_COMPLETED, result.write_status()); | 
|  | 450     file_writer_delegate_.reset(); | 
| 440 | 451 | 
| 441   EXPECT_EQ(pre_write_usage, usage()); | 452     EXPECT_EQ(pre_write_usage, usage()); | 
| 442   EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 453     EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 
| 443   EXPECT_EQ(kDataSize, result_->bytes_written()); | 454     EXPECT_EQ(kDataSize, result.bytes_written()); | 
| 444   EXPECT_EQ(base::PLATFORM_FILE_OK, result_->status()); | 455     EXPECT_EQ(base::PLATFORM_FILE_OK, result.status()); | 
|  | 456   } | 
| 445 | 457 | 
| 446   // Trying to overwrite 45 bytes data with offset pre_write_usage - 20, | 458   // Trying to overwrite 45 bytes data with offset pre_write_usage - 20, | 
| 447   // while allowed_growth is 10. | 459   // while allowed_growth is 10. | 
| 448   const int kOverlap = 20; | 460   const int kOverlap = 20; | 
| 449   offset = pre_write_usage - kOverlap; | 461   offset = pre_write_usage - kOverlap; | 
| 450   allowed_growth = 10; | 462   allowed_growth = 10; | 
| 451   PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 463   PrepareForWrite("test", kBlobURL, offset, allowed_growth); | 
| 452 | 464 | 
| 453   file_writer_delegate_->Start(request_.Pass()); | 465   { | 
| 454   base::MessageLoop::current()->Run(); | 466     Result result; | 
| 455   ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result_->write_status()); | 467     file_writer_delegate_->Start(request_.Pass(), GetWriteCallback(&result)); | 
| 456   file_writer_delegate_.reset(); | 468     base::MessageLoop::current()->Run(); | 
|  | 469     ASSERT_EQ(FileWriterDelegate::ERROR_WRITE_STARTED, result.write_status()); | 
|  | 470     file_writer_delegate_.reset(); | 
| 457 | 471 | 
| 458   EXPECT_EQ(pre_write_usage + allowed_growth, | 472     EXPECT_EQ(pre_write_usage + allowed_growth, usage()); | 
| 459             usage()); | 473     EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 
| 460   EXPECT_EQ(GetFileSizeOnDisk("test"), usage()); | 474     EXPECT_EQ(kOverlap + allowed_growth, result.bytes_written()); | 
| 461   EXPECT_EQ(kOverlap + allowed_growth, result_->bytes_written()); | 475     EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result.status()); | 
| 462   EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, result_->status()); | 476   } | 
| 463 } | 477 } | 
| 464 | 478 | 
| 465 }  // namespace fileapi | 479 }  // namespace fileapi | 
| OLD | NEW | 
|---|