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

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: cleanup, fix android 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 17 matching lines...) Expand all
28 class RenderFrameHost; 28 class RenderFrameHost;
29 class SiteInstance; 29 class SiteInstance;
30 }; 30 };
31 31
32 namespace extensions { 32 namespace extensions {
33 33
34 class Extension; 34 class Extension;
35 class ExtensionHost; 35 class ExtensionHost;
36 class ProcessManagerObserver; 36 class ProcessManagerObserver;
37 37
38 // Customization of ProcessManager from the extension system embedder.
39 class ProcessManagerDelegate {
Yoyo Zhou 2014/07/15 02:13:22 Probably it's best to put this in a separate heade
James Cook 2014/07/15 17:02:52 Done.
40 public:
41 virtual ~ProcessManagerDelegate() {}
42
43 // Returns true if the embedder allows background pages for the given
44 // |context|.
45 virtual bool IsBackgroundPageAllowed(
46 content::BrowserContext* context) const = 0;
47
48 // Returns true if the embedder wishes to defer starting up the renderers for
49 // extension background pages. If the embedder returns true it must call
50 // ProcessManager::MaybeCreateStartupBackgroundHosts() when it is ready. See
51 // ChromeProcessManagerDelegate for examples of how this is useful.
52 virtual bool DeferCreatingStartupBackgroundHosts(
53 content::BrowserContext* context) const = 0;
54 };
55
38 // Manages dynamic state of running Chromium extensions. There is one instance 56 // Manages dynamic state of running Chromium extensions. There is one instance
39 // of this class per Profile. OTR Profiles have a separate instance that keeps 57 // of this class per Profile. OTR Profiles have a separate instance that keeps
40 // track of split-mode extensions only. 58 // track of split-mode extensions only.
41 class ProcessManager : public content::NotificationObserver { 59 class ProcessManager : public content::NotificationObserver {
42 public: 60 public:
43 typedef std::set<extensions::ExtensionHost*> ExtensionHostSet; 61 typedef std::set<extensions::ExtensionHost*> ExtensionHostSet;
44 typedef ExtensionHostSet::const_iterator const_iterator; 62 typedef ExtensionHostSet::const_iterator const_iterator;
45 63
46 static ProcessManager* Create(content::BrowserContext* context); 64 static ProcessManager* Create(content::BrowserContext* context);
47 virtual ~ProcessManager(); 65 virtual ~ProcessManager();
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 133
116 // Tracks network requests for a given RenderFrameHost, used to know 134 // Tracks network requests for a given RenderFrameHost, used to know
117 // when network activity is idle for lazy background pages. 135 // when network activity is idle for lazy background pages.
118 void OnNetworkRequestStarted(content::RenderFrameHost* render_frame_host); 136 void OnNetworkRequestStarted(content::RenderFrameHost* render_frame_host);
119 void OnNetworkRequestDone(content::RenderFrameHost* render_frame_host); 137 void OnNetworkRequestDone(content::RenderFrameHost* render_frame_host);
120 138
121 // Prevents |extension|'s background page from being closed and sends the 139 // Prevents |extension|'s background page from being closed and sends the
122 // onSuspendCanceled() event to it. 140 // onSuspendCanceled() event to it.
123 void CancelSuspend(const Extension* extension); 141 void CancelSuspend(const Extension* extension);
124 142
125 // Ensures background hosts are loaded for a new browser window. 143 // Creates background hosts if the embedder is ready and they are not already
126 void OnBrowserWindowReady(); 144 // loaded.
145 void MaybeCreateStartupBackgroundHosts();
127 146
128 // Gets the BrowserContext associated with site_instance_ and all other 147 // Gets the BrowserContext associated with site_instance_ and all other
129 // related SiteInstances. 148 // related SiteInstances.
130 content::BrowserContext* GetBrowserContext() const; 149 content::BrowserContext* GetBrowserContext() const;
131 150
132 // Sets callbacks for testing keepalive impulse behavior. 151 // Sets callbacks for testing keepalive impulse behavior.
133 typedef base::Callback<void(const std::string& extension_id)> 152 typedef base::Callback<void(const std::string& extension_id)>
134 ImpulseCallbackForTesting; 153 ImpulseCallbackForTesting;
135 void SetKeepaliveImpulseCallbackForTesting( 154 void SetKeepaliveImpulseCallbackForTesting(
136 const ImpulseCallbackForTesting& callback); 155 const ImpulseCallbackForTesting& callback);
137 void SetKeepaliveImpulseDecrementCallbackForTesting( 156 void SetKeepaliveImpulseDecrementCallbackForTesting(
138 const ImpulseCallbackForTesting& callback); 157 const ImpulseCallbackForTesting& callback);
139 158
140 // Creates an incognito-context instance for tests. Tests for non-incognito 159 // Creates an incognito-context instance for tests. Tests for non-incognito
141 // contexts can just use Create() above. 160 // contexts can just use Create() above.
142 static ProcessManager* CreateIncognitoForTesting( 161 static ProcessManager* CreateIncognitoForTesting(
143 content::BrowserContext* incognito_context, 162 content::BrowserContext* incognito_context,
144 content::BrowserContext* original_context, 163 content::BrowserContext* original_context,
145 ProcessManager* original_manager); 164 ProcessManager* original_manager);
146 165
166 bool startup_background_hosts_created_for_test() const {
167 return startup_background_hosts_created_;
168 }
169
147 protected: 170 protected:
148 // If |context| is incognito pass the master context as |original_context|. 171 // If |context| is incognito pass the master context as |original_context|.
149 // Otherwise pass the same context for both. 172 // Otherwise pass the same context for both.
150 ProcessManager(content::BrowserContext* context, 173 ProcessManager(content::BrowserContext* context,
151 content::BrowserContext* original_context); 174 content::BrowserContext* original_context);
152 175
153 // Called on browser shutdown to close our extension hosts. 176 // Called on browser shutdown to close our extension hosts.
154 void CloseBackgroundHosts(); 177 void CloseBackgroundHosts();
155 178
156 // content::NotificationObserver: 179 // content::NotificationObserver:
157 virtual void Observe(int type, 180 virtual void Observe(int type,
158 const content::NotificationSource& source, 181 const content::NotificationSource& source,
159 const content::NotificationDetails& details) OVERRIDE; 182 const content::NotificationDetails& details) OVERRIDE;
160 183
161 // Load all background pages once the profile data is ready and the pages 184 // Load all background pages once the profile data is ready and the pages
162 // should be loaded. 185 // should be loaded.
163 void CreateBackgroundHostsForProfileStartup(); 186 void CreateStartupBackgroundHosts();
Yoyo Zhou 2014/07/15 02:13:22 nit: does this need to be protected? can it be in
James Cook 2014/07/15 17:02:52 Good catch! Moved to private.
164 187
165 content::NotificationRegistrar registrar_; 188 content::NotificationRegistrar registrar_;
166 189
167 // The set of ExtensionHosts running viewless background extensions. 190 // The set of ExtensionHosts running viewless background extensions.
168 ExtensionHostSet background_hosts_; 191 ExtensionHostSet background_hosts_;
169 192
170 // A SiteInstance related to the SiteInstance for all extensions in 193 // A SiteInstance related to the SiteInstance for all extensions in
171 // this profile. We create it in such a way that a new 194 // this profile. We create it in such a way that a new
172 // browsing instance is created. This controls process grouping. 195 // browsing instance is created. This controls process grouping.
173 scoped_refptr<content::SiteInstance> site_instance_; 196 scoped_refptr<content::SiteInstance> site_instance_;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 // with an extension). 232 // with an extension).
210 bool RegisterRenderViewHost(content::RenderViewHost* render_view_host); 233 bool RegisterRenderViewHost(content::RenderViewHost* render_view_host);
211 234
212 // Unregister RenderViewHosts and clear background page data for an extension 235 // Unregister RenderViewHosts and clear background page data for an extension
213 // which has been unloaded. 236 // which has been unloaded.
214 void UnregisterExtension(const std::string& extension_id); 237 void UnregisterExtension(const std::string& extension_id);
215 238
216 // Clears background page data for this extension. 239 // Clears background page data for this extension.
217 void ClearBackgroundPageData(const std::string& extension_id); 240 void ClearBackgroundPageData(const std::string& extension_id);
218 241
219 // Returns true if loading background pages should be deferred.
220 bool DeferLoadingBackgroundHosts() const;
221
222 void OnDevToolsStateChanged(content::DevToolsAgentHost*, bool attached); 242 void OnDevToolsStateChanged(content::DevToolsAgentHost*, bool attached);
223 243
224 // Contains all active extension-related RenderViewHost instances for all 244 // Contains all active extension-related RenderViewHost instances for all
225 // extensions. We also keep a cache of the host's view type, because that 245 // extensions. We also keep a cache of the host's view type, because that
226 // information is not accessible at registration/deregistration time. 246 // information is not accessible at registration/deregistration time.
227 ExtensionRenderViews all_extension_views_; 247 ExtensionRenderViews all_extension_views_;
228 248
229 BackgroundPageDataMap background_page_data_; 249 BackgroundPageDataMap background_page_data_;
230 250
231 // The time to delay between an extension becoming idle and 251 // The time to delay between an extension becoming idle and
(...skipping 15 matching lines...) Expand all
247 ObserverList<ProcessManagerObserver> observer_list_; 267 ObserverList<ProcessManagerObserver> observer_list_;
248 268
249 base::WeakPtrFactory<ProcessManager> weak_ptr_factory_; 269 base::WeakPtrFactory<ProcessManager> weak_ptr_factory_;
250 270
251 DISALLOW_COPY_AND_ASSIGN(ProcessManager); 271 DISALLOW_COPY_AND_ASSIGN(ProcessManager);
252 }; 272 };
253 273
254 } // namespace extensions 274 } // namespace extensions
255 275
256 #endif // EXTENSIONS_BROWSER_PROCESS_MANAGER_H_ 276 #endif // EXTENSIONS_BROWSER_PROCESS_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698