| 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 |