OLD | NEW |
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 #ifndef CHROME_BROWSER_UI_BROWSER_LIST_IMPL_H_ | 5 #ifndef CHROME_BROWSER_UI_BROWSER_LIST_IMPL_H_ |
6 #define CHROME_BROWSER_UI_BROWSER_LIST_IMPL_H_ | 6 #define CHROME_BROWSER_UI_BROWSER_LIST_IMPL_H_ |
7 | 7 |
8 #include "base/observer_list.h" | 8 #include "base/observer_list.h" |
| 9 #include "chrome/browser/ui/browser_list.h" |
9 #include "chrome/browser/ui/host_desktop.h" | 10 #include "chrome/browser/ui/host_desktop.h" |
10 | 11 |
11 class Browser; | 12 class Browser; |
12 class BrowserList; | |
13 class Profile; | 13 class Profile; |
14 | 14 |
15 namespace chrome { | 15 namespace chrome { |
16 | 16 |
17 class BrowserListObserver; | 17 class BrowserListObserver; |
18 | 18 |
19 // Maintains a list of Browser objects present in a given HostDesktop (see | 19 // Maintains a list of Browser objects present in a given HostDesktop (see |
20 // HostDesktopType). | 20 // HostDesktopType). |
21 class BrowserListImpl { | 21 class BrowserListImpl { |
22 public: | 22 public: |
23 typedef std::vector<Browser*> BrowserVector; | 23 typedef std::vector<Browser*> BrowserVector; |
24 typedef BrowserVector::iterator iterator; | 24 typedef BrowserVector::iterator iterator; |
25 typedef BrowserVector::const_iterator const_iterator; | 25 typedef BrowserVector::const_iterator const_iterator; |
26 typedef BrowserVector::const_reverse_iterator const_reverse_iterator; | 26 typedef BrowserVector::const_reverse_iterator const_reverse_iterator; |
27 | 27 |
28 static BrowserListImpl* GetInstance(HostDesktopType type); | 28 static BrowserListImpl* GetInstance(HostDesktopType type); |
29 | 29 |
30 // Adds and removes browsers from the global list. The browser object should | 30 // Adds and removes browsers from the global list. The browser object should |
31 // be valid BEFORE these calls (for the benefit of observers), so notify and | 31 // be valid BEFORE these calls (for the benefit of observers), so notify and |
32 // THEN delete the object. | 32 // THEN delete the object. |
33 void AddBrowser(Browser* browser); | 33 void AddBrowser(Browser* browser); |
34 void RemoveBrowser(Browser* browser); | 34 void RemoveBrowser(Browser* browser); |
35 | 35 |
36 void AddObserver(BrowserListObserver* observer); | |
37 void RemoveObserver(BrowserListObserver* observer); | |
38 | |
39 // Called by Browser objects when their window is activated (focused). This | 36 // Called by Browser objects when their window is activated (focused). This |
40 // allows us to determine what the last active Browser was. | 37 // allows us to determine what the last active Browser was. |
41 void SetLastActive(Browser* browser); | 38 void SetLastActive(Browser* browser); |
42 | 39 |
43 Browser* GetLastActive() const; | 40 Browser* GetLastActive() const; |
44 | 41 |
45 // Browsers are added to the list before they have constructed windows, | 42 // Browsers are added to the list before they have constructed windows, |
46 // so the |window()| member function may return NULL. | 43 // so the |window()| member function may return NULL. |
47 const_iterator begin() const { return browsers_.begin(); } | 44 const_iterator begin() const { return browsers_.begin(); } |
48 const_iterator end() const { return browsers_.end(); } | 45 const_iterator end() const { return browsers_.end(); } |
(...skipping 17 matching lines...) Expand all Loading... |
66 // Returns true if at least one incognito window is open. | 63 // Returns true if at least one incognito window is open. |
67 bool IsIncognitoWindowOpen() const; | 64 bool IsIncognitoWindowOpen() const; |
68 | 65 |
69 // Returns true if at least one incognito window is open for |profile|. | 66 // Returns true if at least one incognito window is open for |profile|. |
70 bool IsIncognitoWindowOpenForProfile(Profile* profile) const; | 67 bool IsIncognitoWindowOpenForProfile(Profile* profile) const; |
71 | 68 |
72 private: | 69 private: |
73 BrowserListImpl(); | 70 BrowserListImpl(); |
74 ~BrowserListImpl(); | 71 ~BrowserListImpl(); |
75 | 72 |
| 73 // Only callable by BrowserList::(Add|Remove)Observer. |
| 74 // TODO(gab): Merge BrowserListImpl into BrowserList removing the need for |
| 75 // friend. |
| 76 friend void BrowserList::AddObserver(chrome::BrowserListObserver*); |
| 77 friend void BrowserList::RemoveObserver(chrome::BrowserListObserver*); |
| 78 void AddObserver(BrowserListObserver* observer); |
| 79 void RemoveObserver(BrowserListObserver* observer); |
| 80 |
76 // Helper method to remove a browser instance from a list of browsers | 81 // Helper method to remove a browser instance from a list of browsers |
77 void RemoveBrowserFrom(Browser* browser, BrowserVector* browser_list); | 82 void RemoveBrowserFrom(Browser* browser, BrowserVector* browser_list); |
78 | 83 |
79 ObserverList<BrowserListObserver> observers_; | 84 ObserverList<BrowserListObserver> observers_; |
80 | 85 |
81 BrowserVector browsers_; | 86 BrowserVector browsers_; |
82 BrowserVector last_active_browsers_; | 87 BrowserVector last_active_browsers_; |
83 | 88 |
84 // Nothing fancy, since we only have two HDTs. | 89 // Nothing fancy, since we only have two HDTs. |
85 static BrowserListImpl* native_instance_; | 90 static BrowserListImpl* native_instance_; |
86 static BrowserListImpl* ash_instance_; | 91 static BrowserListImpl* ash_instance_; |
87 | 92 |
88 DISALLOW_COPY_AND_ASSIGN(BrowserListImpl); | 93 DISALLOW_COPY_AND_ASSIGN(BrowserListImpl); |
89 }; | 94 }; |
90 | 95 |
91 } // namespace chrome | 96 } // namespace chrome |
92 | 97 |
93 #endif // CHROME_BROWSER_UI_BROWSER_LIST_IMPL_H_ | 98 #endif // CHROME_BROWSER_UI_BROWSER_LIST_IMPL_H_ |
OLD | NEW |