[email protected] | 481e1a4 | 2009-05-06 20:56:05 | [diff] [blame] | 1 | // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style license that can be | ||||
3 | // found in the LICENSE file. | ||||
4 | |||||
5 | #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_PROCESS_MANAGER_H_ | ||||
6 | #define CHROME_BROWSER_EXTENSIONS_EXTENSION_PROCESS_MANAGER_H_ | ||||
7 | |||||
[email protected] | 8a17bd5 | 2009-06-06 08:19:49 | [diff] [blame] | 8 | #include <set> |
[email protected] | 481e1a4 | 2009-05-06 20:56:05 | [diff] [blame] | 9 | |
10 | #include "base/ref_counted.h" | ||||
[email protected] | fc36895 | 2009-05-21 21:37:06 | [diff] [blame] | 11 | #include "chrome/common/notification_registrar.h" |
[email protected] | 481e1a4 | 2009-05-06 20:56:05 | [diff] [blame] | 12 | |
13 | class Browser; | ||||
14 | class BrowsingInstance; | ||||
15 | class Extension; | ||||
16 | class ExtensionHost; | ||||
[email protected] | a4c36818 | 2009-05-29 21:53:27 | [diff] [blame] | 17 | #if defined(TOOLKIT_VIEWS) |
[email protected] | 481e1a4 | 2009-05-06 20:56:05 | [diff] [blame] | 18 | class ExtensionView; |
[email protected] | 673aad7 | 2009-05-29 06:32:43 | [diff] [blame] | 19 | #endif |
[email protected] | 481e1a4 | 2009-05-06 20:56:05 | [diff] [blame] | 20 | class GURL; |
21 | class Profile; | ||||
22 | class SiteInstance; | ||||
23 | |||||
24 | // Manages dynamic state of running Chromium extensions. There is one instance | ||||
25 | // of this class per Profile (including OTR). | ||||
26 | class ExtensionProcessManager : public NotificationObserver { | ||||
27 | public: | ||||
[email protected] | 8a17bd5 | 2009-06-06 08:19:49 | [diff] [blame] | 28 | explicit ExtensionProcessManager(Profile* profile); |
[email protected] | 481e1a4 | 2009-05-06 20:56:05 | [diff] [blame] | 29 | ~ExtensionProcessManager(); |
30 | |||||
[email protected] | ab4eaf78 | 2009-06-10 00:11:24 | [diff] [blame] | 31 | // Creates a new ExtensionHost with its associated view, grouping it in the |
32 | // appropriate SiteInstance (and therefore process) based on the URL and | ||||
33 | // profile. | ||||
34 | ExtensionHost* CreateView(Extension* extension, | ||||
[email protected] | 481e1a4 | 2009-05-06 20:56:05 | [diff] [blame] | 35 | const GURL& url, |
36 | Browser* browser); | ||||
[email protected] | 9f1087e | 2009-06-15 17:29:32 | [diff] [blame^] | 37 | ExtensionHost* CreateView(const GURL& url, Browser* browser); |
[email protected] | 481e1a4 | 2009-05-06 20:56:05 | [diff] [blame] | 38 | |
39 | // Creates a new UI-less extension instance. Like CreateView, but not | ||||
40 | // displayed anywhere. | ||||
[email protected] | ab4eaf78 | 2009-06-10 00:11:24 | [diff] [blame] | 41 | ExtensionHost* CreateBackgroundHost(Extension* extension, const GURL& url); |
[email protected] | 481e1a4 | 2009-05-06 20:56:05 | [diff] [blame] | 42 | |
43 | // Returns the SiteInstance that the given URL belongs to. | ||||
44 | SiteInstance* GetSiteInstanceForURL(const GURL& url); | ||||
45 | |||||
46 | // NotificationObserver: | ||||
47 | virtual void Observe(NotificationType type, | ||||
48 | const NotificationSource& source, | ||||
49 | const NotificationDetails& details); | ||||
50 | |||||
[email protected] | 8a17bd5 | 2009-06-06 08:19:49 | [diff] [blame] | 51 | typedef std::set<ExtensionHost*> ExtensionHostSet; |
52 | typedef ExtensionHostSet::const_iterator const_iterator; | ||||
53 | const_iterator begin() const { return all_hosts_.begin(); } | ||||
54 | const_iterator end() const { return all_hosts_.end(); } | ||||
[email protected] | fc36895 | 2009-05-21 21:37:06 | [diff] [blame] | 55 | |
[email protected] | 8a17bd5 | 2009-06-06 08:19:49 | [diff] [blame] | 56 | // Called just before |host| is destroyed so it can be de-registered |
57 | // from our lists. | ||||
58 | void OnExtensionHostDestroyed(ExtensionHost* host); | ||||
59 | |||||
60 | private: | ||||
[email protected] | 94fe52e | 2009-06-13 10:09:06 | [diff] [blame] | 61 | // Called just after |host| is created so it can be registered in our lists. |
62 | void OnExtensionHostCreated(ExtensionHost* host, bool is_background); | ||||
63 | |||||
[email protected] | fc36895 | 2009-05-21 21:37:06 | [diff] [blame] | 64 | NotificationRegistrar registrar_; |
65 | |||||
[email protected] | 8a17bd5 | 2009-06-06 08:19:49 | [diff] [blame] | 66 | // The set of all ExtensionHosts managed by this process manager. |
67 | ExtensionHostSet all_hosts_; | ||||
68 | |||||
69 | // The set of running viewless background extensions. | ||||
70 | ExtensionHostSet background_hosts_; | ||||
[email protected] | 481e1a4 | 2009-05-06 20:56:05 | [diff] [blame] | 71 | |
72 | // The BrowsingInstance shared by all extensions in this profile. This | ||||
73 | // controls process grouping. | ||||
74 | scoped_refptr<BrowsingInstance> browsing_instance_; | ||||
75 | |||||
76 | DISALLOW_COPY_AND_ASSIGN(ExtensionProcessManager); | ||||
77 | }; | ||||
78 | |||||
79 | #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_PROCESS_MANAGER_H_ |