| // 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. |
| |
| #include "chrome/browser/ash/crosapi/file_manager_ash.h" |
| |
| #include <utility> |
| |
| #include "base/files/file_path.h" |
| #include "base/functional/bind.h" |
| #include "base/functional/callback.h" |
| #include "base/notreached.h" |
| #include "chrome/browser/ash/file_manager/open_util.h" |
| #include "chrome/browser/platform_util.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/profiles/profile_manager.h" |
| #include "chromeos/crosapi/mojom/file_manager.mojom.h" |
| |
| namespace crosapi { |
| namespace { |
| |
| // Adapts a platform_util::OpenOperationResult to a crosapi::mojom::OpenResult |
| // when running a |callback|. |
| void RunWithOpenResult(base::OnceCallback<void(mojom::OpenResult)> callback, |
| platform_util::OpenOperationResult result) { |
| mojom::OpenResult mojo_result; |
| switch (result) { |
| case platform_util::OPEN_SUCCEEDED: |
| mojo_result = mojom::OpenResult::kSucceeded; |
| break; |
| case platform_util::OPEN_FAILED_PATH_NOT_FOUND: |
| mojo_result = mojom::OpenResult::kFailedPathNotFound; |
| break; |
| case platform_util::OPEN_FAILED_INVALID_TYPE: |
| mojo_result = mojom::OpenResult::kFailedInvalidType; |
| break; |
| case platform_util::OPEN_FAILED_NO_HANLDER_FOR_FILE_TYPE: |
| mojo_result = mojom::OpenResult::kFailedNoHandlerForFileType; |
| break; |
| case platform_util::OPEN_FAILED_FILE_ERROR: |
| mojo_result = mojom::OpenResult::kFailedFileError; |
| break; |
| } |
| std::move(callback).Run(mojo_result); |
| } |
| |
| // Opens an item of |type| at |path| and runs |callback| with the result. |
| void OpenItem(const base::FilePath& path, |
| platform_util::OpenItemType item_type, |
| base::OnceCallback<void(mojom::OpenResult)> callback) { |
| Profile* primary_profile = ProfileManager::GetPrimaryUserProfile(); |
| file_manager::util::OpenItem( |
| primary_profile, path, item_type, |
| base::BindOnce(&RunWithOpenResult, std::move(callback))); |
| } |
| |
| } // namespace |
| |
| FileManagerAsh::FileManagerAsh() = default; |
| |
| FileManagerAsh::~FileManagerAsh() = default; |
| |
| void FileManagerAsh::BindReceiver( |
| mojo::PendingReceiver<mojom::FileManager> receiver) { |
| receivers_.Add(this, std::move(receiver)); |
| } |
| |
| void FileManagerAsh::DeprecatedShowItemInFolder(const base::FilePath& path) { |
| // As of OS M89 all lacros clients now use ShowItemInFolder() below. |
| NOTIMPLEMENTED(); |
| } |
| |
| void FileManagerAsh::ShowItemInFolder(const base::FilePath& path, |
| ShowItemInFolderCallback callback) { |
| Profile* primary_profile = ProfileManager::GetPrimaryUserProfile(); |
| file_manager::util::ShowItemInFolder( |
| primary_profile, path, |
| base::BindOnce(&RunWithOpenResult, std::move(callback))); |
| } |
| |
| void FileManagerAsh::OpenFolder(const base::FilePath& path, |
| OpenFolderCallback callback) { |
| OpenItem(path, platform_util::OPEN_FOLDER, std::move(callback)); |
| } |
| |
| void FileManagerAsh::OpenFile(const base::FilePath& path, |
| OpenFileCallback callback) { |
| OpenItem(path, platform_util::OPEN_FILE, std::move(callback)); |
| } |
| |
| } // namespace crosapi |