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

Unified Diff: chrome/browser/dom_ui/foreign_session_handler.cc

Issue 3825005: Fix syncing of sessions. Numerous changes have been made. Currently, the mode... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Rebased again Created 10 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
« no previous file with comments | « chrome/browser/dom_ui/foreign_session_handler.h ('k') | chrome/browser/dom_ui/ntp_resource_cache.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/dom_ui/foreign_session_handler.cc
===================================================================
--- chrome/browser/dom_ui/foreign_session_handler.cc (revision 63212)
+++ chrome/browser/dom_ui/foreign_session_handler.cc (working copy)
@@ -35,24 +35,30 @@
void ForeignSessionHandler::Init() {
registrar_.Add(this, NotificationType::SYNC_CONFIGURE_DONE,
- NotificationService::AllSources());
+ NotificationService::AllSources());
registrar_.Add(this, NotificationType::FOREIGN_SESSION_UPDATED,
- NotificationService::AllSources());
- registrar_.Add(this, NotificationType::FOREIGN_SESSION_DELETED,
- NotificationService::AllSources());
+ NotificationService::AllSources());
+ registrar_.Add(this, NotificationType::FOREIGN_SESSION_DISABLED,
+ NotificationService::AllSources());
}
void ForeignSessionHandler::Observe(NotificationType type,
const NotificationSource& source,
const NotificationDetails& details) {
- if (type != NotificationType::SYNC_CONFIGURE_DONE &&
- type != NotificationType::FOREIGN_SESSION_UPDATED &&
- type != NotificationType::FOREIGN_SESSION_DELETED) {
- NOTREACHED();
- return;
+ ListValue list_value;
+ switch (type.value) {
+ case NotificationType::SYNC_CONFIGURE_DONE:
+ case NotificationType::FOREIGN_SESSION_UPDATED:
+ HandleGetForeignSessions(&list_value);
+ break;
+ case NotificationType::FOREIGN_SESSION_DISABLED:
+ // Calling foreignSessions with empty list will automatically hide
+ // foreign session section.
+ dom_ui_->CallJavascriptFunction(L"foreignSessions", list_value);
+ break;
+ default:
+ NOTREACHED();
}
- ListValue list_value;
- HandleGetForeignSessions(&list_value);
}
SessionModelAssociator* ForeignSessionHandler::GetModelAssociator() {
@@ -106,36 +112,49 @@
void ForeignSessionHandler::GetForeignSessions(
SessionModelAssociator* associator) {
- ScopedVector<ForeignSession> windows;
- associator->GetSessionDataFromSyncModel(&windows.get());
+ ScopedVector<ForeignSession> clients;
+ if (!associator->GetSessionData(&clients.get())) {
+ LOG(ERROR) << "ForeignSessionHandler failed to get session data from"
+ "SessionModelAssociator.";
+ return;
+ }
int added_count = 0;
- ListValue list_value;
+ ListValue client_list;
for (std::vector<ForeignSession*>::const_iterator i =
- windows.begin(); i != windows.end() &&
+ clients->begin(); i != clients->end() &&
added_count < kMaxSessionsToShow; ++i) {
ForeignSession* foreign_session = *i;
std::vector<TabRestoreService::Entry*> entries;
dom_ui_->GetProfile()->GetTabRestoreService()->CreateEntriesFromWindows(
&foreign_session->windows, &entries);
+ scoped_ptr<ListValue> window_list(new ListValue());
for (std::vector<TabRestoreService::Entry*>::const_iterator it =
entries.begin(); it != entries.end(); ++it) {
TabRestoreService::Entry* entry = *it;
- scoped_ptr<DictionaryValue> value(new DictionaryValue());
+ scoped_ptr<DictionaryValue> window_data(new DictionaryValue());
if (entry->type == TabRestoreService::WINDOW &&
ValueHelper::WindowToValue(
- *static_cast<TabRestoreService::Window*>(entry), value.get())) {
+ *static_cast<TabRestoreService::Window*>(entry),
+ window_data.get())) {
// The javascript checks if the session id is a valid session id,
// when rendering session information to the new tab page, and it
// sends the sessionTag back when we need to restore a session.
- value->SetString("sessionTag", foreign_session->foreign_tession_tag);
- value->SetInteger("sessionId", entry->id);
- list_value.Append(value.release()); // Give ownership to |list_value|.
+
+ // TODO(zea): sessionTag is per client, it might be better per window.
+ window_data->SetString("sessionTag",
+ foreign_session->foreign_tession_tag);
+ window_data->SetInteger("sessionId", entry->id);
+
+ // Give ownership to |list_value|.
+ window_list->Append(window_data.release());
}
}
added_count++;
+
+ // Give ownership to |client_list|
+ client_list.Append(window_list.release());
}
- dom_ui_->CallJavascriptFunction(L"foreignSessions", list_value);
+ dom_ui_->CallJavascriptFunction(L"foreignSessions", client_list);
}
} // namespace browser_sync
-
Property changes on: chrome/browser/dom_ui/foreign_session_handler.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/dom_ui/foreign_session_handler.h ('k') | chrome/browser/dom_ui/ntp_resource_cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698