blob: 151f66febd8c7e570ac6a8d5dcd06a1e5c1fa254 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_DRIVE_CHROMEOS_TEAM_DRIVE_CHANGE_LIST_LOADER_H_
#define COMPONENTS_DRIVE_CHROMEOS_TEAM_DRIVE_CHANGE_LIST_LOADER_H_
#include <memory>
#include <string>
#include "base/files/file_path.h"
#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
#include "components/drive/chromeos/change_list_loader_observer.h"
#include "components/drive/chromeos/drive_change_list_loader.h"
namespace drive {
class EventLogger;
class JobScheduler;
namespace internal {
class ChangeListLoader;
class DirectoryLoader;
class LoaderController;
class RootFolderIdLoader;
class StartPageTokenLoader;
// TeamDriveChangeListLoader loads change lists for a specific team drive id.
// It uses directory loader and change list loader to retrieve change lists
// into resouce metadata. There should be one TeamDriveChangeListLoader created
// for every team drive that the user has access to.
class TeamDriveChangeListLoader : public DriveChangeListLoader,
public ChangeListLoaderObserver {
public:
TeamDriveChangeListLoader(const std::string& team_drive_id,
const base::FilePath& root_entry_path,
EventLogger* logger,
base::SequencedTaskRunner* blocking_task_runner,
ResourceMetadata* resource_metadata,
JobScheduler* scheduler,
LoaderController* apply_task_controller);
~TeamDriveChangeListLoader() override;
const base::FilePath& root_entry_path() const { return root_entry_path_; }
base::WeakPtr<TeamDriveChangeListLoader> GetWeakPtr();
// DriveChangeListLoader overrides
void AddChangeListLoaderObserver(ChangeListLoaderObserver* observer) override;
void RemoveChangeListLoaderObserver(
ChangeListLoaderObserver* observer) override;
void AddTeamDriveListObserver(TeamDriveListObserver* observer) override;
void RemoveTeamDriveListObserver(TeamDriveListObserver* observer) override;
bool IsRefreshing() override;
void LoadIfNeeded(const FileOperationCallback& callback) override;
void ReadDirectory(const base::FilePath& directory_path,
ReadDirectoryEntriesCallback entries_callback,
const FileOperationCallback& completion_callback) override;
void CheckForUpdates(const FileOperationCallback& callback) override;
// ChangeListLoaderObserver overrides
void OnDirectoryReloaded(const base::FilePath& directory_path) override;
void OnFileChanged(const FileChange& changed_files) override;
void OnLoadFromServerComplete() override;
void OnInitialLoadComplete() override;
private:
std::unique_ptr<RootFolderIdLoader> root_folder_id_loader_;
std::unique_ptr<StartPageTokenLoader> start_page_token_loader_;
std::unique_ptr<ChangeListLoader> change_list_loader_;
std::unique_ptr<DirectoryLoader> directory_loader_;
const std::string team_drive_id_;
const base::FilePath root_entry_path_;
base::ObserverList<ChangeListLoaderObserver>::Unchecked
change_list_loader_observers_;
THREAD_CHECKER(thread_checker_);
base::WeakPtrFactory<TeamDriveChangeListLoader> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(TeamDriveChangeListLoader);
};
} // namespace internal
} // namespace drive
#endif // COMPONENTS_DRIVE_CHROMEOS_TEAM_DRIVE_CHANGE_LIST_LOADER_H_