chromium/chrome/browser/lacros/file_change_service_bridge.h

// Copyright 2024 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_LACROS_FILE_CHANGE_SERVICE_BRIDGE_H_
#define CHROME_BROWSER_LACROS_FILE_CHANGE_SERVICE_BRIDGE_H_

#include "base/callback_list.h"
#include "components/keyed_service/core/keyed_service.h"

class GURL;
class Profile;

namespace storage {
class FileSystemURL;
}  // namespace storage

// The bridge implemented in Lacros which is connected to the
// `FileChangeServiceBridgeAsh` in Ash via crosapi. This bridge enables file
// change events originating from Lacros to be propagated to the
// `FileChangeService`, and its observers, in Ash.
class FileChangeServiceBridge : public KeyedService {
 public:
  explicit FileChangeServiceBridge(Profile* profile);
  FileChangeServiceBridge(const FileChangeServiceBridge&) = delete;
  FileChangeServiceBridge& operator=(const FileChangeServiceBridge&) = delete;
  ~FileChangeServiceBridge() override;

 private:
  // Invoked when 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 OnFileCreatedFromShowSaveFilePicker(
      const GURL& file_picker_binding_context,
      const storage::FileSystemURL& url);

  // Subscription to be notified of file creation events originating from
  // `window.showSaveFilePicker()`.
  base::CallbackListSubscription
      file_created_from_show_save_file_picker_subscription_;
};

#endif  // CHROME_BROWSER_LACROS_FILE_CHANGE_SERVICE_BRIDGE_H_