Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/sessions/serialized_navigation_entry.h" | 5 #include "components/sessions/serialized_navigation_entry.h" |
| 6 | 6 |
| 7 #include "base/pickle.h" | 7 #include "base/pickle.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "content/public/browser/favicon_status.h" | 9 #include "content/public/browser/favicon_status.h" |
| 10 #include "content/public/browser/navigation_controller.h" | 10 #include "content/public/browser/navigation_controller.h" |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 21 | 21 |
| 22 SerializedNavigationEntry::SerializedNavigationEntry() | 22 SerializedNavigationEntry::SerializedNavigationEntry() |
| 23 : index_(-1), | 23 : index_(-1), |
| 24 unique_id_(0), | 24 unique_id_(0), |
| 25 transition_type_(ui::PAGE_TRANSITION_TYPED), | 25 transition_type_(ui::PAGE_TRANSITION_TYPED), |
| 26 has_post_data_(false), | 26 has_post_data_(false), |
| 27 post_id_(-1), | 27 post_id_(-1), |
| 28 is_overriding_user_agent_(false), | 28 is_overriding_user_agent_(false), |
| 29 http_status_code_(0), | 29 http_status_code_(0), |
| 30 is_restored_(false), | 30 is_restored_(false), |
| 31 blocked_state_(STATE_INVALID) {} | 31 blocked_state_(STATE_INVALID) { |
| 32 referrer_policy_ = GetDefaultReferrerPolicy(); | |
| 33 } | |
| 32 | 34 |
| 33 SerializedNavigationEntry::~SerializedNavigationEntry() {} | 35 SerializedNavigationEntry::~SerializedNavigationEntry() {} |
| 34 | 36 |
| 35 // static | 37 // static |
| 36 SerializedNavigationEntry SerializedNavigationEntry::FromNavigationEntry( | 38 SerializedNavigationEntry SerializedNavigationEntry::FromNavigationEntry( |
| 37 int index, | 39 int index, |
| 38 const NavigationEntry& entry) { | 40 const NavigationEntry& entry) { |
| 39 SerializedNavigationEntry navigation; | 41 SerializedNavigationEntry navigation; |
| 40 navigation.index_ = index; | 42 navigation.index_ = index; |
| 41 navigation.unique_id_ = entry.GetUniqueID(); | 43 navigation.unique_id_ = entry.GetUniqueID(); |
| 42 navigation.referrer_ = entry.GetReferrer(); | 44 navigation.referrer_url_ = entry.GetReferrer().url; |
| 45 navigation.referrer_policy_ = entry.GetReferrer().policy; | |
| 43 navigation.virtual_url_ = entry.GetVirtualURL(); | 46 navigation.virtual_url_ = entry.GetVirtualURL(); |
| 44 navigation.title_ = entry.GetTitle(); | 47 navigation.title_ = entry.GetTitle(); |
| 45 navigation.page_state_ = entry.GetPageState(); | 48 navigation.encoded_page_state_ = entry.GetPageState().ToEncodedData(); |
| 46 navigation.transition_type_ = entry.GetTransitionType(); | 49 navigation.transition_type_ = entry.GetTransitionType(); |
| 47 navigation.has_post_data_ = entry.GetHasPostData(); | 50 navigation.has_post_data_ = entry.GetHasPostData(); |
| 48 navigation.post_id_ = entry.GetPostID(); | 51 navigation.post_id_ = entry.GetPostID(); |
| 49 navigation.original_request_url_ = entry.GetOriginalRequestURL(); | 52 navigation.original_request_url_ = entry.GetOriginalRequestURL(); |
| 50 navigation.is_overriding_user_agent_ = entry.GetIsOverridingUserAgent(); | 53 navigation.is_overriding_user_agent_ = entry.GetIsOverridingUserAgent(); |
| 51 navigation.timestamp_ = entry.GetTimestamp(); | 54 navigation.timestamp_ = entry.GetTimestamp(); |
| 52 navigation.is_restored_ = entry.IsRestored(); | 55 navigation.is_restored_ = entry.IsRestored(); |
| 53 // If you want to navigate a named frame in Chrome, you will first need to | 56 // If you want to navigate a named frame in Chrome, you will first need to |
| 54 // add support for persisting it. It is currently only used for layout tests. | 57 // add support for persisting it. It is currently only used for layout tests. |
| 55 CHECK(entry.GetFrameToNavigate().empty()); | 58 CHECK(entry.GetFrameToNavigate().empty()); |
| 56 entry.GetExtraData(kSearchTermsKey, &navigation.search_terms_); | 59 entry.GetExtraData(kSearchTermsKey, &navigation.search_terms_); |
| 57 if (entry.GetFavicon().valid) | 60 if (entry.GetFavicon().valid) |
| 58 navigation.favicon_url_ = entry.GetFavicon().url; | 61 navigation.favicon_url_ = entry.GetFavicon().url; |
| 59 navigation.http_status_code_ = entry.GetHttpStatusCode(); | 62 navigation.http_status_code_ = entry.GetHttpStatusCode(); |
| 60 navigation.redirect_chain_ = entry.GetRedirectChain(); | 63 navigation.redirect_chain_ = entry.GetRedirectChain(); |
| 61 | 64 |
| 62 return navigation; | 65 return navigation; |
| 63 } | 66 } |
| 64 | 67 |
| 65 SerializedNavigationEntry SerializedNavigationEntry::FromSyncData( | 68 SerializedNavigationEntry SerializedNavigationEntry::FromSyncData( |
| 66 int index, | 69 int index, |
| 67 const sync_pb::TabNavigation& sync_data) { | 70 const sync_pb::TabNavigation& sync_data) { |
| 68 SerializedNavigationEntry navigation; | 71 SerializedNavigationEntry navigation; |
| 69 navigation.index_ = index; | 72 navigation.index_ = index; |
| 70 navigation.unique_id_ = sync_data.unique_id(); | 73 navigation.unique_id_ = sync_data.unique_id(); |
| 71 navigation.referrer_ = content::Referrer( | 74 navigation.referrer_url_ = GURL(sync_data.referrer()); |
| 72 GURL(sync_data.referrer()), | 75 navigation.referrer_policy_ = sync_data.referrer_policy(); |
| 73 static_cast<blink::WebReferrerPolicy>(sync_data.referrer_policy())); | |
| 74 navigation.virtual_url_ = GURL(sync_data.virtual_url()); | 76 navigation.virtual_url_ = GURL(sync_data.virtual_url()); |
| 75 navigation.title_ = base::UTF8ToUTF16(sync_data.title()); | 77 navigation.title_ = base::UTF8ToUTF16(sync_data.title()); |
| 76 navigation.page_state_ = | 78 navigation.encoded_page_state_ = sync_data.state(); |
| 77 content::PageState::CreateFromEncodedData(sync_data.state()); | |
| 78 | 79 |
| 79 uint32 transition = 0; | 80 uint32 transition = 0; |
| 80 if (sync_data.has_page_transition()) { | 81 if (sync_data.has_page_transition()) { |
| 81 switch (sync_data.page_transition()) { | 82 switch (sync_data.page_transition()) { |
| 82 case sync_pb::SyncEnums_PageTransition_LINK: | 83 case sync_pb::SyncEnums_PageTransition_LINK: |
| 83 transition = ui::PAGE_TRANSITION_LINK; | 84 transition = ui::PAGE_TRANSITION_LINK; |
| 84 break; | 85 break; |
| 85 case sync_pb::SyncEnums_PageTransition_TYPED: | 86 case sync_pb::SyncEnums_PageTransition_TYPED: |
| 86 transition = ui::PAGE_TRANSITION_TYPED; | 87 transition = ui::PAGE_TRANSITION_TYPED; |
| 87 break; | 88 break; |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 203 HAS_POST_DATA = 1 | 204 HAS_POST_DATA = 1 |
| 204 }; | 205 }; |
| 205 | 206 |
| 206 } // namespace | 207 } // namespace |
| 207 | 208 |
| 208 // Pickle order: | 209 // Pickle order: |
| 209 // | 210 // |
| 210 // index_ | 211 // index_ |
| 211 // virtual_url_ | 212 // virtual_url_ |
| 212 // title_ | 213 // title_ |
| 213 // page_state_ | 214 // encoded_page_state_ |
|
rohitrao (ping after 24h)
2014/10/17 15:15:54
The PageState was always written to the pickle as
| |
| 214 // transition_type_ | 215 // transition_type_ |
| 215 // | 216 // |
| 216 // Added on later: | 217 // Added on later: |
| 217 // | 218 // |
| 218 // type_mask (has_post_data_) | 219 // type_mask (has_post_data_) |
| 219 // referrer_ | 220 // referrer_url_ |
| 221 // referrer_policy_ | |
|
rohitrao (ping after 24h)
2014/10/17 15:15:53
I've added referrer_policy_ here to be explicit, b
| |
| 220 // original_request_url_ | 222 // original_request_url_ |
| 221 // is_overriding_user_agent_ | 223 // is_overriding_user_agent_ |
| 222 // timestamp_ | 224 // timestamp_ |
| 223 // search_terms_ | 225 // search_terms_ |
| 224 // http_status_code_ | 226 // http_status_code_ |
| 225 | 227 |
| 226 void SerializedNavigationEntry::WriteToPickle(int max_size, | 228 void SerializedNavigationEntry::WriteToPickle(int max_size, |
| 227 Pickle* pickle) const { | 229 Pickle* pickle) const { |
| 228 pickle->WriteInt(index_); | 230 pickle->WriteInt(index_); |
| 229 | 231 |
| 230 int bytes_written = 0; | 232 int bytes_written = 0; |
| 231 | 233 |
| 232 WriteStringToPickle(pickle, &bytes_written, max_size, | 234 WriteStringToPickle(pickle, &bytes_written, max_size, |
| 233 virtual_url_.spec()); | 235 virtual_url_.spec()); |
| 234 | 236 |
| 235 WriteString16ToPickle(pickle, &bytes_written, max_size, title_); | 237 WriteString16ToPickle(pickle, &bytes_written, max_size, title_); |
| 236 | 238 |
| 237 content::PageState page_state = page_state_; | 239 const std::string encoded_page_state = GetSanitizedPageStateForPickle(); |
| 238 if (has_post_data_) | 240 WriteStringToPickle(pickle, &bytes_written, max_size, encoded_page_state); |
| 239 page_state = page_state.RemovePasswordData(); | |
| 240 | |
| 241 WriteStringToPickle(pickle, &bytes_written, max_size, | |
| 242 page_state.ToEncodedData()); | |
| 243 | 241 |
| 244 pickle->WriteInt(transition_type_); | 242 pickle->WriteInt(transition_type_); |
| 245 | 243 |
| 246 const int type_mask = has_post_data_ ? HAS_POST_DATA : 0; | 244 const int type_mask = has_post_data_ ? HAS_POST_DATA : 0; |
| 247 pickle->WriteInt(type_mask); | 245 pickle->WriteInt(type_mask); |
| 248 | 246 |
| 249 WriteStringToPickle( | 247 WriteStringToPickle( |
| 250 pickle, &bytes_written, max_size, | 248 pickle, &bytes_written, max_size, |
| 251 referrer_.url.is_valid() ? referrer_.url.spec() : std::string()); | 249 referrer_url_.is_valid() ? referrer_url_.spec() : std::string()); |
| 252 | 250 |
| 253 pickle->WriteInt(referrer_.policy); | 251 pickle->WriteInt(referrer_policy_); |
| 254 | 252 |
| 255 // Save info required to override the user agent. | 253 // Save info required to override the user agent. |
| 256 WriteStringToPickle( | 254 WriteStringToPickle( |
| 257 pickle, &bytes_written, max_size, | 255 pickle, &bytes_written, max_size, |
| 258 original_request_url_.is_valid() ? | 256 original_request_url_.is_valid() ? |
| 259 original_request_url_.spec() : std::string()); | 257 original_request_url_.spec() : std::string()); |
| 260 pickle->WriteBool(is_overriding_user_agent_); | 258 pickle->WriteBool(is_overriding_user_agent_); |
| 261 pickle->WriteInt64(timestamp_.ToInternalValue()); | 259 pickle->WriteInt64(timestamp_.ToInternalValue()); |
| 262 | 260 |
| 263 WriteString16ToPickle(pickle, &bytes_written, max_size, search_terms_); | 261 WriteString16ToPickle(pickle, &bytes_written, max_size, search_terms_); |
| 264 | 262 |
| 265 pickle->WriteInt(http_status_code_); | 263 pickle->WriteInt(http_status_code_); |
| 266 } | 264 } |
| 267 | 265 |
| 268 bool SerializedNavigationEntry::ReadFromPickle(PickleIterator* iterator) { | 266 bool SerializedNavigationEntry::ReadFromPickle(PickleIterator* iterator) { |
| 269 *this = SerializedNavigationEntry(); | 267 *this = SerializedNavigationEntry(); |
| 270 std::string virtual_url_spec, page_state_data; | 268 std::string virtual_url_spec; |
| 271 int transition_type_int = 0; | 269 int transition_type_int = 0; |
| 272 if (!iterator->ReadInt(&index_) || | 270 if (!iterator->ReadInt(&index_) || |
| 273 !iterator->ReadString(&virtual_url_spec) || | 271 !iterator->ReadString(&virtual_url_spec) || |
| 274 !iterator->ReadString16(&title_) || | 272 !iterator->ReadString16(&title_) || |
| 275 !iterator->ReadString(&page_state_data) || | 273 !iterator->ReadString(&encoded_page_state_) || |
| 276 !iterator->ReadInt(&transition_type_int)) | 274 !iterator->ReadInt(&transition_type_int)) |
| 277 return false; | 275 return false; |
| 278 virtual_url_ = GURL(virtual_url_spec); | 276 virtual_url_ = GURL(virtual_url_spec); |
| 279 page_state_ = content::PageState::CreateFromEncodedData(page_state_data); | |
| 280 transition_type_ = ui::PageTransitionFromInt(transition_type_int); | 277 transition_type_ = ui::PageTransitionFromInt(transition_type_int); |
| 281 | 278 |
| 282 // type_mask did not always exist in the written stream. As such, we | 279 // type_mask did not always exist in the written stream. As such, we |
| 283 // don't fail if it can't be read. | 280 // don't fail if it can't be read. |
| 284 int type_mask = 0; | 281 int type_mask = 0; |
| 285 bool has_type_mask = iterator->ReadInt(&type_mask); | 282 bool has_type_mask = iterator->ReadInt(&type_mask); |
| 286 | 283 |
| 287 if (has_type_mask) { | 284 if (has_type_mask) { |
| 288 has_post_data_ = type_mask & HAS_POST_DATA; | 285 has_post_data_ = type_mask & HAS_POST_DATA; |
| 289 // the "referrer" property was added after type_mask to the written | 286 // the "referrer" property was added after type_mask to the written |
| 290 // stream. As such, we don't fail if it can't be read. | 287 // stream. As such, we don't fail if it can't be read. |
| 291 std::string referrer_spec; | 288 std::string referrer_spec; |
| 292 if (!iterator->ReadString(&referrer_spec)) | 289 if (!iterator->ReadString(&referrer_spec)) |
| 293 referrer_spec = std::string(); | 290 referrer_spec = std::string(); |
| 291 referrer_url_ = GURL(referrer_spec); | |
| 292 | |
| 294 // The "referrer policy" property was added even later, so we fall back to | 293 // The "referrer policy" property was added even later, so we fall back to |
| 295 // the default policy if the property is not present. | 294 // the default policy if the property is not present. |
| 296 int policy_int; | 295 if (!iterator->ReadInt(&referrer_policy_)) |
| 297 blink::WebReferrerPolicy policy; | 296 referrer_policy_ = GetDefaultReferrerPolicy(); |
| 298 if (iterator->ReadInt(&policy_int)) | |
| 299 policy = static_cast<blink::WebReferrerPolicy>(policy_int); | |
| 300 else | |
| 301 policy = blink::WebReferrerPolicyDefault; | |
| 302 referrer_ = content::Referrer(GURL(referrer_spec), policy); | |
| 303 | 297 |
| 304 // If the original URL can't be found, leave it empty. | 298 // If the original URL can't be found, leave it empty. |
| 305 std::string original_request_url_spec; | 299 std::string original_request_url_spec; |
| 306 if (!iterator->ReadString(&original_request_url_spec)) | 300 if (!iterator->ReadString(&original_request_url_spec)) |
| 307 original_request_url_spec = std::string(); | 301 original_request_url_spec = std::string(); |
| 308 original_request_url_ = GURL(original_request_url_spec); | 302 original_request_url_ = GURL(original_request_url_spec); |
| 309 | 303 |
| 310 // Default to not overriding the user agent if we don't have info. | 304 // Default to not overriding the user agent if we don't have info. |
| 311 if (!iterator->ReadBool(&is_overriding_user_agent_)) | 305 if (!iterator->ReadBool(&is_overriding_user_agent_)) |
| 312 is_overriding_user_agent_ = false; | 306 is_overriding_user_agent_ = false; |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 332 | 326 |
| 333 return true; | 327 return true; |
| 334 } | 328 } |
| 335 | 329 |
| 336 scoped_ptr<NavigationEntry> SerializedNavigationEntry::ToNavigationEntry( | 330 scoped_ptr<NavigationEntry> SerializedNavigationEntry::ToNavigationEntry( |
| 337 int page_id, | 331 int page_id, |
| 338 content::BrowserContext* browser_context) const { | 332 content::BrowserContext* browser_context) const { |
| 339 scoped_ptr<NavigationEntry> entry( | 333 scoped_ptr<NavigationEntry> entry( |
| 340 content::NavigationController::CreateNavigationEntry( | 334 content::NavigationController::CreateNavigationEntry( |
| 341 virtual_url_, | 335 virtual_url_, |
| 342 referrer_, | 336 content::Referrer( |
| 337 referrer_url_, | |
| 338 static_cast<blink::WebReferrerPolicy>(referrer_policy_)), | |
| 343 // Use a transition type of reload so that we don't incorrectly | 339 // Use a transition type of reload so that we don't incorrectly |
| 344 // increase the typed count. | 340 // increase the typed count. |
| 345 ui::PAGE_TRANSITION_RELOAD, | 341 ui::PAGE_TRANSITION_RELOAD, |
| 346 false, | 342 false, |
| 347 // The extra headers are not sync'ed across sessions. | 343 // The extra headers are not sync'ed across sessions. |
| 348 std::string(), | 344 std::string(), |
| 349 browser_context)); | 345 browser_context)); |
| 350 | 346 |
| 351 entry->SetTitle(title_); | 347 entry->SetTitle(title_); |
| 352 entry->SetPageState(page_state_); | 348 entry->SetPageState( |
| 349 content::PageState::CreateFromEncodedData(encoded_page_state_)); | |
| 353 entry->SetPageID(page_id); | 350 entry->SetPageID(page_id); |
| 354 entry->SetHasPostData(has_post_data_); | 351 entry->SetHasPostData(has_post_data_); |
| 355 entry->SetPostID(post_id_); | 352 entry->SetPostID(post_id_); |
| 356 entry->SetOriginalRequestURL(original_request_url_); | 353 entry->SetOriginalRequestURL(original_request_url_); |
| 357 entry->SetIsOverridingUserAgent(is_overriding_user_agent_); | 354 entry->SetIsOverridingUserAgent(is_overriding_user_agent_); |
| 358 entry->SetTimestamp(timestamp_); | 355 entry->SetTimestamp(timestamp_); |
| 359 entry->SetExtraData(kSearchTermsKey, search_terms_); | 356 entry->SetExtraData(kSearchTermsKey, search_terms_); |
| 360 entry->SetHttpStatusCode(http_status_code_); | 357 entry->SetHttpStatusCode(http_status_code_); |
| 361 entry->SetRedirectChain(redirect_chain_); | 358 entry->SetRedirectChain(redirect_chain_); |
| 362 | 359 |
| 363 // These fields should have default values. | 360 // These fields should have default values. |
| 364 DCHECK_EQ(STATE_INVALID, blocked_state_); | 361 DCHECK_EQ(STATE_INVALID, blocked_state_); |
| 365 DCHECK_EQ(0u, content_pack_categories_.size()); | 362 DCHECK_EQ(0u, content_pack_categories_.size()); |
| 366 | 363 |
| 367 return entry.Pass(); | 364 return entry.Pass(); |
| 368 } | 365 } |
| 369 | 366 |
| 370 // TODO(zea): perhaps sync state (scroll position, form entries, etc.) as well? | 367 // TODO(zea): perhaps sync state (scroll position, form entries, etc.) as well? |
| 371 // See http://crbug.com/67068. | 368 // See http://crbug.com/67068. |
| 372 sync_pb::TabNavigation SerializedNavigationEntry::ToSyncData() const { | 369 sync_pb::TabNavigation SerializedNavigationEntry::ToSyncData() const { |
| 373 sync_pb::TabNavigation sync_data; | 370 sync_pb::TabNavigation sync_data; |
| 374 sync_data.set_virtual_url(virtual_url_.spec()); | 371 sync_data.set_virtual_url(virtual_url_.spec()); |
| 375 sync_data.set_referrer(referrer_.url.spec()); | 372 sync_data.set_referrer(referrer_url_.spec()); |
| 376 sync_data.set_referrer_policy(referrer_.policy); | 373 sync_data.set_referrer_policy(referrer_policy_); |
| 377 sync_data.set_title(base::UTF16ToUTF8(title_)); | 374 sync_data.set_title(base::UTF16ToUTF8(title_)); |
| 378 | 375 |
| 379 // Page transition core. | 376 // Page transition core. |
| 380 COMPILE_ASSERT(ui::PAGE_TRANSITION_LAST_CORE == | 377 COMPILE_ASSERT(ui::PAGE_TRANSITION_LAST_CORE == |
| 381 ui::PAGE_TRANSITION_KEYWORD_GENERATED, | 378 ui::PAGE_TRANSITION_KEYWORD_GENERATED, |
| 382 PageTransitionCoreBounds); | 379 PageTransitionCoreBounds); |
| 383 switch (ui::PageTransitionStripQualifier(transition_type_)) { | 380 switch (ui::PageTransitionStripQualifier(transition_type_)) { |
| 384 case ui::PAGE_TRANSITION_LINK: | 381 case ui::PAGE_TRANSITION_LINK: |
| 385 sync_data.set_page_transition( | 382 sync_data.set_page_transition( |
| 386 sync_pb::SyncEnums_PageTransition_LINK); | 383 sync_pb::SyncEnums_PageTransition_LINK); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 502 std::vector<NavigationEntry*> entries; | 499 std::vector<NavigationEntry*> entries; |
| 503 for (std::vector<SerializedNavigationEntry>::const_iterator | 500 for (std::vector<SerializedNavigationEntry>::const_iterator |
| 504 it = navigations.begin(); it != navigations.end(); ++it) { | 501 it = navigations.begin(); it != navigations.end(); ++it) { |
| 505 entries.push_back( | 502 entries.push_back( |
| 506 it->ToNavigationEntry(page_id, browser_context).release()); | 503 it->ToNavigationEntry(page_id, browser_context).release()); |
| 507 ++page_id; | 504 ++page_id; |
| 508 } | 505 } |
| 509 return entries; | 506 return entries; |
| 510 } | 507 } |
| 511 | 508 |
| 509 // TODO(rohitrao): Move this content-specific code into a | |
| 510 // SerializedNavigationEntryHelper class. | |
| 511 int SerializedNavigationEntry::GetDefaultReferrerPolicy() const { | |
|
rohitrao (ping after 24h)
2014/10/17 15:15:53
I've tried to move the remaining content-specific
| |
| 512 return blink::WebReferrerPolicyDefault; | |
| 513 } | |
| 514 | |
| 515 std::string SerializedNavigationEntry::GetSanitizedPageStateForPickle() const { | |
|
blundell
2014/10/17 15:19:28
nit: Add a TODO here like you have in the other tw
rohitrao (ping after 24h)
2014/10/20 13:24:49
Done.
| |
| 516 content::PageState page_state = | |
| 517 content::PageState::CreateFromEncodedData(encoded_page_state_); | |
|
rohitrao (ping after 24h)
2014/10/17 15:15:53
There will be some places where we now do an addit
| |
| 518 if (has_post_data_) | |
| 519 page_state = page_state.RemovePasswordData(); | |
| 520 | |
| 521 return page_state.ToEncodedData(); | |
| 522 } | |
| 523 | |
| 524 // TODO(rohitrao): Move this content-specific code into a | |
| 525 // SerializedNavigationEntryHelper class. | |
| 512 void SerializedNavigationEntry::Sanitize() { | 526 void SerializedNavigationEntry::Sanitize() { |
| 527 content::Referrer old_referrer( | |
| 528 referrer_url_, | |
| 529 static_cast<blink::WebReferrerPolicy>(referrer_policy_)); | |
| 513 content::Referrer new_referrer = | 530 content::Referrer new_referrer = |
| 514 content::Referrer::SanitizeForRequest(virtual_url_, referrer_); | 531 content::Referrer::SanitizeForRequest(virtual_url_, old_referrer); |
| 515 | 532 |
| 516 // No need to compare the policy, as it doesn't change during | 533 // No need to compare the policy, as it doesn't change during |
| 517 // sanitization. If there has been a change, the referrer needs to be | 534 // sanitization. If there has been a change, the referrer needs to be |
| 518 // stripped from the page state as well. | 535 // stripped from the page state as well. |
| 519 if (referrer_.url != new_referrer.url) { | 536 if (referrer_url_ != new_referrer.url) { |
| 520 referrer_ = content::Referrer(); | 537 referrer_url_ = GURL(); |
| 521 page_state_ = page_state_.RemoveReferrer(); | 538 referrer_policy_ = GetDefaultReferrerPolicy(); |
| 539 encoded_page_state_ = | |
| 540 content::PageState::CreateFromEncodedData(encoded_page_state_) | |
| 541 .RemoveReferrer() | |
| 542 .ToEncodedData(); | |
| 522 } | 543 } |
| 523 } | 544 } |
| 524 | 545 |
| 525 } // namespace sessions | 546 } // namespace sessions |
| OLD | NEW |