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

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

Issue 10828218: Add chrome.runtime.onStartup, which is fired on browser start. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rm debug logs Created 8 years, 4 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) 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/command_line.h" 6 #include "base/command_line.h"
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "base/string_number_conversions.h" 11 #include "base/string_number_conversions.h"
12 #include "base/time.h" 12 #include "base/time.h"
13 #include "chrome/browser/extensions/api/runtime/runtime_api.h"
13 #include "chrome/browser/extensions/extension_process_manager.h" 14 #include "chrome/browser/extensions/extension_process_manager.h"
14 #include "chrome/browser/extensions/extension_host.h" 15 #include "chrome/browser/extensions/extension_host.h"
15 #include "chrome/browser/extensions/extension_info_map.h" 16 #include "chrome/browser/extensions/extension_info_map.h"
16 #include "chrome/browser/extensions/extension_service.h" 17 #include "chrome/browser/extensions/extension_service.h"
17 #include "chrome/browser/extensions/extension_system.h" 18 #include "chrome/browser/extensions/extension_system.h"
18 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/ui/browser.h" 20 #include "chrome/browser/ui/browser.h"
20 #include "chrome/browser/ui/browser_finder.h" 21 #include "chrome/browser/ui/browser_finder.h"
21 #include "chrome/browser/ui/browser_tabstrip.h" 22 #include "chrome/browser/ui/browser_tabstrip.h"
22 #include "chrome/browser/ui/browser_window.h" 23 #include "chrome/browser/ui/browser_window.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 const content::NotificationDetails& details); 83 const content::NotificationDetails& details);
83 84
84 // Returns true if the extension is allowed to run in incognito mode. 85 // Returns true if the extension is allowed to run in incognito mode.
85 bool IsIncognitoEnabled(const Extension* extension); 86 bool IsIncognitoEnabled(const Extension* extension);
86 87
87 ExtensionProcessManager* original_manager_; 88 ExtensionProcessManager* original_manager_;
88 }; 89 };
89 90
90 static void CreateBackgroundHostForExtensionLoad( 91 static void CreateBackgroundHostForExtensionLoad(
91 ExtensionProcessManager* manager, const Extension* extension) { 92 ExtensionProcessManager* manager, const Extension* extension) {
92 if (extension->has_persistent_background_page()) { 93 if (extension->has_persistent_background_page())
93 manager->CreateBackgroundHost(extension, extension->GetBackgroundURL()); 94 manager->CreateBackgroundHost(extension, extension->GetBackgroundURL());
95 }
96
97 static void CreateBackgroundHostsForProfileStartup(
98 Profile* profile,
99 ExtensionProcessManager* manager,
100 const ExtensionSet* extensions) {
101 for (ExtensionSet::const_iterator extension = extensions->begin();
102 extension != extensions->end(); ++extension) {
103 CreateBackgroundHostForExtensionLoad(manager, *extension);
104
105 extensions::RuntimeEventRouter::DispatchOnStartupEvent(
106 profile, (*extension)->id());
94 } 107 }
95 } 108 }
96 109
97 static void CreateBackgroundHostsForProfileStartup(
98 ExtensionProcessManager* manager, const ExtensionSet* extensions) {
99 for (ExtensionSet::const_iterator extension = extensions->begin();
100 extension != extensions->end(); ++extension) {
101 CreateBackgroundHostForExtensionLoad(manager, *extension);
102 }
103 }
104
105 } // namespace 110 } // namespace
106 111
107 struct ExtensionProcessManager::BackgroundPageData { 112 struct ExtensionProcessManager::BackgroundPageData {
108 // The count of things keeping the lazy background page alive. 113 // The count of things keeping the lazy background page alive.
109 int lazy_keepalive_count; 114 int lazy_keepalive_count;
110 115
111 // This is used with the ShouldUnload message, to ensure that the extension 116 // This is used with the ShouldUnload message, to ensure that the extension
112 // remained idle between sending the message and receiving the ack. 117 // remained idle between sending the message and receiving the ack.
113 int close_sequence_id; 118 int close_sequence_id;
114 119
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 DecrementLazyKeepaliveCount(extension); 555 DecrementLazyKeepaliveCount(extension);
551 } 556 }
552 } 557 }
553 558
554 void ExtensionProcessManager::Observe( 559 void ExtensionProcessManager::Observe(
555 int type, 560 int type,
556 const content::NotificationSource& source, 561 const content::NotificationSource& source,
557 const content::NotificationDetails& details) { 562 const content::NotificationDetails& details) {
558 switch (type) { 563 switch (type) {
559 case chrome::NOTIFICATION_EXTENSIONS_READY: { 564 case chrome::NOTIFICATION_EXTENSIONS_READY: {
560 CreateBackgroundHostsForProfileStartup(this, 565 Profile* profile = content::Source<Profile>(source).ptr();
561 content::Source<Profile>(source).ptr()-> 566 CreateBackgroundHostsForProfileStartup(profile, this,
562 GetExtensionService()->extensions()); 567 profile->GetExtensionService()->extensions());
563 break; 568 break;
564 } 569 }
565 570
566 case chrome::NOTIFICATION_EXTENSION_LOADED: { 571 case chrome::NOTIFICATION_EXTENSION_LOADED: {
567 ExtensionService* service = 572 Profile* profile = content::Source<Profile>(source).ptr();
568 content::Source<Profile>(source).ptr()->GetExtensionService(); 573 ExtensionService* service = profile->GetExtensionService();
569 if (service->is_ready()) { 574 if (service->is_ready()) {
570 const Extension* extension = 575 const Extension* extension =
571 content::Details<const Extension>(details).ptr(); 576 content::Details<const Extension>(details).ptr();
572 ::CreateBackgroundHostForExtensionLoad(this, extension); 577 CreateBackgroundHostForExtensionLoad(this, extension);
573 } 578 }
574 break; 579 break;
575 } 580 }
576 581
577 case chrome::NOTIFICATION_EXTENSION_UNLOADED: { 582 case chrome::NOTIFICATION_EXTENSION_UNLOADED: {
578 const Extension* extension = 583 const Extension* extension =
579 content::Details<extensions::UnloadedExtensionInfo>( 584 content::Details<extensions::UnloadedExtensionInfo>(
580 details)->extension; 585 details)->extension;
581 for (ExtensionHostSet::iterator iter = background_hosts_.begin(); 586 for (ExtensionHostSet::iterator iter = background_hosts_.begin();
582 iter != background_hosts_.end(); ++iter) { 587 iter != background_hosts_.end(); ++iter) {
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
798 // We want to spawn our background hosts as soon as the user opens an 803 // We want to spawn our background hosts as soon as the user opens an
799 // incognito window. Watch for new browsers and create the hosts if 804 // incognito window. Watch for new browsers and create the hosts if
800 // it matches our profile. 805 // it matches our profile.
801 Browser* browser = content::Source<Browser>(source).ptr(); 806 Browser* browser = content::Source<Browser>(source).ptr();
802 if (browser->profile() == site_instance_->GetBrowserContext()) { 807 if (browser->profile() == site_instance_->GetBrowserContext()) {
803 // On Chrome OS, a login screen is implemented as a browser. 808 // On Chrome OS, a login screen is implemented as a browser.
804 // This browser has no extension service. In this case, 809 // This browser has no extension service. In this case,
805 // service will be NULL. 810 // service will be NULL.
806 ExtensionService* service = GetProfile()->GetExtensionService(); 811 ExtensionService* service = GetProfile()->GetExtensionService();
807 if (service && service->is_ready()) 812 if (service && service->is_ready())
808 CreateBackgroundHostsForProfileStartup(this, service->extensions()); 813 CreateBackgroundHostsForProfileStartup(GetProfile(),
814 this, service->extensions());
809 } 815 }
810 break; 816 break;
811 } 817 }
812 default: 818 default:
813 ExtensionProcessManager::Observe(type, source, details); 819 ExtensionProcessManager::Observe(type, source, details);
814 break; 820 break;
815 } 821 }
816 } 822 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/event_router.cc ('k') | chrome/browser/extensions/lazy_background_task_queue.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698