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

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

Issue 17296003: Remove import process workarounds from ExtensionService (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: feedback, more workarounds removed 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
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 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 // profile is in the process of being deleted. 450 // profile is in the process of being deleted.
451 451
452 extensions::ProviderCollection::const_iterator i; 452 extensions::ProviderCollection::const_iterator i;
453 for (i = external_extension_providers_.begin(); 453 for (i = external_extension_providers_.begin();
454 i != external_extension_providers_.end(); ++i) { 454 i != external_extension_providers_.end(); ++i) {
455 extensions::ExternalProviderInterface* provider = i->get(); 455 extensions::ExternalProviderInterface* provider = i->get();
456 provider->ServiceShutdown(); 456 provider->ServiceShutdown();
457 } 457 }
458 } 458 }
459 459
460 void ExtensionService::InitEventRoutersAfterImport() {
461 RegisterForImportFinished();
462 }
463
464 void ExtensionService::RegisterForImportFinished() {
465 if (!registrar_.IsRegistered(this, chrome::NOTIFICATION_IMPORT_FINISHED,
466 content::Source<Profile>(profile_))) {
467 registrar_.Add(this, chrome::NOTIFICATION_IMPORT_FINISHED,
468 content::Source<Profile>(profile_));
469 }
470 }
471
472 void ExtensionService::InitAfterImport() {
473 startup_metric_utils::ScopedSlowStartupUMA
474 scoped_timer("Startup.SlowStartupExtensionServiceInitAfterImport");
asargent_no_longer_on_chrome 2013/06/19 19:39:05 FYI, the folks working on chrome slow startup may
475 component_loader_->LoadAll();
476
477 CheckForExternalUpdates();
478
479 GarbageCollectExtensions();
480
481 // Idempotent, so although there is a possible race if the import
482 // process finished sometime in the middle of ProfileImpl::InitExtensions,
483 // it cannot happen twice.
484 InitEventRouters();
485 }
486
487 void ExtensionService::InitEventRouters() { 460 void ExtensionService::InitEventRouters() {
488 if (event_routers_initialized_) 461 if (event_routers_initialized_)
489 return; 462 return;
490 463
491 #if defined(ENABLE_EXTENSIONS) 464 #if defined(ENABLE_EXTENSIONS)
492 browser_event_router_.reset(new extensions::BrowserEventRouter(profile_)); 465 browser_event_router_.reset(new extensions::BrowserEventRouter(profile_));
493 #endif // defined(ENABLE_EXTENSIONS) 466 #endif // defined(ENABLE_EXTENSIONS)
494 event_routers_initialized_ = true; 467 event_routers_initialized_ = true;
495 } 468 }
496 469
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 if (cmd_line->HasSwitch(switches::kInstallFromWebstore) || 525 if (cmd_line->HasSwitch(switches::kInstallFromWebstore) ||
553 cmd_line->HasSwitch(switches::kLimitedInstallFromWebstore)) { 526 cmd_line->HasSwitch(switches::kLimitedInstallFromWebstore)) {
554 // The sole purpose of this launch is to install a new extension from CWS 527 // The sole purpose of this launch is to install a new extension from CWS
555 // and immediately terminate: loading already installed extensions is 528 // and immediately terminate: loading already installed extensions is
556 // unnecessary and may interfere with the inline install dialog (e.g. if an 529 // unnecessary and may interfere with the inline install dialog (e.g. if an
557 // extension listens to onStartup and opens a window). 530 // extension listens to onStartup and opens a window).
558 SetReadyAndNotifyListeners(); 531 SetReadyAndNotifyListeners();
559 } else { 532 } else {
560 // TODO(mek): It might be cleaner to do the FinishDelayedInstallInfo stuff 533 // TODO(mek): It might be cleaner to do the FinishDelayedInstallInfo stuff
561 // here instead of in installedloader. 534 // here instead of in installedloader.
562 if (g_browser_process->profile_manager() &&
563 g_browser_process->profile_manager()->will_import()) {
564 // Do not load any component extensions, since they may conflict with the
565 // import process.
566 535
567 extensions::InstalledLoader(this).LoadAllExtensions(); 536 // LoadAllExtensions() calls OnLoadedInstalledExtensions().
568 SetReadyAndNotifyListeners(); 537 component_loader_->LoadAll();
569 RegisterForImportFinished(); 538 extensions::InstalledLoader(this).LoadAllExtensions();
570 } else { 539 SetReadyAndNotifyListeners();
571 // In this case, LoadAllExtensions() calls OnLoadedInstalledExtensions().
572 component_loader_->LoadAll();
573 extensions::InstalledLoader(this).LoadAllExtensions();
574 SetReadyAndNotifyListeners();
575 540
576 // TODO(erikkay) this should probably be deferred to a future point 541 // TODO(erikkay) this should probably be deferred to a future point
577 // rather than running immediately at startup. 542 // rather than running immediately at startup.
578 CheckForExternalUpdates(); 543 CheckForExternalUpdates();
579 544
580 base::MessageLoop::current()->PostDelayedTask( 545 base::MessageLoop::current()->PostDelayedTask(
581 FROM_HERE, 546 FROM_HERE,
582 base::Bind(&ExtensionService::GarbageCollectExtensions, AsWeakPtr()), 547 base::Bind(&ExtensionService::GarbageCollectExtensions, AsWeakPtr()),
583 base::TimeDelta::FromSeconds(kGarbageCollectStartupDelay)); 548 base::TimeDelta::FromSeconds(kGarbageCollectStartupDelay));
584 }
585 549
586 if (extension_prefs_->NeedsStorageGarbageCollection()) { 550 if (extension_prefs_->NeedsStorageGarbageCollection()) {
587 GarbageCollectIsolatedStorage(); 551 GarbageCollectIsolatedStorage();
588 extension_prefs_->SetNeedsStorageGarbageCollection(false); 552 extension_prefs_->SetNeedsStorageGarbageCollection(false);
589 } 553 }
590 } 554 }
591 } 555 }
592 556
593 bool ExtensionService::UpdateExtension(const std::string& id, 557 bool ExtensionService::UpdateExtension(const std::string& id,
594 const base::FilePath& extension_path, 558 const base::FilePath& extension_path,
(...skipping 2040 matching lines...) Expand 10 before | Expand all | Expand 10 after
2635 break; 2599 break;
2636 2600
2637 process_map_.RemoveAllFromProcess(process->GetID()); 2601 process_map_.RemoveAllFromProcess(process->GetID());
2638 BrowserThread::PostTask( 2602 BrowserThread::PostTask(
2639 BrowserThread::IO, FROM_HERE, 2603 BrowserThread::IO, FROM_HERE,
2640 base::Bind(&ExtensionInfoMap::UnregisterAllExtensionsInProcess, 2604 base::Bind(&ExtensionInfoMap::UnregisterAllExtensionsInProcess,
2641 system_->info_map(), 2605 system_->info_map(),
2642 process->GetID())); 2606 process->GetID()));
2643 break; 2607 break;
2644 } 2608 }
2645 case chrome::NOTIFICATION_IMPORT_FINISHED: {
2646 InitAfterImport();
2647 break;
2648 }
2649 case chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED: { 2609 case chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED: {
2650 extensions::ExtensionHost* host = 2610 extensions::ExtensionHost* host =
2651 content::Details<extensions::ExtensionHost>(details).ptr(); 2611 content::Details<extensions::ExtensionHost>(details).ptr();
2652 std::string extension_id = host->extension_id(); 2612 std::string extension_id = host->extension_id();
2653 if (delayed_updates_for_idle_.Contains(extension_id)) { 2613 if (delayed_updates_for_idle_.Contains(extension_id)) {
2654 // We were waiting for this extension to become idle, it now might have, 2614 // We were waiting for this extension to become idle, it now might have,
2655 // so maybe finish installation. 2615 // so maybe finish installation.
2656 base::MessageLoop::current()->PostDelayedTask( 2616 base::MessageLoop::current()->PostDelayedTask(
2657 FROM_HERE, 2617 FROM_HERE,
2658 base::Bind(&ExtensionService::MaybeFinishDelayedInstallation, 2618 base::Bind(&ExtensionService::MaybeFinishDelayedInstallation,
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
2915 } 2875 }
2916 2876
2917 void ExtensionService::AddUpdateObserver(extensions::UpdateObserver* observer) { 2877 void ExtensionService::AddUpdateObserver(extensions::UpdateObserver* observer) {
2918 update_observers_.AddObserver(observer); 2878 update_observers_.AddObserver(observer);
2919 } 2879 }
2920 2880
2921 void ExtensionService::RemoveUpdateObserver( 2881 void ExtensionService::RemoveUpdateObserver(
2922 extensions::UpdateObserver* observer) { 2882 extensions::UpdateObserver* observer) {
2923 update_observers_.RemoveObserver(observer); 2883 update_observers_.RemoveObserver(observer);
2924 } 2884 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_service.h ('k') | chrome/browser/extensions/extension_system.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698