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

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

Powered by Google App Engine
This is Rietveld 408576698