| // 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. |
| |
| #include "chrome/browser/lacros/file_change_service_bridge.h" |
| |
| #include "base/logging.h" |
| #include "chrome/browser/file_system_access/chrome_file_system_access_permission_context.h" |
| #include "chrome/browser/file_system_access/file_system_access_permission_context_factory.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chromeos/crosapi/mojom/file_change_service_bridge.mojom.h" |
| #include "chromeos/lacros/lacros_service.h" |
| #include "storage/browser/file_system/file_system_url.h" |
| |
| FileChangeServiceBridge::FileChangeServiceBridge(Profile* profile) { |
| // NOTE: It is safe to use `base::Unretained(this)` here because the |
| // registered callback is guaranteed to only be called within the associated |
| // subscription's lifetime. |
| file_created_from_show_save_file_picker_subscription_ = |
| FileSystemAccessPermissionContextFactory::GetForProfile(profile) |
| ->AddFileCreatedFromShowSaveFilePickerCallback(base::BindRepeating( |
| &FileChangeServiceBridge::OnFileCreatedFromShowSaveFilePicker, |
| base::Unretained(this))); |
| } |
| |
| FileChangeServiceBridge::~FileChangeServiceBridge() = default; |
| |
| void FileChangeServiceBridge::OnFileCreatedFromShowSaveFilePicker( |
| const GURL& file_picker_binding_context, |
| const storage::FileSystemURL& url) { |
| if (url.path().empty()) { |
| LOG(WARNING) << "Unexpected `OnFileCreatedFromShowSaveFilePicker()` event."; |
| return; |
| } |
| using Bridge = crosapi::mojom::FileChangeServiceBridge; |
| if (auto* service = chromeos::LacrosService::Get(); |
| service && service->IsAvailable<Bridge>()) { |
| service->GetRemote<Bridge>()->OnFileCreatedFromShowSaveFilePicker( |
| file_picker_binding_context, url.path()); |
| } |
| } |