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

Side by Side Diff: chrome/browser/extensions/extension_service.cc

Issue 10689097: Enforce the 'requirements' field in manifests. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 4 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
OLDNEW
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/extension_service.h" 5 #include "chrome/browser/extensions/extension_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 2082 matching lines...) Expand 10 before | Expand all | Expand 10 after
2093 if (!extension->is_theme() && extension->location() != Extension::COMPONENT) 2093 if (!extension->is_theme() && extension->location() != Extension::COMPONENT)
2094 extension_ids.insert(extension->id()); 2094 extension_ids.insert(extension->id());
2095 } 2095 }
2096 2096
2097 child_process_logging::SetActiveExtensions(extension_ids); 2097 child_process_logging::SetActiveExtensions(extension_ids);
2098 } 2098 }
2099 2099
2100 void ExtensionService::OnExtensionInstalled( 2100 void ExtensionService::OnExtensionInstalled(
2101 const Extension* extension, 2101 const Extension* extension,
2102 bool from_webstore, 2102 bool from_webstore,
2103 const StringOrdinal& page_ordinal) { 2103 const StringOrdinal& page_ordinal,
2104 const std::vector<std::string>& requirement_errors) {
2104 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2105 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2105 2106
2106 // Ensure extension is deleted unless we transfer ownership. 2107 // Ensure extension is deleted unless we transfer ownership.
2107 scoped_refptr<const Extension> scoped_extension(extension); 2108 scoped_refptr<const Extension> scoped_extension(extension);
2108 const std::string& id = extension->id(); 2109 const std::string& id = extension->id();
2109 // Extensions installed by policy can't be disabled. So even if a previous 2110 // Extensions installed by policy can't be disabled. So even if a previous
2110 // installation disabled the extension, make sure it is now enabled. 2111 // installation disabled the extension, make sure it is now enabled.
2111 bool initial_enable = 2112 bool initial_enable =
2112 !extension_prefs_->IsExtensionDisabled(id) || 2113 !extension_prefs_->IsExtensionDisabled(id) ||
2113 system_->management_policy()->MustRemainEnabled(extension, NULL); 2114 system_->management_policy()->MustRemainEnabled(extension, NULL);
(...skipping 26 matching lines...) Expand all
2140 pending_extension_manager()->Remove(id); 2141 pending_extension_manager()->Remove(id);
2141 } else { 2142 } else {
2142 // We explicitly want to re-enable an uninstalled external 2143 // We explicitly want to re-enable an uninstalled external
2143 // extension; if we're here, that means the user is manually 2144 // extension; if we're here, that means the user is manually
2144 // installing the extension. 2145 // installing the extension.
2145 if (IsExternalExtensionUninstalled(id)) { 2146 if (IsExternalExtensionUninstalled(id)) {
2146 initial_enable = true; 2147 initial_enable = true;
2147 } 2148 }
2148 } 2149 }
2149 2150
2151 // Unsupported requirements overrides the management policy.
2152 if (!requirement_errors.empty()) {
2153 initial_enable = false;
2154 // If the extension was disabled because of unsupported requirements but
2155 // now supports all requirements after an update, enable it and clear
2156 // the errors. The case where the extension has different requirement errors
2157 // will be handled later.
2158 } else if (extension_prefs_->HasUnsupportedRequirements(id)) {
2159 initial_enable = true;
2160 extension_prefs_->ClearUnsupportedRequirements(id);
2161 }
2162
2150 // Do not record the install histograms for upgrades. 2163 // Do not record the install histograms for upgrades.
2151 if (!GetExtensionByIdInternal(extension->id(), true, true, false)) { 2164 if (!GetExtensionByIdInternal(extension->id(), true, true, false)) {
2152 UMA_HISTOGRAM_ENUMERATION("Extensions.InstallType", 2165 UMA_HISTOGRAM_ENUMERATION("Extensions.InstallType",
2153 extension->GetType(), 100); 2166 extension->GetType(), 100);
2154 RecordPermissionMessagesHistogram( 2167 RecordPermissionMessagesHistogram(
2155 extension, "Extensions.Permissions_Install"); 2168 extension, "Extensions.Permissions_Install");
2156 } 2169 }
2157 2170
2158 // Certain extension locations are specific enough that we can 2171 // Certain extension locations are specific enough that we can
2159 // auto-acknowledge any extension that came from one of them. 2172 // auto-acknowledge any extension that came from one of them.
2160 if (extension->location() == Extension::EXTERNAL_POLICY_DOWNLOAD) { 2173 if (extension->location() == Extension::EXTERNAL_POLICY_DOWNLOAD) {
2161 AcknowledgeExternalExtension(extension->id()); 2174 AcknowledgeExternalExtension(extension->id());
2162 } 2175 }
2163 2176
2164 extension_prefs_->OnExtensionInstalled( 2177 extension_prefs_->OnExtensionInstalled(
2165 extension, 2178 extension,
2166 initial_enable ? Extension::ENABLED : Extension::DISABLED, 2179 initial_enable ? Extension::ENABLED : Extension::DISABLED,
2167 from_webstore, 2180 from_webstore,
2168 page_ordinal); 2181 page_ordinal);
2169 2182
2183 if (!requirement_errors.empty()) {
2184 extension_prefs_->SetDisableReason(
2185 id, Extension::DISABLE_UNSUPPORTED_REQUIREMENT);
2186 extension_prefs_->SetUnsupportedRequirements(id, requirement_errors);
2187 }
2188
2170 // Unpacked extensions default to allowing file access, but if that has been 2189 // Unpacked extensions default to allowing file access, but if that has been
2171 // overridden, don't reset the value. 2190 // overridden, don't reset the value.
2172 if (Extension::ShouldAlwaysAllowFileAccess(extension->location()) && 2191 if (Extension::ShouldAlwaysAllowFileAccess(extension->location()) &&
2173 !extension_prefs_->HasAllowFileAccessSetting(id)) { 2192 !extension_prefs_->HasAllowFileAccessSetting(id)) {
2174 extension_prefs_->SetAllowFileAccess(id, true); 2193 extension_prefs_->SetAllowFileAccess(id, true);
2175 } 2194 }
2176 2195
2177 content::NotificationService::current()->Notify( 2196 content::NotificationService::current()->Notify(
2178 chrome::NOTIFICATION_EXTENSION_INSTALLED, 2197 chrome::NOTIFICATION_EXTENSION_INSTALLED,
2179 content::Source<Profile>(profile_), 2198 content::Source<Profile>(profile_),
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
2548 2567
2549 ExtensionService::NaClModuleInfoList::iterator 2568 ExtensionService::NaClModuleInfoList::iterator
2550 ExtensionService::FindNaClModule(const GURL& url) { 2569 ExtensionService::FindNaClModule(const GURL& url) {
2551 for (NaClModuleInfoList::iterator iter = nacl_module_list_.begin(); 2570 for (NaClModuleInfoList::iterator iter = nacl_module_list_.begin();
2552 iter != nacl_module_list_.end(); ++iter) { 2571 iter != nacl_module_list_.end(); ++iter) {
2553 if (iter->url == url) 2572 if (iter->url == url)
2554 return iter; 2573 return iter;
2555 } 2574 }
2556 return nacl_module_list_.end(); 2575 return nacl_module_list_.end();
2557 } 2576 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698