Commit 5930a234 authored by Stuart Langley's avatar Stuart Langley Committed by Commit Bot

Fix creation of team drive loaders to ensure they are all present.

Upon startup we get a callback with:
- The total list of team drives a user has.
- A list of drives that have been added since last restart.
- A list of drives that have been removed since last restart.

We were only creating loaders for drives that had been added, however
we really need loaders for the entire list of team drives, not just
the new ones since the last load.

Bug: 715355
Change-Id: I1126d94b6e12b285f132423b4b756dd14e585184
Reviewed-on: https://chromium-review.googlesource.com/1098735Reviewed-by: default avatarSasha Morrissey <sashab@chromium.org>
Commit-Queue: Stuart Langley <slangley@chromium.org>
Cr-Commit-Position: refs/heads/master@{#567550}
parent aa518c2f
......@@ -928,15 +928,12 @@ void FileSystem::OnTeamDriveListLoaded(
const std::vector<internal::TeamDrive>& removed_team_drives) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
for (const auto& team_drive : removed_team_drives) {
auto it = team_drive_change_list_loaders_.find(team_drive.team_drive_id());
if (it != team_drive_change_list_loaders_.end()) {
it->second->RemoveChangeListLoaderObserver(this);
team_drive_change_list_loaders_.erase(it);
}
for (auto& team_drive_loader : team_drive_change_list_loaders_) {
team_drive_loader.second->RemoveChangeListLoaderObserver(this);
}
team_drive_change_list_loaders_.clear();
for (const auto& team_drive : added_team_drives) {
for (const auto& team_drive : team_drives_list) {
auto loader = std::make_unique<internal::TeamDriveChangeListLoader>(
team_drive.team_drive_id(), team_drive.team_drive_path(), logger_,
blocking_task_runner_.get(), resource_metadata_, scheduler_,
......
......@@ -308,6 +308,20 @@ class FileSystemTest : public testing::Test {
file3.mutable_file_info()->set_size(12345);
ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry(file3, &local_id));
// drive/team_drive
ResourceEntry team_drive_root;
ASSERT_EQ(FILE_ERROR_OK,
resource_metadata->GetResourceEntryByPath(
util::GetDriveTeamDrivesRootPath(), &team_drive_root));
// drive/team_drive/team_drive_1
ResourceEntry td_dir;
td_dir.set_title("team_drive_1");
td_dir.set_resource_id("td_id_1");
td_dir.set_parent_local_id(team_drive_root.local_id());
td_dir.mutable_file_info()->set_is_directory(true);
ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry(td_dir, &local_id));
// Recreate resource metadata.
SetUpResourceMetadataAndFileSystem();
}
......@@ -793,6 +807,7 @@ TEST_F(FileSystemTest, ReadDirectory_Root) {
// TODO(slamgley): Add more tests for team drives.
TEST_F(FileSystemTest, ReadDirectory_TeamDrivesRoot) {
ASSERT_NO_FATAL_FAILURE(SetUpTestFileSystem(USE_SERVER_TIMESTAMP));
ASSERT_TRUE(SetupTeamDrives());
// The first load trigger the loading of team drives.
......@@ -805,8 +820,6 @@ TEST_F(FileSystemTest, ReadDirectory_TeamDrivesRoot) {
ASSERT_TRUE(entries);
ASSERT_EQ(2U, entries->size());
// The found three directories should be /drive/root, /drive/other,
// /drive/trash and /drive/team_drives.
std::set<base::FilePath> found;
for (size_t i = 0; i < entries->size(); ++i) {
found.insert(base::FilePath::FromUTF8Unsafe((*entries)[i].title()));
......@@ -814,6 +827,23 @@ TEST_F(FileSystemTest, ReadDirectory_TeamDrivesRoot) {
EXPECT_EQ(2U, found.size());
EXPECT_EQ(1U, found.count(base::FilePath::FromUTF8Unsafe("team_drive_1")));
EXPECT_EQ(1U, found.count(base::FilePath::FromUTF8Unsafe("team_drive_2")));
EXPECT_EQ(1, fake_drive_service_->team_drive_list_load_count());
EXPECT_EQ(2, fake_drive_service_->file_list_load_count());
// We should be able to read from drive/team_drives/team_drive_1
std::unique_ptr<ResourceEntryVector> team_drive_1_entries(ReadDirectorySync(
base::FilePath::FromUTF8Unsafe("drive/team_drives/team_drive_1")));
ASSERT_TRUE(team_drive_1_entries);
ASSERT_EQ(1U, team_drive_1_entries->size());
std::set<base::FilePath> team_drive_1_found;
for (size_t i = 0; i < team_drive_1_entries->size(); ++i) {
team_drive_1_found.insert(
base::FilePath::FromUTF8Unsafe((*team_drive_1_entries)[i].title()));
}
EXPECT_EQ(1U, team_drive_1_found.size());
EXPECT_EQ(1U,
team_drive_1_found.count(base::FilePath::FromUTF8Unsafe("dir1")));
}
TEST_F(FileSystemTest, ReadDirectory_NonRootDirectory) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment