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

Unified Diff: chrome/browser/ui/webui/ntp/foreign_session_handler.cc

Issue 11009013: NTP5: Starting implementation of a native menu for showing other device sessions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use screenX instead of clientX. Created 8 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/ntp/foreign_session_handler.cc
diff --git a/chrome/browser/ui/webui/ntp/foreign_session_handler.cc b/chrome/browser/ui/webui/ntp/foreign_session_handler.cc
index 3de215c6b91670b84fa1f4a868bb93b21743805d..b0f787c4300b3547d773a17f18b5b06e05d258cf 100644
--- a/chrome/browser/ui/webui/ntp/foreign_session_handler.cc
+++ b/chrome/browser/ui/webui/ntp/foreign_session_handler.cc
@@ -20,6 +20,7 @@
#include "chrome/browser/sessions/session_restore.h"
#include "chrome/browser/sync/profile_sync_service.h"
#include "chrome/browser/sync/profile_sync_service_factory.h"
+#include "chrome/browser/ui/search/other_device_menu.h"
#include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
#include "chrome/browser/ui/webui/session_favicon_source.h"
#include "chrome/browser/ui/webui/web_ui_util.h"
@@ -29,18 +30,14 @@
#include "chrome/common/url_constants.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_source.h"
-#include "content/public/browser/web_ui.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
namespace browser_sync {
-// Maximum number of session we're going to display on the NTP
+// Maximum number of sessions we're going to display on the NTP
static const size_t kMaxSessionsToShow = 10;
-// Invalid value, used to note that we don't have a tab or window number.
-static const int kInvalidId = -1;
-
namespace {
// Comparator function for use with std::sort that will sort sessions by
@@ -60,6 +57,87 @@ void ForeignSessionHandler::RegisterUserPrefs(PrefService* prefs) {
PrefService::UNSYNCABLE_PREF);
}
+// static
+void ForeignSessionHandler::OpenForeignSession(
+ content::WebUI* web_ui,
+ const std::string& session_string_value,
+ SessionID::id_type window_num,
+ SessionID::id_type tab_id,
+ const WindowOpenDisposition& disposition) {
+
+ SessionModelAssociator* associator = GetModelAssociator(web_ui);
+ if (!associator)
+ return;
+
+ if (tab_id != kInvalidId) {
+ // We don't actually care about |window_num|, this is just a sanity check.
+ DCHECK_LT(kInvalidId, window_num);
+ const SessionTab* tab;
+ if (!associator->GetForeignTab(session_string_value, tab_id, &tab)) {
+ LOG(ERROR) << "Failed to load foreign tab.";
+ return;
+ }
+ SessionRestore::RestoreForeignSessionTab(
+ web_ui->GetWebContents(), *tab, disposition);
+ } else {
+ std::vector<const SessionWindow*> windows;
+ // Note: we don't own the ForeignSessions themselves.
+ if (!associator->GetForeignSession(session_string_value, &windows)) {
+ LOG(ERROR) << "ForeignSessionHandler failed to get session data from"
+ "SessionModelAssociator.";
+ return;
+ }
+ std::vector<const SessionWindow*>::const_iterator iter_begin =
+ windows.begin() + ((window_num == kInvalidId) ? 0 : window_num);
+ std::vector<const SessionWindow*>::const_iterator iter_end =
+ ((window_num == kInvalidId) ?
+ std::vector<const SessionWindow*>::const_iterator(windows.end()) :
+ iter_begin + 1);
+ SessionRestore::RestoreForeignSessionWindows(
+ Profile::FromWebUI(web_ui), iter_begin, iter_end);
+ }
+}
+
+// static
+bool ForeignSessionHandler::SessionTabToValue(
+ const SessionTab& tab,
+ DictionaryValue* dictionary) {
+ if (tab.navigations.empty())
+ return false;
+ int selected_index = tab.current_navigation_index;
dhollowa 2012/10/08 19:15:09 nit: combine lines 107 and 108?
jeremycho 2012/10/09 01:52:13 Done.
+ selected_index = std::max(
+ 0,
+ std::min(selected_index,
+ static_cast<int>(tab.navigations.size() - 1)));
+ const TabNavigation& current_navigation =
+ tab.navigations.at(selected_index);
+ GURL tab_url = current_navigation.virtual_url();
+ if (tab_url == GURL(chrome::kChromeUINewTabURL))
+ return false;
+ NewTabUI::SetUrlTitleAndDirection(dictionary, current_navigation.title(),
+ tab_url);
+ dictionary->SetString("type", "tab");
+ dictionary->SetDouble("timestamp",
+ static_cast<double>(tab.timestamp.ToInternalValue()));
+ // TODO(jeremycho): Rename to tabId?
dhollowa 2012/10/08 19:15:09 What's the answer?
jeremycho 2012/10/09 01:52:13 I think it makes sense, but this name is used in t
dhollowa 2012/10/09 15:13:42 Ok, then please reflect this intention in the comm
jeremycho 2012/10/09 19:45:38 Done.
+ dictionary->SetInteger("sessionId", tab.tab_id.id());
+ return true;
+}
+
+// static
+SessionModelAssociator* ForeignSessionHandler::GetModelAssociator(
+ content::WebUI* web_ui) {
+ Profile* profile = Profile::FromWebUI(web_ui);
+ ProfileSyncService* service =
+ ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile);
+
+ // Only return the associator if it exists and it is done syncing sessions.
+ if (service && service->ShouldPushChanges())
+ return service->GetSessionModelAssociator();
+
+ return NULL;
+}
+
void ForeignSessionHandler::RegisterMessages() {
Init();
web_ui()->RegisterMessageCallback("getForeignSessions",
@@ -113,17 +191,6 @@ void ForeignSessionHandler::Observe(
}
}
-SessionModelAssociator* ForeignSessionHandler::GetModelAssociator() {
- Profile* profile = Profile::FromWebUI(web_ui());
- ProfileSyncService* service =
- ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile);
-
- // Only return the associator if it exists and it is done syncing sessions.
- if (service && service->ShouldPushChanges())
- return service->GetSessionModelAssociator();
-
- return NULL;
-}
bool ForeignSessionHandler::IsTabSyncEnabled() {
Profile* profile = Profile::FromWebUI(web_ui());
@@ -138,7 +205,7 @@ string16 ForeignSessionHandler::FormatSessionTime(const base::Time& time) {
}
void ForeignSessionHandler::HandleGetForeignSessions(const ListValue* args) {
- SessionModelAssociator* associator = GetModelAssociator();
+ SessionModelAssociator* associator = GetModelAssociator(web_ui());
std::vector<const SyncedSession*> sessions;
ListValue session_list;
@@ -229,39 +296,11 @@ void ForeignSessionHandler::HandleOpenForeignSession(const ListValue* args) {
return;
}
- SessionModelAssociator* associator = GetModelAssociator();
- if (!associator)
- return;
+ WindowOpenDisposition disposition =
+ web_ui_util::GetDispositionFromClick(args, 3);
- if (tab_id != kInvalidId) {
- // We don't actually care about |window_num|, this is just a sanity check.
- DCHECK_LT(kInvalidId, window_num);
- const SessionTab* tab;
- if (!associator->GetForeignTab(session_string_value, tab_id, &tab)) {
- LOG(ERROR) << "Failed to load foreign tab.";
- return;
- }
- WindowOpenDisposition disposition =
- web_ui_util::GetDispositionFromClick(args, 3);
- SessionRestore::RestoreForeignSessionTab(
- web_ui()->GetWebContents(), *tab, disposition);
- } else {
- std::vector<const SessionWindow*> windows;
- // Note: we don't own the ForeignSessions themselves.
- if (!associator->GetForeignSession(session_string_value, &windows)) {
- LOG(ERROR) << "ForeignSessionHandler failed to get session data from"
- "SessionModelAssociator.";
- return;
- }
- std::vector<const SessionWindow*>::const_iterator iter_begin =
- windows.begin() + ((window_num == kInvalidId) ? 0 : window_num);
- std::vector<const SessionWindow*>::const_iterator iter_end =
- ((window_num == kInvalidId) ?
- std::vector<const SessionWindow*>::const_iterator(windows.end()) :
- iter_begin + 1);
- SessionRestore::RestoreForeignSessionWindows(
- Profile::FromWebUI(web_ui()), iter_begin, iter_end);
- }
+ OpenForeignSession(
+ web_ui(), session_string_value, window_num, tab_id, disposition);
}
void ForeignSessionHandler::HandleSetForeignSessionCollapsed(
@@ -312,31 +351,10 @@ void ForeignSessionHandler::HandleShowOtherDeviceSessionPopup(
double client_y;
CHECK(args->GetDouble(2, &client_y));
- // TODO(vadimt): implement this method.
-}
-
-bool ForeignSessionHandler::SessionTabToValue(
- const SessionTab& tab,
- DictionaryValue* dictionary) {
- if (tab.navigations.empty())
- return false;
- int selected_index = tab.current_navigation_index;
- selected_index = std::max(
- 0,
- std::min(selected_index,
- static_cast<int>(tab.navigations.size() - 1)));
- const TabNavigation& current_navigation =
- tab.navigations.at(selected_index);
- GURL tab_url = current_navigation.virtual_url();
- if (tab_url == GURL(chrome::kChromeUINewTabURL))
- return false;
- NewTabUI::SetUrlTitleAndDirection(dictionary, current_navigation.title(),
- tab_url);
- dictionary->SetString("type", "tab");
- dictionary->SetDouble("timestamp",
- static_cast<double>(tab.timestamp.ToInternalValue()));
- dictionary->SetInteger("sessionId", tab.tab_id.id());
- return true;
+ OtherDeviceMenu* menu = new OtherDeviceMenu(
+ web_ui(),
+ session_string_value, gfx::Point(client_x, client_y));
+ menu->ShowMenu();
}
bool ForeignSessionHandler::SessionWindowToValue(

Powered by Google App Engine
This is Rietveld 408576698