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

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

Issue 323763002: Remove InstallTracker's extension installed, uninstalled observers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/shared_module_service.h" 5 #include "chrome/browser/extensions/shared_module_service.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/version.h" 9 #include "base/version.h"
10 #include "chrome/browser/extensions/extension_service.h" 10 #include "chrome/browser/extensions/extension_service.h"
11 #include "chrome/browser/extensions/install_tracker.h"
12 #include "chrome/browser/extensions/pending_extension_manager.h" 11 #include "chrome/browser/extensions/pending_extension_manager.h"
13 #include "chrome/common/extensions/extension_constants.h" 12 #include "chrome/common/extensions/extension_constants.h"
14 #include "extensions/browser/extension_registry.h" 13 #include "extensions/browser/extension_registry.h"
15 #include "extensions/browser/extension_system.h" 14 #include "extensions/browser/extension_system.h"
16 #include "extensions/common/extension.h" 15 #include "extensions/common/extension.h"
17 16
18 namespace extensions { 17 namespace extensions {
19 18
20 namespace { 19 namespace {
21 20
22 typedef std::vector<SharedModuleInfo::ImportInfo> ImportInfoVector; 21 typedef std::vector<SharedModuleInfo::ImportInfo> ImportInfoVector;
23 typedef std::list<SharedModuleInfo::ImportInfo> ImportInfoList; 22 typedef std::list<SharedModuleInfo::ImportInfo> ImportInfoList;
24 23
25 } // namespace 24 } // namespace
26 25
27 SharedModuleService::SharedModuleService(content::BrowserContext* context) 26 SharedModuleService::SharedModuleService(content::BrowserContext* context)
28 : context_(context), observing_(false) { 27 : extension_registry_observer_(this), browser_context_(context) {
29 InstallTracker::Get(context_)->AddObserver(this); 28 extension_registry_observer_.Add(ExtensionRegistry::Get(browser_context_));
30 } 29 }
31 30
32 SharedModuleService::~SharedModuleService() { 31 SharedModuleService::~SharedModuleService() {
33 if (observing_)
34 InstallTracker::Get(context_)->RemoveObserver(this);
35 } 32 }
36 33
37 SharedModuleService::ImportStatus SharedModuleService::CheckImports( 34 SharedModuleService::ImportStatus SharedModuleService::CheckImports(
38 const extensions::Extension* extension, 35 const Extension* extension,
39 ImportInfoList* missing_modules, 36 ImportInfoList* missing_modules,
40 ImportInfoList* outdated_modules) { 37 ImportInfoList* outdated_modules) {
41 DCHECK(extension); 38 DCHECK(extension);
42 DCHECK(missing_modules && missing_modules->empty()); 39 DCHECK(missing_modules && missing_modules->empty());
43 DCHECK(outdated_modules && outdated_modules->empty()); 40 DCHECK(outdated_modules && outdated_modules->empty());
44 41
45 ImportStatus status = IMPORT_STATUS_OK; 42 ImportStatus status = IMPORT_STATUS_OK;
46 43
47 ExtensionRegistry* registry = ExtensionRegistry::Get(context_); 44 ExtensionRegistry* registry = ExtensionRegistry::Get(browser_context_);
48 const ImportInfoVector& imports = SharedModuleInfo::GetImports(extension); 45 const ImportInfoVector& imports = SharedModuleInfo::GetImports(extension);
49 for (ImportInfoVector::const_iterator iter = imports.begin(); 46 for (ImportInfoVector::const_iterator iter = imports.begin();
50 iter != imports.end(); 47 iter != imports.end();
51 ++iter) { 48 ++iter) {
52 base::Version version_required(iter->minimum_version); 49 base::Version version_required(iter->minimum_version);
53 const Extension* imported_module = 50 const Extension* imported_module =
54 registry->GetExtensionById(iter->extension_id, 51 registry->GetExtensionById(iter->extension_id,
55 ExtensionRegistry::EVERYTHING); 52 ExtensionRegistry::EVERYTHING);
56 if (!imported_module) { 53 if (!imported_module) {
57 if (extension->from_webstore()) { 54 if (extension->from_webstore()) {
(...skipping 22 matching lines...) Expand all
80 } 77 }
81 78
82 SharedModuleService::ImportStatus SharedModuleService::SatisfyImports( 79 SharedModuleService::ImportStatus SharedModuleService::SatisfyImports(
83 const Extension* extension) { 80 const Extension* extension) {
84 ImportInfoList missing_modules; 81 ImportInfoList missing_modules;
85 ImportInfoList outdated_modules; 82 ImportInfoList outdated_modules;
86 ImportStatus status = 83 ImportStatus status =
87 CheckImports(extension, &missing_modules, &outdated_modules); 84 CheckImports(extension, &missing_modules, &outdated_modules);
88 85
89 ExtensionService* service = 86 ExtensionService* service =
90 ExtensionSystem::Get(context_)->extension_service(); 87 ExtensionSystem::Get(browser_context_)->extension_service();
91 88
92 PendingExtensionManager* pending_extension_manager = 89 PendingExtensionManager* pending_extension_manager =
93 service->pending_extension_manager(); 90 service->pending_extension_manager();
94 DCHECK(pending_extension_manager); 91 DCHECK(pending_extension_manager);
95 92
96 if (status == IMPORT_STATUS_UNSATISFIED) { 93 if (status == IMPORT_STATUS_UNSATISFIED) {
97 for (ImportInfoList::const_iterator iter = missing_modules.begin(); 94 for (ImportInfoList::const_iterator iter = missing_modules.begin();
98 iter != missing_modules.end(); 95 iter != missing_modules.end();
99 ++iter) { 96 ++iter) {
100 pending_extension_manager->AddFromExtensionImport( 97 pending_extension_manager->AddFromExtensionImport(
101 iter->extension_id, 98 iter->extension_id,
102 extension_urls::GetWebstoreUpdateUrl(), 99 extension_urls::GetWebstoreUpdateUrl(),
103 SharedModuleInfo::IsSharedModule); 100 SharedModuleInfo::IsSharedModule);
104 } 101 }
105 service->CheckForUpdatesSoon(); 102 service->CheckForUpdatesSoon();
106 } 103 }
107 return status; 104 return status;
108 } 105 }
109 106
110 scoped_ptr<const ExtensionSet> SharedModuleService::GetDependentExtensions( 107 scoped_ptr<const ExtensionSet> SharedModuleService::GetDependentExtensions(
111 const Extension* extension) { 108 const Extension* extension) {
112 scoped_ptr<ExtensionSet> dependents(new ExtensionSet()); 109 scoped_ptr<ExtensionSet> dependents(new ExtensionSet());
113 110
114 if (SharedModuleInfo::IsSharedModule(extension)) { 111 if (SharedModuleInfo::IsSharedModule(extension)) {
115 ExtensionRegistry* registry = ExtensionRegistry::Get(context_); 112 ExtensionRegistry* registry = ExtensionRegistry::Get(browser_context_);
116 ExtensionService* service = 113 ExtensionService* service =
117 ExtensionSystem::Get(context_)->extension_service(); 114 ExtensionSystem::Get(browser_context_)->extension_service();
118 115
119 ExtensionSet set_to_check; 116 ExtensionSet set_to_check;
120 set_to_check.InsertAll(registry->enabled_extensions()); 117 set_to_check.InsertAll(registry->enabled_extensions());
121 set_to_check.InsertAll(registry->disabled_extensions()); 118 set_to_check.InsertAll(registry->disabled_extensions());
122 set_to_check.InsertAll(*service->delayed_installs()); 119 set_to_check.InsertAll(*service->delayed_installs());
123 120
124 for (ExtensionSet::const_iterator iter = set_to_check.begin(); 121 for (ExtensionSet::const_iterator iter = set_to_check.begin();
125 iter != set_to_check.end(); 122 iter != set_to_check.end();
126 ++iter) { 123 ++iter) {
127 if (SharedModuleInfo::ImportsExtensionById(iter->get(), 124 if (SharedModuleInfo::ImportsExtensionById(iter->get(),
128 extension->id())) { 125 extension->id())) {
129 dependents->Insert(*iter); 126 dependents->Insert(*iter);
130 } 127 }
131 } 128 }
132 } 129 }
133 return dependents.PassAs<const ExtensionSet>(); 130 return dependents.PassAs<const ExtensionSet>();
134 } 131 }
135 132
136 void SharedModuleService::PruneSharedModulesOnUninstall( 133 void SharedModuleService::OnExtensionUninstalled(
134 content::BrowserContext* browser_context,
137 const Extension* extension) { 135 const Extension* extension) {
136 // Uninstalls shared modules that were only referenced by |extension|.
138 if (!SharedModuleInfo::ImportsModules(extension)) 137 if (!SharedModuleInfo::ImportsModules(extension))
139 return; 138 return;
140 139
141 ExtensionRegistry* registry = ExtensionRegistry::Get(context_); 140 ExtensionRegistry* registry = ExtensionRegistry::Get(browser_context_);
142 ExtensionService* service = 141 ExtensionService* service =
143 ExtensionSystem::Get(context_)->extension_service(); 142 ExtensionSystem::Get(browser_context_)->extension_service();
144 143
145 const ImportInfoVector& imports = SharedModuleInfo::GetImports(extension); 144 const ImportInfoVector& imports = SharedModuleInfo::GetImports(extension);
146 for (ImportInfoVector::const_iterator iter = imports.begin(); 145 for (ImportInfoVector::const_iterator iter = imports.begin();
147 iter != imports.end(); 146 iter != imports.end();
148 ++iter) { 147 ++iter) {
149 const Extension* imported_module = 148 const Extension* imported_module =
150 registry->GetExtensionById(iter->extension_id, 149 registry->GetExtensionById(iter->extension_id,
151 ExtensionRegistry::EVERYTHING); 150 ExtensionRegistry::EVERYTHING);
152 if (imported_module && imported_module->from_webstore()) { 151 if (imported_module && imported_module->from_webstore()) {
153 scoped_ptr<const ExtensionSet> dependents = 152 scoped_ptr<const ExtensionSet> dependents =
154 GetDependentExtensions(imported_module); 153 GetDependentExtensions(imported_module);
155 if (dependents->is_empty()) { 154 if (dependents->is_empty()) {
156 service->UninstallExtension(iter->extension_id, 155 service->UninstallExtension(iter->extension_id,
157 true, // External uninstall. 156 true, // External uninstall.
158 NULL); // Ignore error. 157 NULL); // Ignore error.
159 } 158 }
160 } 159 }
161 } 160 }
162 } 161 }
163 162
164 void SharedModuleService::OnExtensionUninstalled(const Extension* extension) {
165 PruneSharedModulesOnUninstall(extension);
166 }
167
168 void SharedModuleService::OnShutdown() {
169 InstallTracker::Get(context_)->RemoveObserver(this);
not at google - send to devlin 2014/06/10 18:12:41 so.... it does seem like this is safe to remove, b
limasdf 2014/06/11 00:26:00 yep, please let me know if there's problem about t
170 observing_ = false;
171 }
172
173 } // namespace extensions 163 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698