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

Side by Side Diff: extensions/browser/process_manager.h

Issue 381283002: Refactor code that defers extension background page loading (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: larger DeferLoadingBackgroundHosts Created 6 years, 5 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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 #ifndef EXTENSIONS_BROWSER_PROCESS_MANAGER_H_ 5 #ifndef EXTENSIONS_BROWSER_PROCESS_MANAGER_H_
6 #define EXTENSIONS_BROWSER_PROCESS_MANAGER_H_ 6 #define EXTENSIONS_BROWSER_PROCESS_MANAGER_H_
7 7
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 void OnNetworkRequestStarted(content::RenderFrameHost* render_frame_host); 118 void OnNetworkRequestStarted(content::RenderFrameHost* render_frame_host);
119 void OnNetworkRequestDone(content::RenderFrameHost* render_frame_host); 119 void OnNetworkRequestDone(content::RenderFrameHost* render_frame_host);
120 120
121 // Prevents |extension|'s background page from being closed and sends the 121 // Prevents |extension|'s background page from being closed and sends the
122 // onSuspendCanceled() event to it. 122 // onSuspendCanceled() event to it.
123 void CancelSuspend(const Extension* extension); 123 void CancelSuspend(const Extension* extension);
124 124
125 // Ensures background hosts are loaded for a new browser window. 125 // Ensures background hosts are loaded for a new browser window.
126 void OnBrowserWindowReady(); 126 void OnBrowserWindowReady();
127 127
128 // Notifies the ProcessManager that a BrowserContext is fully initialized.
129 // A BrowserContext might be initialized asynchronously (in parallel with
130 // extension system startup). The ProcessManager needs to know when that
131 // initialization is complete so it can load deferred background pages.
132 // (See NOTIFICATION_PROFILE_CREATED in Chrome and IsContextValid() in
133 // ExtensionsBrowserClient).
134 void OnBrowserContextValid(content::BrowserContext* context);
135
128 // Gets the BrowserContext associated with site_instance_ and all other 136 // Gets the BrowserContext associated with site_instance_ and all other
129 // related SiteInstances. 137 // related SiteInstances.
130 content::BrowserContext* GetBrowserContext() const; 138 content::BrowserContext* GetBrowserContext() const;
131 139
132 // Sets callbacks for testing keepalive impulse behavior. 140 // Sets callbacks for testing keepalive impulse behavior.
133 typedef base::Callback<void(const std::string& extension_id)> 141 typedef base::Callback<void(const std::string& extension_id)>
134 ImpulseCallbackForTesting; 142 ImpulseCallbackForTesting;
135 void SetKeepaliveImpulseCallbackForTesting( 143 void SetKeepaliveImpulseCallbackForTesting(
136 const ImpulseCallbackForTesting& callback); 144 const ImpulseCallbackForTesting& callback);
137 void SetKeepaliveImpulseDecrementCallbackForTesting( 145 void SetKeepaliveImpulseDecrementCallbackForTesting(
138 const ImpulseCallbackForTesting& callback); 146 const ImpulseCallbackForTesting& callback);
139 147
140 // Creates an incognito-context instance for tests. Tests for non-incognito 148 // Creates an incognito-context instance for tests. Tests for non-incognito
141 // contexts can just use Create() above. 149 // contexts can just use Create() above.
142 static ProcessManager* CreateIncognitoForTesting( 150 static ProcessManager* CreateIncognitoForTesting(
143 content::BrowserContext* incognito_context, 151 content::BrowserContext* incognito_context,
144 content::BrowserContext* original_context, 152 content::BrowserContext* original_context,
145 ProcessManager* original_manager); 153 ProcessManager* original_manager);
146 154
155 bool startup_background_hosts_created_for_test() const {
156 return startup_background_hosts_created_;
157 }
158
147 protected: 159 protected:
148 // If |context| is incognito pass the master context as |original_context|. 160 // If |context| is incognito pass the master context as |original_context|.
149 // Otherwise pass the same context for both. 161 // Otherwise pass the same context for both.
150 ProcessManager(content::BrowserContext* context, 162 ProcessManager(content::BrowserContext* context,
151 content::BrowserContext* original_context); 163 content::BrowserContext* original_context);
152 164
153 // Called on browser shutdown to close our extension hosts. 165 // Called on browser shutdown to close our extension hosts.
154 void CloseBackgroundHosts(); 166 void CloseBackgroundHosts();
155 167
156 // content::NotificationObserver: 168 // content::NotificationObserver:
157 virtual void Observe(int type, 169 virtual void Observe(int type,
158 const content::NotificationSource& source, 170 const content::NotificationSource& source,
159 const content::NotificationDetails& details) OVERRIDE; 171 const content::NotificationDetails& details) OVERRIDE;
160 172
161 // Load all background pages once the profile data is ready and the pages 173 // Loads all background pages for a BrowserContext if everything is ready.
162 // should be loaded. 174 void MaybeCreateBackgroundHostsForStartup();
163 void CreateBackgroundHostsForProfileStartup();
164 175
165 content::NotificationRegistrar registrar_; 176 content::NotificationRegistrar registrar_;
166 177
167 // The set of ExtensionHosts running viewless background extensions. 178 // The set of ExtensionHosts running viewless background extensions.
168 ExtensionHostSet background_hosts_; 179 ExtensionHostSet background_hosts_;
169 180
170 // A SiteInstance related to the SiteInstance for all extensions in 181 // A SiteInstance related to the SiteInstance for all extensions in
171 // this profile. We create it in such a way that a new 182 // this profile. We create it in such a way that a new
172 // browsing instance is created. This controls process grouping. 183 // browsing instance is created. This controls process grouping.
173 scoped_refptr<content::SiteInstance> site_instance_; 184 scoped_refptr<content::SiteInstance> site_instance_;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 ObserverList<ProcessManagerObserver> observer_list_; 258 ObserverList<ProcessManagerObserver> observer_list_;
248 259
249 base::WeakPtrFactory<ProcessManager> weak_ptr_factory_; 260 base::WeakPtrFactory<ProcessManager> weak_ptr_factory_;
250 261
251 DISALLOW_COPY_AND_ASSIGN(ProcessManager); 262 DISALLOW_COPY_AND_ASSIGN(ProcessManager);
252 }; 263 };
253 264
254 } // namespace extensions 265 } // namespace extensions
255 266
256 #endif // EXTENSIONS_BROWSER_PROCESS_MANAGER_H_ 267 #endif // EXTENSIONS_BROWSER_PROCESS_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698