blob: 8a9b7c3a776824ff16737c90351b030615568902 [file] [log] [blame]
// Copyright 2019 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 CHROME_BROWSER_CHROMEOS_FILE_MANAGER_FILE_TASKS_NOTIFIER_H_
#define CHROME_BROWSER_CHROMEOS_FILE_MANAGER_FILE_TASKS_NOTIFIER_H_
#include <vector>
#include "base/callback_forward.h"
#include "base/observer_list.h"
#include "chrome/browser/chromeos/file_manager/file_tasks_observer.h"
#include "components/download/content/public/all_download_item_notifier.h"
#include "components/keyed_service/core/keyed_service.h"
class Profile;
namespace base {
class FilePath;
} // namespace base
namespace storage {
class FileSystemURL;
} // namespace storage
namespace ui {
struct SelectedFileInfo;
}
namespace file_manager {
namespace file_tasks {
class FileTasksNotifier : public KeyedService,
public download::AllDownloadItemNotifier::Observer {
public:
enum class FileAvailability {
// File exists and is accessible.
kOk,
// The file exists but is currently unavailable; e.g. a Drive file while
// offline
kTemporarilyUnavailable,
// The current state is unknown; e.g. crostini isn't running
kUnknown,
// The file is known to be deleted.
kGone,
};
explicit FileTasksNotifier(Profile* profile);
~FileTasksNotifier() override;
static FileTasksNotifier* GetForProfile(Profile* profile);
void AddObserver(FileTasksObserver*);
void RemoveObserver(FileTasksObserver*);
void NotifyFileTasks(const std::vector<storage::FileSystemURL>& file_urls);
void NotifyFileDialogSelection(const std::vector<ui::SelectedFileInfo>& files,
bool for_open);
// download::AllDownloadItemNotifier::Observer:
void OnDownloadUpdated(content::DownloadManager* manager,
download::DownloadItem* item) override;
private:
void NotifyObservers(const std::vector<base::FilePath>& paths,
FileTasksObserver::OpenType open_type);
Profile* const profile_;
download::AllDownloadItemNotifier download_notifier_;
base::ObserverList<FileTasksObserver> observers_;
DISALLOW_COPY_AND_ASSIGN(FileTasksNotifier);
};
} // namespace file_tasks
} // namespace file_manager
#endif // CHROME_BROWSER_CHROMEOS_FILE_MANAGER_FILE_TASKS_NOTIFIER_H_