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

Side by Side Diff: chrome/browser/browser_list.h

Issue 1725007: Simplify the Observer pattern used in the BrowserList. (Closed)
Patch Set: back Compact to protected section Created 10 years, 7 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
« no previous file with comments | « base/observer_list.h ('k') | chrome/browser/browser_list.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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_BROWSER_LIST_H_ 5 #ifndef CHROME_BROWSER_BROWSER_LIST_H_
6 #define CHROME_BROWSER_BROWSER_LIST_H_ 6 #define CHROME_BROWSER_BROWSER_LIST_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/observer_list.h"
10 #include "chrome/browser/browser.h" 11 #include "chrome/browser/browser.h"
11 12
12 // Stores a list of all Browser objects. 13 // Stores a list of all Browser objects.
13 class BrowserList { 14 class BrowserList {
14 public: 15 public:
15 typedef std::vector<Browser*> list_type; 16 typedef std::vector<Browser*> BrowserVector;
16 typedef list_type::iterator iterator; 17 typedef BrowserVector::iterator iterator;
17 typedef list_type::const_iterator const_iterator; 18 typedef BrowserVector::const_iterator const_iterator;
18 typedef list_type::const_reverse_iterator const_reverse_iterator; 19 typedef BrowserVector::const_reverse_iterator const_reverse_iterator;
19 20
20 // It is not allowed to change the global window list (add or remove any 21 // It is not allowed to change the global window list (add or remove any
21 // browser windows while handling observer callbacks. 22 // browser windows while handling observer callbacks.
22 class Observer { 23 class Observer {
23 public: 24 public:
24 // Called immediately after a browser is added to the list 25 // Called immediately after a browser is added to the list
25 virtual void OnBrowserAdded(const Browser* browser) = 0; 26 virtual void OnBrowserAdded(const Browser* browser) = 0;
26 27
27 // Called immediately before a browser is removed from the list 28 // Called immediately before a browser is removed from the list
28 virtual void OnBrowserRemoving(const Browser* browser) = 0; 29 virtual void OnBrowserRemoving(const Browser* browser) = 0;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 101
101 // Begins shutdown of the application when the Windows session is ending. 102 // Begins shutdown of the application when the Windows session is ending.
102 static void WindowsSessionEnding(); 103 static void WindowsSessionEnding();
103 104
104 // Returns true if there is at least one Browser with the specified profile. 105 // Returns true if there is at least one Browser with the specified profile.
105 static bool HasBrowserWithProfile(Profile* profile); 106 static bool HasBrowserWithProfile(Profile* profile);
106 107
107 // Returns true if browser is in persistent mode and false otherwise. 108 // Returns true if browser is in persistent mode and false otherwise.
108 static bool IsInPersistentMode(); 109 static bool IsInPersistentMode();
109 110
110 static const_iterator begin() { 111 static const_iterator begin() { return browsers_.begin(); }
111 return browsers_.begin(); 112 static const_iterator end() { return browsers_.end(); }
112 }
113 113
114 static const_iterator end() { 114 static size_t size() { return browsers_.size(); }
115 return browsers_.end();
116 }
117
118 static size_t size() {
119 return browsers_.size();
120 }
121 115
122 // Returns iterated access to list of open browsers ordered by when 116 // Returns iterated access to list of open browsers ordered by when
123 // they were last active. The underlying data structure is a vector 117 // they were last active. The underlying data structure is a vector
124 // and we push_back on recent access so a reverse iterator gives the 118 // and we push_back on recent access so a reverse iterator gives the
125 // latest accessed browser first. 119 // latest accessed browser first.
126 static const_reverse_iterator begin_last_active() { 120 static const_reverse_iterator begin_last_active() {
127 return last_active_browsers_.rbegin(); 121 return last_active_browsers_.rbegin();
128 } 122 }
129 123
130 static const_reverse_iterator end_last_active() { 124 static const_reverse_iterator end_last_active() {
131 return last_active_browsers_.rend(); 125 return last_active_browsers_.rend();
132 } 126 }
133 127
134 // Return the number of browsers with the following profile which are 128 // Return the number of browsers with the following profile which are
135 // currently open. 129 // currently open.
136 static size_t GetBrowserCount(Profile* p); 130 static size_t GetBrowserCount(Profile* p);
137 131
138 // Return the number of browsers with the following profile and type which are 132 // Return the number of browsers with the following profile and type which are
139 // currently open. 133 // currently open.
140 static size_t GetBrowserCountForType(Profile* p, Browser::Type type); 134 static size_t GetBrowserCountForType(Profile* p, Browser::Type type);
141 135
142 // Returns true if at least one off the record session is active. 136 // Returns true if at least one off the record session is active.
143 static bool IsOffTheRecordSessionActive(); 137 static bool IsOffTheRecordSessionActive();
144 138
145 // Called when the last browser is closed. 139 // Called when the last browser is closed.
146 static void AllBrowsersClosed(); 140 static void AllBrowsersClosed();
147 141
148 private: 142 private:
149 // Helper method to remove a browser instance from a list of browsers 143 // Helper method to remove a browser instance from a list of browsers
150 static void RemoveBrowserFrom(Browser* browser, list_type* browser_list); 144 static void RemoveBrowserFrom(Browser* browser, BrowserVector* browser_list);
151 145
152 static list_type browsers_; 146 static BrowserVector browsers_;
153 static std::vector<Observer*> observers_; 147 static BrowserVector last_active_browsers_;
154 static list_type last_active_browsers_; 148 static ObserverList<Observer> observers_;
155 }; 149 };
156 150
157 class TabContents; 151 class TabContents;
158 152
159 // Iterates through all web view hosts in all browser windows. Because the 153 // Iterates through all web view hosts in all browser windows. Because the
160 // renderers act asynchronously, getting a host through this interface does 154 // renderers act asynchronously, getting a host through this interface does
161 // not guarantee that the renderer is ready to go. Doing anything to affect 155 // not guarantee that the renderer is ready to go. Doing anything to affect
162 // browser windows or tabs while iterating may cause incorrect behavior. 156 // browser windows or tabs while iterating may cause incorrect behavior.
163 // 157 //
164 // Example: 158 // Example:
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 // tab index into the current Browser of the current web view 202 // tab index into the current Browser of the current web view
209 int web_view_index_; 203 int web_view_index_;
210 204
211 // Current TabContents, or NULL if we're at the end of the list. This can 205 // Current TabContents, or NULL if we're at the end of the list. This can
212 // be extracted given the browser iterator and index, but it's nice to cache 206 // be extracted given the browser iterator and index, but it's nice to cache
213 // this since the caller may access the current host many times. 207 // this since the caller may access the current host many times.
214 TabContents* cur_; 208 TabContents* cur_;
215 }; 209 };
216 210
217 #endif // CHROME_BROWSER_BROWSER_LIST_H_ 211 #endif // CHROME_BROWSER_BROWSER_LIST_H_
OLDNEW
« no previous file with comments | « base/observer_list.h ('k') | chrome/browser/browser_list.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698