blob: ef99e72e35db28bbaeae94e4aba8bcf7a59e5bcb [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_DEFAULT_CORPUS_CHANGE_LIST_LOADER_H_
#define COMPONENTS_DRIVE_CHROMEOS_DEFAULT_CORPUS_CHANGE_LIST_LOADER_H_
#include <memory>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/time/default_clock.h"
#include "components/drive/chromeos/about_resource_root_folder_id_loader.h"
#include "components/drive/chromeos/change_list_loader.h"
#include "components/drive/chromeos/directory_loader.h"
#include "components/drive/chromeos/drive_change_list_loader.h"
#include "components/drive/chromeos/start_page_token_loader.h"
#include "components/drive/chromeos/team_drive_list_loader.h"
namespace drive {
class EventLogger;
class JobScheduler;
namespace internal {
class AboutResourceLoader;
class ChangeListLoader;
class DirectoryLoader;
class LoaderController;
class ResourceMetadata;
// Loads change lists, the full resource list, and directory contents for the
// users default corpus.
class DefaultCorpusChangeListLoader : public DriveChangeListLoader {
public:
// |clock| can be mocked for testing.
DefaultCorpusChangeListLoader(
EventLogger* logger,
base::SequencedTaskRunner* blocking_task_runner,
ResourceMetadata* resource_metadata,
JobScheduler* scheduler,
AboutResourceLoader* about_resource_loader,
LoaderController* apply_task_controller,
const base::Clock* clock = base::DefaultClock::GetInstance());
~DefaultCorpusChangeListLoader() override;
// 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;
private:
// Called after calling LoadIfNeeded on team drives.
void OnChangeListLoadIfNeeded(const FileOperationCallback& callback,
FileError error);
std::unique_ptr<internal::AboutResourceRootFolderIdLoader>
root_folder_id_loader_;
std::unique_ptr<internal::ChangeListLoader> change_list_loader_;
std::unique_ptr<internal::DirectoryLoader> directory_loader_;
std::unique_ptr<internal::StartPageTokenLoader> start_page_token_loader_;
std::unique_ptr<TeamDriveListLoader> team_drive_list_loader_;
EventLogger* logger_; // Not owned.
scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
ResourceMetadata* resource_metadata_; // Not owned.
JobScheduler* scheduler_; // Not owned.
LoaderController* loader_controller_; // Not owned.
THREAD_CHECKER(thread_checker_);
base::WeakPtrFactory<DefaultCorpusChangeListLoader> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(DefaultCorpusChangeListLoader);
};
} // namespace internal
} // namespace drive
#endif // COMPONENTS_DRIVE_CHROMEOS_DEFAULT_CORPUS_CHANGE_LIST_LOADER_H_