OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/chromeos/file_system_provider/provided_file_system.h" | 5 #include "chrome/browser/chromeos/file_system_provider/provided_file_system.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/files/file.h" | 10 #include "base/files/file.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "chrome/common/extensions/api/file_system_provider_internal.h" | 25 #include "chrome/common/extensions/api/file_system_provider_internal.h" |
26 #include "chrome/test/base/testing_profile.h" | 26 #include "chrome/test/base/testing_profile.h" |
27 #include "content/public/test/test_browser_thread_bundle.h" | 27 #include "content/public/test/test_browser_thread_bundle.h" |
28 #include "extensions/browser/event_router.h" | 28 #include "extensions/browser/event_router.h" |
29 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
30 | 30 |
31 namespace chromeos { | 31 namespace chromeos { |
32 namespace file_system_provider { | 32 namespace file_system_provider { |
33 namespace { | 33 namespace { |
34 | 34 |
| 35 const char kOrigin[] = |
| 36 "chrome-extension://abcabcabcabcabcabcabcabcabcabcabcabca/"; |
| 37 const char kAnotherOrigin[] = |
| 38 "chrome-extension://efgefgefgefgefgefgefgefgefgefgefgefge/"; |
35 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; | 39 const char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; |
36 const char kFileSystemId[] = "camera-pictures"; | 40 const char kFileSystemId[] = "camera-pictures"; |
37 const char kDisplayName[] = "Camera Pictures"; | 41 const char kDisplayName[] = "Camera Pictures"; |
38 const base::FilePath::CharType kDirectoryPath[] = "/hello/world"; | 42 const base::FilePath::CharType kDirectoryPath[] = "/hello/world"; |
39 | 43 |
40 // Fake implementation of the event router, mocking out a real extension. | 44 // Fake implementation of the event router, mocking out a real extension. |
41 // Handles requests and replies with fake answers back to the file system via | 45 // Handles requests and replies with fake answers back to the file system via |
42 // the request manager. | 46 // the request manager. |
43 class FakeEventRouter : public extensions::EventRouter { | 47 class FakeEventRouter : public extensions::EventRouter { |
44 public: | 48 public: |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory_NotFound) { | 282 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory_NotFound) { |
279 Log log; | 283 Log log; |
280 Observer observer; | 284 Observer observer; |
281 | 285 |
282 provided_file_system_->AddObserver(&observer); | 286 provided_file_system_->AddObserver(&observer); |
283 | 287 |
284 // First, set the extension response to an error. | 288 // First, set the extension response to an error. |
285 event_router_->set_reply_result(base::File::FILE_ERROR_NOT_FOUND); | 289 event_router_->set_reply_result(base::File::FILE_ERROR_NOT_FOUND); |
286 | 290 |
287 provided_file_system_->ObserveDirectory( | 291 provided_file_system_->ObserveDirectory( |
| 292 GURL(kOrigin), |
288 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 293 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
289 false /* recursive */, | 294 false /* recursive */, |
| 295 false /* persistent */, |
290 base::Bind(&LogStatus, base::Unretained(&log))); | 296 base::Bind(&LogStatus, base::Unretained(&log))); |
291 base::RunLoop().RunUntilIdle(); | 297 base::RunLoop().RunUntilIdle(); |
292 | 298 |
293 // The directory should not become observed because of an error. | 299 // The directory should not become observed because of an error. |
294 ASSERT_EQ(1u, log.size()); | 300 ASSERT_EQ(1u, log.size()); |
295 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, log[0]); | 301 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, log[0]); |
296 | 302 |
297 ObservedEntries* const observed_entries = | 303 ObservedEntries* const observed_entries = |
298 provided_file_system_->GetObservedEntries(); | 304 provided_file_system_->GetObservedEntries(); |
299 EXPECT_EQ(0u, observed_entries->size()); | 305 EXPECT_EQ(0u, observed_entries->size()); |
300 | 306 |
301 // The observer should not be called. | 307 // The observer should not be called. |
302 EXPECT_EQ(0, observer.list_changed_counter()); | 308 EXPECT_EQ(0, observer.list_changed_counter()); |
303 EXPECT_EQ(0, observer.tag_updated_counter()); | 309 EXPECT_EQ(0, observer.tag_updated_counter()); |
304 | 310 |
305 provided_file_system_->RemoveObserver(&observer); | 311 provided_file_system_->RemoveObserver(&observer); |
306 } | 312 } |
307 | 313 |
308 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory) { | 314 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory) { |
309 Log log; | 315 Log log; |
310 Observer observer; | 316 Observer observer; |
311 | 317 |
312 provided_file_system_->AddObserver(&observer); | 318 provided_file_system_->AddObserver(&observer); |
313 | 319 |
314 provided_file_system_->ObserveDirectory( | 320 provided_file_system_->ObserveDirectory( |
| 321 GURL(kOrigin), |
315 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 322 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
316 false /* recursive */, | 323 false /* recursive */, |
| 324 true /* persistent */, |
317 base::Bind(&LogStatus, base::Unretained(&log))); | 325 base::Bind(&LogStatus, base::Unretained(&log))); |
318 base::RunLoop().RunUntilIdle(); | 326 base::RunLoop().RunUntilIdle(); |
319 | 327 |
320 ASSERT_EQ(1u, log.size()); | 328 ASSERT_EQ(1u, log.size()); |
321 EXPECT_EQ(base::File::FILE_OK, log[0]); | 329 EXPECT_EQ(base::File::FILE_OK, log[0]); |
322 EXPECT_EQ(1, observer.list_changed_counter()); | 330 EXPECT_EQ(1, observer.list_changed_counter()); |
323 EXPECT_EQ(0, observer.tag_updated_counter()); | 331 EXPECT_EQ(0, observer.tag_updated_counter()); |
324 | 332 |
325 ObservedEntries* const observed_entries = | 333 ObservedEntries* const observed_entries = |
326 provided_file_system_->GetObservedEntries(); | 334 provided_file_system_->GetObservedEntries(); |
327 ASSERT_EQ(1u, observed_entries->size()); | 335 ASSERT_EQ(1u, observed_entries->size()); |
328 const ObservedEntry& observed_entry = observed_entries->begin()->second; | 336 const ObservedEntry& observed_entry = observed_entries->begin()->second; |
329 EXPECT_EQ(kDirectoryPath, observed_entry.entry_path.value()); | 337 EXPECT_EQ(FILE_PATH_LITERAL(kDirectoryPath), |
| 338 observed_entry.entry_path.value()); |
330 EXPECT_FALSE(observed_entry.recursive); | 339 EXPECT_FALSE(observed_entry.recursive); |
331 EXPECT_EQ("", observed_entry.last_tag); | 340 EXPECT_EQ("", observed_entry.last_tag); |
332 | 341 |
333 provided_file_system_->RemoveObserver(&observer); | 342 provided_file_system_->RemoveObserver(&observer); |
334 } | 343 } |
335 | 344 |
| 345 TEST_F(FileSystemProviderProvidedFileSystemTest, |
| 346 ObserveDirectory_PersistentIllegal) { |
| 347 Log log; |
| 348 Observer observer; |
| 349 |
| 350 // Create a provided file system interface, which does not support a notify |
| 351 // tag, though. |
| 352 const base::FilePath mount_path = |
| 353 util::GetMountPath(profile_.get(), kExtensionId, kFileSystemId); |
| 354 MountOptions mount_options; |
| 355 mount_options.file_system_id = kFileSystemId; |
| 356 mount_options.display_name = kDisplayName; |
| 357 mount_options.supports_notify_tag = false; |
| 358 ProvidedFileSystemInfo file_system_info( |
| 359 kExtensionId, mount_options, mount_path); |
| 360 ProvidedFileSystem simple_provided_file_system(profile_.get(), |
| 361 file_system_info); |
| 362 simple_provided_file_system.SetEventRouterForTesting(event_router_.get()); |
| 363 simple_provided_file_system.SetNotificationManagerForTesting( |
| 364 make_scoped_ptr(new StubNotificationManager)); |
| 365 |
| 366 simple_provided_file_system.AddObserver(&observer); |
| 367 |
| 368 simple_provided_file_system.ObserveDirectory( |
| 369 GURL(kOrigin), |
| 370 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
| 371 false /* recursive */, |
| 372 true /* persistent */, |
| 373 base::Bind(&LogStatus, base::Unretained(&log))); |
| 374 base::RunLoop().RunUntilIdle(); |
| 375 |
| 376 ASSERT_EQ(1u, log.size()); |
| 377 EXPECT_EQ(base::File::FILE_ERROR_INVALID_OPERATION, log[0]); |
| 378 EXPECT_EQ(0, observer.list_changed_counter()); |
| 379 EXPECT_EQ(0, observer.tag_updated_counter()); |
| 380 |
| 381 simple_provided_file_system.RemoveObserver(&observer); |
| 382 } |
| 383 |
336 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory_Exists) { | 384 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory_Exists) { |
337 Observer observer; | 385 Observer observer; |
338 provided_file_system_->AddObserver(&observer); | 386 provided_file_system_->AddObserver(&observer); |
339 | 387 |
340 { | 388 { |
341 // First observe a directory not recursively. | 389 // First observe a directory not recursively. |
342 Log log; | 390 Log log; |
343 provided_file_system_->ObserveDirectory( | 391 provided_file_system_->ObserveDirectory( |
| 392 GURL(kOrigin), |
344 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 393 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
345 false /* recursive */, | 394 false /* recursive */, |
| 395 true /* persistent */, |
346 base::Bind(&LogStatus, base::Unretained(&log))); | 396 base::Bind(&LogStatus, base::Unretained(&log))); |
347 base::RunLoop().RunUntilIdle(); | 397 base::RunLoop().RunUntilIdle(); |
348 | 398 |
349 ASSERT_EQ(1u, log.size()); | 399 ASSERT_EQ(1u, log.size()); |
350 EXPECT_EQ(base::File::FILE_OK, log[0]); | 400 EXPECT_EQ(base::File::FILE_OK, log[0]); |
351 EXPECT_EQ(1, observer.list_changed_counter()); | 401 EXPECT_EQ(1, observer.list_changed_counter()); |
352 EXPECT_EQ(0, observer.tag_updated_counter()); | 402 EXPECT_EQ(0, observer.tag_updated_counter()); |
| 403 |
| 404 ObservedEntries* const observed_entries = |
| 405 provided_file_system_->GetObservedEntries(); |
| 406 ASSERT_TRUE(observed_entries); |
| 407 ASSERT_EQ(1u, observed_entries->size()); |
| 408 const auto& observed_entry_it = observed_entries->find( |
| 409 ObservedEntryKey(base::FilePath(FILE_PATH_LITERAL(kDirectoryPath)), |
| 410 false /* recursive */)); |
| 411 ASSERT_NE(observed_entries->end(), observed_entry_it); |
| 412 |
| 413 EXPECT_EQ(1u, observed_entry_it->second.subscribers.size()); |
| 414 const auto& subscriber_it = |
| 415 observed_entry_it->second.subscribers.find(GURL(kOrigin)); |
| 416 ASSERT_NE(observed_entry_it->second.subscribers.end(), subscriber_it); |
| 417 EXPECT_EQ(kOrigin, subscriber_it->second.origin.spec()); |
| 418 EXPECT_TRUE(subscriber_it->second.persistent); |
353 } | 419 } |
354 | 420 |
355 { | 421 { |
356 // Create another non-recursive observer. That should fail. | 422 // Create another non-recursive observer. That should fail. |
357 Log log; | 423 Log log; |
358 provided_file_system_->ObserveDirectory( | 424 provided_file_system_->ObserveDirectory( |
| 425 GURL(kOrigin), |
359 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 426 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
360 false /* recursive */, | 427 false /* recursive */, |
| 428 true /* persistent */, |
361 base::Bind(&LogStatus, base::Unretained(&log))); | 429 base::Bind(&LogStatus, base::Unretained(&log))); |
362 base::RunLoop().RunUntilIdle(); | 430 base::RunLoop().RunUntilIdle(); |
363 | 431 |
364 ASSERT_EQ(1u, log.size()); | 432 ASSERT_EQ(1u, log.size()); |
365 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, log[0]); | 433 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, log[0]); |
366 EXPECT_EQ(1, observer.list_changed_counter()); // No changes on the list. | 434 EXPECT_EQ(1, observer.list_changed_counter()); // No changes on the list. |
367 EXPECT_EQ(0, observer.tag_updated_counter()); | 435 EXPECT_EQ(0, observer.tag_updated_counter()); |
368 } | 436 } |
369 | 437 |
370 { | 438 { |
371 // Create another observer on the same path, but a recursive one. That | 439 // Lastly, create another recursive observer. That should succeed. |
372 // should succeed. | |
373 Log log; | 440 Log log; |
374 provided_file_system_->ObserveDirectory( | 441 provided_file_system_->ObserveDirectory( |
| 442 GURL(kOrigin), |
375 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 443 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
376 true /* recursive */, | 444 true /* recursive */, |
| 445 true /* persistent */, |
377 base::Bind(&LogStatus, base::Unretained(&log))); | 446 base::Bind(&LogStatus, base::Unretained(&log))); |
378 base::RunLoop().RunUntilIdle(); | 447 base::RunLoop().RunUntilIdle(); |
379 | 448 |
380 ASSERT_EQ(1u, log.size()); | 449 ASSERT_EQ(1u, log.size()); |
381 EXPECT_EQ(base::File::FILE_OK, log[0]); | 450 EXPECT_EQ(base::File::FILE_OK, log[0]); |
382 EXPECT_EQ(2, observer.list_changed_counter()); | 451 EXPECT_EQ(2, observer.list_changed_counter()); |
383 EXPECT_EQ(0, observer.tag_updated_counter()); | 452 EXPECT_EQ(0, observer.tag_updated_counter()); |
| 453 } |
| 454 |
| 455 provided_file_system_->RemoveObserver(&observer); |
| 456 } |
| 457 |
| 458 TEST_F(FileSystemProviderProvidedFileSystemTest, |
| 459 ObserveDirectory_MultipleOrigins) { |
| 460 Observer observer; |
| 461 provided_file_system_->AddObserver(&observer); |
| 462 |
| 463 { |
| 464 // First observe a directory not recursively. |
| 465 Log log; |
| 466 provided_file_system_->ObserveDirectory( |
| 467 GURL(kOrigin), |
| 468 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
| 469 false /* recursive */, |
| 470 false /* persistent */, |
| 471 base::Bind(&LogStatus, base::Unretained(&log))); |
| 472 base::RunLoop().RunUntilIdle(); |
| 473 |
| 474 ASSERT_EQ(1u, log.size()); |
| 475 EXPECT_EQ(base::File::FILE_OK, log[0]); |
| 476 EXPECT_EQ(1, observer.list_changed_counter()); |
| 477 EXPECT_EQ(0, observer.tag_updated_counter()); |
| 478 |
| 479 ObservedEntries* const observed_entries = |
| 480 provided_file_system_->GetObservedEntries(); |
| 481 ASSERT_TRUE(observed_entries); |
| 482 ASSERT_EQ(1u, observed_entries->size()); |
| 483 const auto& observed_entry_it = observed_entries->find( |
| 484 ObservedEntryKey(base::FilePath(FILE_PATH_LITERAL(kDirectoryPath)), |
| 485 false /* recursive */)); |
| 486 ASSERT_NE(observed_entries->end(), observed_entry_it); |
| 487 |
| 488 EXPECT_EQ(1u, observed_entry_it->second.subscribers.size()); |
| 489 const auto& subscriber_it = |
| 490 observed_entry_it->second.subscribers.find(GURL(kOrigin)); |
| 491 ASSERT_NE(observed_entry_it->second.subscribers.end(), subscriber_it); |
| 492 EXPECT_EQ(kOrigin, subscriber_it->first.spec()); |
| 493 EXPECT_EQ(kOrigin, subscriber_it->second.origin.spec()); |
| 494 EXPECT_FALSE(subscriber_it->second.persistent); |
| 495 } |
| 496 |
| 497 { |
| 498 // Create another observer, but recursive and with a different origin. |
| 499 Log log; |
| 500 provided_file_system_->ObserveDirectory( |
| 501 GURL(kAnotherOrigin), |
| 502 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
| 503 true /* recursive */, |
| 504 true /* persistent */, |
| 505 base::Bind(&LogStatus, base::Unretained(&log))); |
| 506 base::RunLoop().RunUntilIdle(); |
| 507 |
| 508 ASSERT_EQ(1u, log.size()); |
| 509 EXPECT_EQ(base::File::FILE_OK, log[0]); |
| 510 EXPECT_EQ(2, observer.list_changed_counter()); |
| 511 EXPECT_EQ(0, observer.tag_updated_counter()); |
384 | 512 |
385 ObservedEntries* const observed_entries = | 513 ObservedEntries* const observed_entries = |
386 provided_file_system_->GetObservedEntries(); | 514 provided_file_system_->GetObservedEntries(); |
| 515 ASSERT_TRUE(observed_entries); |
| 516 ASSERT_EQ(2u, observed_entries->size()); |
387 const auto& observed_entry_it = observed_entries->find( | 517 const auto& observed_entry_it = observed_entries->find( |
388 ObservedEntryKey(base::FilePath(FILE_PATH_LITERAL(kDirectoryPath)), | 518 ObservedEntryKey(base::FilePath(FILE_PATH_LITERAL(kDirectoryPath)), |
389 true /* recursive */)); | 519 false /* recursive */)); |
390 ASSERT_NE(observed_entries->end(), observed_entry_it); | 520 ASSERT_NE(observed_entries->end(), observed_entry_it); |
391 | 521 |
392 EXPECT_EQ(kDirectoryPath, observed_entry_it->second.entry_path.value()); | 522 EXPECT_EQ(1u, observed_entry_it->second.subscribers.size()); |
393 EXPECT_TRUE(observed_entry_it->second.recursive); | 523 const auto& subscriber_it = |
394 EXPECT_EQ("", observed_entry_it->second.last_tag); | 524 observed_entry_it->second.subscribers.find(GURL(kOrigin)); |
| 525 ASSERT_NE(observed_entry_it->second.subscribers.end(), subscriber_it); |
| 526 EXPECT_EQ(kOrigin, subscriber_it->first.spec()); |
| 527 EXPECT_EQ(kOrigin, subscriber_it->second.origin.spec()); |
| 528 EXPECT_FALSE(subscriber_it->second.persistent); |
395 } | 529 } |
396 | 530 |
397 { | 531 { |
398 // Lastly, create another recursive observer. That should fail, too. | 532 // Unobserve the second one gracefully. |
399 Log log; | 533 Log log; |
400 provided_file_system_->ObserveDirectory( | 534 provided_file_system_->UnobserveEntry( |
| 535 GURL(kAnotherOrigin), |
401 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 536 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
402 true /* recursive */, | 537 true /* recursive */, |
403 base::Bind(&LogStatus, base::Unretained(&log))); | 538 base::Bind(&LogStatus, base::Unretained(&log))); |
404 base::RunLoop().RunUntilIdle(); | 539 base::RunLoop().RunUntilIdle(); |
405 | 540 |
406 ASSERT_EQ(1u, log.size()); | 541 ASSERT_EQ(1u, log.size()); |
407 EXPECT_EQ(base::File::FILE_ERROR_EXISTS, log[0]); | 542 EXPECT_EQ(base::File::FILE_OK, log[0]); |
408 EXPECT_EQ(2, observer.list_changed_counter()); // No changes on the list. | 543 EXPECT_EQ(3, observer.list_changed_counter()); |
409 EXPECT_EQ(0, observer.tag_updated_counter()); | 544 EXPECT_EQ(0, observer.tag_updated_counter()); |
| 545 |
| 546 ObservedEntries* const observed_entries = |
| 547 provided_file_system_->GetObservedEntries(); |
| 548 ASSERT_TRUE(observed_entries); |
| 549 EXPECT_EQ(1u, observed_entries->size()); |
| 550 const auto& observed_entry_it = observed_entries->find( |
| 551 ObservedEntryKey(base::FilePath(FILE_PATH_LITERAL(kDirectoryPath)), |
| 552 false /* recursive */)); |
| 553 ASSERT_NE(observed_entries->end(), observed_entry_it); |
| 554 |
| 555 EXPECT_EQ(1u, observed_entry_it->second.subscribers.size()); |
| 556 const auto& subscriber_it = |
| 557 observed_entry_it->second.subscribers.find(GURL(kOrigin)); |
| 558 ASSERT_NE(observed_entry_it->second.subscribers.end(), subscriber_it); |
| 559 EXPECT_EQ(kOrigin, subscriber_it->first.spec()); |
| 560 EXPECT_EQ(kOrigin, subscriber_it->second.origin.spec()); |
| 561 EXPECT_FALSE(subscriber_it->second.persistent); |
410 } | 562 } |
411 | 563 |
412 provided_file_system_->RemoveObserver(&observer); | 564 provided_file_system_->RemoveObserver(&observer); |
413 } | 565 } |
414 | 566 |
415 TEST_F(FileSystemProviderProvidedFileSystemTest, UnobserveEntry) { | 567 TEST_F(FileSystemProviderProvidedFileSystemTest, UnobserveEntry) { |
416 Observer observer; | 568 Observer observer; |
417 provided_file_system_->AddObserver(&observer); | 569 provided_file_system_->AddObserver(&observer); |
418 | 570 |
419 { | 571 { |
420 // First, confirm that unobserving an entry which is not observed, results | 572 // First, confirm that unobserving an entry which is not observed, results |
421 // in an error. | 573 // in an error. |
422 Log log; | 574 Log log; |
423 provided_file_system_->UnobserveEntry( | 575 provided_file_system_->UnobserveEntry( |
| 576 GURL(kOrigin), |
424 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 577 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
425 false /* recursive */, | 578 false /* recursive */, |
426 base::Bind(&LogStatus, base::Unretained(&log))); | 579 base::Bind(&LogStatus, base::Unretained(&log))); |
427 base::RunLoop().RunUntilIdle(); | 580 base::RunLoop().RunUntilIdle(); |
428 | 581 |
429 ASSERT_EQ(1u, log.size()); | 582 ASSERT_EQ(1u, log.size()); |
430 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, log[0]); | 583 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, log[0]); |
431 EXPECT_EQ(0, observer.list_changed_counter()); | 584 EXPECT_EQ(0, observer.list_changed_counter()); |
432 EXPECT_EQ(0, observer.tag_updated_counter()); | 585 EXPECT_EQ(0, observer.tag_updated_counter()); |
433 } | 586 } |
434 | 587 |
435 { | 588 { |
436 // Observe a directory not recursively. | 589 // Observe a directory not recursively. |
437 Log log; | 590 Log log; |
438 provided_file_system_->ObserveDirectory( | 591 provided_file_system_->ObserveDirectory( |
| 592 GURL(kOrigin), |
439 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 593 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
440 false /* recursive */, | 594 false /* recursive */, |
| 595 true /* persistent */, |
441 base::Bind(&LogStatus, base::Unretained(&log))); | 596 base::Bind(&LogStatus, base::Unretained(&log))); |
442 base::RunLoop().RunUntilIdle(); | 597 base::RunLoop().RunUntilIdle(); |
443 | 598 |
444 ASSERT_EQ(1u, log.size()); | 599 ASSERT_EQ(1u, log.size()); |
445 EXPECT_EQ(base::File::FILE_OK, log[0]); | 600 EXPECT_EQ(base::File::FILE_OK, log[0]); |
446 EXPECT_EQ(1, observer.list_changed_counter()); | 601 EXPECT_EQ(1, observer.list_changed_counter()); |
447 EXPECT_EQ(0, observer.tag_updated_counter()); | 602 EXPECT_EQ(0, observer.tag_updated_counter()); |
448 | 603 |
449 ObservedEntries* const observed_entries = | 604 ObservedEntries* const observed_entries = |
450 provided_file_system_->GetObservedEntries(); | 605 provided_file_system_->GetObservedEntries(); |
451 EXPECT_EQ(1u, observed_entries->size()); | 606 EXPECT_EQ(1u, observed_entries->size()); |
452 } | 607 } |
453 | 608 |
454 { | 609 { |
455 // Unobserve it gracefully. | 610 // Unobserve it gracefully. |
456 Log log; | 611 Log log; |
457 provided_file_system_->UnobserveEntry( | 612 provided_file_system_->UnobserveEntry( |
| 613 GURL(kOrigin), |
458 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 614 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
459 false /* recursive */, | 615 false /* recursive */, |
460 base::Bind(&LogStatus, base::Unretained(&log))); | 616 base::Bind(&LogStatus, base::Unretained(&log))); |
461 base::RunLoop().RunUntilIdle(); | 617 base::RunLoop().RunUntilIdle(); |
462 | 618 |
463 ASSERT_EQ(1u, log.size()); | 619 ASSERT_EQ(1u, log.size()); |
464 EXPECT_EQ(base::File::FILE_OK, log[0]); | 620 EXPECT_EQ(base::File::FILE_OK, log[0]); |
465 EXPECT_EQ(2, observer.list_changed_counter()); | 621 EXPECT_EQ(2, observer.list_changed_counter()); |
466 EXPECT_EQ(0, observer.tag_updated_counter()); | 622 EXPECT_EQ(0, observer.tag_updated_counter()); |
467 | 623 |
468 ObservedEntries* const observed_entries = | 624 ObservedEntries* const observed_entries = |
469 provided_file_system_->GetObservedEntries(); | 625 provided_file_system_->GetObservedEntries(); |
470 EXPECT_EQ(0u, observed_entries->size()); | 626 EXPECT_EQ(0u, observed_entries->size()); |
471 } | 627 } |
472 | 628 |
473 { | 629 { |
474 // Confirm that it's possible to observe it again. | 630 // Confirm that it's possible to observe it again. |
475 Log log; | 631 Log log; |
476 provided_file_system_->ObserveDirectory( | 632 provided_file_system_->ObserveDirectory( |
| 633 GURL(kOrigin), |
477 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 634 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
478 false /* recursive */, | 635 false /* recursive */, |
| 636 true /* persistent */, |
479 base::Bind(&LogStatus, base::Unretained(&log))); | 637 base::Bind(&LogStatus, base::Unretained(&log))); |
480 base::RunLoop().RunUntilIdle(); | 638 base::RunLoop().RunUntilIdle(); |
481 | 639 |
482 ASSERT_EQ(1u, log.size()); | 640 ASSERT_EQ(1u, log.size()); |
483 EXPECT_EQ(base::File::FILE_OK, log[0]); | 641 EXPECT_EQ(base::File::FILE_OK, log[0]); |
484 EXPECT_EQ(3, observer.list_changed_counter()); | 642 EXPECT_EQ(3, observer.list_changed_counter()); |
485 EXPECT_EQ(0, observer.tag_updated_counter()); | 643 EXPECT_EQ(0, observer.tag_updated_counter()); |
486 | 644 |
487 ObservedEntries* const observed_entries = | 645 ObservedEntries* const observed_entries = |
488 provided_file_system_->GetObservedEntries(); | 646 provided_file_system_->GetObservedEntries(); |
489 EXPECT_EQ(1u, observed_entries->size()); | 647 EXPECT_EQ(1u, observed_entries->size()); |
490 } | 648 } |
491 | 649 |
492 { | 650 { |
493 // Finally, unobserve it, but with an error from extension. That should | 651 // Finally, unobserve it, but with an error from extension. That should |
494 // result | 652 // result in a removed observer, anyway. The error code should not be |
495 // in a removed observer, anyway. | 653 // passed. |
496 event_router_->set_reply_result(base::File::FILE_ERROR_FAILED); | 654 event_router_->set_reply_result(base::File::FILE_ERROR_FAILED); |
497 | 655 |
498 Log log; | 656 Log log; |
499 provided_file_system_->UnobserveEntry( | 657 provided_file_system_->UnobserveEntry( |
| 658 GURL(kOrigin), |
500 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 659 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
501 false /* recursive */, | 660 false /* recursive */, |
502 base::Bind(&LogStatus, base::Unretained(&log))); | 661 base::Bind(&LogStatus, base::Unretained(&log))); |
503 base::RunLoop().RunUntilIdle(); | 662 base::RunLoop().RunUntilIdle(); |
504 | 663 |
505 ASSERT_EQ(1u, log.size()); | 664 ASSERT_EQ(1u, log.size()); |
506 EXPECT_EQ(base::File::FILE_ERROR_FAILED, log[0]); | 665 EXPECT_EQ(base::File::FILE_OK, log[0]); |
507 EXPECT_EQ(4, observer.list_changed_counter()); | 666 EXPECT_EQ(4, observer.list_changed_counter()); |
508 EXPECT_EQ(0, observer.tag_updated_counter()); | 667 EXPECT_EQ(0, observer.tag_updated_counter()); |
509 | 668 |
510 ObservedEntries* const observed_entries = | 669 ObservedEntries* const observed_entries = |
511 provided_file_system_->GetObservedEntries(); | 670 provided_file_system_->GetObservedEntries(); |
512 EXPECT_EQ(0u, observed_entries->size()); | 671 EXPECT_EQ(0u, observed_entries->size()); |
513 } | 672 } |
514 | 673 |
515 provided_file_system_->RemoveObserver(&observer); | 674 provided_file_system_->RemoveObserver(&observer); |
516 } | 675 } |
517 | 676 |
518 TEST_F(FileSystemProviderProvidedFileSystemTest, Notify) { | 677 TEST_F(FileSystemProviderProvidedFileSystemTest, Notify) { |
519 Observer observer; | 678 Observer observer; |
520 provided_file_system_->AddObserver(&observer); | 679 provided_file_system_->AddObserver(&observer); |
521 | 680 |
522 { | 681 { |
523 // Observe a directory. | 682 // Observe a directory. |
524 Log log; | 683 Log log; |
525 provided_file_system_->ObserveDirectory( | 684 provided_file_system_->ObserveDirectory( |
| 685 GURL(kOrigin), |
526 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 686 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
527 false /* recursive */, | 687 false /* recursive */, |
| 688 true /* persistent */, |
528 base::Bind(&LogStatus, base::Unretained(&log))); | 689 base::Bind(&LogStatus, base::Unretained(&log))); |
529 base::RunLoop().RunUntilIdle(); | 690 base::RunLoop().RunUntilIdle(); |
530 | 691 |
531 ASSERT_EQ(1u, log.size()); | 692 ASSERT_EQ(1u, log.size()); |
532 EXPECT_EQ(base::File::FILE_OK, log[0]); | 693 EXPECT_EQ(base::File::FILE_OK, log[0]); |
533 EXPECT_EQ(1, observer.list_changed_counter()); | 694 EXPECT_EQ(1, observer.list_changed_counter()); |
534 EXPECT_EQ(0, observer.tag_updated_counter()); | 695 EXPECT_EQ(0, observer.tag_updated_counter()); |
535 | 696 |
536 ObservedEntries* const observed_entries = | 697 ObservedEntries* const observed_entries = |
537 provided_file_system_->GetObservedEntries(); | 698 provided_file_system_->GetObservedEntries(); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
607 EXPECT_EQ(0u, observed_entries->size()); | 768 EXPECT_EQ(0u, observed_entries->size()); |
608 EXPECT_EQ(2, observer.list_changed_counter()); | 769 EXPECT_EQ(2, observer.list_changed_counter()); |
609 EXPECT_EQ(2, observer.tag_updated_counter()); | 770 EXPECT_EQ(2, observer.tag_updated_counter()); |
610 } | 771 } |
611 | 772 |
612 provided_file_system_->RemoveObserver(&observer); | 773 provided_file_system_->RemoveObserver(&observer); |
613 } | 774 } |
614 | 775 |
615 } // namespace file_system_provider | 776 } // namespace file_system_provider |
616 } // namespace chromeos | 777 } // namespace chromeos |
OLD | NEW |