Index: chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h |
diff --git a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h |
index 0c5b74c1196f47f0c2159d9664e3d0889faefdbe..7d21280f35bc841bdc8140bf42baa48caba53e67 100644 |
--- a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h |
+++ b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h |
@@ -9,11 +9,13 @@ |
#include "base/macros.h" |
#include "base/memory/weak_ptr.h" |
+#include "base/scoped_observer.h" |
#include "base/task/cancelable_task_tracker.h" |
#include "base/timer/elapsed_timer.h" |
#include "components/favicon/core/favicon_service.h" |
#include "components/sessions/core/tab_restore_service.h" |
#include "components/sessions/core/tab_restore_service_observer.h" |
+#include "components/sync/driver/sync_service_observer.h" |
#include "components/sync_sessions/synced_session.h" |
#include "ui/base/accelerators/accelerator.h" |
#include "ui/base/models/simple_menu_model.h" |
@@ -36,6 +38,11 @@ namespace sync_sessions { |
class OpenTabsUIDelegate; |
} |
+namespace syncer { |
+class SyncService; |
+class SyncServiceBase; |
+} // namespace syncer |
+ |
namespace ui { |
class AcceleratorProvider; |
} |
@@ -45,7 +52,8 @@ class AcceleratorProvider; |
// opened tabs of other devices. |
class RecentTabsSubMenuModel : public ui::SimpleMenuModel, |
public ui::SimpleMenuModel::Delegate, |
- public sessions::TabRestoreServiceObserver { |
+ public sessions::TabRestoreServiceObserver, |
+ public syncer::SyncServiceObserver { |
public: |
// Command Id for recently closed items header or disabled item to which the |
// accelerator string will be appended. |
@@ -57,10 +65,9 @@ class RecentTabsSubMenuModel : public ui::SimpleMenuModel, |
static int GetFirstRecentTabsCommandId(); |
// If |open_tabs_delegate| is NULL, the default delegate for |browser|'s |
- // profile will be used. Testing may require a specific |open_tabs_delegate|. |
+ // profile will be used. |
RecentTabsSubMenuModel(ui::AcceleratorProvider* accelerator_provider, |
- Browser* browser, |
- sync_sessions::OpenTabsUIDelegate* open_tabs_delegate); |
+ Browser* browser); |
~RecentTabsSubMenuModel() override; |
// Overridden from ui::SimpleMenuModel::Delegate: |
@@ -122,6 +129,9 @@ class RecentTabsSubMenuModel : public ui::SimpleMenuModel, |
// Clear all recently closed tabs and windows. |
void ClearLocalEntries(); |
+ // Clears all tabs from other devices. |
+ void ClearTabsFromOtherDevices(); |
+ |
// Converts |command_id| of menu item to index in local or other devices' |
// TabNavigationItems, and returns the corresponding local or other devices' |
// TabNavigationItems in |tab_items|. |
@@ -139,6 +149,10 @@ class RecentTabsSubMenuModel : public ui::SimpleMenuModel, |
void TabRestoreServiceDestroyed( |
sessions::TabRestoreService* service) override; |
+ // Overridden from syncer::SyncServiceObserver: |
+ void OnSyncConfigurationCompleted(syncer::SyncService* sync) override; |
+ void OnForeignSessionUpdated(syncer::SyncService* sync) override; |
+ |
Browser* browser_; // Weak. |
sync_sessions::OpenTabsUIDelegate* open_tabs_delegate_; // Weak. |
@@ -178,6 +192,15 @@ class RecentTabsSubMenuModel : public ui::SimpleMenuModel, |
// Time the menu is open for until a recent tab is selected. |
base::ElapsedTimer menu_opened_timer_; |
+// Mac doesn't support the dynamic menu. |
+#if !defined(OS_MACOSX) |
+ ScopedObserver<sessions::TabRestoreService, RecentTabsSubMenuModel> |
+ tab_restore_service_observer_; |
+ |
+ ScopedObserver<syncer::SyncServiceBase, RecentTabsSubMenuModel> |
+ sync_observer_; |
+#endif |
+ |
base::WeakPtrFactory<RecentTabsSubMenuModel> weak_ptr_factory_; |
DISALLOW_COPY_AND_ASSIGN(RecentTabsSubMenuModel); |