Commit bbaa5d20 authored by Bailey Berro's avatar Bailey Berro Committed by Commit Bot

Add SmbMountResult enum

This changes adds an SmbMountResult enum to represent the various possible
results for attempting to mount an SMB share. This SmbMountResult enum will
be mirrored by SmbHandler so that the Smb Shares Settings Page can show the
user a more helpful message.

Bug: chromium:757625
Cq-Include-Trybots: master.tryserver.chromium.linux:closure_compilation
Change-Id: I2da586c74ba71bf231ff3d5cb572f4a7df26c89e
Reviewed-on: https://chromium-review.googlesource.com/1056350
Commit-Queue: Bailey Berro <baileyberro@chromium.org>
Reviewed-by: default avatarZentaro Kavanagh <zentaro@chromium.org>
Cr-Commit-Position: refs/heads/master@{#559253}
parent 62a83895
...@@ -57,5 +57,49 @@ base::File::Error TranslateToFileError(smbprovider::ErrorType error) { ...@@ -57,5 +57,49 @@ base::File::Error TranslateToFileError(smbprovider::ErrorType error) {
return base::File::FILE_ERROR_FAILED; return base::File::FILE_ERROR_FAILED;
} }
smbprovider::ErrorType TranslateToErrorType(base::File::Error error) {
switch (error) {
case base::File::FILE_OK:
return smbprovider::ERROR_OK;
case base::File::FILE_ERROR_FAILED:
return smbprovider::ERROR_FAILED;
case base::File::FILE_ERROR_IN_USE:
return smbprovider::ERROR_IN_USE;
case base::File::FILE_ERROR_EXISTS:
return smbprovider::ERROR_EXISTS;
case base::File::FILE_ERROR_NOT_FOUND:
return smbprovider::ERROR_NOT_FOUND;
case base::File::FILE_ERROR_ACCESS_DENIED:
return smbprovider::ERROR_ACCESS_DENIED;
case base::File::FILE_ERROR_TOO_MANY_OPENED:
return smbprovider::ERROR_TOO_MANY_OPENED;
case base::File::FILE_ERROR_NO_MEMORY:
return smbprovider::ERROR_NO_MEMORY;
case base::File::FILE_ERROR_NO_SPACE:
return smbprovider::ERROR_NO_SPACE;
case base::File::FILE_ERROR_NOT_A_DIRECTORY:
return smbprovider::ERROR_NOT_A_DIRECTORY;
case base::File::FILE_ERROR_INVALID_OPERATION:
return smbprovider::ERROR_INVALID_OPERATION;
case base::File::FILE_ERROR_SECURITY:
return smbprovider::ERROR_SECURITY;
case base::File::FILE_ERROR_ABORT:
return smbprovider::ERROR_ABORT;
case base::File::FILE_ERROR_NOT_A_FILE:
return smbprovider::ERROR_NOT_A_FILE;
case base::File::FILE_ERROR_NOT_EMPTY:
return smbprovider::ERROR_NOT_EMPTY;
case base::File::FILE_ERROR_INVALID_URL:
return smbprovider::ERROR_INVALID_URL;
case base::File::FILE_ERROR_IO:
return smbprovider::ERROR_IO;
default:
break;
}
NOTREACHED();
return smbprovider::ERROR_NONE;
}
} // namespace smb_client } // namespace smb_client
} // namespace chromeos } // namespace chromeos
...@@ -16,6 +16,10 @@ namespace smb_client { ...@@ -16,6 +16,10 @@ namespace smb_client {
// map directly are logged and mapped to the generic failed error. // map directly are logged and mapped to the generic failed error.
base::File::Error TranslateToFileError(smbprovider::ErrorType error); base::File::Error TranslateToFileError(smbprovider::ErrorType error);
// Translates a base::File::Error to an smbprovider::ErrorType. There is an
// explicit smbprovider::ErrorType for each base::File::Error.
smbprovider::ErrorType TranslateToErrorType(base::File::Error error);
} // namespace smb_client } // namespace smb_client
} // namespace chromeos } // namespace chromeos
......
...@@ -55,9 +55,46 @@ TEST_F(SmbErrorsTest, SmbErrorToFileError) { ...@@ -55,9 +55,46 @@ TEST_F(SmbErrorsTest, SmbErrorToFileError) {
EXPECT_EQ(base::File::FILE_ERROR_IO, EXPECT_EQ(base::File::FILE_ERROR_IO,
TranslateToFileError(smbprovider::ERROR_IO)); TranslateToFileError(smbprovider::ERROR_IO));
// No 1:1 mapping.
EXPECT_EQ(base::File::FILE_ERROR_FAILED, EXPECT_EQ(base::File::FILE_ERROR_FAILED,
TranslateToFileError(smbprovider::ERROR_DBUS_PARSE_FAILED)); TranslateToFileError(smbprovider::ERROR_DBUS_PARSE_FAILED));
} }
TEST_F(SmbErrorsTest, FileErrorToSmbError) {
EXPECT_EQ(smbprovider::ERROR_OK, TranslateToErrorType(base::File::FILE_OK));
EXPECT_EQ(smbprovider::ERROR_FAILED,
TranslateToErrorType(base::File::FILE_ERROR_FAILED));
EXPECT_EQ(smbprovider::ERROR_IN_USE,
TranslateToErrorType(base::File::FILE_ERROR_IN_USE));
EXPECT_EQ(smbprovider::ERROR_EXISTS,
TranslateToErrorType(base::File::FILE_ERROR_EXISTS));
EXPECT_EQ(smbprovider::ERROR_NOT_FOUND,
TranslateToErrorType(base::File::FILE_ERROR_NOT_FOUND));
EXPECT_EQ(smbprovider::ERROR_ACCESS_DENIED,
TranslateToErrorType(base::File::FILE_ERROR_ACCESS_DENIED));
EXPECT_EQ(smbprovider::ERROR_TOO_MANY_OPENED,
TranslateToErrorType(base::File::FILE_ERROR_TOO_MANY_OPENED));
EXPECT_EQ(smbprovider::ERROR_NO_MEMORY,
TranslateToErrorType(base::File::FILE_ERROR_NO_MEMORY));
EXPECT_EQ(smbprovider::ERROR_NO_SPACE,
TranslateToErrorType(base::File::FILE_ERROR_NO_SPACE));
EXPECT_EQ(smbprovider::ERROR_NOT_A_DIRECTORY,
TranslateToErrorType(base::File::FILE_ERROR_NOT_A_DIRECTORY));
EXPECT_EQ(smbprovider::ERROR_INVALID_OPERATION,
TranslateToErrorType(base::File::FILE_ERROR_INVALID_OPERATION));
EXPECT_EQ(smbprovider::ERROR_SECURITY,
TranslateToErrorType(base::File::FILE_ERROR_SECURITY));
EXPECT_EQ(smbprovider::ERROR_ABORT,
TranslateToErrorType(base::File::FILE_ERROR_ABORT));
EXPECT_EQ(smbprovider::ERROR_NOT_A_FILE,
TranslateToErrorType(base::File::FILE_ERROR_NOT_A_FILE));
EXPECT_EQ(smbprovider::ERROR_NOT_EMPTY,
TranslateToErrorType(base::File::FILE_ERROR_NOT_EMPTY));
EXPECT_EQ(smbprovider::ERROR_INVALID_URL,
TranslateToErrorType(base::File::FILE_ERROR_INVALID_URL));
EXPECT_EQ(smbprovider::ERROR_IO,
TranslateToErrorType(base::File::FILE_ERROR_IO));
}
} // namespace smb_client } // namespace smb_client
} // namespace chromeos } // namespace chromeos
...@@ -241,5 +241,46 @@ void SmbService::CompleteSetup() { ...@@ -241,5 +241,46 @@ void SmbService::CompleteSetup() {
RestoreMounts(); RestoreMounts();
} }
SmbMountResult SmbService::TranslateErrorToMountResult(
smbprovider::ErrorType error) const {
DCHECK_NE(smbprovider::ERROR_NONE, error);
switch (error) {
case smbprovider::ERROR_OK:
return SmbMountResult::SUCCESS;
case smbprovider::ERROR_EXISTS:
case smbprovider::ERROR_IN_USE:
return SmbMountResult::MOUNT_EXISTS;
case smbprovider::ERROR_NOT_FOUND:
case smbprovider::ERROR_NOT_A_DIRECTORY:
case smbprovider::ERROR_INVALID_URL:
return SmbMountResult::NOT_FOUND;
case smbprovider::ERROR_ACCESS_DENIED:
case smbprovider::ERROR_SECURITY:
return SmbMountResult::AUTHENTICATION_FAILED;
case smbprovider::ERROR_FAILED:
case smbprovider::ERROR_TOO_MANY_OPENED:
case smbprovider::ERROR_NO_MEMORY:
case smbprovider::ERROR_NO_SPACE:
case smbprovider::ERROR_INVALID_OPERATION:
case smbprovider::ERROR_ABORT:
case smbprovider::ERROR_NOT_A_FILE:
case smbprovider::ERROR_NOT_EMPTY:
case smbprovider::ERROR_IO:
case smbprovider::ERROR_DBUS_PARSE_FAILED:
return SmbMountResult::UNKNOWN_FAILURE;
default:
break;
}
NOTREACHED();
return SmbMountResult::UNKNOWN_FAILURE;
}
SmbMountResult SmbService::TranslateErrorToMountResult(
base::File::Error error) const {
return TranslateErrorToMountResult(TranslateToErrorType(error));
}
} // namespace smb_client } // namespace smb_client
} // namespace chromeos } // namespace chromeos
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h" #include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
#include "chrome/browser/chromeos/file_system_provider/provider_interface.h" #include "chrome/browser/chromeos/file_system_provider/provider_interface.h"
#include "chrome/browser/chromeos/file_system_provider/service.h" #include "chrome/browser/chromeos/file_system_provider/service.h"
#include "chrome/browser/chromeos/smb_client/smb_errors.h"
#include "chrome/browser/chromeos/smb_client/temp_file_manager.h" #include "chrome/browser/chromeos/smb_client/temp_file_manager.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chromeos/dbus/smb_provider_client.h" #include "chromeos/dbus/smb_provider_client.h"
...@@ -26,6 +27,17 @@ class FilePath; ...@@ -26,6 +27,17 @@ class FilePath;
namespace chromeos { namespace chromeos {
namespace smb_client { namespace smb_client {
// These values are written to logs. New enum values may be added, but existing
// enums must never be runumbered or deleted and reused.
enum SmbMountResult {
SUCCESS = 0, // Mount succeeded
UNKNOWN_FAILURE = 1, // Mount failed in an unrecognized way
AUTHENTICATION_FAILED = 2, // Authentication to the share failed
NOT_FOUND = 3, // The specified share was not found
UNSUPPORTED_DEVICE = 4, // The specified share is not supported
MOUNT_EXISTS = 5 // The specified share is already mounted
};
using file_system_provider::Capabilities; using file_system_provider::Capabilities;
using file_system_provider::ProvidedFileSystemInfo; using file_system_provider::ProvidedFileSystemInfo;
using file_system_provider::ProvidedFileSystemInterface; using file_system_provider::ProvidedFileSystemInterface;
...@@ -113,6 +125,11 @@ class SmbService : public KeyedService, ...@@ -113,6 +125,11 @@ class SmbService : public KeyedService,
// Handles the response from attempting to setup Kerberos. // Handles the response from attempting to setup Kerberos.
void OnSetupKerberosResponse(bool success); void OnSetupKerberosResponse(bool success);
// Translates an error |error| into an SmbMountResult.
SmbMountResult TranslateErrorToMountResult(
smbprovider::ErrorType error) const;
SmbMountResult TranslateErrorToMountResult(base::File::Error error) const;
const ProviderId provider_id_; const ProviderId provider_id_;
Profile* profile_; Profile* profile_;
std::unique_ptr<TempFileManager> temp_file_manager_; std::unique_ptr<TempFileManager> temp_file_manager_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment