| 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/extensions/pending_extension_manager.h" | 5 #include "chrome/browser/extensions/pending_extension_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/version.h" | 10 #include "base/version.h" |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 | 106 |
| 107 // Make sure we don't ever try to install the CWS app, because even though | 107 // Make sure we don't ever try to install the CWS app, because even though |
| 108 // it is listed as a syncable app (because its values need to be synced) it | 108 // it is listed as a syncable app (because its values need to be synced) it |
| 109 // should already be installed on every instance. | 109 // should already be installed on every instance. |
| 110 if (id == extension_misc::kWebStoreAppId) { | 110 if (id == extension_misc::kWebStoreAppId) { |
| 111 NOTREACHED(); | 111 NOTREACHED(); |
| 112 return false; | 112 return false; |
| 113 } | 113 } |
| 114 | 114 |
| 115 const bool kIsFromSync = true; | 115 const bool kIsFromSync = true; |
| 116 const Extension::Location kSyncLocation = Extension::INTERNAL; | 116 const Manifest::Location kSyncLocation = Manifest::INTERNAL; |
| 117 | 117 |
| 118 return AddExtensionImpl(id, update_url, Version(), should_allow_install, | 118 return AddExtensionImpl(id, update_url, Version(), should_allow_install, |
| 119 kIsFromSync, install_silently, kSyncLocation); | 119 kIsFromSync, install_silently, kSyncLocation); |
| 120 } | 120 } |
| 121 | 121 |
| 122 bool PendingExtensionManager::AddFromExternalUpdateUrl( | 122 bool PendingExtensionManager::AddFromExternalUpdateUrl( |
| 123 const std::string& id, | 123 const std::string& id, |
| 124 const GURL& update_url, | 124 const GURL& update_url, |
| 125 Extension::Location location) { | 125 Manifest::Location location) { |
| 126 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 126 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 127 | 127 |
| 128 const bool kIsFromSync = false; | 128 const bool kIsFromSync = false; |
| 129 const bool kInstallSilently = true; | 129 const bool kInstallSilently = true; |
| 130 | 130 |
| 131 const Extension* extension = service_.GetInstalledExtension(id); | 131 const Extension* extension = service_.GetInstalledExtension(id); |
| 132 if (extension && | 132 if (extension && |
| 133 location == Extension::GetHigherPriorityLocation(location, | 133 location == Manifest::GetHigherPriorityLocation(location, |
| 134 extension->location())) { | 134 extension->location())) { |
| 135 // If the new location has higher priority than the location of an existing | 135 // If the new location has higher priority than the location of an existing |
| 136 // extension, let the update process overwrite the existing extension. | 136 // extension, let the update process overwrite the existing extension. |
| 137 } else { | 137 } else { |
| 138 if (service_.IsExternalExtensionUninstalled(id)) | 138 if (service_.IsExternalExtensionUninstalled(id)) |
| 139 return false; | 139 return false; |
| 140 | 140 |
| 141 if (extension) { | 141 if (extension) { |
| 142 LOG(DFATAL) << "Trying to add extension " << id | 142 LOG(DFATAL) << "Trying to add extension " << id |
| 143 << " by external update, but it is already installed."; | 143 << " by external update, but it is already installed."; |
| 144 return false; | 144 return false; |
| 145 } | 145 } |
| 146 } | 146 } |
| 147 | 147 |
| 148 return AddExtensionImpl(id, update_url, Version(), &AlwaysInstall, | 148 return AddExtensionImpl(id, update_url, Version(), &AlwaysInstall, |
| 149 kIsFromSync, kInstallSilently, | 149 kIsFromSync, kInstallSilently, |
| 150 location); | 150 location); |
| 151 } | 151 } |
| 152 | 152 |
| 153 | 153 |
| 154 bool PendingExtensionManager::AddFromExternalFile( | 154 bool PendingExtensionManager::AddFromExternalFile( |
| 155 const std::string& id, | 155 const std::string& id, |
| 156 Extension::Location install_source, | 156 Manifest::Location install_source, |
| 157 const Version& version) { | 157 const Version& version) { |
| 158 // TODO(skerner): AddFromSync() checks to see if the extension is | 158 // TODO(skerner): AddFromSync() checks to see if the extension is |
| 159 // installed, but this method assumes that the caller already | 159 // installed, but this method assumes that the caller already |
| 160 // made sure it is not installed. Make all AddFrom*() methods | 160 // made sure it is not installed. Make all AddFrom*() methods |
| 161 // consistent. | 161 // consistent. |
| 162 GURL kUpdateUrl = GURL(); | 162 GURL kUpdateUrl = GURL(); |
| 163 bool kIsFromSync = false; | 163 bool kIsFromSync = false; |
| 164 bool kInstallSilently = true; | 164 bool kInstallSilently = true; |
| 165 | 165 |
| 166 return AddExtensionImpl( | 166 return AddExtensionImpl( |
| 167 id, | 167 id, |
| 168 kUpdateUrl, | 168 kUpdateUrl, |
| 169 version, | 169 version, |
| 170 &AlwaysInstall, | 170 &AlwaysInstall, |
| 171 kIsFromSync, | 171 kIsFromSync, |
| 172 kInstallSilently, | 172 kInstallSilently, |
| 173 install_source); | 173 install_source); |
| 174 } | 174 } |
| 175 | 175 |
| 176 void PendingExtensionManager::GetPendingIdsForUpdateCheck( | 176 void PendingExtensionManager::GetPendingIdsForUpdateCheck( |
| 177 std::list<std::string>* out_ids_for_update_check) const { | 177 std::list<std::string>* out_ids_for_update_check) const { |
| 178 PendingExtensionList::const_iterator iter; | 178 PendingExtensionList::const_iterator iter; |
| 179 for (iter = pending_extension_list_.begin(); | 179 for (iter = pending_extension_list_.begin(); |
| 180 iter != pending_extension_list_.end(); | 180 iter != pending_extension_list_.end(); |
| 181 ++iter) { | 181 ++iter) { |
| 182 Extension::Location install_source = iter->install_source(); | 182 Manifest::Location install_source = iter->install_source(); |
| 183 | 183 |
| 184 // Some install sources read a CRX from the filesystem. They can | 184 // Some install sources read a CRX from the filesystem. They can |
| 185 // not be fetched from an update URL, so don't include them in the | 185 // not be fetched from an update URL, so don't include them in the |
| 186 // set of ids. | 186 // set of ids. |
| 187 if (install_source == Extension::EXTERNAL_PREF || | 187 if (install_source == Manifest::EXTERNAL_PREF || |
| 188 install_source == Extension::EXTERNAL_REGISTRY) | 188 install_source == Manifest::EXTERNAL_REGISTRY) |
| 189 continue; | 189 continue; |
| 190 | 190 |
| 191 out_ids_for_update_check->push_back(iter->id()); | 191 out_ids_for_update_check->push_back(iter->id()); |
| 192 } | 192 } |
| 193 } | 193 } |
| 194 | 194 |
| 195 bool PendingExtensionManager::AddExtensionImpl( | 195 bool PendingExtensionManager::AddExtensionImpl( |
| 196 const std::string& id, | 196 const std::string& id, |
| 197 const GURL& update_url, | 197 const GURL& update_url, |
| 198 const Version& version, | 198 const Version& version, |
| 199 PendingExtensionInfo::ShouldAllowInstallPredicate should_allow_install, | 199 PendingExtensionInfo::ShouldAllowInstallPredicate should_allow_install, |
| 200 bool is_from_sync, | 200 bool is_from_sync, |
| 201 bool install_silently, | 201 bool install_silently, |
| 202 Extension::Location install_source) { | 202 Manifest::Location install_source) { |
| 203 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 203 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 204 | 204 |
| 205 PendingExtensionInfo info(id, | 205 PendingExtensionInfo info(id, |
| 206 update_url, | 206 update_url, |
| 207 version, | 207 version, |
| 208 should_allow_install, | 208 should_allow_install, |
| 209 is_from_sync, | 209 is_from_sync, |
| 210 install_silently, | 210 install_silently, |
| 211 install_source); | 211 install_source); |
| 212 | 212 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 | 244 |
| 245 return true; | 245 return true; |
| 246 } | 246 } |
| 247 | 247 |
| 248 void PendingExtensionManager::AddForTesting( | 248 void PendingExtensionManager::AddForTesting( |
| 249 const PendingExtensionInfo& pending_extension_info) { | 249 const PendingExtensionInfo& pending_extension_info) { |
| 250 pending_extension_list_.push_back(pending_extension_info); | 250 pending_extension_list_.push_back(pending_extension_info); |
| 251 } | 251 } |
| 252 | 252 |
| 253 } // namespace extensions | 253 } // namespace extensions |
| OLD | NEW |