chromium/chrome/browser/ash/crosapi/file_manager_ash.cc

// 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