Index: components/sessions/serialized_navigation_entry.cc |
diff --git a/components/sessions/serialized_navigation_entry.cc b/components/sessions/serialized_navigation_entry.cc |
index 45f3cf03106807230c66c291e517dd45f957d1a6..10a2f101c4cdd8df1aeebc547e6c664f51ee684a 100644 |
--- a/components/sessions/serialized_navigation_entry.cc |
+++ b/components/sessions/serialized_navigation_entry.cc |
@@ -57,6 +57,7 @@ SerializedNavigationEntry SerializedNavigationEntry::FromNavigationEntry( |
if (entry.GetFavicon().valid) |
navigation.favicon_url_ = entry.GetFavicon().url; |
navigation.http_status_code_ = entry.GetHttpStatusCode(); |
+ navigation.redirect_chain_ = entry.GetRedirectChain(); |
return navigation; |
} |
@@ -363,6 +364,7 @@ scoped_ptr<NavigationEntry> SerializedNavigationEntry::ToNavigationEntry( |
entry->SetTimestamp(timestamp_); |
entry->SetExtraData(kSearchTermsKey, search_terms_); |
entry->SetHttpStatusCode(http_status_code_); |
+ entry->SetRedirectChain(redirect_chain_); |
// These fields should have default values. |
DCHECK_EQ(STATE_INVALID, blocked_state_); |
@@ -477,6 +479,24 @@ sync_pb::TabNavigation SerializedNavigationEntry::ToSyncData() const { |
sync_data.add_content_pack_categories(*it); |
} |
+ // Copy all redirect chain entries except the last URL. |
sky
2014/02/20 22:12:26
Document why the last isn't copied.
Donn Denman
2014/02/21 08:18:56
Done.
|
+ for (size_t i = 0; i < redirect_chain_.size(); i++) { |
sky
2014/02/20 22:12:26
Why don't you have a loop for the first n-1 and th
Donn Denman
2014/02/21 08:18:56
Done. I'm ashamed I didn't see that - it's much m
|
+ bool is_last_url = (i == redirect_chain_.size() - 1); |
+ if (is_last_url) { |
+ bool did_redirect = redirect_chain_.size() > 1; |
+ if (did_redirect && |
+ sync_data.virtual_url() != redirect_chain_.at(i).spec()) { |
+ // If the last URL didn't match the virtual_url, record it separately. |
+ sync_data.set_last_navigation_redirect_url( |
+ redirect_chain_.at(i).spec()); |
+ } |
+ } else { |
+ sync_pb::NavigationRedirect *navigation_redirect = |
sky
2014/02/20 22:12:26
NavigationRedirect*
Donn Denman
2014/02/21 08:18:56
Done.
|
+ sync_data.add_navigation_redirect(); |
+ navigation_redirect->set_url(redirect_chain_.at(i).spec()); |
sky
2014/02/20 22:12:26
at->[]
Donn Denman
2014/02/21 08:18:56
Done.
|
+ } |
+ } |
+ |
sync_data.set_is_restored(is_restored_); |
return sync_data; |