Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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_TOOLBAR_RECENT_TABS_SUB_MENU_MODEL_H_ | 5 #ifndef CHROME_BROWSER_UI_TOOLBAR_RECENT_TABS_SUB_MENU_MODEL_H_ |
| 6 #define CHROME_BROWSER_UI_TOOLBAR_RECENT_TABS_SUB_MENU_MODEL_H_ | 6 #define CHROME_BROWSER_UI_TOOLBAR_RECENT_TABS_SUB_MENU_MODEL_H_ |
| 7 | 7 |
| 8 #include <set> | 8 #include <set> |
| 9 | 9 |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| 11 #include "base/memory/weak_ptr.h" | 11 #include "base/memory/weak_ptr.h" |
| 12 #include "base/task/cancelable_task_tracker.h" | 12 #include "base/task/cancelable_task_tracker.h" |
| 13 #include "base/timer/elapsed_timer.h" | 13 #include "base/timer/elapsed_timer.h" |
| 14 #include "components/favicon/core/favicon_service.h" | 14 #include "components/favicon/core/favicon_service.h" |
| 15 #include "components/sessions/core/tab_restore_service.h" | 15 #include "components/sessions/core/tab_restore_service.h" |
| 16 #include "components/sessions/core/tab_restore_service_observer.h" | 16 #include "components/sessions/core/tab_restore_service_observer.h" |
| 17 #include "components/sync/driver/sync_service_observer.h" | |
| 17 #include "components/sync_sessions/synced_session.h" | 18 #include "components/sync_sessions/synced_session.h" |
| 18 #include "ui/base/accelerators/accelerator.h" | 19 #include "ui/base/accelerators/accelerator.h" |
| 19 #include "ui/base/models/simple_menu_model.h" | 20 #include "ui/base/models/simple_menu_model.h" |
| 20 | 21 |
| 21 class Browser; | 22 class Browser; |
| 22 | 23 |
| 23 namespace favicon_base { | 24 namespace favicon_base { |
| 24 struct FaviconImageResult; | 25 struct FaviconImageResult; |
| 25 } | 26 } |
| 26 | 27 |
| 27 namespace gfx { | 28 namespace gfx { |
| 28 class Image; | 29 class Image; |
| 29 } | 30 } |
| 30 | 31 |
| 31 namespace sessions { | 32 namespace sessions { |
| 32 struct SessionTab; | 33 struct SessionTab; |
| 33 } | 34 } |
| 34 | 35 |
| 35 namespace sync_sessions { | 36 namespace sync_sessions { |
| 36 class OpenTabsUIDelegate; | 37 class OpenTabsUIDelegate; |
| 37 } | 38 } |
| 38 | 39 |
| 40 namespace syncer { | |
| 41 class SyncService; | |
| 42 } // namespace syncer | |
| 43 | |
| 39 namespace ui { | 44 namespace ui { |
| 40 class AcceleratorProvider; | 45 class AcceleratorProvider; |
| 41 } | 46 } |
| 42 | 47 |
| 43 // A menu model that builds the contents of "Recent tabs" submenu, which include | 48 // A menu model that builds the contents of "Recent tabs" submenu, which include |
| 44 // the recently closed tabs/windows of current device i.e. local entries, and | 49 // the recently closed tabs/windows of current device i.e. local entries, and |
| 45 // opened tabs of other devices. | 50 // opened tabs of other devices. |
| 46 class RecentTabsSubMenuModel : public ui::SimpleMenuModel, | 51 class RecentTabsSubMenuModel : public ui::SimpleMenuModel, |
| 47 public ui::SimpleMenuModel::Delegate, | 52 public ui::SimpleMenuModel::Delegate, |
| 48 public sessions::TabRestoreServiceObserver { | 53 public sessions::TabRestoreServiceObserver, |
| 54 public syncer::SyncServiceObserver { | |
| 49 public: | 55 public: |
| 50 // Command Id for recently closed items header or disabled item to which the | 56 // Command Id for recently closed items header or disabled item to which the |
| 51 // accelerator string will be appended. | 57 // accelerator string will be appended. |
| 52 static const int kRecentlyClosedHeaderCommandId; | 58 static const int kRecentlyClosedHeaderCommandId; |
| 53 static const int kDisabledRecentlyClosedHeaderCommandId; | 59 static const int kDisabledRecentlyClosedHeaderCommandId; |
| 54 | 60 |
| 55 // Exposed for tests only: return the Command Id for the first entry in the | 61 // Exposed for tests only: return the Command Id for the first entry in the |
| 56 // recently closed window items list. | 62 // recently closed window items list. |
| 57 static int GetFirstRecentTabsCommandId(); | 63 static int GetFirstRecentTabsCommandId(); |
| 58 | 64 |
| 59 // If |open_tabs_delegate| is NULL, the default delegate for |browser|'s | 65 // If |open_tabs_delegate| is NULL, the default delegate for |browser|'s |
| 60 // profile will be used. Testing may require a specific |open_tabs_delegate|. | 66 // profile will be used. |
| 61 RecentTabsSubMenuModel(ui::AcceleratorProvider* accelerator_provider, | 67 RecentTabsSubMenuModel(ui::AcceleratorProvider* accelerator_provider, |
| 62 Browser* browser, | 68 Browser* browser); |
| 63 sync_sessions::OpenTabsUIDelegate* open_tabs_delegate); | |
| 64 ~RecentTabsSubMenuModel() override; | 69 ~RecentTabsSubMenuModel() override; |
| 65 | 70 |
| 66 // Overridden from ui::SimpleMenuModel::Delegate: | 71 // Overridden from ui::SimpleMenuModel::Delegate: |
| 67 bool IsCommandIdChecked(int command_id) const override; | 72 bool IsCommandIdChecked(int command_id) const override; |
| 68 bool IsCommandIdEnabled(int command_id) const override; | 73 bool IsCommandIdEnabled(int command_id) const override; |
| 69 bool GetAcceleratorForCommandId(int command_id, | 74 bool GetAcceleratorForCommandId(int command_id, |
| 70 ui::Accelerator* accelerator) const override; | 75 ui::Accelerator* accelerator) const override; |
| 71 void ExecuteCommand(int command_id, int event_flags) override; | 76 void ExecuteCommand(int command_id, int event_flags) override; |
| 72 const gfx::FontList* GetLabelFontListAt(int index) const override; | 77 const gfx::FontList* GetLabelFontListAt(int index) const override; |
| 73 | 78 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 115 // Add the favicon for a local or other devices' tab asynchronously, | 120 // Add the favicon for a local or other devices' tab asynchronously, |
| 116 // OnFaviconDataAvailable() will be invoked when the favicon is ready. | 121 // OnFaviconDataAvailable() will be invoked when the favicon is ready. |
| 117 void AddTabFavicon(int command_id, const GURL& url); | 122 void AddTabFavicon(int command_id, const GURL& url); |
| 118 void OnFaviconDataAvailable( | 123 void OnFaviconDataAvailable( |
| 119 int command_id, | 124 int command_id, |
| 120 const favicon_base::FaviconImageResult& image_result); | 125 const favicon_base::FaviconImageResult& image_result); |
| 121 | 126 |
| 122 // Clear all recently closed tabs and windows. | 127 // Clear all recently closed tabs and windows. |
| 123 void ClearLocalEntries(); | 128 void ClearLocalEntries(); |
| 124 | 129 |
| 130 // Clear all tabs from other devices. | |
|
Peter Kasting
2017/03/23 04:48:34
Nit: Clear -> Clears; see http://google.github.io/
Peter Kasting
2017/03/24 00:06:27
Looks like you removed this comment instead of upd
| |
| 131 void ClearTabsFromOtherDevices(); | |
| 132 | |
| 125 // Converts |command_id| of menu item to index in local or other devices' | 133 // Converts |command_id| of menu item to index in local or other devices' |
| 126 // TabNavigationItems, and returns the corresponding local or other devices' | 134 // TabNavigationItems, and returns the corresponding local or other devices' |
| 127 // TabNavigationItems in |tab_items|. | 135 // TabNavigationItems in |tab_items|. |
| 128 int CommandIdToTabVectorIndex(int command_id, TabNavigationItems** tab_items); | 136 int CommandIdToTabVectorIndex(int command_id, TabNavigationItems** tab_items); |
| 129 | 137 |
| 130 // Used to access (and lazily initialize) open_tabs_delegate_. | 138 // Used to access (and lazily initialize) open_tabs_delegate_. |
| 131 // TODO(tim): This lazy-init for member variables is error prone because you | 139 // TODO(tim): This lazy-init for member variables is error prone because you |
| 132 // can always skip going through the function and access the field directly. | 140 // can always skip going through the function and access the field directly. |
| 133 // Consider instead having code just deal with potentially NULL open_tabs_ | 141 // Consider instead having code just deal with potentially NULL open_tabs_ |
| 134 // and have it initialized by an event / callback. | 142 // and have it initialized by an event / callback. |
| 135 sync_sessions::OpenTabsUIDelegate* GetOpenTabsUIDelegate(); | 143 sync_sessions::OpenTabsUIDelegate* GetOpenTabsUIDelegate(); |
| 136 | 144 |
| 137 // Overridden from TabRestoreServiceObserver: | 145 // Overridden from TabRestoreServiceObserver: |
| 138 void TabRestoreServiceChanged(sessions::TabRestoreService* service) override; | 146 void TabRestoreServiceChanged(sessions::TabRestoreService* service) override; |
| 139 void TabRestoreServiceDestroyed( | 147 void TabRestoreServiceDestroyed( |
| 140 sessions::TabRestoreService* service) override; | 148 sessions::TabRestoreService* service) override; |
| 141 | 149 |
| 150 // Overridden from syncer::SyncServiceObserver | |
|
Peter Kasting
2017/03/23 04:48:34
Nit: Trailing colon
Peter Kasting
2017/03/24 00:06:27
Looks like you removed the namespace instead of ad
| |
| 151 void OnSyncCycleCompleted(syncer::SyncService* sync) override {} | |
|
Peter Kasting
2017/03/23 04:48:34
Nit: I'd weakly prefer defining this in the .cc th
| |
| 152 void OnForeignSessionUpdated(syncer::SyncService* sync) override; | |
| 153 | |
| 142 Browser* browser_; // Weak. | 154 Browser* browser_; // Weak. |
| 143 | 155 |
| 144 sync_sessions::OpenTabsUIDelegate* open_tabs_delegate_; // Weak. | 156 sync_sessions::OpenTabsUIDelegate* open_tabs_delegate_ = nullptr; // Weak. |
|
Peter Kasting
2017/03/23 04:48:34
Nit: I'm a fan of initializing at the declaration
| |
| 145 | 157 |
| 146 // Accelerator for reopening last closed tab. | 158 // Accelerator for reopening last closed tab. |
| 147 ui::Accelerator reopen_closed_tab_accelerator_; | 159 ui::Accelerator reopen_closed_tab_accelerator_; |
| 148 | 160 |
| 149 // Accelerator for showing history. | 161 // Accelerator for showing history. |
| 150 ui::Accelerator show_history_accelerator_; | 162 ui::Accelerator show_history_accelerator_; |
| 151 | 163 |
| 152 // Navigation items for local recently closed tabs. The |command_id| for | 164 // Navigation items for local recently closed tabs. The |command_id| for |
| 153 // these is set to |kFirstLocalTabCommandId| plus the index into the vector. | 165 // these is set to |kFirstLocalTabCommandId| plus the index into the vector. |
| 154 // Upon invocation of the menu, the navigation information is retrieved from | 166 // Upon invocation of the menu, the navigation information is retrieved from |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 177 | 189 |
| 178 // Time the menu is open for until a recent tab is selected. | 190 // Time the menu is open for until a recent tab is selected. |
| 179 base::ElapsedTimer menu_opened_timer_; | 191 base::ElapsedTimer menu_opened_timer_; |
| 180 | 192 |
| 181 base::WeakPtrFactory<RecentTabsSubMenuModel> weak_ptr_factory_; | 193 base::WeakPtrFactory<RecentTabsSubMenuModel> weak_ptr_factory_; |
| 182 | 194 |
| 183 DISALLOW_COPY_AND_ASSIGN(RecentTabsSubMenuModel); | 195 DISALLOW_COPY_AND_ASSIGN(RecentTabsSubMenuModel); |
| 184 }; | 196 }; |
| 185 | 197 |
| 186 #endif // CHROME_BROWSER_UI_TOOLBAR_RECENT_TABS_SUB_MENU_MODEL_H_ | 198 #endif // CHROME_BROWSER_UI_TOOLBAR_RECENT_TABS_SUB_MENU_MODEL_H_ |
| OLD | NEW |