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

Unified Diff: components/sessions/serialized_navigation_entry.cc

Issue 101573003: Add the navigation redirect-chain to Sync sessions proto for offline analysis. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix android unit test (state_serializer_unittests.cc). Created 6 years, 11 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: components/sessions/serialized_navigation_entry.cc
diff --git a/components/sessions/serialized_navigation_entry.cc b/components/sessions/serialized_navigation_entry.cc
index 969a1270e470f18fe2ef598804e855cf2f50a1f9..862a6efb9be214620fe02c2a67253d5ed9e71353 100644
--- a/components/sessions/serialized_navigation_entry.cc
+++ b/components/sessions/serialized_navigation_entry.cc
@@ -55,6 +55,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;
}
@@ -147,6 +148,8 @@ SerializedNavigationEntry SerializedNavigationEntry::FromSyncData(
navigation.http_status_code_ = sync_data.http_status_code();
+ // The redirect chain does not need to be synced down.
haitaol1 2014/01/17 23:52:23 I think the comment should be on redirect_chain_ s
Donn Denman 2014/01/18 01:30:19 Done.
+
// We shouldn't sync session data for managed users down at the moment.
DCHECK(!sync_data.has_blocked_state());
DCHECK_EQ(0, sync_data.content_pack_categories_size());
@@ -221,6 +224,7 @@ enum TypeMask {
// timestamp_
// search_terms_
// http_status_code_
+// redirect_chain_
void SerializedNavigationEntry::WriteToPickle(int max_size,
Pickle* pickle) const {
@@ -262,6 +266,14 @@ void SerializedNavigationEntry::WriteToPickle(int max_size,
WriteString16ToPickle(pickle, &bytes_written, max_size, search_terms_);
pickle->WriteInt(http_status_code_);
+
+ // Redirect chain has variable number of entries.
+ pickle->WriteUInt16(redirect_chain_.size());
+ for (size_t i = 0; i < redirect_chain_.size(); i++) {
+ GURL redirect_url = redirect_chain_.at(i);
+ WriteStringToPickle(pickle, &bytes_written, max_size,
+ redirect_url.is_valid() ? redirect_url.spec() : std::string());
+ }
}
bool SerializedNavigationEntry::ReadFromPickle(PickleIterator* iterator) {
@@ -323,6 +335,24 @@ bool SerializedNavigationEntry::ReadFromPickle(PickleIterator* iterator) {
if (!iterator->ReadInt(&http_status_code_))
http_status_code_ = 0;
+
+ // The redirect chain is only in newer pickle streams.
+ unsigned short redirect_chain_length = 0;
+ if (iterator->ReadUInt16(&redirect_chain_length)) {
+ std::vector<GURL> full_redirect_chain;
+ bool was_full_chain_read_successfully = true;
+ for (size_t i = 0; i < redirect_chain_length; i++) {
+ std::string a_redirect;
+ if (iterator->ReadString(&a_redirect)) {
+ full_redirect_chain.push_back(GURL(a_redirect));
+ } else {
+ was_full_chain_read_successfully = false;
+ }
+ }
+ if (was_full_chain_read_successfully) {
+ redirect_chain_ = full_redirect_chain;
+ }
+ }
}
return true;
@@ -353,6 +383,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_);
@@ -467,6 +498,22 @@ sync_pb::TabNavigation SerializedNavigationEntry::ToSyncData() const {
sync_data.add_content_pack_categories(*it);
}
+ // Copy all redirect chain entries except the last URL.
+ for (size_t i = 0; i < redirect_chain_.size(); i++) {
+ 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()) {
+ sync_data.set_last_navigation_redirect_url(
+ redirect_chain_.at(i).spec());
+ }
+ } else {
+ sync_pb::NavigationRedirect *navigation_redirect =
+ sync_data.add_navigation_redirect();
+ navigation_redirect->set_url(redirect_chain_.at(i).spec());
+ }
+ }
return sync_data;
}

Powered by Google App Engine
This is Rietveld 408576698