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

Side by Side Diff: components/sessions/serialized_navigation_entry.cc

Issue 869613006: Move referrer policy to a different field when serializing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: updates Created 5 years, 10 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 unified diff | Download patch
OLDNEW
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 "components/sessions/core/serialized_navigation_driver.h" 9 #include "components/sessions/core/serialized_navigation_driver.h"
10 #include "sync/protocol/session_specifics.pb.h" 10 #include "sync/protocol/session_specifics.pb.h"
(...skipping 18 matching lines...) Expand all
29 } 29 }
30 30
31 SerializedNavigationEntry::~SerializedNavigationEntry() {} 31 SerializedNavigationEntry::~SerializedNavigationEntry() {}
32 32
33 SerializedNavigationEntry SerializedNavigationEntry::FromSyncData( 33 SerializedNavigationEntry SerializedNavigationEntry::FromSyncData(
34 int index, 34 int index,
35 const sync_pb::TabNavigation& sync_data) { 35 const sync_pb::TabNavigation& sync_data) {
36 SerializedNavigationEntry navigation; 36 SerializedNavigationEntry navigation;
37 navigation.index_ = index; 37 navigation.index_ = index;
38 navigation.unique_id_ = sync_data.unique_id(); 38 navigation.unique_id_ = sync_data.unique_id();
39 navigation.referrer_url_ = GURL(sync_data.referrer()); 39 if (sync_data.has_correct_referrer_policy()) {
Andrew T Wilson (Slow) 2015/01/29 11:02:13 Does this mean that if you have an old client and
jochen (gone - plz use gerrit) 2015/01/29 12:04:44 The entries aren't modified by clients.
40 navigation.referrer_policy_ = sync_data.referrer_policy(); 40 navigation.referrer_url_ = GURL(sync_data.referrer());
41 navigation.referrer_policy_ = sync_data.correct_referrer_policy();
42 } else {
43 int mapped_referrer_policy;
44 if (SerializedNavigationDriver::Get()->MapReferrerPolicyToNewValues(
45 sync_data.referrer_policy(), &mapped_referrer_policy)) {
46 navigation.referrer_url_ = GURL(sync_data.referrer());
47 } else {
48 navigation.referrer_url_ = GURL();
49 }
50 navigation.referrer_policy_ = mapped_referrer_policy;
51 }
41 navigation.virtual_url_ = GURL(sync_data.virtual_url()); 52 navigation.virtual_url_ = GURL(sync_data.virtual_url());
42 navigation.title_ = base::UTF8ToUTF16(sync_data.title()); 53 navigation.title_ = base::UTF8ToUTF16(sync_data.title());
43 navigation.encoded_page_state_ = sync_data.state(); 54 navigation.encoded_page_state_ = sync_data.state();
44 55
45 uint32 transition = 0; 56 uint32 transition = 0;
46 if (sync_data.has_page_transition()) { 57 if (sync_data.has_page_transition()) {
47 switch (sync_data.page_transition()) { 58 switch (sync_data.page_transition()) {
48 case sync_pb::SyncEnums_PageTransition_LINK: 59 case sync_pb::SyncEnums_PageTransition_LINK:
49 transition = ui::PAGE_TRANSITION_LINK; 60 transition = ui::PAGE_TRANSITION_LINK;
50 break; 61 break;
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 // index_ 187 // index_
177 // virtual_url_ 188 // virtual_url_
178 // title_ 189 // title_
179 // encoded_page_state_ 190 // encoded_page_state_
180 // transition_type_ 191 // transition_type_
181 // 192 //
182 // Added on later: 193 // Added on later:
183 // 194 //
184 // type_mask (has_post_data_) 195 // type_mask (has_post_data_)
185 // referrer_url_ 196 // referrer_url_
186 // referrer_policy_ 197 // referrer_policy_ (broken, crbug.com/450589)
187 // original_request_url_ 198 // original_request_url_
188 // is_overriding_user_agent_ 199 // is_overriding_user_agent_
189 // timestamp_ 200 // timestamp_
190 // search_terms_ 201 // search_terms_
191 // http_status_code_ 202 // http_status_code_
203 // referrer_policy_
192 204
193 void SerializedNavigationEntry::WriteToPickle(int max_size, 205 void SerializedNavigationEntry::WriteToPickle(int max_size,
194 Pickle* pickle) const { 206 Pickle* pickle) const {
195 pickle->WriteInt(index_); 207 pickle->WriteInt(index_);
196 208
197 int bytes_written = 0; 209 int bytes_written = 0;
198 210
199 WriteStringToPickle(pickle, &bytes_written, max_size, 211 WriteStringToPickle(pickle, &bytes_written, max_size,
200 virtual_url_.spec()); 212 virtual_url_.spec());
201 213
202 WriteString16ToPickle(pickle, &bytes_written, max_size, title_); 214 WriteString16ToPickle(pickle, &bytes_written, max_size, title_);
203 215
204 const std::string encoded_page_state = 216 const std::string encoded_page_state =
205 SerializedNavigationDriver::Get()->GetSanitizedPageStateForPickle(this); 217 SerializedNavigationDriver::Get()->GetSanitizedPageStateForPickle(this);
206 WriteStringToPickle(pickle, &bytes_written, max_size, encoded_page_state); 218 WriteStringToPickle(pickle, &bytes_written, max_size, encoded_page_state);
207 219
208 pickle->WriteInt(transition_type_); 220 pickle->WriteInt(transition_type_);
209 221
210 const int type_mask = has_post_data_ ? HAS_POST_DATA : 0; 222 const int type_mask = has_post_data_ ? HAS_POST_DATA : 0;
211 pickle->WriteInt(type_mask); 223 pickle->WriteInt(type_mask);
212 224
213 WriteStringToPickle( 225 int mapped_referrer_policy;
214 pickle, &bytes_written, max_size, 226 if (SerializedNavigationDriver::Get()->MapReferrerPolicyToOldValues(
215 referrer_url_.is_valid() ? referrer_url_.spec() : std::string()); 227 referrer_policy_, &mapped_referrer_policy)) {
Andrew T Wilson (Slow) 2015/01/29 11:02:13 Fine as-is, but I wonder if the following is easie
216 228 WriteStringToPickle(
217 pickle->WriteInt(referrer_policy_); 229 pickle, &bytes_written, max_size,
230 referrer_url_.is_valid() ? referrer_url_.spec() : std::string());
231 } else {
232 WriteStringToPickle(pickle, &bytes_written, max_size, std::string());
233 }
234 pickle->WriteInt(mapped_referrer_policy);
218 235
219 // Save info required to override the user agent. 236 // Save info required to override the user agent.
220 WriteStringToPickle( 237 WriteStringToPickle(
221 pickle, &bytes_written, max_size, 238 pickle, &bytes_written, max_size,
222 original_request_url_.is_valid() ? 239 original_request_url_.is_valid() ?
223 original_request_url_.spec() : std::string()); 240 original_request_url_.spec() : std::string());
224 pickle->WriteBool(is_overriding_user_agent_); 241 pickle->WriteBool(is_overriding_user_agent_);
225 pickle->WriteInt64(timestamp_.ToInternalValue()); 242 pickle->WriteInt64(timestamp_.ToInternalValue());
226 243
227 WriteString16ToPickle(pickle, &bytes_written, max_size, search_terms_); 244 WriteString16ToPickle(pickle, &bytes_written, max_size, search_terms_);
228 245
229 pickle->WriteInt(http_status_code_); 246 pickle->WriteInt(http_status_code_);
247
248 pickle->WriteInt(referrer_policy_);
230 } 249 }
231 250
232 bool SerializedNavigationEntry::ReadFromPickle(PickleIterator* iterator) { 251 bool SerializedNavigationEntry::ReadFromPickle(PickleIterator* iterator) {
233 *this = SerializedNavigationEntry(); 252 *this = SerializedNavigationEntry();
234 std::string virtual_url_spec; 253 std::string virtual_url_spec;
235 int transition_type_int = 0; 254 int transition_type_int = 0;
236 if (!iterator->ReadInt(&index_) || 255 if (!iterator->ReadInt(&index_) ||
237 !iterator->ReadString(&virtual_url_spec) || 256 !iterator->ReadString(&virtual_url_spec) ||
238 !iterator->ReadString16(&title_) || 257 !iterator->ReadString16(&title_) ||
239 !iterator->ReadString(&encoded_page_state_) || 258 !iterator->ReadString(&encoded_page_state_) ||
(...skipping 11 matching lines...) Expand all
251 has_post_data_ = type_mask & HAS_POST_DATA; 270 has_post_data_ = type_mask & HAS_POST_DATA;
252 // the "referrer" property was added after type_mask to the written 271 // the "referrer" property was added after type_mask to the written
253 // stream. As such, we don't fail if it can't be read. 272 // stream. As such, we don't fail if it can't be read.
254 std::string referrer_spec; 273 std::string referrer_spec;
255 if (!iterator->ReadString(&referrer_spec)) 274 if (!iterator->ReadString(&referrer_spec))
256 referrer_spec = std::string(); 275 referrer_spec = std::string();
257 referrer_url_ = GURL(referrer_spec); 276 referrer_url_ = GURL(referrer_spec);
258 277
259 // The "referrer policy" property was added even later, so we fall back to 278 // The "referrer policy" property was added even later, so we fall back to
260 // the default policy if the property is not present. 279 // the default policy if the property is not present.
261 if (!iterator->ReadInt(&referrer_policy_)) 280 //
281 // Note: due to crbug.com/450589 this value might be incorrect, and a
282 // corrected version is stored later in the pickle.
283 if (!iterator->ReadInt(&referrer_policy_)) {
262 referrer_policy_ = 284 referrer_policy_ =
263 SerializedNavigationDriver::Get()->GetDefaultReferrerPolicy(); 285 SerializedNavigationDriver::Get()->GetDefaultReferrerPolicy();
286 } else {
287 int mapped_referrer_policy;
288 if (!SerializedNavigationDriver::Get()->MapReferrerPolicyToNewValues(
289 referrer_policy_, &mapped_referrer_policy)) {
290 referrer_url_ = GURL();
marja 2015/01/29 10:54:20 Why do we want to do this also in the case where w
jochen (gone - plz use gerrit) 2015/01/29 10:59:31 good point. moved this code block down.
291 }
292 referrer_policy_ = mapped_referrer_policy;
293 }
264 294
265 // If the original URL can't be found, leave it empty. 295 // If the original URL can't be found, leave it empty.
266 std::string original_request_url_spec; 296 std::string original_request_url_spec;
267 if (!iterator->ReadString(&original_request_url_spec)) 297 if (!iterator->ReadString(&original_request_url_spec))
268 original_request_url_spec = std::string(); 298 original_request_url_spec = std::string();
269 original_request_url_ = GURL(original_request_url_spec); 299 original_request_url_ = GURL(original_request_url_spec);
270 300
271 // Default to not overriding the user agent if we don't have info. 301 // Default to not overriding the user agent if we don't have info.
272 if (!iterator->ReadBool(&is_overriding_user_agent_)) 302 if (!iterator->ReadBool(&is_overriding_user_agent_))
273 is_overriding_user_agent_ = false; 303 is_overriding_user_agent_ = false;
274 304
275 int64 timestamp_internal_value = 0; 305 int64 timestamp_internal_value = 0;
276 if (iterator->ReadInt64(&timestamp_internal_value)) { 306 if (iterator->ReadInt64(&timestamp_internal_value)) {
277 timestamp_ = base::Time::FromInternalValue(timestamp_internal_value); 307 timestamp_ = base::Time::FromInternalValue(timestamp_internal_value);
278 } else { 308 } else {
279 timestamp_ = base::Time(); 309 timestamp_ = base::Time();
280 } 310 }
281 311
282 // If the search terms field can't be found, leave it empty. 312 // If the search terms field can't be found, leave it empty.
283 if (!iterator->ReadString16(&search_terms_)) 313 if (!iterator->ReadString16(&search_terms_))
284 search_terms_.clear(); 314 search_terms_.clear();
285 315
286 if (!iterator->ReadInt(&http_status_code_)) 316 if (!iterator->ReadInt(&http_status_code_))
287 http_status_code_ = 0; 317 http_status_code_ = 0;
318
319 // Correct referrer policy (if present).
320 int correct_referrer_policy;
321 if (iterator->ReadInt(&correct_referrer_policy))
322 referrer_policy_ = correct_referrer_policy;
288 } 323 }
289 324
290 SerializedNavigationDriver::Get()->Sanitize(this); 325 SerializedNavigationDriver::Get()->Sanitize(this);
291 326
292 is_restored_ = true; 327 is_restored_ = true;
293 328
294 return true; 329 return true;
295 } 330 }
296 331
297 // TODO(zea): perhaps sync state (scroll position, form entries, etc.) as well? 332 // TODO(zea): perhaps sync state (scroll position, form entries, etc.) as well?
298 // See http://crbug.com/67068. 333 // See http://crbug.com/67068.
299 sync_pb::TabNavigation SerializedNavigationEntry::ToSyncData() const { 334 sync_pb::TabNavigation SerializedNavigationEntry::ToSyncData() const {
300 sync_pb::TabNavigation sync_data; 335 sync_pb::TabNavigation sync_data;
301 sync_data.set_virtual_url(virtual_url_.spec()); 336 sync_data.set_virtual_url(virtual_url_.spec());
302 sync_data.set_referrer(referrer_url_.spec()); 337 int mapped_referrer_policy;
303 sync_data.set_referrer_policy(referrer_policy_); 338 if (SerializedNavigationDriver::Get()->MapReferrerPolicyToOldValues(
339 referrer_policy_, &mapped_referrer_policy)) {
340 sync_data.set_referrer(referrer_url_.spec());
341 } else {
342 sync_data.set_referrer(std::string());
343 }
344 sync_data.set_referrer_policy(mapped_referrer_policy);
345 sync_data.set_correct_referrer_policy(referrer_policy_);
304 sync_data.set_title(base::UTF16ToUTF8(title_)); 346 sync_data.set_title(base::UTF16ToUTF8(title_));
305 347
306 // Page transition core. 348 // Page transition core.
307 static_assert(ui::PAGE_TRANSITION_LAST_CORE == 349 static_assert(ui::PAGE_TRANSITION_LAST_CORE ==
308 ui::PAGE_TRANSITION_KEYWORD_GENERATED, 350 ui::PAGE_TRANSITION_KEYWORD_GENERATED,
309 "PAGE_TRANSITION_LAST_CORE must equal " 351 "PAGE_TRANSITION_LAST_CORE must equal "
310 "PAGE_TRANSITION_KEYWORD_GENERATED"); 352 "PAGE_TRANSITION_KEYWORD_GENERATED");
311 switch (ui::PageTransitionStripQualifier(transition_type_)) { 353 switch (ui::PageTransitionStripQualifier(transition_type_)) {
312 case ui::PAGE_TRANSITION_LINK: 354 case ui::PAGE_TRANSITION_LINK:
313 sync_data.set_page_transition( 355 sync_data.set_page_transition(
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 redirect_chain_[last_entry].spec()); 458 redirect_chain_[last_entry].spec());
417 } 459 }
418 } 460 }
419 461
420 sync_data.set_is_restored(is_restored_); 462 sync_data.set_is_restored(is_restored_);
421 463
422 return sync_data; 464 return sync_data;
423 } 465 }
424 466
425 } // namespace sessions 467 } // namespace sessions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698