OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_COCOA_HISTORY_MENU_BRIDGE_H_ | 5 #ifndef CHROME_BROWSER_UI_COCOA_HISTORY_MENU_BRIDGE_H_ |
6 #define CHROME_BROWSER_UI_COCOA_HISTORY_MENU_BRIDGE_H_ | 6 #define CHROME_BROWSER_UI_COCOA_HISTORY_MENU_BRIDGE_H_ |
7 | 7 |
8 #import <Cocoa/Cocoa.h> | 8 #import <Cocoa/Cocoa.h> |
9 #include <map> | 9 #include <map> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/mac/scoped_nsobject.h" | 12 #include "base/mac/scoped_nsobject.h" |
13 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
14 #include "base/scoped_observer.h" | 14 #include "base/scoped_observer.h" |
15 #include "base/task/cancelable_task_tracker.h" | 15 #include "base/task/cancelable_task_tracker.h" |
16 #import "chrome/browser/ui/cocoa/main_menu_item.h" | 16 #import "chrome/browser/ui/cocoa/main_menu_item.h" |
17 #import "components/favicon/core/favicon_service.h" | 17 #import "components/favicon/core/favicon_service.h" |
18 #include "components/history/core/browser/history_service.h" | 18 #include "components/history/core/browser/history_service.h" |
19 #include "components/history/core/browser/history_service_observer.h" | 19 #include "components/history/core/browser/history_service_observer.h" |
20 #include "components/sessions/core/tab_restore_service.h" | 20 #include "components/sessions/core/tab_restore_service.h" |
21 #include "components/sessions/core/tab_restore_service_observer.h" | 21 #include "components/sessions/core/tab_restore_service_observer.h" |
22 #include "components/sessions/session_id.h" | 22 #include "components/sessions/session_id.h" |
23 | 23 |
24 class Profile; | 24 class Profile; |
25 class TabRestoreService; | |
26 @class HistoryMenuCocoaController; | 25 @class HistoryMenuCocoaController; |
27 | 26 |
28 namespace { | 27 namespace { |
29 class HistoryMenuBridgeTest; | 28 class HistoryMenuBridgeTest; |
30 } | 29 } |
31 | 30 |
32 namespace favicon_base { | 31 namespace favicon_base { |
33 struct FaviconImageResult; | 32 struct FaviconImageResult; |
34 } | 33 } |
35 | 34 |
(...skipping 12 matching lines...) Expand all Loading... |
48 // have a tag that's equal to the parent + 1. Tags within the history menu have | 47 // have a tag that's equal to the parent + 1. Tags within the history menu have |
49 // a range of [400,500) and do not go through CommandDispatch for their target- | 48 // a range of [400,500) and do not go through CommandDispatch for their target- |
50 // action mechanism. | 49 // action mechanism. |
51 // | 50 // |
52 // These menu items do not use firstResponder as their target. Rather, they are | 51 // These menu items do not use firstResponder as their target. Rather, they are |
53 // hooked directly up to the HistoryMenuCocoaController that then bridges back | 52 // hooked directly up to the HistoryMenuCocoaController that then bridges back |
54 // to this class. These items are created via the AddItemToMenu() helper. Also, | 53 // to this class. These items are created via the AddItemToMenu() helper. Also, |
55 // unlike the typical ownership model, this bridge owns its controller. The | 54 // unlike the typical ownership model, this bridge owns its controller. The |
56 // controller is very thin and only exists to interact with Cocoa, but this | 55 // controller is very thin and only exists to interact with Cocoa, but this |
57 // class does the bulk of the work. | 56 // class does the bulk of the work. |
58 class HistoryMenuBridge : public TabRestoreServiceObserver, | 57 class HistoryMenuBridge : public sessions::TabRestoreServiceObserver, |
59 public MainMenuItem, | 58 public MainMenuItem, |
60 public history::HistoryServiceObserver { | 59 public history::HistoryServiceObserver { |
61 public: | 60 public: |
62 // This is a generalization of the data we store in the history menu because | 61 // This is a generalization of the data we store in the history menu because |
63 // we pull things from different sources with different data types. | 62 // we pull things from different sources with different data types. |
64 struct HistoryItem { | 63 struct HistoryItem { |
65 public: | 64 public: |
66 HistoryItem(); | 65 HistoryItem(); |
67 // Copy constructor allowed. | 66 // Copy constructor allowed. |
68 HistoryItem(const HistoryItem& copy); | 67 HistoryItem(const HistoryItem& copy); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 kVisitedSeparator = 440, // Separator before visited section. | 118 kVisitedSeparator = 440, // Separator before visited section. |
120 kVisitedTitle = 441, // Title of the visited section. | 119 kVisitedTitle = 441, // Title of the visited section. |
121 kVisited = 460, // Used for all entries in the visited section. | 120 kVisited = 460, // Used for all entries in the visited section. |
122 kShowFullSeparator = 480 // Separator after the visited section. | 121 kShowFullSeparator = 480 // Separator after the visited section. |
123 }; | 122 }; |
124 | 123 |
125 explicit HistoryMenuBridge(Profile* profile); | 124 explicit HistoryMenuBridge(Profile* profile); |
126 ~HistoryMenuBridge() override; | 125 ~HistoryMenuBridge() override; |
127 | 126 |
128 // TabRestoreServiceObserver: | 127 // TabRestoreServiceObserver: |
129 void TabRestoreServiceChanged(TabRestoreService* service) override; | 128 void TabRestoreServiceChanged(sessions::TabRestoreService* service) override; |
130 void TabRestoreServiceDestroyed(TabRestoreService* service) override; | 129 void TabRestoreServiceDestroyed( |
| 130 sessions::TabRestoreService* service) override; |
131 | 131 |
132 // MainMenuItem: | 132 // MainMenuItem: |
133 void ResetMenu() override; | 133 void ResetMenu() override; |
134 void BuildMenu() override; | 134 void BuildMenu() override; |
135 | 135 |
136 // Looks up an NSMenuItem in the |menu_item_map_| and returns the | 136 // Looks up an NSMenuItem in the |menu_item_map_| and returns the |
137 // corresponding HistoryItem. | 137 // corresponding HistoryItem. |
138 HistoryItem* HistoryItemForMenuItem(NSMenuItem* item); | 138 HistoryItem* HistoryItemForMenuItem(NSMenuItem* item); |
139 | 139 |
140 // I wish I has a "friend @class" construct. These are used by the HMCC | 140 // I wish I has a "friend @class" construct. These are used by the HMCC |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 | 172 |
173 // Invoked when the History information has changed. | 173 // Invoked when the History information has changed. |
174 void OnHistoryChanged(); | 174 void OnHistoryChanged(); |
175 | 175 |
176 // Callback method for when HistoryService query results are ready with the | 176 // Callback method for when HistoryService query results are ready with the |
177 // most recently-visited sites. | 177 // most recently-visited sites. |
178 void OnVisitedHistoryResults(history::QueryResults* results); | 178 void OnVisitedHistoryResults(history::QueryResults* results); |
179 | 179 |
180 // Creates a HistoryItem* for the given tab entry. Caller takes ownership of | 180 // Creates a HistoryItem* for the given tab entry. Caller takes ownership of |
181 // the result and must delete it when finished. | 181 // the result and must delete it when finished. |
182 HistoryItem* HistoryItemForTab(const TabRestoreService::Tab& entry); | 182 HistoryItem* HistoryItemForTab(const sessions::TabRestoreService::Tab& entry); |
183 | 183 |
184 // Helper function that sends an async request to the FaviconService to get | 184 // Helper function that sends an async request to the FaviconService to get |
185 // an icon. The callback will update the NSMenuItem directly. | 185 // an icon. The callback will update the NSMenuItem directly. |
186 void GetFaviconForHistoryItem(HistoryItem* item); | 186 void GetFaviconForHistoryItem(HistoryItem* item); |
187 | 187 |
188 // Callback for the FaviconService to return favicon image data when we | 188 // Callback for the FaviconService to return favicon image data when we |
189 // request it. This decodes the raw data, updates the HistoryItem, and then | 189 // request it. This decodes the raw data, updates the HistoryItem, and then |
190 // sets the image on the menu. Called on the same same thread that | 190 // sets the image on the menu. Called on the same same thread that |
191 // GetFaviconForHistoryItem() was called on (UI thread). | 191 // GetFaviconForHistoryItem() was called on (UI thread). |
192 void GotFaviconData(HistoryItem* item, | 192 void GotFaviconData(HistoryItem* item, |
(...skipping 19 matching lines...) Expand all Loading... |
212 bool all_history, | 212 bool all_history, |
213 bool expired, | 213 bool expired, |
214 const history::URLRows& deleted_rows, | 214 const history::URLRows& deleted_rows, |
215 const std::set<GURL>& favicon_urls) override; | 215 const std::set<GURL>& favicon_urls) override; |
216 void OnHistoryServiceLoaded(history::HistoryService* service) override; | 216 void OnHistoryServiceLoaded(history::HistoryService* service) override; |
217 | 217 |
218 base::scoped_nsobject<HistoryMenuCocoaController> controller_; // strong | 218 base::scoped_nsobject<HistoryMenuCocoaController> controller_; // strong |
219 | 219 |
220 Profile* profile_; // weak | 220 Profile* profile_; // weak |
221 history::HistoryService* history_service_; // weak | 221 history::HistoryService* history_service_; // weak |
222 TabRestoreService* tab_restore_service_; // weak | 222 sessions::TabRestoreService* tab_restore_service_; // weak |
223 | 223 |
224 base::CancelableTaskTracker cancelable_task_tracker_; | 224 base::CancelableTaskTracker cancelable_task_tracker_; |
225 | 225 |
226 // Mapping of NSMenuItems to HistoryItems. This owns the HistoryItems until | 226 // Mapping of NSMenuItems to HistoryItems. This owns the HistoryItems until |
227 // they are removed and deleted via ClearMenuSection(). | 227 // they are removed and deleted via ClearMenuSection(). |
228 std::map<NSMenuItem*, HistoryItem*> menu_item_map_; | 228 std::map<NSMenuItem*, HistoryItem*> menu_item_map_; |
229 | 229 |
230 // Requests to re-create the menu are coalesced. |create_in_progress_| is true | 230 // Requests to re-create the menu are coalesced. |create_in_progress_| is true |
231 // when either waiting for the history service to return query results, or | 231 // when either waiting for the history service to return query results, or |
232 // when the menu is rebuilding. |need_recreate_| is true whenever a rebuild | 232 // when the menu is rebuilding. |need_recreate_| is true whenever a rebuild |
233 // has been scheduled but is waiting for the current one to finish. | 233 // has been scheduled but is waiting for the current one to finish. |
234 bool create_in_progress_; | 234 bool create_in_progress_; |
235 bool need_recreate_; | 235 bool need_recreate_; |
236 | 236 |
237 // The default favicon if a HistoryItem does not have one. | 237 // The default favicon if a HistoryItem does not have one. |
238 base::scoped_nsobject<NSImage> default_favicon_; | 238 base::scoped_nsobject<NSImage> default_favicon_; |
239 | 239 |
240 ScopedObserver<history::HistoryService, history::HistoryServiceObserver> | 240 ScopedObserver<history::HistoryService, history::HistoryServiceObserver> |
241 history_service_observer_; | 241 history_service_observer_; |
242 | 242 |
243 DISALLOW_COPY_AND_ASSIGN(HistoryMenuBridge); | 243 DISALLOW_COPY_AND_ASSIGN(HistoryMenuBridge); |
244 }; | 244 }; |
245 | 245 |
246 #endif // CHROME_BROWSER_UI_COCOA_HISTORY_MENU_BRIDGE_H_ | 246 #endif // CHROME_BROWSER_UI_COCOA_HISTORY_MENU_BRIDGE_H_ |
OLD | NEW |