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/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 28 matching lines...) Expand all Loading... |
39 // Returns false and sets the error if script file can't be loaded, | 39 // Returns false and sets the error if script file can't be loaded, |
40 // or if it's not UTF-8 encoded. | 40 // or if it's not UTF-8 encoded. |
41 static bool IsScriptValid(const FilePath& path, const FilePath& relative_path, | 41 static bool IsScriptValid(const FilePath& path, const FilePath& relative_path, |
42 int message_id, std::string* error); | 42 int message_id, std::string* error); |
43 | 43 |
44 const char kInstallDirectoryName[] = "Extensions"; | 44 const char kInstallDirectoryName[] = "Extensions"; |
45 | 45 |
46 FilePath InstallExtension(const FilePath& unpacked_source_dir, | 46 FilePath InstallExtension(const FilePath& unpacked_source_dir, |
47 const std::string& id, | 47 const std::string& id, |
48 const std::string& version, | 48 const std::string& version, |
49 const FilePath& all_extensions_dir) { | 49 const FilePath& all_extensions_dir, |
| 50 bool should_delete_source) { |
50 FilePath extension_dir = all_extensions_dir.AppendASCII(id); | 51 FilePath extension_dir = all_extensions_dir.AppendASCII(id); |
51 FilePath version_dir; | 52 FilePath version_dir; |
52 | 53 |
53 // Create the extension directory if it doesn't exist already. | 54 // Create the extension directory if it doesn't exist already. |
54 if (!file_util::PathExists(extension_dir)) { | 55 if (!file_util::PathExists(extension_dir)) { |
55 if (!file_util::CreateDirectory(extension_dir)) | 56 if (!file_util::CreateDirectory(extension_dir)) |
56 return FilePath(); | 57 return FilePath(); |
57 } | 58 } |
58 | 59 |
59 FilePath profile_temp_dir = GetUserDataTempDir(); | 60 FilePath profile_temp_dir = GetUserDataTempDir(); |
(...skipping 14 matching lines...) Expand all Loading... |
74 !extension_temp_dir.CreateUniqueTempDirUnderPath(profile_temp_dir)) { | 75 !extension_temp_dir.CreateUniqueTempDirUnderPath(profile_temp_dir)) { |
75 LOG(ERROR) << "Creating of temp dir under in the profile failed."; | 76 LOG(ERROR) << "Creating of temp dir under in the profile failed."; |
76 return FilePath(); | 77 return FilePath(); |
77 } | 78 } |
78 if (!file_util::CopyDirectory(unpacked_source_dir, | 79 if (!file_util::CopyDirectory(unpacked_source_dir, |
79 extension_temp_dir.path(), true)) { | 80 extension_temp_dir.path(), true)) { |
80 LOG(ERROR) << "Moving extension from : " << unpacked_source_dir.value() | 81 LOG(ERROR) << "Moving extension from : " << unpacked_source_dir.value() |
81 << " to : " << extension_temp_dir.path().value() << " failed."; | 82 << " to : " << extension_temp_dir.path().value() << " failed."; |
82 return FilePath(); | 83 return FilePath(); |
83 } | 84 } |
84 file_util::Delete(unpacked_source_dir, true); | 85 if (should_delete_source) |
| 86 file_util::Delete(unpacked_source_dir, true); |
85 FilePath crx_temp_source = | 87 FilePath crx_temp_source = |
86 extension_temp_dir.path().Append(unpacked_source_dir.BaseName()); | 88 extension_temp_dir.path().Append(unpacked_source_dir.BaseName()); |
87 | 89 |
88 // Try to find a free directory. There can be legitimate conflicts in the case | 90 // Try to find a free directory. There can be legitimate conflicts in the case |
89 // of overinstallation of the same version. | 91 // of overinstallation of the same version. |
90 const int kMaxAttempts = 100; | 92 const int kMaxAttempts = 100; |
91 for (int i = 0; i < kMaxAttempts; ++i) { | 93 for (int i = 0; i < kMaxAttempts; ++i) { |
92 FilePath candidate = extension_dir.AppendASCII( | 94 FilePath candidate = extension_dir.AppendASCII( |
93 base::StringPrintf("%s_%u", version.c_str(), i)); | 95 base::StringPrintf("%s_%u", version.c_str(), i)); |
94 if (!file_util::PathExists(candidate)) { | 96 if (!file_util::PathExists(candidate)) { |
(...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
679 return temp_path; | 681 return temp_path; |
680 | 682 |
681 return FilePath(); | 683 return FilePath(); |
682 } | 684 } |
683 | 685 |
684 void DeleteFile(const FilePath& path, bool recursive) { | 686 void DeleteFile(const FilePath& path, bool recursive) { |
685 file_util::Delete(path, recursive); | 687 file_util::Delete(path, recursive); |
686 } | 688 } |
687 | 689 |
688 } // namespace extension_file_util | 690 } // namespace extension_file_util |
OLD | NEW |