| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/extensions/file_system_provider/file_system_pr
ovider_api.h" | 5 #include "chrome/browser/chromeos/extensions/file_system_provider/file_system_pr
ovider_api.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "chrome/browser/chromeos/file_system_provider/provided_file_system_inte
rface.h" |
| 11 #include "chrome/browser/chromeos/file_system_provider/request_manager.h" |
| 10 #include "chrome/browser/chromeos/file_system_provider/service.h" | 12 #include "chrome/browser/chromeos/file_system_provider/service.h" |
| 11 #include "chrome/common/extensions/api/file_system_provider.h" | 13 #include "chrome/common/extensions/api/file_system_provider.h" |
| 12 #include "chrome/common/extensions/api/file_system_provider_internal.h" | 14 #include "chrome/common/extensions/api/file_system_provider_internal.h" |
| 13 | 15 |
| 16 using chromeos::file_system_provider::ProvidedFileSystemInterface; |
| 17 using chromeos::file_system_provider::RequestManager; |
| 18 using chromeos::file_system_provider::Service; |
| 19 |
| 14 namespace extensions { | 20 namespace extensions { |
| 15 namespace { | 21 namespace { |
| 16 | 22 |
| 17 // Error names from | 23 // Error names from |
| 18 // http://www.w3.org/TR/file-system-api/#errors-and-exceptions | 24 // http://www.w3.org/TR/file-system-api/#errors-and-exceptions |
| 25 const char kNotFoundErrorName[] = "NotFoundError"; |
| 19 const char kSecurityErrorName[] = "SecurityError"; | 26 const char kSecurityErrorName[] = "SecurityError"; |
| 20 | 27 |
| 21 // Error messages. | 28 // Error messages. |
| 22 const char kEmptyNameErrorMessage[] = "Empty display name is not allowed."; | 29 const char kEmptyNameErrorMessage[] = "Empty display name is not allowed."; |
| 23 const char kMountFailedErrorMessage[] = "Mounting the file system failed."; | 30 const char kMountFailedErrorMessage[] = "Mounting the file system failed."; |
| 24 const char kUnmountFailedErrorMessage[] = "Unmounting the file system failed."; | 31 const char kUnmountFailedErrorMessage[] = "Unmounting the file system failed."; |
| 25 const char kResponseFailedErrorMessage[] = | 32 const char kResponseFailedErrorMessage[] = |
| 26 "Sending a response for the request failed."; | 33 "Sending a response for the request failed."; |
| 27 | 34 |
| 28 // Creates a dictionary, which looks like a DOMError. The returned dictionary | 35 // Creates a dictionary, which looks like a DOMError. The returned dictionary |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 // It's an error if the display name is empty. | 96 // It's an error if the display name is empty. |
| 90 if (params->display_name.empty()) { | 97 if (params->display_name.empty()) { |
| 91 base::ListValue* result = new base::ListValue(); | 98 base::ListValue* result = new base::ListValue(); |
| 92 result->Append(new base::StringValue("")); | 99 result->Append(new base::StringValue("")); |
| 93 result->Append(CreateError(kSecurityErrorName, | 100 result->Append(CreateError(kSecurityErrorName, |
| 94 kEmptyNameErrorMessage)); | 101 kEmptyNameErrorMessage)); |
| 95 SetResult(result); | 102 SetResult(result); |
| 96 return false; | 103 return false; |
| 97 } | 104 } |
| 98 | 105 |
| 99 chromeos::file_system_provider::Service* service = | 106 Service* service = Service::Get(GetProfile()); |
| 100 chromeos::file_system_provider::Service::Get(GetProfile()); | |
| 101 DCHECK(service); | 107 DCHECK(service); |
| 102 | 108 |
| 103 int file_system_id = | 109 int file_system_id = |
| 104 service->MountFileSystem(extension_id(), params->display_name); | 110 service->MountFileSystem(extension_id(), params->display_name); |
| 105 | 111 |
| 106 // If the |file_system_id| is zero, then it means that registering the file | 112 // If the |file_system_id| is zero, then it means that registering the file |
| 107 // system failed. | 113 // system failed. |
| 108 // TODO(mtomasz): Pass more detailed errors, rather than just a bool. | 114 // TODO(mtomasz): Pass more detailed errors, rather than just a bool. |
| 109 if (!file_system_id) { | 115 if (!file_system_id) { |
| 110 base::ListValue* result = new base::ListValue(); | 116 base::ListValue* result = new base::ListValue(); |
| 111 result->Append(new base::FundamentalValue(0)); | 117 result->Append(new base::FundamentalValue(0)); |
| 112 result->Append(CreateError(kSecurityErrorName, kMountFailedErrorMessage)); | 118 result->Append(CreateError(kSecurityErrorName, kMountFailedErrorMessage)); |
| 113 SetResult(result); | 119 SetResult(result); |
| 114 return false; | 120 return false; |
| 115 } | 121 } |
| 116 | 122 |
| 117 base::ListValue* result = new base::ListValue(); | 123 base::ListValue* result = new base::ListValue(); |
| 118 result->Append(new base::FundamentalValue(file_system_id)); | 124 result->Append(new base::FundamentalValue(file_system_id)); |
| 119 // Don't append an error on success. | 125 // Don't append an error on success. |
| 120 | 126 |
| 121 SetResult(result); | 127 SetResult(result); |
| 122 return true; | 128 return true; |
| 123 } | 129 } |
| 124 | 130 |
| 125 bool FileSystemProviderUnmountFunction::RunImpl() { | 131 bool FileSystemProviderUnmountFunction::RunImpl() { |
| 126 using api::file_system_provider::Unmount::Params; | 132 using api::file_system_provider::Unmount::Params; |
| 127 const scoped_ptr<Params> params(Params::Create(*args_)); | 133 const scoped_ptr<Params> params(Params::Create(*args_)); |
| 128 EXTENSION_FUNCTION_VALIDATE(params); | 134 EXTENSION_FUNCTION_VALIDATE(params); |
| 129 | 135 |
| 130 chromeos::file_system_provider::Service* service = | 136 Service* service = Service::Get(GetProfile()); |
| 131 chromeos::file_system_provider::Service::Get(GetProfile()); | |
| 132 DCHECK(service); | 137 DCHECK(service); |
| 133 | 138 |
| 134 if (!service->UnmountFileSystem(extension_id(), params->file_system_id)) { | 139 if (!service->UnmountFileSystem(extension_id(), params->file_system_id)) { |
| 135 // TODO(mtomasz): Pass more detailed errors, rather than just a bool. | 140 // TODO(mtomasz): Pass more detailed errors, rather than just a bool. |
| 136 base::ListValue* result = new base::ListValue(); | 141 base::ListValue* result = new base::ListValue(); |
| 137 result->Append(CreateError(kSecurityErrorName, kUnmountFailedErrorMessage)); | 142 result->Append(CreateError(kSecurityErrorName, kUnmountFailedErrorMessage)); |
| 138 SetResult(result); | 143 SetResult(result); |
| 139 return false; | 144 return false; |
| 140 } | 145 } |
| 141 | 146 |
| 142 base::ListValue* result = new base::ListValue(); | 147 base::ListValue* result = new base::ListValue(); |
| 143 SetResult(result); | 148 SetResult(result); |
| 144 return true; | 149 return true; |
| 145 } | 150 } |
| 146 | 151 |
| 147 bool FileSystemProviderInternalUnmountRequestedSuccessFunction::RunImpl() { | 152 bool FileSystemProviderInternalUnmountRequestedSuccessFunction::RunImpl() { |
| 148 using api::file_system_provider_internal::UnmountRequestedSuccess::Params; | 153 using api::file_system_provider_internal::UnmountRequestedSuccess::Params; |
| 149 const scoped_ptr<Params> params(Params::Create(*args_)); | 154 const scoped_ptr<Params> params(Params::Create(*args_)); |
| 150 EXTENSION_FUNCTION_VALIDATE(params); | 155 EXTENSION_FUNCTION_VALIDATE(params); |
| 151 | 156 |
| 152 chromeos::file_system_provider::Service* service = | 157 Service* service = Service::Get(GetProfile()); |
| 153 chromeos::file_system_provider::Service::Get(GetProfile()); | |
| 154 DCHECK(service); | 158 DCHECK(service); |
| 155 | 159 |
| 156 if (!service->request_manager()->FulfillRequest( | 160 ProvidedFileSystemInterface* file_system = |
| 157 extension_id(), | 161 service->GetProvidedFileSystem(extension_id(), params->file_system_id); |
| 158 params->file_system_id, | 162 if (!file_system) { |
| 159 params->request_id, | 163 base::ListValue* result = new base::ListValue(); |
| 160 scoped_ptr<base::DictionaryValue>(), | 164 result->Append( |
| 161 false /* has_more */)) { | 165 CreateError(kNotFoundErrorName, kResponseFailedErrorMessage)); |
| 166 SetResult(result); |
| 167 return false; |
| 168 } |
| 169 |
| 170 RequestManager* request_manager = file_system->GetRequestManager(); |
| 171 DCHECK(request_manager); |
| 172 |
| 173 if (!request_manager->FulfillRequest(params->request_id, |
| 174 scoped_ptr<base::DictionaryValue>(), |
| 175 false /* has_more */)) { |
| 162 // TODO(mtomasz): Pass more detailed errors, rather than just a bool. | 176 // TODO(mtomasz): Pass more detailed errors, rather than just a bool. |
| 163 base::ListValue* result = new base::ListValue(); | 177 base::ListValue* result = new base::ListValue(); |
| 164 result->Append( | 178 result->Append( |
| 165 CreateError(kSecurityErrorName, kResponseFailedErrorMessage)); | 179 CreateError(kSecurityErrorName, kResponseFailedErrorMessage)); |
| 166 SetResult(result); | 180 SetResult(result); |
| 167 return false; | 181 return false; |
| 168 } | 182 } |
| 169 | 183 |
| 170 base::ListValue* result = new base::ListValue(); | 184 base::ListValue* result = new base::ListValue(); |
| 171 SetResult(result); | 185 SetResult(result); |
| 172 return true; | 186 return true; |
| 173 } | 187 } |
| 174 | 188 |
| 175 bool FileSystemProviderInternalUnmountRequestedErrorFunction::RunImpl() { | 189 bool FileSystemProviderInternalUnmountRequestedErrorFunction::RunImpl() { |
| 176 using api::file_system_provider_internal::UnmountRequestedError::Params; | 190 using api::file_system_provider_internal::UnmountRequestedError::Params; |
| 177 const scoped_ptr<Params> params(Params::Create(*args_)); | 191 const scoped_ptr<Params> params(Params::Create(*args_)); |
| 178 EXTENSION_FUNCTION_VALIDATE(params); | 192 EXTENSION_FUNCTION_VALIDATE(params); |
| 179 | 193 |
| 180 chromeos::file_system_provider::Service* service = | 194 Service* service = Service::Get(GetProfile()); |
| 181 chromeos::file_system_provider::Service::Get(GetProfile()); | |
| 182 DCHECK(service); | 195 DCHECK(service); |
| 183 | 196 |
| 184 if (!service->request_manager()->RejectRequest( | 197 ProvidedFileSystemInterface* file_system = |
| 185 extension_id(), | 198 service->GetProvidedFileSystem(extension_id(), params->file_system_id); |
| 186 params->file_system_id, | 199 if (!file_system) { |
| 187 params->request_id, | 200 base::ListValue* result = new base::ListValue(); |
| 188 ProviderErrorToFileError(params->error))) { | 201 result->Append( |
| 202 CreateError(kNotFoundErrorName, kResponseFailedErrorMessage)); |
| 203 SetResult(result); |
| 204 return false; |
| 205 } |
| 206 |
| 207 RequestManager* request_manager = file_system->GetRequestManager(); |
| 208 DCHECK(request_manager); |
| 209 |
| 210 if (!request_manager->RejectRequest( |
| 211 params->request_id, ProviderErrorToFileError(params->error))) { |
| 212 // TODO(mtomasz): Pass more detailed errors, rather than just a bool. |
| 189 base::ListValue* result = new base::ListValue(); | 213 base::ListValue* result = new base::ListValue(); |
| 190 result->Append( | 214 result->Append( |
| 191 CreateError(kSecurityErrorName, kResponseFailedErrorMessage)); | 215 CreateError(kSecurityErrorName, kResponseFailedErrorMessage)); |
| 192 SetResult(result); | 216 SetResult(result); |
| 193 return false; | 217 return false; |
| 194 } | 218 } |
| 195 | 219 |
| 196 base::ListValue* result = new base::ListValue(); | 220 base::ListValue* result = new base::ListValue(); |
| 197 SetResult(result); | 221 SetResult(result); |
| 198 return true; | 222 return true; |
| 199 } | 223 } |
| 200 | 224 |
| 201 } // namespace extensions | 225 } // namespace extensions |
| OLD | NEW |