sync_file_system_api_helpers.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/api/sync_file_system/sync_file_system_api_helpers.h"
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/logging.h"
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/fileapi/file_system_url.h"
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/fileapi/file_system_util.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace extensions {
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)api::sync_file_system::ServiceStatus SyncServiceStateToExtensionEnum(
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    sync_file_system::SyncServiceState state) {
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  switch (state) {
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_SERVICE_RUNNING:
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::SERVICE_STATUS_RUNNING;
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_SERVICE_AUTHENTICATION_REQUIRED:
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::SERVICE_STATUS_AUTHENTICATION_REQUIRED;
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_SERVICE_TEMPORARY_UNAVAILABLE:
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::SERVICE_STATUS_TEMPORARY_UNAVAILABLE;
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_SERVICE_DISABLED:
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::SERVICE_STATUS_DISABLED;
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NOTREACHED() << "Invalid state: " << state;
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return api::sync_file_system::SERVICE_STATUS_NONE;
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)api::sync_file_system::FileStatus SyncFileStatusToExtensionEnum(
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    sync_file_system::SyncFileStatus status) {
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  switch (status) {
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_FILE_STATUS_SYNCED:
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::FILE_STATUS_SYNCED;
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_FILE_STATUS_HAS_PENDING_CHANGES:
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::FILE_STATUS_PENDING;
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_FILE_STATUS_CONFLICTING:
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::FILE_STATUS_CONFLICTING;
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_FILE_STATUS_UNKNOWN:
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::FILE_STATUS_NONE;
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NOTREACHED() << "Invalid status: " << status;
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return api::sync_file_system::FILE_STATUS_NONE;
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)api::sync_file_system::SyncAction SyncActionToExtensionEnum(
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    sync_file_system::SyncAction action) {
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  switch (action) {
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_ACTION_ADDED:
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::SYNC_ACTION_ADDED;
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_ACTION_UPDATED:
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::SYNC_ACTION_UPDATED;
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_ACTION_DELETED:
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::SYNC_ACTION_DELETED;
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_ACTION_NONE:
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::SYNC_ACTION_NONE;
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NOTREACHED() << "Invalid action: " << action;
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return api::sync_file_system::SYNC_ACTION_NONE;
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)api::sync_file_system::SyncDirection SyncDirectionToExtensionEnum(
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    sync_file_system::SyncDirection direction) {
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  switch (direction) {
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_DIRECTION_LOCAL_TO_REMOTE:
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::SYNC_DIRECTION_LOCAL_TO_REMOTE;
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_DIRECTION_REMOTE_TO_LOCAL:
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::SYNC_DIRECTION_REMOTE_TO_LOCAL;
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case sync_file_system::SYNC_DIRECTION_NONE:
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::SYNC_DIRECTION_NONE;
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NOTREACHED() << "Invalid direction: " << direction;
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return api::sync_file_system::SYNC_DIRECTION_NONE;
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)sync_file_system::ConflictResolutionPolicy
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ExtensionEnumToConflictResolutionPolicy(
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    api::sync_file_system::ConflictResolutionPolicy policy) {
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  switch (policy) {
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case api::sync_file_system::CONFLICT_RESOLUTION_POLICY_NONE:
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      return sync_file_system::CONFLICT_RESOLUTION_POLICY_UNKNOWN;
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case api::sync_file_system::CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN:
82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      return sync_file_system::CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN;
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case api::sync_file_system::CONFLICT_RESOLUTION_POLICY_MANUAL:
84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      return sync_file_system::CONFLICT_RESOLUTION_POLICY_MANUAL;
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NOTREACHED() << "Invalid conflict resolution policy: " << policy;
87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return sync_file_system::CONFLICT_RESOLUTION_POLICY_UNKNOWN;
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)api::sync_file_system::ConflictResolutionPolicy
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ConflictResolutionPolicyToExtensionEnum(
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    sync_file_system::ConflictResolutionPolicy policy) {
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  switch (policy) {
94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    case sync_file_system::CONFLICT_RESOLUTION_POLICY_UNKNOWN:
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::CONFLICT_RESOLUTION_POLICY_NONE;
96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    case sync_file_system::CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN:
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return api::sync_file_system::CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN;
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    case sync_file_system::CONFLICT_RESOLUTION_POLICY_MANUAL:
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return api::sync_file_system::CONFLICT_RESOLUTION_POLICY_MANUAL;
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NOTREACHED() << "Invalid conflict resolution policy: " << policy;
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return api::sync_file_system::CONFLICT_RESOLUTION_POLICY_NONE;
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::DictionaryValue* CreateDictionaryValueForFileSystemEntry(
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const fileapi::FileSystemURL& url,
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    sync_file_system::SyncFileType file_type) {
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (!url.is_valid() || file_type == sync_file_system::SYNC_FILE_TYPE_UNKNOWN)
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return NULL;
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string file_path = base::FilePath(
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      fileapi::VirtualPath::GetNormalizedFilePath(url.path())).AsUTF8Unsafe();
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::string root_url = fileapi::GetFileSystemRootURI(
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    url.origin(), url.mount_type()).spec();
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (!url.filesystem_id().empty()) {
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    root_url.append(url.filesystem_id());
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    root_url.append("/");
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::DictionaryValue* dict = new base::DictionaryValue;
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  dict->SetString("fileSystemType",
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                  fileapi::GetFileSystemTypeString(url.mount_type()));
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  dict->SetString("fileSystemName",
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                  fileapi::GetFileSystemName(url.origin(), url.type()));
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  dict->SetString("rootUrl", root_url);
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  dict->SetString("filePath", file_path);
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  dict->SetBoolean("isDirectory",
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                   (file_type == sync_file_system::SYNC_FILE_TYPE_DIRECTORY));
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return dict;
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace extensions
135