Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(320)

Side by Side Diff: chrome/common/extensions/extension_file_util.cc

Issue 18286004: Move PathExists to base namespace. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/common/extensions/extension_file_util.h" 5 #include "chrome/common/extensions/extension_file_util.h"
6 6
7 #include <map> 7 #include <map>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 namespace extension_file_util { 65 namespace extension_file_util {
66 66
67 base::FilePath InstallExtension(const base::FilePath& unpacked_source_dir, 67 base::FilePath InstallExtension(const base::FilePath& unpacked_source_dir,
68 const std::string& id, 68 const std::string& id,
69 const std::string& version, 69 const std::string& version,
70 const base::FilePath& extensions_dir) { 70 const base::FilePath& extensions_dir) {
71 base::FilePath extension_dir = extensions_dir.AppendASCII(id); 71 base::FilePath extension_dir = extensions_dir.AppendASCII(id);
72 base::FilePath version_dir; 72 base::FilePath version_dir;
73 73
74 // Create the extension directory if it doesn't exist already. 74 // Create the extension directory if it doesn't exist already.
75 if (!file_util::PathExists(extension_dir)) { 75 if (!base::PathExists(extension_dir)) {
76 if (!file_util::CreateDirectory(extension_dir)) 76 if (!file_util::CreateDirectory(extension_dir))
77 return base::FilePath(); 77 return base::FilePath();
78 } 78 }
79 79
80 // Get a temp directory on the same file system as the profile. 80 // Get a temp directory on the same file system as the profile.
81 base::FilePath install_temp_dir = GetInstallTempDir(extensions_dir); 81 base::FilePath install_temp_dir = GetInstallTempDir(extensions_dir);
82 base::ScopedTempDir extension_temp_dir; 82 base::ScopedTempDir extension_temp_dir;
83 if (install_temp_dir.empty() || 83 if (install_temp_dir.empty() ||
84 !extension_temp_dir.CreateUniqueTempDirUnderPath(install_temp_dir)) { 84 !extension_temp_dir.CreateUniqueTempDirUnderPath(install_temp_dir)) {
85 LOG(ERROR) << "Creating of temp dir under in the profile failed."; 85 LOG(ERROR) << "Creating of temp dir under in the profile failed.";
86 return base::FilePath(); 86 return base::FilePath();
87 } 87 }
88 base::FilePath crx_temp_source = 88 base::FilePath crx_temp_source =
89 extension_temp_dir.path().Append(unpacked_source_dir.BaseName()); 89 extension_temp_dir.path().Append(unpacked_source_dir.BaseName());
90 if (!base::Move(unpacked_source_dir, crx_temp_source)) { 90 if (!base::Move(unpacked_source_dir, crx_temp_source)) {
91 LOG(ERROR) << "Moving extension from : " << unpacked_source_dir.value() 91 LOG(ERROR) << "Moving extension from : " << unpacked_source_dir.value()
92 << " to : " << crx_temp_source.value() << " failed."; 92 << " to : " << crx_temp_source.value() << " failed.";
93 return base::FilePath(); 93 return base::FilePath();
94 } 94 }
95 95
96 // Try to find a free directory. There can be legitimate conflicts in the case 96 // Try to find a free directory. There can be legitimate conflicts in the case
97 // of overinstallation of the same version. 97 // of overinstallation of the same version.
98 const int kMaxAttempts = 100; 98 const int kMaxAttempts = 100;
99 for (int i = 0; i < kMaxAttempts; ++i) { 99 for (int i = 0; i < kMaxAttempts; ++i) {
100 base::FilePath candidate = extension_dir.AppendASCII( 100 base::FilePath candidate = extension_dir.AppendASCII(
101 base::StringPrintf("%s_%u", version.c_str(), i)); 101 base::StringPrintf("%s_%u", version.c_str(), i));
102 if (!file_util::PathExists(candidate)) { 102 if (!base::PathExists(candidate)) {
103 version_dir = candidate; 103 version_dir = candidate;
104 break; 104 break;
105 } 105 }
106 } 106 }
107 107
108 if (version_dir.empty()) { 108 if (version_dir.empty()) {
109 LOG(ERROR) << "Could not find a home for extension " << id << " with " 109 LOG(ERROR) << "Could not find a home for extension " << id << " with "
110 << "version " << version << "."; 110 << "version " << version << ".";
111 return base::FilePath(); 111 return base::FilePath();
112 } 112 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 return NULL; 163 return NULL;
164 extension->AddInstallWarnings(warnings); 164 extension->AddInstallWarnings(warnings);
165 165
166 return extension; 166 return extension;
167 } 167 }
168 168
169 base::DictionaryValue* LoadManifest(const base::FilePath& extension_path, 169 base::DictionaryValue* LoadManifest(const base::FilePath& extension_path,
170 std::string* error) { 170 std::string* error) {
171 base::FilePath manifest_path = 171 base::FilePath manifest_path =
172 extension_path.Append(extensions::kManifestFilename); 172 extension_path.Append(extensions::kManifestFilename);
173 if (!file_util::PathExists(manifest_path)) { 173 if (!base::PathExists(manifest_path)) {
174 *error = l10n_util::GetStringUTF8(IDS_EXTENSION_MANIFEST_UNREADABLE); 174 *error = l10n_util::GetStringUTF8(IDS_EXTENSION_MANIFEST_UNREADABLE);
175 return NULL; 175 return NULL;
176 } 176 }
177 177
178 JSONFileValueSerializer serializer(manifest_path); 178 JSONFileValueSerializer serializer(manifest_path);
179 scoped_ptr<base::Value> root(serializer.Deserialize(NULL, error)); 179 scoped_ptr<base::Value> root(serializer.Deserialize(NULL, error));
180 if (!root.get()) { 180 if (!root.get()) {
181 if (error->empty()) { 181 if (error->empty()) {
182 // If |error| is empty, than the file could not be read. 182 // If |error| is empty, than the file could not be read.
183 // It would be cleaner to have the JSON reader give a specific error 183 // It would be cleaner to have the JSON reader give a specific error
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 continue; 222 continue;
223 } 223 }
224 224
225 result.push_back(current); 225 result.push_back(current);
226 } 226 }
227 return result; 227 return result;
228 } 228 }
229 229
230 bool ValidateFilePath(const base::FilePath& path) { 230 bool ValidateFilePath(const base::FilePath& path) {
231 int64 size = 0; 231 int64 size = 0;
232 if (!file_util::PathExists(path) || 232 if (!base::PathExists(path) ||
233 !file_util::GetFileSize(path, &size) || 233 !file_util::GetFileSize(path, &size) ||
234 size == 0) { 234 size == 0) {
235 return false; 235 return false;
236 } 236 }
237 237
238 return true; 238 return true;
239 } 239 }
240 240
241 bool ValidateExtensionIconSet(const ExtensionIconSet& icon_set, 241 bool ValidateExtensionIconSet(const ExtensionIconSet& icon_set,
242 const Extension* extension, 242 const Extension* extension,
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 } 402 }
403 } 403 }
404 404
405 extensions::MessageBundle* LoadMessageBundle( 405 extensions::MessageBundle* LoadMessageBundle(
406 const base::FilePath& extension_path, 406 const base::FilePath& extension_path,
407 const std::string& default_locale, 407 const std::string& default_locale,
408 std::string* error) { 408 std::string* error) {
409 error->clear(); 409 error->clear();
410 // Load locale information if available. 410 // Load locale information if available.
411 base::FilePath locale_path = extension_path.Append(extensions::kLocaleFolder); 411 base::FilePath locale_path = extension_path.Append(extensions::kLocaleFolder);
412 if (!file_util::PathExists(locale_path)) 412 if (!base::PathExists(locale_path))
413 return NULL; 413 return NULL;
414 414
415 std::set<std::string> locales; 415 std::set<std::string> locales;
416 if (!extension_l10n_util::GetValidLocales(locale_path, &locales, error)) 416 if (!extension_l10n_util::GetValidLocales(locale_path, &locales, error))
417 return NULL; 417 return NULL;
418 418
419 if (default_locale.empty() || 419 if (default_locale.empty() ||
420 locales.find(default_locale) == locales.end()) { 420 locales.find(default_locale) == locales.end()) {
421 *error = l10n_util::GetStringUTF8( 421 *error = l10n_util::GetStringUTF8(
422 IDS_EXTENSION_LOCALES_NO_DEFAULT_LOCALE_SPECIFIED); 422 IDS_EXTENSION_LOCALES_NO_DEFAULT_LOCALE_SPECIFIED);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 std::string host = net::UnescapeURLComponent(url.host(), 522 std::string host = net::UnescapeURLComponent(url.host(),
523 net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS); 523 net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS);
524 if (host.empty()) 524 if (host.empty())
525 return base::FilePath(); 525 return base::FilePath();
526 526
527 base::FilePath relative_path = ExtensionURLToRelativeFilePath(url); 527 base::FilePath relative_path = ExtensionURLToRelativeFilePath(url);
528 if (relative_path.empty()) 528 if (relative_path.empty())
529 return base::FilePath(); 529 return base::FilePath();
530 530
531 base::FilePath path = root.AppendASCII(host).Append(relative_path); 531 base::FilePath path = root.AppendASCII(host).Append(relative_path);
532 if (!file_util::PathExists(path)) 532 if (!base::PathExists(path))
533 return base::FilePath(); 533 return base::FilePath();
534 path = base::MakeAbsoluteFilePath(path); 534 path = base::MakeAbsoluteFilePath(path);
535 if (path.empty() || !root.IsParent(path)) 535 if (path.empty() || !root.IsParent(path))
536 return base::FilePath(); 536 return base::FilePath();
537 return path; 537 return path;
538 } 538 }
539 539
540 base::FilePath GetInstallTempDir(const base::FilePath& extensions_dir) { 540 base::FilePath GetInstallTempDir(const base::FilePath& extensions_dir) {
541 // We do file IO in this function, but only when the current profile's 541 // We do file IO in this function, but only when the current profile's
542 // Temp directory has never been used before, or in a rare error case. 542 // Temp directory has never been used before, or in a rare error case.
543 // Developers are not likely to see these situations often, so do an 543 // Developers are not likely to see these situations often, so do an
544 // explicit thread check. 544 // explicit thread check.
545 base::ThreadRestrictions::AssertIOAllowed(); 545 base::ThreadRestrictions::AssertIOAllowed();
546 546
547 // Create the temp directory as a sub-directory of the Extensions directory. 547 // Create the temp directory as a sub-directory of the Extensions directory.
548 // This guarantees it is on the same file system as the extension's eventual 548 // This guarantees it is on the same file system as the extension's eventual
549 // install target. 549 // install target.
550 base::FilePath temp_path = extensions_dir.Append(kTempDirectoryName); 550 base::FilePath temp_path = extensions_dir.Append(kTempDirectoryName);
551 if (file_util::PathExists(temp_path)) { 551 if (base::PathExists(temp_path)) {
552 if (!file_util::DirectoryExists(temp_path)) { 552 if (!file_util::DirectoryExists(temp_path)) {
553 DLOG(WARNING) << "Not a directory: " << temp_path.value(); 553 DLOG(WARNING) << "Not a directory: " << temp_path.value();
554 return base::FilePath(); 554 return base::FilePath();
555 } 555 }
556 if (!file_util::PathIsWritable(temp_path)) { 556 if (!file_util::PathIsWritable(temp_path)) {
557 DLOG(WARNING) << "Can't write to path: " << temp_path.value(); 557 DLOG(WARNING) << "Can't write to path: " << temp_path.value();
558 return base::FilePath(); 558 return base::FilePath();
559 } 559 }
560 // This is a directory we can write to. 560 // This is a directory we can write to.
561 return temp_path; 561 return temp_path;
562 } 562 }
563 563
564 // Directory doesn't exist, so create it. 564 // Directory doesn't exist, so create it.
565 if (!file_util::CreateDirectory(temp_path)) { 565 if (!file_util::CreateDirectory(temp_path)) {
566 DLOG(WARNING) << "Couldn't create directory: " << temp_path.value(); 566 DLOG(WARNING) << "Couldn't create directory: " << temp_path.value();
567 return base::FilePath(); 567 return base::FilePath();
568 } 568 }
569 return temp_path; 569 return temp_path;
570 } 570 }
571 571
572 void DeleteFile(const base::FilePath& path, bool recursive) { 572 void DeleteFile(const base::FilePath& path, bool recursive) {
573 base::Delete(path, recursive); 573 base::Delete(path, recursive);
574 } 574 }
575 575
576 } // namespace extension_file_util 576 } // namespace extension_file_util
OLDNEW
« no previous file with comments | « chrome/common/extensions/background_info.cc ('k') | chrome/common/extensions/extension_l10n_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698