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 4a6bbaed1601a893c36c1a9f65c796fe3fc52ed2..b9d9e56b9f972ef7b2de12fac6788c87d948f019 100644 |
--- a/chrome/browser/ui/webui/ntp/foreign_session_handler.cc |
+++ b/chrome/browser/ui/webui/ntp/foreign_session_handler.cc |
@@ -21,13 +21,14 @@ |
#include "chrome/browser/ui/webui/web_ui_util.h" |
#include "chrome/common/chrome_notification_types.h" |
#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" |
namespace browser_sync { |
// Maximum number of session we're going to display on the NTP |
-static const int kMaxSessionsToShow = 10; |
+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; |
@@ -63,12 +64,8 @@ void ForeignSessionHandler::Observe( |
switch (type) { |
case chrome::NOTIFICATION_SYNC_CONFIGURE_DONE: |
case chrome::NOTIFICATION_FOREIGN_SESSION_UPDATED: |
- HandleGetForeignSessions(&list_value); |
- break; |
case chrome::NOTIFICATION_FOREIGN_SESSION_DISABLED: |
- // Calling foreignSessions with empty list will automatically hide |
- // foreign session section. |
- web_ui()->CallJavascriptFunction("ntp.foreignSessions", list_value); |
+ HandleGetForeignSessions(&list_value); |
break; |
default: |
NOTREACHED(); |
@@ -76,13 +73,13 @@ void ForeignSessionHandler::Observe( |
} |
SessionModelAssociator* ForeignSessionHandler::GetModelAssociator() { |
- ProfileSyncService* service(ProfileSyncServiceFactory:: |
- GetInstance()->GetForProfile(Profile::FromWebUI(web_ui()))); |
+ Profile* profile = Profile::FromWebUI(web_ui()); |
+ ProfileSyncService* service = |
+ ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile); |
if (service == NULL) |
return NULL; |
- // We only want to set the model associator if there is one, and it is done |
- // syncing sessions. |
+ // Only return the associator if it exists and it is done syncing sessions. |
SessionModelAssociator* model_associator = |
service->GetSessionModelAssociator(); |
if (!service->ShouldPushChanges()) |
@@ -90,44 +87,42 @@ SessionModelAssociator* ForeignSessionHandler::GetModelAssociator() { |
return model_associator; |
} |
+bool ForeignSessionHandler::IsTabSyncEnabled() { |
+ Profile* profile = Profile::FromWebUI(web_ui()); |
+ ProfileSyncService* service = |
+ ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile); |
+ return service && service->GetSessionModelAssociator(); |
+} |
+ |
void ForeignSessionHandler::HandleGetForeignSessions(const ListValue* args) { |
SessionModelAssociator* associator = GetModelAssociator(); |
std::vector<const SyncedSession*> sessions; |
- if (associator == NULL) { |
- // Called before associator created, exit. |
- return; |
- } |
- |
- // Note: we don't own the SyncedSessions themselves. |
- if (!associator->GetAllForeignSessions(&sessions)) { |
- LOG(ERROR) << "ForeignSessionHandler failed to get session data from" |
- "SessionModelAssociator."; |
- return; |
- } |
- int added_count = 0; |
ListValue session_list; |
- for (std::vector<const SyncedSession*>::const_iterator i = |
- sessions.begin(); i != sessions.end() && |
- added_count < kMaxSessionsToShow; ++i) { |
- const SyncedSession* session = *i; |
- scoped_ptr<DictionaryValue> session_data(new DictionaryValue()); |
- session_data->SetString("tag", session->session_tag); |
- session_data->SetString("name", session->session_name); |
- scoped_ptr<ListValue> window_list(new ListValue()); |
- for (SyncedSession::SyncedWindowMap::const_iterator it = |
- session->windows.begin(); it != session->windows.end(); ++it) { |
- SessionWindow* window = it->second; |
- scoped_ptr<DictionaryValue> window_data(new DictionaryValue()); |
- if (SessionWindowToValue(*window, window_data.get())) { |
- window_list->Append(window_data.release()); |
+ if (associator && associator->GetAllForeignSessions(&sessions)) { |
+ // Note: we don't own the SyncedSessions themselves. |
+ for (size_t i = 0; i < sessions.size() && i < kMaxSessionsToShow; ++i) { |
+ const SyncedSession* session = sessions[i]; |
+ scoped_ptr<DictionaryValue> session_data(new DictionaryValue()); |
+ session_data->SetString("tag", session->session_tag); |
+ session_data->SetString("name", session->session_name); |
+ scoped_ptr<ListValue> window_list(new ListValue()); |
+ for (SyncedSession::SyncedWindowMap::const_iterator it = |
+ session->windows.begin(); it != session->windows.end(); ++it) { |
+ SessionWindow* window = it->second; |
+ scoped_ptr<DictionaryValue> window_data(new DictionaryValue()); |
+ if (SessionWindowToValue(*window, window_data.get())) |
+ window_list->Append(window_data.release()); |
} |
+ |
+ session_data->Set("windows", window_list.release()); |
+ session_list.Append(session_data.release()); |
} |
- session_data->Set("windows", window_list.release()); |
- session_list.Append(session_data.release()); |
- added_count++; |
} |
- web_ui()->CallJavascriptFunction("ntp.foreignSessions", session_list); |
+ base::FundamentalValue tab_sync_enabled(IsTabSyncEnabled()); |
+ web_ui()->CallJavascriptFunction("ntp.setForeignSessions", |
+ session_list, |
+ tab_sync_enabled); |
} |
void ForeignSessionHandler::HandleOpenForeignSession( |