| 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/drive/file_system_util.h" | 5 #include "chrome/browser/chromeos/drive/file_system_util.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 #include "net/base/escape.h" | 41 #include "net/base/escape.h" |
| 42 #include "webkit/browser/fileapi/file_system_url.h" | 42 #include "webkit/browser/fileapi/file_system_url.h" |
| 43 | 43 |
| 44 using content::BrowserThread; | 44 using content::BrowserThread; |
| 45 | 45 |
| 46 namespace drive { | 46 namespace drive { |
| 47 namespace util { | 47 namespace util { |
| 48 | 48 |
| 49 namespace { | 49 namespace { |
| 50 | 50 |
| 51 const base::FilePath::CharType kSpecialMountPointRoot[] = | |
| 52 FILE_PATH_LITERAL("/special"); | |
| 53 | |
| 54 const char kDriveMountPointNameBase[] = "drive"; | |
| 55 | |
| 56 const base::FilePath::CharType kDriveMyDriveRootPath[] = | |
| 57 FILE_PATH_LITERAL("drive/root"); | |
| 58 | |
| 59 const base::FilePath::CharType kFileCacheVersionDir[] = | |
| 60 FILE_PATH_LITERAL("v1"); | |
| 61 | |
| 62 const char kSlash[] = "/"; | |
| 63 const char kDot = '.'; | |
| 64 const char kEscapedChars[] = "_"; | |
| 65 | |
| 66 std::string ReadStringFromGDocFile(const base::FilePath& file_path, | 51 std::string ReadStringFromGDocFile(const base::FilePath& file_path, |
| 67 const std::string& key) { | 52 const std::string& key) { |
| 68 const int64 kMaxGDocSize = 4096; | 53 const int64 kMaxGDocSize = 4096; |
| 69 int64 file_size = 0; | 54 int64 file_size = 0; |
| 70 if (!base::GetFileSize(file_path, &file_size) || | 55 if (!base::GetFileSize(file_path, &file_size) || |
| 71 file_size > kMaxGDocSize) { | 56 file_size > kMaxGDocSize) { |
| 72 LOG(WARNING) << "File too large to be a GDoc file " << file_path.value(); | 57 LOG(WARNING) << "File too large to be a GDoc file " << file_path.value(); |
| 73 return std::string(); | 58 return std::string(); |
| 74 } | 59 } |
| 75 | 60 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 } // namespace | 101 } // namespace |
| 117 | 102 |
| 118 const base::FilePath& GetDriveGrandRootPath() { | 103 const base::FilePath& GetDriveGrandRootPath() { |
| 119 CR_DEFINE_STATIC_LOCAL(base::FilePath, grand_root_path, | 104 CR_DEFINE_STATIC_LOCAL(base::FilePath, grand_root_path, |
| 120 (kDriveGrandRootDirName)); | 105 (kDriveGrandRootDirName)); |
| 121 return grand_root_path; | 106 return grand_root_path; |
| 122 } | 107 } |
| 123 | 108 |
| 124 const base::FilePath& GetDriveMyDriveRootPath() { | 109 const base::FilePath& GetDriveMyDriveRootPath() { |
| 125 CR_DEFINE_STATIC_LOCAL(base::FilePath, drive_root_path, | 110 CR_DEFINE_STATIC_LOCAL(base::FilePath, drive_root_path, |
| 126 (kDriveMyDriveRootPath)); | 111 (FILE_PATH_LITERAL("drive/root"))); |
| 127 return drive_root_path; | 112 return drive_root_path; |
| 128 } | 113 } |
| 129 | 114 |
| 130 base::FilePath GetDriveMountPointPathForUserIdHash( | 115 base::FilePath GetDriveMountPointPathForUserIdHash( |
| 131 const std::string user_id_hash) { | 116 const std::string user_id_hash) { |
| 117 static const base::FilePath::CharType kSpecialMountPointRoot[] = |
| 118 FILE_PATH_LITERAL("/special"); |
| 119 static const char kDriveMountPointNameBase[] = "drive"; |
| 132 return base::FilePath(kSpecialMountPointRoot).AppendASCII( | 120 return base::FilePath(kSpecialMountPointRoot).AppendASCII( |
| 133 net::EscapePath(kDriveMountPointNameBase + | 121 net::EscapePath(kDriveMountPointNameBase + |
| 134 (user_id_hash.empty() ? "" : "-" + user_id_hash))); | 122 (user_id_hash.empty() ? "" : "-" + user_id_hash))); |
| 135 } | 123 } |
| 136 | 124 |
| 137 base::FilePath GetDriveMountPointPath(Profile* profile) { | 125 base::FilePath GetDriveMountPointPath(Profile* profile) { |
| 138 std::string id = chromeos::ProfileHelper::GetUserIdHashFromProfile(profile); | 126 std::string id = chromeos::ProfileHelper::GetUserIdHashFromProfile(profile); |
| 139 if (id.empty() || id == chrome::kLegacyProfileDir) { | 127 if (id.empty() || id == chrome::kLegacyProfileDir) { |
| 140 // ProfileHelper::GetUserIdHashFromProfile works only when multi-profile is | 128 // ProfileHelper::GetUserIdHashFromProfile works only when multi-profile is |
| 141 // enabled. In that case, we fall back to use UserManager (it basically just | 129 // enabled. In that case, we fall back to use UserManager (it basically just |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 if (!url.is_valid() || url.type() != fileapi::kFileSystemTypeDrive) | 248 if (!url.is_valid() || url.type() != fileapi::kFileSystemTypeDrive) |
| 261 return base::FilePath(); | 249 return base::FilePath(); |
| 262 return ExtractDrivePath(url.path()); | 250 return ExtractDrivePath(url.path()); |
| 263 } | 251 } |
| 264 | 252 |
| 265 base::FilePath GetCacheRootPath(Profile* profile) { | 253 base::FilePath GetCacheRootPath(Profile* profile) { |
| 266 base::FilePath cache_base_path; | 254 base::FilePath cache_base_path; |
| 267 chrome::GetUserCacheDirectory(profile->GetPath(), &cache_base_path); | 255 chrome::GetUserCacheDirectory(profile->GetPath(), &cache_base_path); |
| 268 base::FilePath cache_root_path = | 256 base::FilePath cache_root_path = |
| 269 cache_base_path.Append(chromeos::kDriveCacheDirname); | 257 cache_base_path.Append(chromeos::kDriveCacheDirname); |
| 258 static const base::FilePath::CharType kFileCacheVersionDir[] = |
| 259 FILE_PATH_LITERAL("v1"); |
| 270 return cache_root_path.Append(kFileCacheVersionDir); | 260 return cache_root_path.Append(kFileCacheVersionDir); |
| 271 } | 261 } |
| 272 | 262 |
| 273 std::string EscapeCacheFileName(const std::string& filename) { | 263 std::string EscapeCacheFileName(const std::string& filename) { |
| 274 // This is based on net/base/escape.cc: net::(anonymous namespace)::Escape | 264 // This is based on net/base/escape.cc: net::(anonymous namespace)::Escape |
| 275 std::string escaped; | 265 std::string escaped; |
| 276 for (size_t i = 0; i < filename.size(); ++i) { | 266 for (size_t i = 0; i < filename.size(); ++i) { |
| 277 char c = filename[i]; | 267 char c = filename[i]; |
| 278 if (c == '%' || c == '.' || c == '/') { | 268 if (c == '%' || c == '.' || c == '/') { |
| 279 base::StringAppendF(&escaped, "%%%02X", c); | 269 base::StringAppendF(&escaped, "%%%02X", c); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 297 } | 287 } |
| 298 return unescaped; | 288 return unescaped; |
| 299 } | 289 } |
| 300 | 290 |
| 301 std::string NormalizeFileName(const std::string& input) { | 291 std::string NormalizeFileName(const std::string& input) { |
| 302 DCHECK(base::IsStringUTF8(input)); | 292 DCHECK(base::IsStringUTF8(input)); |
| 303 | 293 |
| 304 std::string output; | 294 std::string output; |
| 305 if (!base::ConvertToUtf8AndNormalize(input, base::kCodepageUTF8, &output)) | 295 if (!base::ConvertToUtf8AndNormalize(input, base::kCodepageUTF8, &output)) |
| 306 output = input; | 296 output = input; |
| 307 base::ReplaceChars(output, kSlash, std::string(kEscapedChars), &output); | 297 base::ReplaceChars(output, "/", "_", &output); |
| 308 if (!output.empty() && output.find_first_not_of(kDot, 0) == std::string::npos) | 298 if (!output.empty() && output.find_first_not_of('.', 0) == std::string::npos) |
| 309 output = kEscapedChars; | 299 output = "_"; |
| 310 return output; | 300 return output; |
| 311 } | 301 } |
| 312 | 302 |
| 313 void PrepareWritableFileAndRun(Profile* profile, | 303 void PrepareWritableFileAndRun(Profile* profile, |
| 314 const base::FilePath& path, | 304 const base::FilePath& path, |
| 315 const PrepareWritableFileCallback& callback) { | 305 const PrepareWritableFileCallback& callback) { |
| 316 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 306 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 317 DCHECK(!callback.is_null()); | 307 DCHECK(!callback.is_null()); |
| 318 | 308 |
| 319 FileSystemInterface* file_system = GetFileSystemByProfile(profile); | 309 FileSystemInterface* file_system = GetFileSystemByProfile(profile); |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 const bool disable_sync_over_celluar = | 410 const bool disable_sync_over_celluar = |
| 421 profile->GetPrefs()->GetBoolean(prefs::kDisableDriveOverCellular); | 411 profile->GetPrefs()->GetBoolean(prefs::kDisableDriveOverCellular); |
| 422 | 412 |
| 423 if (is_connection_cellular && disable_sync_over_celluar) | 413 if (is_connection_cellular && disable_sync_over_celluar) |
| 424 return DRIVE_CONNECTED_METERED; | 414 return DRIVE_CONNECTED_METERED; |
| 425 return DRIVE_CONNECTED; | 415 return DRIVE_CONNECTED; |
| 426 } | 416 } |
| 427 | 417 |
| 428 } // namespace util | 418 } // namespace util |
| 429 } // namespace drive | 419 } // namespace drive |
| OLD | NEW |