| 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" |
| 11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
| 13 #include "base/memory/scoped_vector.h" | 13 #include "base/memory/scoped_vector.h" |
| 14 #include "base/run_loop.h" | 14 #include "base/run_loop.h" |
| 15 #include "base/thread_task_runner_handle.h" | 15 #include "base/thread_task_runner_handle.h" |
| 16 #include "base/values.h" | 16 #include "base/values.h" |
| 17 #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h" | 17 #include "chrome/browser/chromeos/file_system_provider/mount_path_util.h" |
| 18 #include "chrome/browser/chromeos/file_system_provider/notification_manager.h" | 18 #include "chrome/browser/chromeos/file_system_provider/notification_manager.h" |
| 19 #include "chrome/browser/chromeos/file_system_provider/observed_entry.h" |
| 19 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info
.h" | 20 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info
.h" |
| 20 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_inte
rface.h" | 21 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_inte
rface.h" |
| 21 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_obse
rver.h" | 22 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_obse
rver.h" |
| 22 #include "chrome/browser/chromeos/file_system_provider/request_manager.h" | 23 #include "chrome/browser/chromeos/file_system_provider/request_manager.h" |
| 23 #include "chrome/common/extensions/api/file_system_provider.h" | 24 #include "chrome/common/extensions/api/file_system_provider.h" |
| 24 #include "chrome/common/extensions/api/file_system_provider_internal.h" | 25 #include "chrome/common/extensions/api/file_system_provider_internal.h" |
| 25 #include "chrome/test/base/testing_profile.h" | 26 #include "chrome/test/base/testing_profile.h" |
| 26 #include "content/public/test/test_browser_thread_bundle.h" | 27 #include "content/public/test/test_browser_thread_bundle.h" |
| 27 #include "extensions/browser/event_router.h" | 28 #include "extensions/browser/event_router.h" |
| 28 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 ProvidedFileSystemObserver::ChangeType change_type, | 128 ProvidedFileSystemObserver::ChangeType change_type, |
| 128 const ProvidedFileSystemObserver::ChildChanges& child_changes, | 129 const ProvidedFileSystemObserver::ChildChanges& child_changes, |
| 129 const base::Closure& callback) override { | 130 const base::Closure& callback) override { |
| 130 EXPECT_EQ(kFileSystemId, file_system_info.file_system_id()); | 131 EXPECT_EQ(kFileSystemId, file_system_info.file_system_id()); |
| 131 change_events_.push_back(new ChangeEvent(change_type, child_changes)); | 132 change_events_.push_back(new ChangeEvent(change_type, child_changes)); |
| 132 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback); | 133 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback); |
| 133 } | 134 } |
| 134 | 135 |
| 135 virtual void OnObservedEntryTagUpdated( | 136 virtual void OnObservedEntryTagUpdated( |
| 136 const ProvidedFileSystemInfo& file_system_info, | 137 const ProvidedFileSystemInfo& file_system_info, |
| 137 const base::FilePath& observed_path) override { | 138 const base::FilePath& observed_path, |
| 139 const std::string& tag) override { |
| 138 EXPECT_EQ(kFileSystemId, file_system_info.file_system_id()); | 140 EXPECT_EQ(kFileSystemId, file_system_info.file_system_id()); |
| 139 ++tag_updated_counter_; | 141 ++tag_updated_counter_; |
| 140 } | 142 } |
| 141 | 143 |
| 142 virtual void OnObservedEntryListChanged( | 144 virtual void OnObservedEntryListChanged( |
| 143 const ProvidedFileSystemInfo& file_system_info) override { | 145 const ProvidedFileSystemInfo& file_system_info, |
| 146 const ObservedEntries& observed_entries) override { |
| 144 EXPECT_EQ(kFileSystemId, file_system_info.file_system_id()); | 147 EXPECT_EQ(kFileSystemId, file_system_info.file_system_id()); |
| 145 ++list_changed_counter_; | 148 ++list_changed_counter_; |
| 146 } | 149 } |
| 147 | 150 |
| 148 int list_changed_counter() const { return list_changed_counter_; } | 151 int list_changed_counter() const { return list_changed_counter_; } |
| 149 const ScopedVector<ChangeEvent>& change_events() const { | 152 const ScopedVector<ChangeEvent>& change_events() const { |
| 150 return change_events_; | 153 return change_events_; |
| 151 } | 154 } |
| 152 int tag_updated_counter() const { return tag_updated_counter_; } | 155 int tag_updated_counter() const { return tag_updated_counter_; } |
| 153 | 156 |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 285 provided_file_system_->ObserveDirectory( | 288 provided_file_system_->ObserveDirectory( |
| 286 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 289 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
| 287 false /* recursive */, | 290 false /* recursive */, |
| 288 base::Bind(&LogStatus, base::Unretained(&log))); | 291 base::Bind(&LogStatus, base::Unretained(&log))); |
| 289 base::RunLoop().RunUntilIdle(); | 292 base::RunLoop().RunUntilIdle(); |
| 290 | 293 |
| 291 // The directory should not become observed because of an error. | 294 // The directory should not become observed because of an error. |
| 292 ASSERT_EQ(1u, log.size()); | 295 ASSERT_EQ(1u, log.size()); |
| 293 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, log[0]); | 296 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, log[0]); |
| 294 | 297 |
| 295 ProvidedFileSystemInterface::ObservedEntries* const observed_entries = | 298 ObservedEntries* const observed_entries = |
| 296 provided_file_system_->GetObservedEntries(); | 299 provided_file_system_->GetObservedEntries(); |
| 297 EXPECT_EQ(0u, observed_entries->size()); | 300 EXPECT_EQ(0u, observed_entries->size()); |
| 298 | 301 |
| 299 // The observer should not be called. | 302 // The observer should not be called. |
| 300 EXPECT_EQ(0, observer.list_changed_counter()); | 303 EXPECT_EQ(0, observer.list_changed_counter()); |
| 301 EXPECT_EQ(0, observer.tag_updated_counter()); | 304 EXPECT_EQ(0, observer.tag_updated_counter()); |
| 302 | 305 |
| 303 provided_file_system_->RemoveObserver(&observer); | 306 provided_file_system_->RemoveObserver(&observer); |
| 304 } | 307 } |
| 305 | 308 |
| 306 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory) { | 309 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory) { |
| 307 Log log; | 310 Log log; |
| 308 Observer observer; | 311 Observer observer; |
| 309 | 312 |
| 310 provided_file_system_->AddObserver(&observer); | 313 provided_file_system_->AddObserver(&observer); |
| 311 | 314 |
| 312 provided_file_system_->ObserveDirectory( | 315 provided_file_system_->ObserveDirectory( |
| 313 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 316 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
| 314 false /* recursive */, | 317 false /* recursive */, |
| 315 base::Bind(&LogStatus, base::Unretained(&log))); | 318 base::Bind(&LogStatus, base::Unretained(&log))); |
| 316 base::RunLoop().RunUntilIdle(); | 319 base::RunLoop().RunUntilIdle(); |
| 317 | 320 |
| 318 ASSERT_EQ(1u, log.size()); | 321 ASSERT_EQ(1u, log.size()); |
| 319 EXPECT_EQ(base::File::FILE_OK, log[0]); | 322 EXPECT_EQ(base::File::FILE_OK, log[0]); |
| 320 EXPECT_EQ(1, observer.list_changed_counter()); | 323 EXPECT_EQ(1, observer.list_changed_counter()); |
| 321 EXPECT_EQ(0, observer.tag_updated_counter()); | 324 EXPECT_EQ(0, observer.tag_updated_counter()); |
| 322 | 325 |
| 323 ProvidedFileSystemInterface::ObservedEntries* const observed_entries = | 326 ObservedEntries* const observed_entries = |
| 324 provided_file_system_->GetObservedEntries(); | 327 provided_file_system_->GetObservedEntries(); |
| 325 ASSERT_EQ(1u, observed_entries->size()); | 328 ASSERT_EQ(1u, observed_entries->size()); |
| 326 const ProvidedFileSystemInterface::ObservedEntry& observed_entry = | 329 const ObservedEntry& observed_entry = observed_entries->begin()->second; |
| 327 observed_entries->begin()->second; | |
| 328 EXPECT_EQ(kDirectoryPath, observed_entry.entry_path.value()); | 330 EXPECT_EQ(kDirectoryPath, observed_entry.entry_path.value()); |
| 329 EXPECT_FALSE(observed_entry.recursive); | 331 EXPECT_FALSE(observed_entry.recursive); |
| 330 EXPECT_EQ("", observed_entry.last_tag); | 332 EXPECT_EQ("", observed_entry.last_tag); |
| 331 | 333 |
| 332 provided_file_system_->RemoveObserver(&observer); | 334 provided_file_system_->RemoveObserver(&observer); |
| 333 } | 335 } |
| 334 | 336 |
| 335 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory_Exists) { | 337 TEST_F(FileSystemProviderProvidedFileSystemTest, ObserveDirectory_Exists) { |
| 336 Observer observer; | 338 Observer observer; |
| 337 provided_file_system_->AddObserver(&observer); | 339 provided_file_system_->AddObserver(&observer); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 375 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 377 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
| 376 true /* recursive */, | 378 true /* recursive */, |
| 377 base::Bind(&LogStatus, base::Unretained(&log))); | 379 base::Bind(&LogStatus, base::Unretained(&log))); |
| 378 base::RunLoop().RunUntilIdle(); | 380 base::RunLoop().RunUntilIdle(); |
| 379 | 381 |
| 380 ASSERT_EQ(1u, log.size()); | 382 ASSERT_EQ(1u, log.size()); |
| 381 EXPECT_EQ(base::File::FILE_OK, log[0]); | 383 EXPECT_EQ(base::File::FILE_OK, log[0]); |
| 382 EXPECT_EQ(2, observer.list_changed_counter()); | 384 EXPECT_EQ(2, observer.list_changed_counter()); |
| 383 EXPECT_EQ(0, observer.tag_updated_counter()); | 385 EXPECT_EQ(0, observer.tag_updated_counter()); |
| 384 | 386 |
| 385 ProvidedFileSystemInterface::ObservedEntries* const observed_entries = | 387 ObservedEntries* const observed_entries = |
| 386 provided_file_system_->GetObservedEntries(); | 388 provided_file_system_->GetObservedEntries(); |
| 387 ASSERT_EQ(1u, observed_entries->size()); | 389 ASSERT_EQ(1u, observed_entries->size()); |
| 388 const ProvidedFileSystemInterface::ObservedEntry& observed_entry = | 390 const ObservedEntry& observed_entry = observed_entries->begin()->second; |
| 389 observed_entries->begin()->second; | |
| 390 EXPECT_EQ(kDirectoryPath, observed_entry.entry_path.value()); | 391 EXPECT_EQ(kDirectoryPath, observed_entry.entry_path.value()); |
| 391 EXPECT_TRUE(observed_entry.recursive); | 392 EXPECT_TRUE(observed_entry.recursive); |
| 392 EXPECT_EQ("", observed_entry.last_tag); | 393 EXPECT_EQ("", observed_entry.last_tag); |
| 393 } | 394 } |
| 394 | 395 |
| 395 { | 396 { |
| 396 // Lastly, create another recursive observer. That should fail, too. | 397 // Lastly, create another recursive observer. That should fail, too. |
| 397 Log log; | 398 Log log; |
| 398 provided_file_system_->ObserveDirectory( | 399 provided_file_system_->ObserveDirectory( |
| 399 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 400 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 437 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
| 437 false /* recursive */, | 438 false /* recursive */, |
| 438 base::Bind(&LogStatus, base::Unretained(&log))); | 439 base::Bind(&LogStatus, base::Unretained(&log))); |
| 439 base::RunLoop().RunUntilIdle(); | 440 base::RunLoop().RunUntilIdle(); |
| 440 | 441 |
| 441 ASSERT_EQ(1u, log.size()); | 442 ASSERT_EQ(1u, log.size()); |
| 442 EXPECT_EQ(base::File::FILE_OK, log[0]); | 443 EXPECT_EQ(base::File::FILE_OK, log[0]); |
| 443 EXPECT_EQ(1, observer.list_changed_counter()); | 444 EXPECT_EQ(1, observer.list_changed_counter()); |
| 444 EXPECT_EQ(0, observer.tag_updated_counter()); | 445 EXPECT_EQ(0, observer.tag_updated_counter()); |
| 445 | 446 |
| 446 ProvidedFileSystemInterface::ObservedEntries* const observed_entries = | 447 ObservedEntries* const observed_entries = |
| 447 provided_file_system_->GetObservedEntries(); | 448 provided_file_system_->GetObservedEntries(); |
| 448 EXPECT_EQ(1u, observed_entries->size()); | 449 EXPECT_EQ(1u, observed_entries->size()); |
| 449 } | 450 } |
| 450 | 451 |
| 451 { | 452 { |
| 452 // Unobserve it gracefully. | 453 // Unobserve it gracefully. |
| 453 Log log; | 454 Log log; |
| 454 provided_file_system_->UnobserveEntry( | 455 provided_file_system_->UnobserveEntry( |
| 455 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 456 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
| 456 base::Bind(&LogStatus, base::Unretained(&log))); | 457 base::Bind(&LogStatus, base::Unretained(&log))); |
| 457 base::RunLoop().RunUntilIdle(); | 458 base::RunLoop().RunUntilIdle(); |
| 458 | 459 |
| 459 ASSERT_EQ(1u, log.size()); | 460 ASSERT_EQ(1u, log.size()); |
| 460 EXPECT_EQ(base::File::FILE_OK, log[0]); | 461 EXPECT_EQ(base::File::FILE_OK, log[0]); |
| 461 EXPECT_EQ(2, observer.list_changed_counter()); | 462 EXPECT_EQ(2, observer.list_changed_counter()); |
| 462 EXPECT_EQ(0, observer.tag_updated_counter()); | 463 EXPECT_EQ(0, observer.tag_updated_counter()); |
| 463 | 464 |
| 464 ProvidedFileSystemInterface::ObservedEntries* const observed_entries = | 465 ObservedEntries* const observed_entries = |
| 465 provided_file_system_->GetObservedEntries(); | 466 provided_file_system_->GetObservedEntries(); |
| 466 EXPECT_EQ(0u, observed_entries->size()); | 467 EXPECT_EQ(0u, observed_entries->size()); |
| 467 } | 468 } |
| 468 | 469 |
| 469 { | 470 { |
| 470 // Confirm that it's possible to observe it again. | 471 // Confirm that it's possible to observe it again. |
| 471 Log log; | 472 Log log; |
| 472 provided_file_system_->ObserveDirectory( | 473 provided_file_system_->ObserveDirectory( |
| 473 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 474 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
| 474 false /* recursive */, | 475 false /* recursive */, |
| 475 base::Bind(&LogStatus, base::Unretained(&log))); | 476 base::Bind(&LogStatus, base::Unretained(&log))); |
| 476 base::RunLoop().RunUntilIdle(); | 477 base::RunLoop().RunUntilIdle(); |
| 477 | 478 |
| 478 ASSERT_EQ(1u, log.size()); | 479 ASSERT_EQ(1u, log.size()); |
| 479 EXPECT_EQ(base::File::FILE_OK, log[0]); | 480 EXPECT_EQ(base::File::FILE_OK, log[0]); |
| 480 EXPECT_EQ(3, observer.list_changed_counter()); | 481 EXPECT_EQ(3, observer.list_changed_counter()); |
| 481 EXPECT_EQ(0, observer.tag_updated_counter()); | 482 EXPECT_EQ(0, observer.tag_updated_counter()); |
| 482 | 483 |
| 483 ProvidedFileSystemInterface::ObservedEntries* const observed_entries = | 484 ObservedEntries* const observed_entries = |
| 484 provided_file_system_->GetObservedEntries(); | 485 provided_file_system_->GetObservedEntries(); |
| 485 EXPECT_EQ(1u, observed_entries->size()); | 486 EXPECT_EQ(1u, observed_entries->size()); |
| 486 } | 487 } |
| 487 | 488 |
| 488 { | 489 { |
| 489 // Finally, unobserve it, but with an error from extension. That should | 490 // Finally, unobserve it, but with an error from extension. That should |
| 490 // result | 491 // result |
| 491 // in a removed observer, anyway. | 492 // in a removed observer, anyway. |
| 492 event_router_->set_reply_result(base::File::FILE_ERROR_FAILED); | 493 event_router_->set_reply_result(base::File::FILE_ERROR_FAILED); |
| 493 | 494 |
| 494 Log log; | 495 Log log; |
| 495 provided_file_system_->UnobserveEntry( | 496 provided_file_system_->UnobserveEntry( |
| 496 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 497 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
| 497 base::Bind(&LogStatus, base::Unretained(&log))); | 498 base::Bind(&LogStatus, base::Unretained(&log))); |
| 498 base::RunLoop().RunUntilIdle(); | 499 base::RunLoop().RunUntilIdle(); |
| 499 | 500 |
| 500 ASSERT_EQ(1u, log.size()); | 501 ASSERT_EQ(1u, log.size()); |
| 501 EXPECT_EQ(base::File::FILE_ERROR_FAILED, log[0]); | 502 EXPECT_EQ(base::File::FILE_ERROR_FAILED, log[0]); |
| 502 EXPECT_EQ(4, observer.list_changed_counter()); | 503 EXPECT_EQ(4, observer.list_changed_counter()); |
| 503 EXPECT_EQ(0, observer.tag_updated_counter()); | 504 EXPECT_EQ(0, observer.tag_updated_counter()); |
| 504 | 505 |
| 505 ProvidedFileSystemInterface::ObservedEntries* const observed_entries = | 506 ObservedEntries* const observed_entries = |
| 506 provided_file_system_->GetObservedEntries(); | 507 provided_file_system_->GetObservedEntries(); |
| 507 EXPECT_EQ(0u, observed_entries->size()); | 508 EXPECT_EQ(0u, observed_entries->size()); |
| 508 } | 509 } |
| 509 | 510 |
| 510 provided_file_system_->RemoveObserver(&observer); | 511 provided_file_system_->RemoveObserver(&observer); |
| 511 } | 512 } |
| 512 | 513 |
| 513 TEST_F(FileSystemProviderProvidedFileSystemTest, Notify) { | 514 TEST_F(FileSystemProviderProvidedFileSystemTest, Notify) { |
| 514 Observer observer; | 515 Observer observer; |
| 515 provided_file_system_->AddObserver(&observer); | 516 provided_file_system_->AddObserver(&observer); |
| 516 | 517 |
| 517 { | 518 { |
| 518 // Observe a directory. | 519 // Observe a directory. |
| 519 Log log; | 520 Log log; |
| 520 provided_file_system_->ObserveDirectory( | 521 provided_file_system_->ObserveDirectory( |
| 521 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 522 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
| 522 false /* recursive */, | 523 false /* recursive */, |
| 523 base::Bind(&LogStatus, base::Unretained(&log))); | 524 base::Bind(&LogStatus, base::Unretained(&log))); |
| 524 base::RunLoop().RunUntilIdle(); | 525 base::RunLoop().RunUntilIdle(); |
| 525 | 526 |
| 526 ASSERT_EQ(1u, log.size()); | 527 ASSERT_EQ(1u, log.size()); |
| 527 EXPECT_EQ(base::File::FILE_OK, log[0]); | 528 EXPECT_EQ(base::File::FILE_OK, log[0]); |
| 528 EXPECT_EQ(1, observer.list_changed_counter()); | 529 EXPECT_EQ(1, observer.list_changed_counter()); |
| 529 EXPECT_EQ(0, observer.tag_updated_counter()); | 530 EXPECT_EQ(0, observer.tag_updated_counter()); |
| 530 | 531 |
| 531 ProvidedFileSystemInterface::ObservedEntries* const observed_entries = | 532 ObservedEntries* const observed_entries = |
| 532 provided_file_system_->GetObservedEntries(); | 533 provided_file_system_->GetObservedEntries(); |
| 533 EXPECT_EQ(1u, observed_entries->size()); | 534 EXPECT_EQ(1u, observed_entries->size()); |
| 534 provided_file_system_->GetObservedEntries(); | 535 provided_file_system_->GetObservedEntries(); |
| 535 EXPECT_EQ("", observed_entries->begin()->second.last_tag); | 536 EXPECT_EQ("", observed_entries->begin()->second.last_tag); |
| 536 } | 537 } |
| 537 | 538 |
| 538 { | 539 { |
| 539 // Notify about a change. | 540 // Notify about a change. |
| 540 const ProvidedFileSystemObserver::ChangeType change_type = | 541 const ProvidedFileSystemObserver::ChangeType change_type = |
| 541 ProvidedFileSystemObserver::CHANGED; | 542 ProvidedFileSystemObserver::CHANGED; |
| 542 const std::string tag = "hello-world"; | 543 const std::string tag = "hello-world"; |
| 543 EXPECT_TRUE(provided_file_system_->Notify( | 544 EXPECT_TRUE(provided_file_system_->Notify( |
| 544 base::FilePath::FromUTF8Unsafe(kDirectoryPath), | 545 base::FilePath::FromUTF8Unsafe(kDirectoryPath), |
| 545 change_type, | 546 change_type, |
| 546 make_scoped_ptr(new ProvidedFileSystemObserver::ChildChanges), | 547 make_scoped_ptr(new ProvidedFileSystemObserver::ChildChanges), |
| 547 tag)); | 548 tag)); |
| 548 | 549 |
| 549 // Verify the observer event. | 550 // Verify the observer event. |
| 550 ASSERT_EQ(1u, observer.change_events().size()); | 551 ASSERT_EQ(1u, observer.change_events().size()); |
| 551 const Observer::ChangeEvent* const change_event = | 552 const Observer::ChangeEvent* const change_event = |
| 552 observer.change_events()[0]; | 553 observer.change_events()[0]; |
| 553 EXPECT_EQ(change_type, change_event->change_type()); | 554 EXPECT_EQ(change_type, change_event->change_type()); |
| 554 EXPECT_EQ(0u, change_event->child_changes().size()); | 555 EXPECT_EQ(0u, change_event->child_changes().size()); |
| 555 | 556 |
| 556 // The tag should not be updated in advance, before all observers handle | 557 // The tag should not be updated in advance, before all observers handle |
| 557 // the notification. | 558 // the notification. |
| 558 ProvidedFileSystemInterface::ObservedEntries* const observed_entries = | 559 ObservedEntries* const observed_entries = |
| 559 provided_file_system_->GetObservedEntries(); | 560 provided_file_system_->GetObservedEntries(); |
| 560 EXPECT_EQ(1u, observed_entries->size()); | 561 EXPECT_EQ(1u, observed_entries->size()); |
| 561 provided_file_system_->GetObservedEntries(); | 562 provided_file_system_->GetObservedEntries(); |
| 562 EXPECT_EQ("", observed_entries->begin()->second.last_tag); | 563 EXPECT_EQ("", observed_entries->begin()->second.last_tag); |
| 563 | 564 |
| 564 // Wait until all observers finish handling the notification. | 565 // Wait until all observers finish handling the notification. |
| 565 base::RunLoop().RunUntilIdle(); | 566 base::RunLoop().RunUntilIdle(); |
| 566 | 567 |
| 567 // Confirm, that the entry is still being observed, and that the tag is | 568 // Confirm, that the entry is still being observed, and that the tag is |
| 568 // updated. | 569 // updated. |
| (...skipping 19 matching lines...) Expand all Loading... |
| 588 // Verify the observer event. | 589 // Verify the observer event. |
| 589 ASSERT_EQ(2u, observer.change_events().size()); | 590 ASSERT_EQ(2u, observer.change_events().size()); |
| 590 const Observer::ChangeEvent* const change_event = | 591 const Observer::ChangeEvent* const change_event = |
| 591 observer.change_events()[1]; | 592 observer.change_events()[1]; |
| 592 EXPECT_EQ(change_type, change_event->change_type()); | 593 EXPECT_EQ(change_type, change_event->change_type()); |
| 593 EXPECT_EQ(0u, change_event->child_changes().size()); | 594 EXPECT_EQ(0u, change_event->child_changes().size()); |
| 594 } | 595 } |
| 595 | 596 |
| 596 // Confirm, that the entry is not observed anymore. | 597 // Confirm, that the entry is not observed anymore. |
| 597 { | 598 { |
| 598 ProvidedFileSystemInterface::ObservedEntries* const observed_entries = | 599 ObservedEntries* const observed_entries = |
| 599 provided_file_system_->GetObservedEntries(); | 600 provided_file_system_->GetObservedEntries(); |
| 600 EXPECT_EQ(0u, observed_entries->size()); | 601 EXPECT_EQ(0u, observed_entries->size()); |
| 601 EXPECT_EQ(2, observer.list_changed_counter()); | 602 EXPECT_EQ(2, observer.list_changed_counter()); |
| 602 EXPECT_EQ(2, observer.tag_updated_counter()); | 603 EXPECT_EQ(2, observer.tag_updated_counter()); |
| 603 } | 604 } |
| 604 | 605 |
| 605 provided_file_system_->RemoveObserver(&observer); | 606 provided_file_system_->RemoveObserver(&observer); |
| 606 } | 607 } |
| 607 | 608 |
| 608 } // namespace file_system_provider | 609 } // namespace file_system_provider |
| 609 } // namespace chromeos | 610 } // namespace chromeos |
| OLD | NEW |