Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/gdata/gdata_util.h" | 5 #include "chrome/browser/chromeos/gdata/gdata_util.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 214 kReadOnlyFilePermissions)); | 214 kReadOnlyFilePermissions)); |
| 215 // TODO(tbarzic): When we start supporting openFile operation, we may have to | 215 // TODO(tbarzic): When we start supporting openFile operation, we may have to |
| 216 // change permission for localy modified files to match handler's permissions. | 216 // change permission for localy modified files to match handler's permissions. |
| 217 cache_paths->push_back(std::make_pair( | 217 cache_paths->push_back(std::make_pair( |
| 218 file_system->GetCacheFilePath(resource_id, file_md5, | 218 file_system->GetCacheFilePath(resource_id, file_md5, |
| 219 GDataRootDirectory::CACHE_TYPE_PERSISTENT, | 219 GDataRootDirectory::CACHE_TYPE_PERSISTENT, |
| 220 GDataFileSystem::CACHED_FILE_LOCALLY_MODIFIED), | 220 GDataFileSystem::CACHED_FILE_LOCALLY_MODIFIED), |
| 221 kReadOnlyFilePermissions)); | 221 kReadOnlyFilePermissions)); |
| 222 cache_paths->push_back(std::make_pair( | 222 cache_paths->push_back(std::make_pair( |
| 223 file_system->GetCacheFilePath(resource_id, file_md5, | 223 file_system->GetCacheFilePath(resource_id, file_md5, |
| 224 GDataRootDirectory::CACHE_TYPE_PERSISTENT, | |
| 225 GDataFileSystem::CACHED_FILE_MOUNTED), | |
| 226 kReadOnlyFilePermissions)); | |
| 227 cache_paths->push_back(std::make_pair( | |
| 228 file_system->GetCacheFilePath(resource_id, file_md5, | |
| 224 GDataRootDirectory::CACHE_TYPE_TMP, | 229 GDataRootDirectory::CACHE_TYPE_TMP, |
| 225 GDataFileSystem::CACHED_FILE_FROM_SERVER), | 230 GDataFileSystem::CACHED_FILE_FROM_SERVER), |
| 226 kReadOnlyFilePermissions)); | 231 kReadOnlyFilePermissions)); |
| 227 | 232 |
| 228 } | 233 } |
| 229 | 234 |
| 230 void SetPermissionsForGDataCacheFiles(Profile* profile, | 235 void SetPermissionsForGDataCacheFiles(Profile* profile, |
| 231 int pid, | 236 int pid, |
| 232 const FilePath& path) { | 237 const FilePath& path) { |
| 233 std::vector<std::pair<FilePath, int> > cache_paths; | 238 std::vector<std::pair<FilePath, int> > cache_paths; |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 252 | 257 |
| 253 // Disable gdata if preference is set. This can happen with commandline flag | 258 // Disable gdata if preference is set. This can happen with commandline flag |
| 254 // --disable-gdata or enterprise policy, or probably with user settings too | 259 // --disable-gdata or enterprise policy, or probably with user settings too |
| 255 // in the future. | 260 // in the future. |
| 256 if (profile->GetPrefs()->GetBoolean(prefs::kDisableGData)) | 261 if (profile->GetPrefs()->GetBoolean(prefs::kDisableGData)) |
| 257 return false; | 262 return false; |
| 258 | 263 |
| 259 return true; | 264 return true; |
| 260 } | 265 } |
| 261 | 266 |
| 267 void ParseCacheFilePath(const FilePath& path, | |
| 268 std::string* resource_id, | |
| 269 std::string* md5, | |
| 270 std::string* extra_extension) { | |
| 271 DCHECK(resource_id); | |
| 272 DCHECK(md5); | |
| 273 DCHECK(extra_extension); | |
| 274 | |
| 275 // Extract up to two extensions from the right. | |
| 276 FilePath base_name = path.BaseName(); | |
| 277 const int kNumExtensionsToExtract = 2; | |
| 278 std::vector<FilePath::StringType> extensions; | |
| 279 for (int i = 0; i < kNumExtensionsToExtract; ++i) { | |
| 280 FilePath::StringType extension = base_name.Extension(); | |
| 281 if (!extension.empty()) { | |
| 282 // FilePath::Extension returns ".", so strip it. | |
| 283 extension = GDataEntry::UnescapeUtf8FileName(extension.substr(1)); | |
| 284 base_name = base_name.RemoveExtension(); | |
| 285 extensions.push_back(extension); | |
| 286 } else { | |
| 287 break; | |
| 288 } | |
| 289 } | |
| 290 | |
| 291 // The base_name here is already stripped of extensions in the loop above. | |
| 292 *resource_id = GDataEntry::UnescapeUtf8FileName(base_name.value()); | |
| 293 | |
| 294 // Assign the extracted extensions to md5 and extra_extension. | |
| 295 switch (extensions.size()) { | |
|
tbarzic
2012/04/23 18:03:22
What do you think about this:
size_t extension_cou
hshi
2012/04/23 20:45:47
Done.
| |
| 296 case 0: | |
| 297 // Only resource_id is present: "<resource_id>". | |
| 298 *md5 = std::string(); | |
| 299 *extra_extension = std::string(); | |
| 300 break; | |
| 301 case 1: | |
| 302 // Both resource_id and md5 are present: "<resource_id>.<md5>". | |
| 303 *md5 = extensions[0]; | |
| 304 *extra_extension = std::string(); | |
| 305 break; | |
| 306 case 2: | |
| 307 // All three parts are present: ""<resource_id>.<md5>.<extra_extension>". | |
| 308 *md5 = extensions[1]; | |
| 309 *extra_extension = extensions[0]; | |
| 310 break; | |
| 311 default: | |
| 312 NOTREACHED(); | |
| 313 } | |
| 314 } | |
| 315 | |
| 262 } // namespace util | 316 } // namespace util |
| 263 } // namespace gdata | 317 } // namespace gdata |
| OLD | NEW |