|  | // Copyright 2020 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef CHROME_BROWSER_ASH_FILEAPI_FILE_CHANGE_SERVICE_H_ | 
|  | #define CHROME_BROWSER_ASH_FILEAPI_FILE_CHANGE_SERVICE_H_ | 
|  |  | 
|  | #include "base/callback_list.h" | 
|  | #include "base/observer_list.h" | 
|  | #include "chrome/browser/ash/fileapi/file_change_service_observer.h" | 
|  | #include "components/keyed_service/core/keyed_service.h" | 
|  |  | 
|  | class Profile; | 
|  |  | 
|  | namespace ash { | 
|  |  | 
|  | // A service which notifies observers of file change events from external file | 
|  | // systems. This serves as a bridge to allow for observation of file system | 
|  | // changes across all file system contexts within a browser context. | 
|  | class FileChangeService : public KeyedService { | 
|  | public: | 
|  | explicit FileChangeService(Profile* profile); | 
|  | FileChangeService(const FileChangeService& other) = delete; | 
|  | FileChangeService& operator=(const FileChangeService& other) = delete; | 
|  | ~FileChangeService() override; | 
|  |  | 
|  | // Adds/removes the specified `observer` for service events. | 
|  | void AddObserver(FileChangeServiceObserver* observer); | 
|  | void RemoveObserver(FileChangeServiceObserver* observer); | 
|  |  | 
|  | // Notifies the service that a file identified by `url` has been modified. | 
|  | void NotifyFileModified(const storage::FileSystemURL& url); | 
|  |  | 
|  | // Notifies the service that a file has been moved from `src` to `dst`. | 
|  | void NotifyFileMoved(const storage::FileSystemURL& src, | 
|  | const storage::FileSystemURL& dst); | 
|  |  | 
|  | // Notifies the service that a file has been created at `url` in fulfillment | 
|  | // of a `window.showSaveFilePicker()` request from the given | 
|  | // `file_picker_binding_context`. | 
|  | // | 
|  | // See `content::FileSystemAccessEntryFactory::BindingContext`. | 
|  | void NotifyFileCreatedFromShowSaveFilePicker( | 
|  | const GURL& file_picker_binding_context, | 
|  | const storage::FileSystemURL& url); | 
|  |  | 
|  | private: | 
|  | // Subscription to be notified of file creation events originating from | 
|  | // `window.showSaveFilePicker()`. | 
|  | base::CallbackListSubscription | 
|  | file_created_from_show_save_file_picker_subscription_; | 
|  |  | 
|  | base::ObserverList<FileChangeServiceObserver> observer_list_; | 
|  | }; | 
|  |  | 
|  | }  // namespace ash | 
|  |  | 
|  | #endif  // CHROME_BROWSER_ASH_FILEAPI_FILE_CHANGE_SERVICE_H_ |