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

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

Issue 10956064: Send OnModifyFile Notification when File Write Finishes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added write status inside FileWriteDelegate so onFileModify notifications are only sent when a file… Created 8 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) 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 <vector> 5 #include <vector>
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/memory/weak_ptr.h" 8 #include "base/memory/weak_ptr.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/message_loop_proxy.h" 10 #include "base/message_loop_proxy.h"
11 #include "base/scoped_temp_dir.h" 11 #include "base/scoped_temp_dir.h"
12 #include "googleurl/src/gurl.h" 12 #include "googleurl/src/gurl.h"
13 #include "net/url_request/url_request.h" 13 #include "net/url_request/url_request.h"
14 #include "net/url_request/url_request_context.h" 14 #include "net/url_request/url_request_context.h"
15 #include "net/url_request/url_request_job.h" 15 #include "net/url_request/url_request_job.h"
16 #include "net/url_request/url_request_job_factory_impl.h" 16 #include "net/url_request/url_request_job_factory_impl.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "webkit/blob/blob_data.h" 18 #include "webkit/blob/blob_data.h"
19 #include "webkit/blob/blob_storage_controller.h" 19 #include "webkit/blob/blob_storage_controller.h"
20 #include "webkit/blob/blob_url_request_job.h" 20 #include "webkit/blob/blob_url_request_job.h"
21 #include "webkit/fileapi/file_system_context.h" 21 #include "webkit/fileapi/file_system_context.h"
22 #include "webkit/fileapi/file_system_file_util.h" 22 #include "webkit/fileapi/file_system_file_util.h"
23 #include "webkit/fileapi/file_system_util.h" 23 #include "webkit/fileapi/file_system_util.h"
24 #include "webkit/fileapi/local_file_system_operation.h" 24 #include "webkit/fileapi/local_file_system_operation.h"
25 #include "webkit/fileapi/local_file_system_test_helper.h" 25 #include "webkit/fileapi/local_file_system_test_helper.h"
26 #include "webkit/fileapi/local_file_util.h" 26 #include "webkit/fileapi/local_file_util.h"
27 #include "webkit/fileapi/mock_file_change_observer.h"
28
kinuko 2012/09/25 14:00:49 nit: extra empty line
calvinlo 2012/09/26 05:23:07 Done.
27 #include "webkit/quota/quota_manager.h" 29 #include "webkit/quota/quota_manager.h"
28 30
29 using quota::QuotaManager; 31 using quota::QuotaManager;
30 32
31 namespace fileapi { 33 namespace fileapi {
32 34
33 namespace { 35 namespace {
34 36
35 void AssertStatusEq(base::PlatformFileError expected, 37 void AssertStatusEq(base::PlatformFileError expected,
36 base::PlatformFileError actual) { 38 base::PlatformFileError actual) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 class LocalFileSystemOperationWriteTest 71 class LocalFileSystemOperationWriteTest
70 : public testing::Test, 72 : public testing::Test,
71 public base::SupportsWeakPtr<LocalFileSystemOperationWriteTest> { 73 public base::SupportsWeakPtr<LocalFileSystemOperationWriteTest> {
72 public: 74 public:
73 LocalFileSystemOperationWriteTest() 75 LocalFileSystemOperationWriteTest()
74 : test_helper_(GURL("http://example.com"), kFileSystemTypeTest), 76 : test_helper_(GURL("http://example.com"), kFileSystemTypeTest),
75 loop_(MessageLoop::TYPE_IO), 77 loop_(MessageLoop::TYPE_IO),
76 status_(base::PLATFORM_FILE_OK), 78 status_(base::PLATFORM_FILE_OK),
77 cancel_status_(base::PLATFORM_FILE_ERROR_FAILED), 79 cancel_status_(base::PLATFORM_FILE_ERROR_FAILED),
78 bytes_written_(0), 80 bytes_written_(0),
79 complete_(false) {} 81 complete_(false) {
82 change_observers_ = MockFileChangeObserver::CreateList(&change_observer_);
83 }
80 84
81 LocalFileSystemOperation* operation(); 85 LocalFileSystemOperation* operation();
82 86
83 base::PlatformFileError status() const { return status_; } 87 base::PlatformFileError status() const { return status_; }
84 base::PlatformFileError cancel_status() const { return cancel_status_; } 88 base::PlatformFileError cancel_status() const { return cancel_status_; }
85 void add_bytes_written(int64 bytes, bool complete) { 89 void add_bytes_written(int64 bytes, bool complete) {
86 bytes_written_ += bytes; 90 bytes_written_ += bytes;
87 EXPECT_FALSE(complete_); 91 EXPECT_FALSE(complete_);
88 complete_ = complete; 92 complete_ = complete;
89 } 93 }
90 int64 bytes_written() const { return bytes_written_; } 94 int64 bytes_written() const { return bytes_written_; }
91 bool complete() const { return complete_; } 95 bool complete() const { return complete_; }
92 96
93 virtual void SetUp(); 97 virtual void SetUp();
94 virtual void TearDown(); 98 virtual void TearDown();
95 99
96 protected: 100 protected:
101 const ChangeObserverList& change_observers() const {
102 return change_observers_;
103 }
104
105 MockFileChangeObserver* change_observer() {
106 return &change_observer_;
107 }
108
97 FileSystemURL URLForPath(const FilePath& path) const { 109 FileSystemURL URLForPath(const FilePath& path) const {
98 return test_helper_.CreateURL(path); 110 return test_helper_.CreateURL(path);
99 } 111 }
100 112
101 // Callback function for recording test results. 113 // Callback function for recording test results.
102 FileSystemOperation::WriteCallback RecordWriteCallback() { 114 FileSystemOperation::WriteCallback RecordWriteCallback() {
103 return base::Bind(&LocalFileSystemOperationWriteTest::DidWrite, 115 return base::Bind(&LocalFileSystemOperationWriteTest::DidWrite,
104 AsWeakPtr()); 116 AsWeakPtr());
105 } 117 }
106 118
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 ScopedTempDir dir_; 152 ScopedTempDir dir_;
141 FilePath virtual_path_; 153 FilePath virtual_path_;
142 154
143 // For post-operation status. 155 // For post-operation status.
144 base::PlatformFileError status_; 156 base::PlatformFileError status_;
145 base::PlatformFileError cancel_status_; 157 base::PlatformFileError cancel_status_;
146 int64 bytes_written_; 158 int64 bytes_written_;
147 bool complete_; 159 bool complete_;
148 160
149 DISALLOW_COPY_AND_ASSIGN(LocalFileSystemOperationWriteTest); 161 DISALLOW_COPY_AND_ASSIGN(LocalFileSystemOperationWriteTest);
162
163 private:
164 MockFileChangeObserver change_observer_;
165 ChangeObserverList change_observers_;
150 }; 166 };
151 167
152 namespace { 168 namespace {
153 169
154 class TestProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler { 170 class TestProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler {
155 public: 171 public:
156 explicit TestProtocolHandler( 172 explicit TestProtocolHandler(
157 webkit_blob::BlobStorageController* blob_storage_controller) 173 webkit_blob::BlobStorageController* blob_storage_controller)
158 : blob_storage_controller_(blob_storage_controller) {} 174 : blob_storage_controller_(blob_storage_controller) {}
159 175
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 URLForPath(virtual_path_), true /* exclusive */, 231 URLForPath(virtual_path_), true /* exclusive */,
216 base::Bind(&AssertStatusEq, base::PLATFORM_FILE_OK)); 232 base::Bind(&AssertStatusEq, base::PLATFORM_FILE_OK));
217 } 233 }
218 234
219 void LocalFileSystemOperationWriteTest::TearDown() { 235 void LocalFileSystemOperationWriteTest::TearDown() {
220 quota_manager_ = NULL; 236 quota_manager_ = NULL;
221 test_helper_.TearDown(); 237 test_helper_.TearDown();
222 } 238 }
223 239
224 LocalFileSystemOperation* LocalFileSystemOperationWriteTest::operation() { 240 LocalFileSystemOperation* LocalFileSystemOperationWriteTest::operation() {
225 return test_helper_.NewOperation(); 241 LocalFileSystemOperation* operation = test_helper_.NewOperation();
242 operation->operation_context()->set_change_observers(change_observers());
243 return operation;
226 } 244 }
227 245
228 TEST_F(LocalFileSystemOperationWriteTest, TestWriteSuccess) { 246 TEST_F(LocalFileSystemOperationWriteTest, TestWriteSuccess) {
229 GURL blob_url("blob:success"); 247 GURL blob_url("blob:success");
230 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 248 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
231 blob_data->AppendData("Hello, world!\n"); 249 blob_data->AppendData("Hello, world!\n");
232 250
233 TestURLRequestContext url_request_context; 251 TestURLRequestContext url_request_context;
234 url_request_context.blob_storage_controller()->AddFinishedBlob( 252 url_request_context.blob_storage_controller()->AddFinishedBlob(
235 blob_url, blob_data); 253 blob_url, blob_data);
236 254
237 operation()->Write(&url_request_context, URLForPath(virtual_path_), blob_url, 255 operation()->Write(&url_request_context, URLForPath(virtual_path_), blob_url,
238 0, RecordWriteCallback()); 256 0, RecordWriteCallback());
239 MessageLoop::current()->Run(); 257 MessageLoop::current()->Run();
240 258
241 url_request_context.blob_storage_controller()->RemoveBlob(blob_url); 259 url_request_context.blob_storage_controller()->RemoveBlob(blob_url);
242 260
243 EXPECT_EQ(14, bytes_written()); 261 EXPECT_EQ(14, bytes_written());
244 EXPECT_EQ(base::PLATFORM_FILE_OK, status()); 262 EXPECT_EQ(base::PLATFORM_FILE_OK, status());
245 EXPECT_TRUE(complete()); 263 EXPECT_TRUE(complete());
264
265 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count());
246 } 266 }
247 267
248 TEST_F(LocalFileSystemOperationWriteTest, TestWriteZero) { 268 TEST_F(LocalFileSystemOperationWriteTest, TestWriteZero) {
249 GURL blob_url("blob:zero"); 269 GURL blob_url("blob:zero");
250 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 270 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
251 271
252 TestURLRequestContext url_request_context; 272 TestURLRequestContext url_request_context;
253 url_request_context.blob_storage_controller()->AddFinishedBlob( 273 url_request_context.blob_storage_controller()->AddFinishedBlob(
254 blob_url, blob_data); 274 blob_url, blob_data);
255 275
256 operation()->Write(&url_request_context, URLForPath(virtual_path_), 276 operation()->Write(&url_request_context, URLForPath(virtual_path_),
257 blob_url, 0, RecordWriteCallback()); 277 blob_url, 0, RecordWriteCallback());
258 MessageLoop::current()->Run(); 278 MessageLoop::current()->Run();
259 279
260 url_request_context.blob_storage_controller()->RemoveBlob(blob_url); 280 url_request_context.blob_storage_controller()->RemoveBlob(blob_url);
261 281
262 EXPECT_EQ(0, bytes_written()); 282 EXPECT_EQ(0, bytes_written());
263 EXPECT_EQ(base::PLATFORM_FILE_OK, status()); 283 EXPECT_EQ(base::PLATFORM_FILE_OK, status());
264 EXPECT_TRUE(complete()); 284 EXPECT_TRUE(complete());
285
286 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count());
265 } 287 }
266 288
267 TEST_F(LocalFileSystemOperationWriteTest, TestWriteInvalidBlobUrl) { 289 TEST_F(LocalFileSystemOperationWriteTest, TestWriteInvalidBlobUrl) {
268 TestURLRequestContext url_request_context; 290 TestURLRequestContext url_request_context;
269 291
270 operation()->Write(&url_request_context, URLForPath(virtual_path_), 292 operation()->Write(&url_request_context, URLForPath(virtual_path_),
271 GURL("blob:invalid"), 0, RecordWriteCallback()); 293 GURL("blob:invalid"), 0, RecordWriteCallback());
272 MessageLoop::current()->Run(); 294 MessageLoop::current()->Run();
273 295
274 EXPECT_EQ(0, bytes_written()); 296 EXPECT_EQ(0, bytes_written());
275 EXPECT_EQ(base::PLATFORM_FILE_ERROR_FAILED, status()); 297 EXPECT_EQ(base::PLATFORM_FILE_ERROR_FAILED, status());
276 EXPECT_TRUE(complete()); 298 EXPECT_TRUE(complete());
299
300 EXPECT_EQ(0, change_observer()->get_and_reset_modify_file_count());
277 } 301 }
278 302
279 TEST_F(LocalFileSystemOperationWriteTest, TestWriteInvalidFile) { 303 TEST_F(LocalFileSystemOperationWriteTest, TestWriteInvalidFile) {
280 GURL blob_url("blob:writeinvalidfile"); 304 GURL blob_url("blob:writeinvalidfile");
281 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 305 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
282 blob_data->AppendData("It\'ll not be written."); 306 blob_data->AppendData("It\'ll not be written.");
283 307
284 TestURLRequestContext url_request_context; 308 TestURLRequestContext url_request_context;
285 url_request_context.blob_storage_controller()->AddFinishedBlob( 309 url_request_context.blob_storage_controller()->AddFinishedBlob(
286 blob_url, blob_data); 310 blob_url, blob_data);
287 311
288 operation()->Write(&url_request_context, 312 operation()->Write(&url_request_context,
289 URLForPath(FilePath(FILE_PATH_LITERAL("nonexist"))), 313 URLForPath(FilePath(FILE_PATH_LITERAL("nonexist"))),
290 blob_url, 0, RecordWriteCallback()); 314 blob_url, 0, RecordWriteCallback());
291 MessageLoop::current()->Run(); 315 MessageLoop::current()->Run();
292 316
293 url_request_context.blob_storage_controller()->RemoveBlob(blob_url); 317 url_request_context.blob_storage_controller()->RemoveBlob(blob_url);
294 318
295 EXPECT_EQ(0, bytes_written()); 319 EXPECT_EQ(0, bytes_written());
296 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, status()); 320 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, status());
297 EXPECT_TRUE(complete()); 321 EXPECT_TRUE(complete());
322
323 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count());
298 } 324 }
299 325
300 TEST_F(LocalFileSystemOperationWriteTest, TestWriteDir) { 326 TEST_F(LocalFileSystemOperationWriteTest, TestWriteDir) {
301 FilePath virtual_dir_path(FILE_PATH_LITERAL("d")); 327 FilePath virtual_dir_path(FILE_PATH_LITERAL("d"));
302 operation()->CreateDirectory( 328 operation()->CreateDirectory(
303 URLForPath(virtual_dir_path), 329 URLForPath(virtual_dir_path),
304 true /* exclusive */, false /* recursive */, 330 true /* exclusive */, false /* recursive */,
305 base::Bind(&AssertStatusEq, base::PLATFORM_FILE_OK)); 331 base::Bind(&AssertStatusEq, base::PLATFORM_FILE_OK));
306 332
307 GURL blob_url("blob:writedir"); 333 GURL blob_url("blob:writedir");
(...skipping 10 matching lines...) Expand all
318 344
319 url_request_context.blob_storage_controller()->RemoveBlob(blob_url); 345 url_request_context.blob_storage_controller()->RemoveBlob(blob_url);
320 346
321 EXPECT_EQ(0, bytes_written()); 347 EXPECT_EQ(0, bytes_written());
322 // TODO(kinuko): This error code is platform- or fileutil- dependent 348 // TODO(kinuko): This error code is platform- or fileutil- dependent
323 // right now. Make it return PLATFORM_FILE_ERROR_NOT_A_FILE in every case. 349 // right now. Make it return PLATFORM_FILE_ERROR_NOT_A_FILE in every case.
324 EXPECT_TRUE(status() == base::PLATFORM_FILE_ERROR_NOT_A_FILE || 350 EXPECT_TRUE(status() == base::PLATFORM_FILE_ERROR_NOT_A_FILE ||
325 status() == base::PLATFORM_FILE_ERROR_ACCESS_DENIED || 351 status() == base::PLATFORM_FILE_ERROR_ACCESS_DENIED ||
326 status() == base::PLATFORM_FILE_ERROR_FAILED); 352 status() == base::PLATFORM_FILE_ERROR_FAILED);
327 EXPECT_TRUE(complete()); 353 EXPECT_TRUE(complete());
354
355 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count());
328 } 356 }
329 357
330 TEST_F(LocalFileSystemOperationWriteTest, TestWriteFailureByQuota) { 358 TEST_F(LocalFileSystemOperationWriteTest, TestWriteFailureByQuota) {
331 GURL blob_url("blob:success"); 359 GURL blob_url("blob:success");
332 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 360 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
333 blob_data->AppendData("Hello, world!\n"); 361 blob_data->AppendData("Hello, world!\n");
334 362
335 TestURLRequestContext url_request_context; 363 TestURLRequestContext url_request_context;
336 url_request_context.blob_storage_controller()->AddFinishedBlob( 364 url_request_context.blob_storage_controller()->AddFinishedBlob(
337 blob_url, blob_data); 365 blob_url, blob_data);
338 366
339 quota_manager_->set_quota(10); 367 quota_manager_->set_quota(10);
340 operation()->Write(&url_request_context, URLForPath(virtual_path_), blob_url, 368 operation()->Write(&url_request_context, URLForPath(virtual_path_), blob_url,
341 0, RecordWriteCallback()); 369 0, RecordWriteCallback());
342 MessageLoop::current()->Run(); 370 MessageLoop::current()->Run();
343 371
344 url_request_context.blob_storage_controller()->RemoveBlob(blob_url); 372 url_request_context.blob_storage_controller()->RemoveBlob(blob_url);
345 373
346 EXPECT_EQ(10, bytes_written()); 374 EXPECT_EQ(10, bytes_written());
347 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, status()); 375 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NO_SPACE, status());
348 EXPECT_TRUE(complete()); 376 EXPECT_TRUE(complete());
377
378 EXPECT_EQ(1, change_observer()->get_and_reset_modify_file_count());
349 } 379 }
350 380
351 TEST_F(LocalFileSystemOperationWriteTest, TestImmediateCancelSuccessfulWrite) { 381 TEST_F(LocalFileSystemOperationWriteTest, TestImmediateCancelSuccessfulWrite) {
352 GURL blob_url("blob:success"); 382 GURL blob_url("blob:success");
353 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 383 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
354 blob_data->AppendData("Hello, world!\n"); 384 blob_data->AppendData("Hello, world!\n");
355 385
356 TestURLRequestContext url_request_context; 386 TestURLRequestContext url_request_context;
357 url_request_context.blob_storage_controller()->AddFinishedBlob( 387 url_request_context.blob_storage_controller()->AddFinishedBlob(
358 blob_url, blob_data); 388 blob_url, blob_data);
359 389
360 FileSystemOperation* write_operation = operation(); 390 FileSystemOperation* write_operation = operation();
361 write_operation->Write(&url_request_context, URLForPath(virtual_path_), 391 write_operation->Write(&url_request_context, URLForPath(virtual_path_),
362 blob_url, 0, RecordWriteCallback()); 392 blob_url, 0, RecordWriteCallback());
363 write_operation->Cancel(RecordCancelCallback()); 393 write_operation->Cancel(RecordCancelCallback());
364 // We use RunAllPendings() instead of Run() here, because we won't dispatch 394 // We use RunAllPendings() instead of Run() here, because we won't dispatch
365 // callbacks after Cancel() is issued (so no chance to Quit) nor do we need 395 // callbacks after Cancel() is issued (so no chance to Quit) nor do we need
366 // to run another write cycle. 396 // to run another write cycle.
367 MessageLoop::current()->RunAllPending(); 397 MessageLoop::current()->RunAllPending();
368 398
369 url_request_context.blob_storage_controller()->RemoveBlob(blob_url); 399 url_request_context.blob_storage_controller()->RemoveBlob(blob_url);
370 400
371 // Issued Cancel() before receiving any response from Write(), 401 // Issued Cancel() before receiving any response from Write(),
372 // so nothing should have happen. 402 // so nothing should have happen.
373 EXPECT_EQ(0, bytes_written()); 403 EXPECT_EQ(0, bytes_written());
374 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ABORT, status()); 404 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ABORT, status());
375 EXPECT_EQ(base::PLATFORM_FILE_OK, cancel_status()); 405 EXPECT_EQ(base::PLATFORM_FILE_OK, cancel_status());
376 EXPECT_TRUE(complete()); 406 EXPECT_TRUE(complete());
407
408 EXPECT_EQ(0, change_observer()->get_and_reset_modify_file_count());
377 } 409 }
378 410
379 TEST_F(LocalFileSystemOperationWriteTest, TestImmediateCancelFailingWrite) { 411 TEST_F(LocalFileSystemOperationWriteTest, TestImmediateCancelFailingWrite) {
380 GURL blob_url("blob:writeinvalidfile"); 412 GURL blob_url("blob:writeinvalidfile");
381 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData()); 413 scoped_refptr<webkit_blob::BlobData> blob_data(new webkit_blob::BlobData());
382 blob_data->AppendData("It\'ll not be written."); 414 blob_data->AppendData("It\'ll not be written.");
383 415
384 TestURLRequestContext url_request_context; 416 TestURLRequestContext url_request_context;
385 url_request_context.blob_storage_controller()->AddFinishedBlob( 417 url_request_context.blob_storage_controller()->AddFinishedBlob(
386 blob_url, blob_data); 418 blob_url, blob_data);
387 419
388 FileSystemOperation* write_operation = operation(); 420 FileSystemOperation* write_operation = operation();
389 write_operation->Write(&url_request_context, 421 write_operation->Write(&url_request_context,
390 URLForPath(FilePath(FILE_PATH_LITERAL("nonexist"))), 422 URLForPath(FilePath(FILE_PATH_LITERAL("nonexist"))),
391 blob_url, 0, RecordWriteCallback()); 423 blob_url, 0, RecordWriteCallback());
392 write_operation->Cancel(RecordCancelCallback()); 424 write_operation->Cancel(RecordCancelCallback());
393 // We use RunAllPendings() instead of Run() here, because we won't dispatch 425 // We use RunAllPendings() instead of Run() here, because we won't dispatch
394 // callbacks after Cancel() is issued (so no chance to Quit) nor do we need 426 // callbacks after Cancel() is issued (so no chance to Quit) nor do we need
395 // to run another write cycle. 427 // to run another write cycle.
396 MessageLoop::current()->RunAllPending(); 428 MessageLoop::current()->RunAllPending();
397 429
398 url_request_context.blob_storage_controller()->RemoveBlob(blob_url); 430 url_request_context.blob_storage_controller()->RemoveBlob(blob_url);
399 431
400 // Issued Cancel() before receiving any response from Write(), 432 // Issued Cancel() before receiving any response from Write(),
401 // so nothing should have happen. 433 // so nothing should have happen.
402 EXPECT_EQ(0, bytes_written()); 434 EXPECT_EQ(0, bytes_written());
403 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ABORT, status()); 435 EXPECT_EQ(base::PLATFORM_FILE_ERROR_ABORT, status());
404 EXPECT_EQ(base::PLATFORM_FILE_OK, cancel_status()); 436 EXPECT_EQ(base::PLATFORM_FILE_OK, cancel_status());
405 EXPECT_TRUE(complete()); 437 EXPECT_TRUE(complete());
438
439 EXPECT_EQ(0, change_observer()->get_and_reset_modify_file_count());
406 } 440 }
407 441
408 // TODO(ericu,dmikurube,kinuko): Add more tests for cancel cases. 442 // TODO(ericu,dmikurube,kinuko): Add more tests for cancel cases.
409 443
410 } // namespace fileapi 444 } // namespace fileapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698