blob: 7398440d62aa5171068e790ee766c98981bc690c [file] [log] [blame]
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/extensions/api/sync_file_system/sync_file_system_api_helpers.h"
#include "base/logging.h"
#include "webkit/browser/fileapi/file_system_url.h"
#include "webkit/common/fileapi/file_system_util.h"
namespace extensions {
api::sync_file_system::ServiceStatus SyncServiceStateToExtensionEnum(
sync_file_system::SyncServiceState state) {
switch (state) {
case sync_file_system::SYNC_SERVICE_RUNNING:
return api::sync_file_system::SERVICE_STATUS_RUNNING;
case sync_file_system::SYNC_SERVICE_AUTHENTICATION_REQUIRED:
return api::sync_file_system::SERVICE_STATUS_AUTHENTICATION_REQUIRED;
case sync_file_system::SYNC_SERVICE_TEMPORARY_UNAVAILABLE:
return api::sync_file_system::SERVICE_STATUS_TEMPORARY_UNAVAILABLE;
case sync_file_system::SYNC_SERVICE_DISABLED:
return api::sync_file_system::SERVICE_STATUS_DISABLED;
}
NOTREACHED() << "Invalid state: " << state;
return api::sync_file_system::SERVICE_STATUS_NONE;
}
api::sync_file_system::FileStatus SyncFileStatusToExtensionEnum(
sync_file_system::SyncFileStatus status) {
switch (status) {
case sync_file_system::SYNC_FILE_STATUS_SYNCED:
return api::sync_file_system::FILE_STATUS_SYNCED;
case sync_file_system::SYNC_FILE_STATUS_HAS_PENDING_CHANGES:
return api::sync_file_system::FILE_STATUS_PENDING;
case sync_file_system::SYNC_FILE_STATUS_CONFLICTING:
return api::sync_file_system::FILE_STATUS_CONFLICTING;
case sync_file_system::SYNC_FILE_STATUS_UNKNOWN:
return api::sync_file_system::FILE_STATUS_NONE;
}
NOTREACHED() << "Invalid status: " << status;
return api::sync_file_system::FILE_STATUS_NONE;
}
api::sync_file_system::SyncAction SyncActionToExtensionEnum(
sync_file_system::SyncAction action) {
switch (action) {
case sync_file_system::SYNC_ACTION_ADDED:
return api::sync_file_system::SYNC_ACTION_ADDED;
case sync_file_system::SYNC_ACTION_UPDATED:
return api::sync_file_system::SYNC_ACTION_UPDATED;
case sync_file_system::SYNC_ACTION_DELETED:
return api::sync_file_system::SYNC_ACTION_DELETED;
case sync_file_system::SYNC_ACTION_NONE:
return api::sync_file_system::SYNC_ACTION_NONE;
}
NOTREACHED() << "Invalid action: " << action;
return api::sync_file_system::SYNC_ACTION_NONE;
}
api::sync_file_system::SyncDirection SyncDirectionToExtensionEnum(
sync_file_system::SyncDirection direction) {
switch (direction) {
case sync_file_system::SYNC_DIRECTION_LOCAL_TO_REMOTE:
return api::sync_file_system::SYNC_DIRECTION_LOCAL_TO_REMOTE;
case sync_file_system::SYNC_DIRECTION_REMOTE_TO_LOCAL:
return api::sync_file_system::SYNC_DIRECTION_REMOTE_TO_LOCAL;
case sync_file_system::SYNC_DIRECTION_NONE:
return api::sync_file_system::SYNC_DIRECTION_NONE;
}
NOTREACHED() << "Invalid direction: " << direction;
return api::sync_file_system::SYNC_DIRECTION_NONE;
}
sync_file_system::ConflictResolutionPolicy
ExtensionEnumToConflictResolutionPolicy(
api::sync_file_system::ConflictResolutionPolicy policy) {
switch (policy) {
case api::sync_file_system::CONFLICT_RESOLUTION_POLICY_NONE:
return sync_file_system::CONFLICT_RESOLUTION_POLICY_UNKNOWN;
case api::sync_file_system::CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN:
return sync_file_system::CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN;
case api::sync_file_system::CONFLICT_RESOLUTION_POLICY_MANUAL:
return sync_file_system::CONFLICT_RESOLUTION_POLICY_MANUAL;
}
NOTREACHED() << "Invalid conflict resolution policy: " << policy;
return sync_file_system::CONFLICT_RESOLUTION_POLICY_UNKNOWN;
}
api::sync_file_system::ConflictResolutionPolicy
ConflictResolutionPolicyToExtensionEnum(
sync_file_system::ConflictResolutionPolicy policy) {
switch (policy) {
case sync_file_system::CONFLICT_RESOLUTION_POLICY_UNKNOWN:
return api::sync_file_system::CONFLICT_RESOLUTION_POLICY_NONE;
case sync_file_system::CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN:
return api::sync_file_system::CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN;
case sync_file_system::CONFLICT_RESOLUTION_POLICY_MANUAL:
return api::sync_file_system::CONFLICT_RESOLUTION_POLICY_MANUAL;
}
NOTREACHED() << "Invalid conflict resolution policy: " << policy;
return api::sync_file_system::CONFLICT_RESOLUTION_POLICY_NONE;
}
base::DictionaryValue* CreateDictionaryValueForFileSystemEntry(
const fileapi::FileSystemURL& url,
sync_file_system::SyncFileType file_type) {
if (!url.is_valid() || file_type == sync_file_system::SYNC_FILE_TYPE_UNKNOWN)
return NULL;
std::string file_path = base::FilePath(
fileapi::VirtualPath::GetNormalizedFilePath(url.path())).AsUTF8Unsafe();
std::string root_url = fileapi::GetFileSystemRootURI(
url.origin(), url.mount_type()).spec();
if (!url.filesystem_id().empty()) {
root_url.append(url.filesystem_id());
root_url.append("/");
}
base::DictionaryValue* dict = new base::DictionaryValue;
dict->SetString("fileSystemType",
fileapi::GetFileSystemTypeString(url.mount_type()));
dict->SetString("fileSystemName",
fileapi::GetFileSystemName(url.origin(), url.type()));
dict->SetString("rootUrl", root_url);
dict->SetString("filePath", file_path);
dict->SetBoolean("isDirectory",
(file_type == sync_file_system::SYNC_FILE_TYPE_DIRECTORY));
return dict;
}
} // namespace extensions