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
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_UI_WEBUI_NTP_FOREIGN_SESSION_HANDLER_H_
6 #define CHROME_BROWSER_UI_WEBUI_NTP_FOREIGN_SESSION_HANDLER_H_
10 #include "base/time/time.h"
11 #include "chrome/browser/sessions/session_service.h"
12 #include "chrome/browser/sync/open_tabs_ui_delegate.h"
13 #include "content/public/browser/notification_observer.h"
14 #include "content/public/browser/notification_registrar.h"
15 #include "content/public/browser/web_ui.h"
16 #include "content/public/browser/web_ui_message_handler.h"
18 namespace user_prefs
{
19 class PrefRegistrySyncable
;
22 namespace browser_sync
{
24 class ForeignSessionHandler
: public content::WebUIMessageHandler
,
25 public content::NotificationObserver
{
27 // Invalid value, used to note that we don't have a tab or window number.
28 static const int kInvalidId
= -1;
30 // WebUIMessageHandler implementation.
31 virtual void RegisterMessages() OVERRIDE
;
33 ForeignSessionHandler();
34 virtual ~ForeignSessionHandler() {}
36 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable
* registry
);
38 static void OpenForeignSessionTab(content::WebUI
* web_ui
,
39 const std::string
& session_string_value
,
40 SessionID::id_type window_num
,
41 SessionID::id_type tab_id
,
42 const WindowOpenDisposition
& disposition
);
44 static void OpenForeignSessionWindows(content::WebUI
* web_ui
,
45 const std::string
& session_string_value
,
46 SessionID::id_type window_num
);
48 // Helper method to create JSON compatible objects from Session objects.
49 static bool SessionTabToValue(const SessionTab
& tab
,
50 base::DictionaryValue
* dictionary
);
52 // Returns a pointer to the current session model associator or NULL.
53 static OpenTabsUIDelegate
* GetOpenTabsUIDelegate(content::WebUI
* web_ui
);
56 // Used to register ForeignSessionHandler for notifications.
59 // Determines how ForeignSessionHandler will interact with the new tab page.
60 virtual void Observe(int type
,
61 const content::NotificationSource
& source
,
62 const content::NotificationDetails
& details
) OVERRIDE
;
64 // Returns true if tab sync is enabled for this profile, otherwise false.
65 bool IsTabSyncEnabled();
67 // Returns a string used to show the user when a session was last modified.
68 base::string16
FormatSessionTime(const base::Time
& time
);
70 // Determines which session is to be opened, and then calls
71 // OpenForeignSession, to begin the process of opening a new browser window.
72 // This is a javascript callback handler.
73 void HandleOpenForeignSession(const base::ListValue
* args
);
75 // Determines whether foreign sessions should be obtained from the sync model.
76 // This is a javascript callback handler, and it is also called when the sync
77 // model has changed and the new tab page needs to reflect the changes.
78 void HandleGetForeignSessions(const base::ListValue
* args
);
80 // Delete a foreign session. This will remove it from the list of foreign
81 // sessions on all devices. It will reappear if the session is re-activated
82 // on the original device.
83 // This is a javascript callback handler.
84 void HandleDeleteForeignSession(const base::ListValue
* args
);
86 void HandleSetForeignSessionCollapsed(const base::ListValue
* args
);
88 // Helper method to create JSON compatible objects from Session objects.
89 bool SessionWindowToValue(const SessionWindow
& window
,
90 base::DictionaryValue
* dictionary
);
92 // The Registrar used to register ForeignSessionHandler for notifications.
93 content::NotificationRegistrar registrar_
;
95 DISALLOW_COPY_AND_ASSIGN(ForeignSessionHandler
);
98 } // namespace browser_sync
100 #endif // CHROME_BROWSER_UI_WEBUI_NTP_FOREIGN_SESSION_HANDLER_H_