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/installed_loader.h" | 5 #include "chrome/browser/extensions/installed_loader.h" |
6 | 6 |
7 #include "base/files/file_path.h" | 7 #include "base/files/file_path.h" |
8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 void InstalledLoader::LoadAllExtensions() { | 157 void InstalledLoader::LoadAllExtensions() { |
158 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 158 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
159 | 159 |
160 base::TimeTicks start_time = base::TimeTicks::Now(); | 160 base::TimeTicks start_time = base::TimeTicks::Now(); |
161 | 161 |
162 scoped_ptr<ExtensionPrefs::ExtensionsInfo> extensions_info( | 162 scoped_ptr<ExtensionPrefs::ExtensionsInfo> extensions_info( |
163 extension_prefs_->GetInstalledExtensionsInfo()); | 163 extension_prefs_->GetInstalledExtensionsInfo()); |
164 | 164 |
165 std::vector<int> reload_reason_counts(NUM_MANIFEST_RELOAD_REASONS, 0); | 165 std::vector<int> reload_reason_counts(NUM_MANIFEST_RELOAD_REASONS, 0); |
166 bool should_write_prefs = false; | 166 bool should_write_prefs = false; |
167 int update_count = 0; | |
168 | 167 |
169 for (size_t i = 0; i < extensions_info->size(); ++i) { | 168 for (size_t i = 0; i < extensions_info->size(); ++i) { |
170 ExtensionInfo* info = extensions_info->at(i).get(); | 169 ExtensionInfo* info = extensions_info->at(i).get(); |
171 | 170 |
172 // Skip extensions that were loaded from the command-line because we don't | 171 // Skip extensions that were loaded from the command-line because we don't |
173 // want those to persist across browser restart. | 172 // want those to persist across browser restart. |
174 if (info->extension_location == Manifest::COMMAND_LINE) | 173 if (info->extension_location == Manifest::COMMAND_LINE) |
175 continue; | 174 continue; |
176 | 175 |
177 scoped_ptr<ExtensionInfo> pending_update( | |
178 extension_prefs_->GetDelayedInstallInfo(info->extension_id)); | |
179 if (pending_update) { | |
180 if (!extension_prefs_->FinishDelayedInstallInfo(info->extension_id)) | |
181 NOTREACHED(); | |
182 | |
183 Version old_version; | |
184 if (info->extension_manifest) { | |
185 std::string version_str; | |
186 if (info->extension_manifest->GetString( | |
187 extension_manifest_keys::kVersion, &version_str)) { | |
188 old_version = Version(version_str); | |
189 } | |
190 } | |
191 base::MessageLoop::current()->PostTask(FROM_HERE, | |
192 base::Bind(&DispatchOnInstalledEvent, extension_service_->profile(), | |
193 info->extension_id, old_version, false)); | |
194 | |
195 info = extension_prefs_->GetInstalledExtensionInfo( | |
196 info->extension_id).release(); | |
197 extensions_info->at(i).reset(info); | |
198 | |
199 update_count++; | |
200 } | |
201 | |
202 ManifestReloadReason reload_reason = ShouldReloadExtensionManifest(*info); | 176 ManifestReloadReason reload_reason = ShouldReloadExtensionManifest(*info); |
203 ++reload_reason_counts[reload_reason]; | 177 ++reload_reason_counts[reload_reason]; |
204 UMA_HISTOGRAM_ENUMERATION("Extensions.ManifestReloadEnumValue", | 178 UMA_HISTOGRAM_ENUMERATION("Extensions.ManifestReloadEnumValue", |
205 reload_reason, 100); | 179 reload_reason, 100); |
206 | 180 |
207 if (reload_reason != NOT_NEEDED) { | 181 if (reload_reason != NOT_NEEDED) { |
208 // Reloading an extension reads files from disk. We do this on the | 182 // Reloading an extension reads files from disk. We do this on the |
209 // UI thread because reloads should be very rare, and the complexity | 183 // UI thread because reloads should be very rare, and the complexity |
210 // added by delaying the time when the extensions service knows about | 184 // added by delaying the time when the extensions service knows about |
211 // all extensions is significant. See crbug.com/37548 for details. | 185 // all extensions is significant. See crbug.com/37548 for details. |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 reload_reason_counts[NOT_NEEDED]); | 222 reload_reason_counts[NOT_NEEDED]); |
249 UMA_HISTOGRAM_COUNTS_100("Extensions.ManifestReloadUnpackedDir", | 223 UMA_HISTOGRAM_COUNTS_100("Extensions.ManifestReloadUnpackedDir", |
250 reload_reason_counts[UNPACKED_DIR]); | 224 reload_reason_counts[UNPACKED_DIR]); |
251 UMA_HISTOGRAM_COUNTS_100("Extensions.ManifestReloadNeedsRelocalization", | 225 UMA_HISTOGRAM_COUNTS_100("Extensions.ManifestReloadNeedsRelocalization", |
252 reload_reason_counts[NEEDS_RELOCALIZATION]); | 226 reload_reason_counts[NEEDS_RELOCALIZATION]); |
253 | 227 |
254 UMA_HISTOGRAM_COUNTS_100("Extensions.LoadAll", | 228 UMA_HISTOGRAM_COUNTS_100("Extensions.LoadAll", |
255 extension_service_->extensions()->size()); | 229 extension_service_->extensions()->size()); |
256 UMA_HISTOGRAM_COUNTS_100("Extensions.Disabled", | 230 UMA_HISTOGRAM_COUNTS_100("Extensions.Disabled", |
257 extension_service_->disabled_extensions()->size()); | 231 extension_service_->disabled_extensions()->size()); |
258 UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateOnLoad", | |
259 update_count); | |
260 | 232 |
261 UMA_HISTOGRAM_TIMES("Extensions.LoadAllTime", | 233 UMA_HISTOGRAM_TIMES("Extensions.LoadAllTime", |
262 base::TimeTicks::Now() - start_time); | 234 base::TimeTicks::Now() - start_time); |
263 | 235 |
264 int app_user_count = 0; | 236 int app_user_count = 0; |
265 int app_external_count = 0; | 237 int app_external_count = 0; |
266 int hosted_app_count = 0; | 238 int hosted_app_count = 0; |
267 int legacy_packaged_app_count = 0; | 239 int legacy_packaged_app_count = 0; |
268 int platform_app_count = 0; | 240 int platform_app_count = 0; |
269 int user_script_count = 0; | 241 int user_script_count = 0; |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 int InstalledLoader::GetCreationFlags(const ExtensionInfo* info) { | 377 int InstalledLoader::GetCreationFlags(const ExtensionInfo* info) { |
406 int flags = extension_prefs_->GetCreationFlags(info->extension_id); | 378 int flags = extension_prefs_->GetCreationFlags(info->extension_id); |
407 if (!Manifest::IsUnpackedLocation(info->extension_location)) | 379 if (!Manifest::IsUnpackedLocation(info->extension_location)) |
408 flags |= Extension::REQUIRE_KEY; | 380 flags |= Extension::REQUIRE_KEY; |
409 if (extension_prefs_->AllowFileAccess(info->extension_id)) | 381 if (extension_prefs_->AllowFileAccess(info->extension_id)) |
410 flags |= Extension::ALLOW_FILE_ACCESS; | 382 flags |= Extension::ALLOW_FILE_ACCESS; |
411 return flags; | 383 return flags; |
412 } | 384 } |
413 | 385 |
414 } // namespace extensions | 386 } // namespace extensions |
OLD | NEW |