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/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 2109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2120 if (!extension->is_theme() && extension->location() != Extension::COMPONENT) | 2120 if (!extension->is_theme() && extension->location() != Extension::COMPONENT) |
2121 extension_ids.insert(extension->id()); | 2121 extension_ids.insert(extension->id()); |
2122 } | 2122 } |
2123 | 2123 |
2124 child_process_logging::SetActiveExtensions(extension_ids); | 2124 child_process_logging::SetActiveExtensions(extension_ids); |
2125 } | 2125 } |
2126 | 2126 |
2127 void ExtensionService::OnExtensionInstalled( | 2127 void ExtensionService::OnExtensionInstalled( |
2128 const Extension* extension, | 2128 const Extension* extension, |
2129 bool from_webstore, | 2129 bool from_webstore, |
2130 const syncer::StringOrdinal& page_ordinal) { | 2130 const syncer::StringOrdinal& page_ordinal, |
| 2131 bool has_requirement_errors) { |
2131 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 2132 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
2132 | 2133 |
2133 // Ensure extension is deleted unless we transfer ownership. | 2134 // Ensure extension is deleted unless we transfer ownership. |
2134 scoped_refptr<const Extension> scoped_extension(extension); | 2135 scoped_refptr<const Extension> scoped_extension(extension); |
2135 const std::string& id = extension->id(); | 2136 const std::string& id = extension->id(); |
2136 // Extensions installed by policy can't be disabled. So even if a previous | 2137 // Extensions installed by policy can't be disabled. So even if a previous |
2137 // installation disabled the extension, make sure it is now enabled. | 2138 // installation disabled the extension, make sure it is now enabled. |
2138 bool initial_enable = | 2139 bool initial_enable = |
2139 !extension_prefs_->IsExtensionDisabled(id) || | 2140 !extension_prefs_->IsExtensionDisabled(id) || |
2140 system_->management_policy()->MustRemainEnabled(extension, NULL); | 2141 system_->management_policy()->MustRemainEnabled(extension, NULL); |
(...skipping 26 matching lines...) Expand all Loading... |
2167 pending_extension_manager()->Remove(id); | 2168 pending_extension_manager()->Remove(id); |
2168 } else { | 2169 } else { |
2169 // We explicitly want to re-enable an uninstalled external | 2170 // We explicitly want to re-enable an uninstalled external |
2170 // extension; if we're here, that means the user is manually | 2171 // extension; if we're here, that means the user is manually |
2171 // installing the extension. | 2172 // installing the extension. |
2172 if (IsExternalExtensionUninstalled(id)) { | 2173 if (IsExternalExtensionUninstalled(id)) { |
2173 initial_enable = true; | 2174 initial_enable = true; |
2174 } | 2175 } |
2175 } | 2176 } |
2176 | 2177 |
| 2178 // Unsupported requirements overrides the management policy. |
| 2179 if (has_requirement_errors) { |
| 2180 initial_enable = false; |
| 2181 extension_prefs_->AddDisableReason( |
| 2182 id, Extension::DISABLE_UNSUPPORTED_REQUIREMENT); |
| 2183 // If the extension was disabled because of unsupported requirements but |
| 2184 // now supports all requirements after an update and there are not other |
| 2185 // disable reasons, enable it. |
| 2186 } else if (extension_prefs_->GetDisableReasons(id) == |
| 2187 Extension::DISABLE_UNSUPPORTED_REQUIREMENT) { |
| 2188 initial_enable = true; |
| 2189 extension_prefs_->ClearDisableReasons(id); |
| 2190 } |
| 2191 |
2177 int include_mask = INCLUDE_ENABLED; | 2192 int include_mask = INCLUDE_ENABLED; |
2178 include_mask |= INCLUDE_DISABLED; | 2193 include_mask |= INCLUDE_DISABLED; |
2179 // Do not record the install histograms for upgrades. | 2194 // Do not record the install histograms for upgrades. |
2180 if (!GetExtensionByIdInternal(extension->id(), include_mask)) { | 2195 if (!GetExtensionByIdInternal(extension->id(), include_mask)) { |
2181 UMA_HISTOGRAM_ENUMERATION("Extensions.InstallType", | 2196 UMA_HISTOGRAM_ENUMERATION("Extensions.InstallType", |
2182 extension->GetType(), 100); | 2197 extension->GetType(), 100); |
2183 RecordPermissionMessagesHistogram( | 2198 RecordPermissionMessagesHistogram( |
2184 extension, "Extensions.Permissions_Install"); | 2199 extension, "Extensions.Permissions_Install"); |
2185 } | 2200 } |
2186 | 2201 |
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2624 extensions::ExtensionHost* extension_host) { | 2639 extensions::ExtensionHost* extension_host) { |
2625 if (!extension_host) | 2640 if (!extension_host) |
2626 return; | 2641 return; |
2627 | 2642 |
2628 #if !defined(OS_ANDROID) | 2643 #if !defined(OS_ANDROID) |
2629 extensions::LaunchPlatformApp(extension_host->profile(), | 2644 extensions::LaunchPlatformApp(extension_host->profile(), |
2630 extension_host->extension(), | 2645 extension_host->extension(), |
2631 NULL, FilePath()); | 2646 NULL, FilePath()); |
2632 #endif | 2647 #endif |
2633 } | 2648 } |
OLD | NEW |