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

Unified Diff: chrome/browser/sync/glue/session_model_associator.cc

Issue 10917231: Revamp TabNavigation class (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Mac Created 8 years, 3 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/sync/glue/session_model_associator.cc
diff --git a/chrome/browser/sync/glue/session_model_associator.cc b/chrome/browser/sync/glue/session_model_associator.cc
index 0457f7241c4dd6511e1f02ad88a3212fd33c60ea..92e755771ae42ea42c29b981adf942ccd48e1fbb 100644
--- a/chrome/browser/sync/glue/session_model_associator.cc
+++ b/chrome/browser/sync/glue/session_model_associator.cc
@@ -256,7 +256,7 @@ bool SessionModelAssociator::AssociateWindows(bool reload_tabs,
// change processor calling AssociateTab for all modified tabs.
// Therefore, we can key whether this window has valid tabs based on
// the tab's presence in the tracker.
- const SyncedSessionTab* tab;
+ const SessionTab* tab = NULL;
if (synced_session_tracker_.LookupSessionTab(local_tag, tab_id, &tab)) {
found_tabs = true;
window_s.add_tab(tab_id);
@@ -385,7 +385,7 @@ bool SessionModelAssociator::WriteTabContentsToSyncModel(
// Load the last stored version of this tab so we can compare changes. If this
// is a new tab, session_tab will be a blank/newly created SessionTab object.
- SyncedSessionTab* session_tab =
+ SessionTab* session_tab =
synced_session_tracker_.GetTab(GetCurrentMachineTag(),
tab.GetSessionId());
@@ -453,7 +453,7 @@ bool SessionModelAssociator::WriteTabContentsToSyncModel(
void SessionModelAssociator::AssociateTabContents(
const SyncedWindowDelegate& window,
const SyncedTabDelegate& new_tab,
- SyncedSessionTab* prev_tab,
+ SessionTab* prev_tab,
sync_pb::SessionTab* sync_tab,
GURL* new_url) {
DCHECK(prev_tab);
@@ -475,8 +475,8 @@ void SessionModelAssociator::AssociateTabContents(
}
sync_tab->mutable_navigation()->Clear();
- std::vector<SyncedTabNavigation>::const_iterator prev_nav_iter =
- prev_tab->synced_tab_navigations.begin();
+ std::vector<TabNavigation>::const_iterator prev_nav_iter =
+ prev_tab->navigations.begin();
for (int i = min_index; i < max_index; ++i) {
const NavigationEntry* entry = (i == pending_index) ?
new_tab.GetPendingEntry() : new_tab.GetEntryAtIndex(i);
@@ -485,7 +485,7 @@ void SessionModelAssociator::AssociateTabContents(
// Find the location of the first navigation within the previous list of
// navigations. We only need to do this once, as all subsequent
// navigations are either contiguous or completely new.
- for (;prev_nav_iter != prev_tab->synced_tab_navigations.end();
+ for (;prev_nav_iter != prev_tab->navigations.end();
++prev_nav_iter) {
if (prev_nav_iter->unique_id() == entry->GetUniqueID())
break;
@@ -500,11 +500,13 @@ void SessionModelAssociator::AssociateTabContents(
}
sync_pb::TabNavigation* sync_nav = sync_tab->add_navigation();
- PopulateSessionSpecificsNavigation(*entry, sync_nav);
+ const TabNavigation& navigation =
+ TabNavigation::FromNavigationEntry(i, *entry, base::Time::Now());
+ *sync_nav = navigation.ToSyncData();
// If this navigation is an old one, reuse the old timestamp. Otherwise we
// leave the timestamp as the current time.
- if (prev_nav_iter != prev_tab->synced_tab_navigations.end() &&
+ if (prev_nav_iter != prev_tab->navigations.end() &&
prev_nav_iter->unique_id() == entry->GetUniqueID()) {
// Check that we haven't gone back/foward in the nav stack to this page
// (if so, we want to refresh the timestamp).
@@ -520,7 +522,7 @@ void SessionModelAssociator::AssociateTabContents(
// old timestamps preserved.
++prev_nav_iter;
} else if (current_index != i &&
- prev_tab->synced_tab_navigations.empty()) {
+ prev_tab->navigations.empty()) {
// If this is a new tab, and has more than one navigation, we don't
// actually want to assign the current timestamp to other navigations.
// Override the timestamp to 0 in that case.
@@ -647,86 +649,6 @@ void SessionModelAssociator::FaviconsUpdated(
}
}
-// Static
-// TODO(zea): perhaps sync state (scroll position, form entries, etc.) as well?
-// See http://crbug.com/67068.
-void SessionModelAssociator::PopulateSessionSpecificsNavigation(
- const NavigationEntry& navigation,
- sync_pb::TabNavigation* tab_navigation) {
- tab_navigation->set_virtual_url(navigation.GetVirtualURL().spec());
- // FIXME(zea): Support referrer policy?
- tab_navigation->set_referrer(navigation.GetReferrer().url.spec());
- tab_navigation->set_title(UTF16ToUTF8(navigation.GetTitle()));
- switch (navigation.GetTransitionType()) {
- case content::PAGE_TRANSITION_LINK:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_LINK);
- break;
- case content::PAGE_TRANSITION_TYPED:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_TYPED);
- break;
- case content::PAGE_TRANSITION_AUTO_BOOKMARK:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_AUTO_BOOKMARK);
- break;
- case content::PAGE_TRANSITION_AUTO_SUBFRAME:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_AUTO_SUBFRAME);
- break;
- case content::PAGE_TRANSITION_MANUAL_SUBFRAME:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_MANUAL_SUBFRAME);
- break;
- case content::PAGE_TRANSITION_GENERATED:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_GENERATED);
- break;
- case content::PAGE_TRANSITION_AUTO_TOPLEVEL:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_AUTO_TOPLEVEL);
- break;
- case content::PAGE_TRANSITION_FORM_SUBMIT:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_FORM_SUBMIT);
- break;
- case content::PAGE_TRANSITION_RELOAD:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_RELOAD);
- break;
- case content::PAGE_TRANSITION_KEYWORD:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_KEYWORD);
- break;
- case content::PAGE_TRANSITION_KEYWORD_GENERATED:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_KEYWORD_GENERATED);
- break;
- case content::PAGE_TRANSITION_CHAIN_START:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_CHAIN_START);
- break;
- case content::PAGE_TRANSITION_CHAIN_END:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_CHAIN_END);
- break;
- case content::PAGE_TRANSITION_CLIENT_REDIRECT:
- tab_navigation->set_navigation_qualifier(
- sync_pb::SyncEnums_PageTransitionQualifier_CLIENT_REDIRECT);
- break;
- case content::PAGE_TRANSITION_SERVER_REDIRECT:
- tab_navigation->set_navigation_qualifier(
- sync_pb::SyncEnums_PageTransitionQualifier_SERVER_REDIRECT);
- break;
- default:
- tab_navigation->set_page_transition(
- sync_pb::SyncEnums_PageTransition_TYPED);
- }
- tab_navigation->set_unique_id(navigation.GetUniqueID());
- tab_navigation->set_timestamp(
- syncer::TimeToProtoTime(base::Time::Now()));
-}
-
void SessionModelAssociator::Associate(const SyncedTabDelegate* tab,
int64 sync_id) {
NOTIMPLEMENTED();
@@ -1026,7 +948,7 @@ void SessionModelAssociator::AssociateForeignSpecifics(
} else if (specifics.has_tab()) {
const sync_pb::SessionTab& tab_s = specifics.tab();
SessionID::id_type tab_id = tab_s.tab_id();
- SyncedSessionTab* tab =
+ SessionTab* tab =
synced_session_tracker_.GetTab(foreign_session_tag, tab_id);
// Figure out what the previous url for this tab was (may be empty string
@@ -1185,7 +1107,7 @@ void SessionModelAssociator::PopulateSessionWindowFromSpecifics(
void SessionModelAssociator::PopulateSessionTabFromSpecifics(
const sync_pb::SessionTab& specifics,
const base::Time& mtime,
- SyncedSessionTab* tab) {
+ SessionTab* tab) {
DCHECK_EQ(tab->tab_id.id(), specifics.tab_id());
if (specifics.has_tab_id())
tab->tab_id.set_id(specifics.tab_id());
@@ -1202,108 +1124,10 @@ void SessionModelAssociator::PopulateSessionTabFromSpecifics(
tab->timestamp = mtime;
// Cleared in case we reuse a pre-existing SyncedSessionTab object.
tab->navigations.clear();
- tab->synced_tab_navigations.clear();
for (int i = 0; i < specifics.navigation_size(); ++i) {
- AppendSessionTabNavigation(specifics.navigation(i),
- tab);
- }
-}
-
-// Static
-void SessionModelAssociator::AppendSessionTabNavigation(
- const sync_pb::TabNavigation& specifics,
- SyncedSessionTab* tab) {
- int index = 0;
- GURL virtual_url;
- GURL referrer;
- string16 title;
- std::string state;
- content::PageTransition transition(content::PAGE_TRANSITION_LINK);
- base::Time timestamp;
- int unique_id = 0;
- if (specifics.has_virtual_url()) {
- GURL gurl(specifics.virtual_url());
- virtual_url = gurl;
- }
- if (specifics.has_referrer()) {
- GURL gurl(specifics.referrer());
- referrer = gurl;
- }
- if (specifics.has_title())
- title = UTF8ToUTF16(specifics.title());
- if (specifics.has_state())
- state = specifics.state();
- if (specifics.has_page_transition() ||
- specifics.has_navigation_qualifier()) {
- switch (specifics.page_transition()) {
- case sync_pb::SyncEnums_PageTransition_LINK:
- transition = content::PAGE_TRANSITION_LINK;
- break;
- case sync_pb::SyncEnums_PageTransition_TYPED:
- transition = content::PAGE_TRANSITION_TYPED;
- break;
- case sync_pb::SyncEnums_PageTransition_AUTO_BOOKMARK:
- transition = content::PAGE_TRANSITION_AUTO_BOOKMARK;
- break;
- case sync_pb::SyncEnums_PageTransition_AUTO_SUBFRAME:
- transition = content::PAGE_TRANSITION_AUTO_SUBFRAME;
- break;
- case sync_pb::SyncEnums_PageTransition_MANUAL_SUBFRAME:
- transition = content::PAGE_TRANSITION_MANUAL_SUBFRAME;
- break;
- case sync_pb::SyncEnums_PageTransition_GENERATED:
- transition = content::PAGE_TRANSITION_GENERATED;
- break;
- case sync_pb::SyncEnums_PageTransition_AUTO_TOPLEVEL:
- transition = content::PAGE_TRANSITION_AUTO_TOPLEVEL;
- break;
- case sync_pb::SyncEnums_PageTransition_FORM_SUBMIT:
- transition = content::PAGE_TRANSITION_FORM_SUBMIT;
- break;
- case sync_pb::SyncEnums_PageTransition_RELOAD:
- transition = content::PAGE_TRANSITION_RELOAD;
- break;
- case sync_pb::SyncEnums_PageTransition_KEYWORD:
- transition = content::PAGE_TRANSITION_KEYWORD;
- break;
- case sync_pb::SyncEnums_PageTransition_KEYWORD_GENERATED:
- transition = content::PAGE_TRANSITION_KEYWORD_GENERATED;
- break;
- case sync_pb::SyncEnums_PageTransition_CHAIN_START:
- transition = content::PAGE_TRANSITION_CHAIN_START;
- break;
- case sync_pb::SyncEnums_PageTransition_CHAIN_END:
- transition = content::PAGE_TRANSITION_CHAIN_END;
- break;
- default:
- switch (specifics.navigation_qualifier()) {
- case sync_pb::SyncEnums_PageTransitionQualifier_CLIENT_REDIRECT:
- transition = content::PAGE_TRANSITION_CLIENT_REDIRECT;
- break;
- case sync_pb::SyncEnums_PageTransitionQualifier_SERVER_REDIRECT:
- transition = content::PAGE_TRANSITION_SERVER_REDIRECT;
- break;
- default:
- transition = content::PAGE_TRANSITION_TYPED;
- }
- }
- }
- if (specifics.has_timestamp()) {
- timestamp = syncer::ProtoTimeToTime(specifics.timestamp());
- }
- if (specifics.has_unique_id()) {
- unique_id = specifics.unique_id();
+ tab->navigations.push_back(
+ TabNavigation::FromSyncData(i, specifics.navigation(i)));
}
- SyncedTabNavigation tab_navigation(
- index, virtual_url,
- content::Referrer(referrer, WebKit::WebReferrerPolicyDefault), title,
- state, transition, unique_id, timestamp);
- // We insert it twice, once for our SyncedTabNavigations, once for the normal
- // TabNavigation (used by the session restore UI).
- tab->synced_tab_navigations.insert(tab->synced_tab_navigations.end(),
- tab_navigation);
- tab->navigations.insert(tab->navigations.end(),
- tab_navigation);
}
void SessionModelAssociator::LoadForeignTabFavicon(
@@ -1450,7 +1274,7 @@ bool SessionModelAssociator::GetForeignTab(
const SessionID::id_type tab_id,
const SessionTab** tab) {
DCHECK(CalledOnValidThread());
- const SyncedSessionTab* synced_tab;
+ const SessionTab* synced_tab = NULL;
bool success = synced_session_tracker_.LookupSessionTab(tag,
tab_id,
&synced_tab);
« no previous file with comments | « chrome/browser/sync/glue/session_model_associator.h ('k') | chrome/browser/sync/glue/session_model_associator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698