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

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

Issue 15984016: Call scoped_refptr<T>::get() rather than relying on implicit "operator T*" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 7 years, 6 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/browser/extensions/extension_service.h" 5 #include "chrome/browser/extensions/extension_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <iterator> 8 #include <iterator>
9 #include <set> 9 #include <set>
10 10
(...skipping 774 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 if (!GetFileTaskRunner()->PostTask( 785 if (!GetFileTaskRunner()->PostTask(
786 FROM_HERE, 786 FROM_HERE,
787 base::Bind( 787 base::Bind(
788 &extension_file_util::UninstallExtension, 788 &extension_file_util::UninstallExtension,
789 install_directory_, 789 install_directory_,
790 extension_id))) 790 extension_id)))
791 NOTREACHED(); 791 NOTREACHED();
792 } 792 }
793 793
794 GURL launch_web_url_origin( 794 GURL launch_web_url_origin(
795 extensions::AppLaunchInfo::GetLaunchWebURL(extension).GetOrigin()); 795 extensions::AppLaunchInfo::GetLaunchWebURL(extension.get()).GetOrigin());
796 bool is_storage_isolated = 796 bool is_storage_isolated =
797 extensions::AppIsolationInfo::HasIsolatedStorage(extension.get()); 797 extensions::AppIsolationInfo::HasIsolatedStorage(extension.get());
798 798
799 if (is_storage_isolated) { 799 if (is_storage_isolated) {
800 BrowserContext::AsyncObliterateStoragePartition( 800 BrowserContext::AsyncObliterateStoragePartition(
801 profile_, 801 profile_,
802 GetSiteForExtensionId(extension_id), 802 GetSiteForExtensionId(extension_id),
803 base::Bind(&ExtensionService::OnNeedsToGarbageCollectIsolatedStorage, 803 base::Bind(&ExtensionService::OnNeedsToGarbageCollectIsolatedStorage,
804 AsWeakPtr())); 804 AsWeakPtr()));
805 } else { 805 } else {
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
1149 extensions::ExtensionUpdater* ExtensionService::updater() { 1149 extensions::ExtensionUpdater* ExtensionService::updater() {
1150 return updater_.get(); 1150 return updater_.get();
1151 } 1151 }
1152 1152
1153 void ExtensionService::CheckManagementPolicy() { 1153 void ExtensionService::CheckManagementPolicy() {
1154 std::vector<std::string> to_be_removed; 1154 std::vector<std::string> to_be_removed;
1155 1155
1156 // Loop through extensions list, unload installed extensions. 1156 // Loop through extensions list, unload installed extensions.
1157 for (ExtensionSet::const_iterator iter = extensions_.begin(); 1157 for (ExtensionSet::const_iterator iter = extensions_.begin();
1158 iter != extensions_.end(); ++iter) { 1158 iter != extensions_.end(); ++iter) {
1159 const Extension* extension = (*iter); 1159 const Extension* extension = (iter->get());
1160 if (!system_->management_policy()->UserMayLoad(extension, NULL)) 1160 if (!system_->management_policy()->UserMayLoad(extension, NULL))
1161 to_be_removed.push_back(extension->id()); 1161 to_be_removed.push_back(extension->id());
1162 } 1162 }
1163 1163
1164 // UnloadExtension will change the extensions_ list. So, we should 1164 // UnloadExtension will change the extensions_ list. So, we should
1165 // call it outside the iterator loop. 1165 // call it outside the iterator loop.
1166 for (size_t i = 0; i < to_be_removed.size(); ++i) 1166 for (size_t i = 0; i < to_be_removed.size(); ++i)
1167 UnloadExtension(to_be_removed[i], extension_misc::UNLOAD_REASON_DISABLE); 1167 UnloadExtension(to_be_removed[i], extension_misc::UNLOAD_REASON_DISABLE);
1168 } 1168 }
1169 1169
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after
1687 it != blacklisted_extensions_.end(); ++it) { 1687 it != blacklisted_extensions_.end(); ++it) {
1688 std::string id = (*it)->id(); 1688 std::string id = (*it)->id();
1689 if (!extension_prefs_->IsBlacklistedExtensionAcknowledged(id)) { 1689 if (!extension_prefs_->IsBlacklistedExtensionAcknowledged(id)) {
1690 extension_error_ui->AddBlacklistedExtension(id); 1690 extension_error_ui->AddBlacklistedExtension(id);
1691 needs_alert = true; 1691 needs_alert = true;
1692 } 1692 }
1693 } 1693 }
1694 1694
1695 for (ExtensionSet::const_iterator iter = extensions_.begin(); 1695 for (ExtensionSet::const_iterator iter = extensions_.begin();
1696 iter != extensions_.end(); ++iter) { 1696 iter != extensions_.end(); ++iter) {
1697 const Extension* e = *iter; 1697 const Extension* e = iter->get();
1698 1698
1699 // Extensions disabled by policy. Note: this no longer includes blacklisted 1699 // Extensions disabled by policy. Note: this no longer includes blacklisted
1700 // extensions, though we still show the same UI. 1700 // extensions, though we still show the same UI.
1701 if (!system_->management_policy()->UserMayLoad(e, NULL)) { 1701 if (!system_->management_policy()->UserMayLoad(e, NULL)) {
1702 if (!extension_prefs_->IsBlacklistedExtensionAcknowledged(e->id())) { 1702 if (!extension_prefs_->IsBlacklistedExtensionAcknowledged(e->id())) {
1703 extension_error_ui->AddBlacklistedExtension(e->id()); 1703 extension_error_ui->AddBlacklistedExtension(e->id());
1704 needs_alert = true; 1704 needs_alert = true;
1705 } 1705 }
1706 } 1706 }
1707 } 1707 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1747 extension_error_ui_->Close(); 1747 extension_error_ui_->Close();
1748 } 1748 }
1749 1749
1750 void ExtensionService::UpdateExternalExtensionAlert() { 1750 void ExtensionService::UpdateExternalExtensionAlert() {
1751 if (!FeatureSwitch::prompt_for_external_extensions()->IsEnabled()) 1751 if (!FeatureSwitch::prompt_for_external_extensions()->IsEnabled())
1752 return; 1752 return;
1753 1753
1754 const Extension* extension = NULL; 1754 const Extension* extension = NULL;
1755 for (ExtensionSet::const_iterator iter = disabled_extensions_.begin(); 1755 for (ExtensionSet::const_iterator iter = disabled_extensions_.begin();
1756 iter != disabled_extensions_.end(); ++iter) { 1756 iter != disabled_extensions_.end(); ++iter) {
1757 const Extension* e = *iter; 1757 const Extension* e = iter->get();
1758 if (IsUnacknowledgedExternalExtension(e)) { 1758 if (IsUnacknowledgedExternalExtension(e)) {
1759 extension = e; 1759 extension = e;
1760 break; 1760 break;
1761 } 1761 }
1762 } 1762 }
1763 1763
1764 if (extension) { 1764 if (extension) {
1765 if (!extensions::HasExternalInstallError(this)) { 1765 if (!extensions::HasExternalInstallError(this)) {
1766 if (extension_prefs_->IncrementAcknowledgePromptCount(extension->id()) > 1766 if (extension_prefs_->IncrementAcknowledgePromptCount(extension->id()) >
1767 kMaxExtensionAcknowledgePromptCount) { 1767 kMaxExtensionAcknowledgePromptCount) {
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
2111 // Add all the recognized permissions if the granted permissions list 2111 // Add all the recognized permissions if the granted permissions list
2112 // hasn't been initialized yet. 2112 // hasn't been initialized yet.
2113 scoped_refptr<PermissionSet> granted_permissions = 2113 scoped_refptr<PermissionSet> granted_permissions =
2114 extension_prefs_->GetGrantedPermissions(extension->id()); 2114 extension_prefs_->GetGrantedPermissions(extension->id());
2115 CHECK(granted_permissions.get()); 2115 CHECK(granted_permissions.get());
2116 2116
2117 // Here, we check if an extension's privileges have increased in a manner 2117 // Here, we check if an extension's privileges have increased in a manner
2118 // that requires the user's approval. This could occur because the browser 2118 // that requires the user's approval. This could occur because the browser
2119 // upgraded and recognized additional privileges, or an extension upgrades 2119 // upgraded and recognized additional privileges, or an extension upgrades
2120 // to a version that requires additional privileges. 2120 // to a version that requires additional privileges.
2121 is_privilege_increase = 2121 is_privilege_increase = granted_permissions->HasLessPrivilegesThan(
2122 granted_permissions->HasLessPrivilegesThan( 2122 extension->GetActivePermissions().get());
2123 extension->GetActivePermissions());
2124 } 2123 }
2125 2124
2126 if (is_extension_upgrade) { 2125 if (is_extension_upgrade) {
2127 // If the extension was already disabled, suppress any alerts for becoming 2126 // If the extension was already disabled, suppress any alerts for becoming
2128 // disabled on permissions increase. 2127 // disabled on permissions increase.
2129 bool previously_disabled = 2128 bool previously_disabled =
2130 extension_prefs_->IsExtensionDisabled(extension->id()); 2129 extension_prefs_->IsExtensionDisabled(extension->id());
2131 // Legacy disabled extensions do not have a disable reason. Infer that if 2130 // Legacy disabled extensions do not have a disable reason. Infer that if
2132 // there was no permission increase, it was likely disabled by the user. 2131 // there was no permission increase, it was likely disabled by the user.
2133 if (previously_disabled && disable_reasons == Extension::DISABLE_NONE && 2132 if (previously_disabled && disable_reasons == Extension::DISABLE_NONE &&
(...skipping 27 matching lines...) Expand all
2161 extension_prefs_->AddDisableReason( 2160 extension_prefs_->AddDisableReason(
2162 extension->id(), 2161 extension->id(),
2163 static_cast<Extension::DisableReason>(disable_reasons)); 2162 static_cast<Extension::DisableReason>(disable_reasons));
2164 } 2163 }
2165 } 2164 }
2166 2165
2167 void ExtensionService::UpdateActiveExtensionsInCrashReporter() { 2166 void ExtensionService::UpdateActiveExtensionsInCrashReporter() {
2168 std::set<std::string> extension_ids; 2167 std::set<std::string> extension_ids;
2169 for (ExtensionSet::const_iterator iter = extensions_.begin(); 2168 for (ExtensionSet::const_iterator iter = extensions_.begin();
2170 iter != extensions_.end(); ++iter) { 2169 iter != extensions_.end(); ++iter) {
2171 const Extension* extension = *iter; 2170 const Extension* extension = iter->get();
2172 if (!extension->is_theme() && extension->location() != Manifest::COMPONENT) 2171 if (!extension->is_theme() && extension->location() != Manifest::COMPONENT)
2173 extension_ids.insert(extension->id()); 2172 extension_ids.insert(extension->id());
2174 } 2173 }
2175 2174
2176 child_process_logging::SetActiveExtensions(extension_ids); 2175 child_process_logging::SetActiveExtensions(extension_ids);
2177 } 2176 }
2178 2177
2179 void ExtensionService::OnExtensionInstalled( 2178 void ExtensionService::OnExtensionInstalled(
2180 const Extension* extension, 2179 const Extension* extension,
2181 const syncer::StringOrdinal& page_ordinal, 2180 const syncer::StringOrdinal& page_ordinal,
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
2576 // to renderers. 2575 // to renderers.
2577 process->Send(new ExtensionMsg_SetScriptingWhitelist( 2576 process->Send(new ExtensionMsg_SetScriptingWhitelist(
2578 *Extension::GetScriptingWhitelist())); 2577 *Extension::GetScriptingWhitelist()));
2579 2578
2580 // Loaded extensions. 2579 // Loaded extensions.
2581 std::vector<ExtensionMsg_Loaded_Params> loaded_extensions; 2580 std::vector<ExtensionMsg_Loaded_Params> loaded_extensions;
2582 for (ExtensionSet::const_iterator iter = extensions_.begin(); 2581 for (ExtensionSet::const_iterator iter = extensions_.begin();
2583 iter != extensions_.end(); ++iter) { 2582 iter != extensions_.end(); ++iter) {
2584 // Renderers don't need to know about themes. 2583 // Renderers don't need to know about themes.
2585 if (!(*iter)->is_theme()) 2584 if (!(*iter)->is_theme())
2586 loaded_extensions.push_back(ExtensionMsg_Loaded_Params(*iter)); 2585 loaded_extensions.push_back(ExtensionMsg_Loaded_Params(iter->get()));
2587 } 2586 }
2588 process->Send(new ExtensionMsg_Loaded(loaded_extensions)); 2587 process->Send(new ExtensionMsg_Loaded(loaded_extensions));
2589 break; 2588 break;
2590 } 2589 }
2591 case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: { 2590 case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: {
2592 content::RenderProcessHost* process = 2591 content::RenderProcessHost* process =
2593 content::Source<content::RenderProcessHost>(source).ptr(); 2592 content::Source<content::RenderProcessHost>(source).ptr();
2594 Profile* host_profile = 2593 Profile* host_profile =
2595 Profile::FromBrowserContext(process->GetBrowserContext()); 2594 Profile::FromBrowserContext(process->GetBrowserContext());
2596 if (!profile_->IsSameProfile(host_profile->GetOriginalProfile())) 2595 if (!profile_->IsSameProfile(host_profile->GetOriginalProfile()))
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
2783 // Delay installation if the extension is not idle. 2782 // Delay installation if the extension is not idle.
2784 return !IsExtensionIdle(extension_id); 2783 return !IsExtensionIdle(extension_id);
2785 } 2784 }
2786 } 2785 }
2787 2786
2788 void ExtensionService::GarbageCollectIsolatedStorage() { 2787 void ExtensionService::GarbageCollectIsolatedStorage() {
2789 scoped_ptr<base::hash_set<base::FilePath> > active_paths( 2788 scoped_ptr<base::hash_set<base::FilePath> > active_paths(
2790 new base::hash_set<base::FilePath>()); 2789 new base::hash_set<base::FilePath>());
2791 for (ExtensionSet::const_iterator it = extensions_.begin(); 2790 for (ExtensionSet::const_iterator it = extensions_.begin();
2792 it != extensions_.end(); ++it) { 2791 it != extensions_.end(); ++it) {
2793 if (extensions::AppIsolationInfo::HasIsolatedStorage(*it)) { 2792 if (extensions::AppIsolationInfo::HasIsolatedStorage(it->get())) {
2794 active_paths->insert( 2793 active_paths->insert(BrowserContext::GetStoragePartitionForSite(
2795 BrowserContext::GetStoragePartitionForSite( 2794 profile_, GetSiteForExtensionId((*it)->id()))->GetPath());
2796 profile_,
2797 GetSiteForExtensionId((*it)->id()))->GetPath());
2798 } 2795 }
2799 } 2796 }
2800 2797
2801 DCHECK(!installs_delayed()); 2798 DCHECK(!installs_delayed());
2802 set_installs_delayed(true); 2799 set_installs_delayed(true);
2803 BrowserContext::GarbageCollectStoragePartitions( 2800 BrowserContext::GarbageCollectStoragePartitions(
2804 profile_, active_paths.Pass(), 2801 profile_, active_paths.Pass(),
2805 base::Bind(&ExtensionService::OnGarbageCollectIsolatedStorageFinished, 2802 base::Bind(&ExtensionService::OnGarbageCollectIsolatedStorageFinished,
2806 AsWeakPtr())); 2803 AsWeakPtr()));
2807 } 2804 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
2879 } 2876 }
2880 2877
2881 void ExtensionService::AddUpdateObserver(extensions::UpdateObserver* observer) { 2878 void ExtensionService::AddUpdateObserver(extensions::UpdateObserver* observer) {
2882 update_observers_.AddObserver(observer); 2879 update_observers_.AddObserver(observer);
2883 } 2880 }
2884 2881
2885 void ExtensionService::RemoveUpdateObserver( 2882 void ExtensionService::RemoveUpdateObserver(
2886 extensions::UpdateObserver* observer) { 2883 extensions::UpdateObserver* observer) {
2887 update_observers_.RemoveObserver(observer); 2884 update_observers_.RemoveObserver(observer);
2888 } 2885 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_protocols_unittest.cc ('k') | chrome/browser/extensions/extension_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698