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

Side by Side Diff: content/common/page_state_serialization.cc

Issue 2710063002: Revert of Add DidSaveScrollOrScaleState flag to prevent restoreScrollPosition... (Closed)
Patch Set: rebase update Created 3 years, 8 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 "content/common/page_state_serialization.h" 5 #include "content/common/page_state_serialization.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <limits> 10 #include <limits>
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 // 16: Switched from blob urls to blob uuids. 189 // 16: Switched from blob urls to blob uuids.
190 // 17: Add a target frame id number. 190 // 17: Add a target frame id number.
191 // 18: Add referrer policy. 191 // 18: Add referrer policy.
192 // 19: Remove target frame id, which was a bad idea, and original url string, 192 // 19: Remove target frame id, which was a bad idea, and original url string,
193 // which is no longer used. 193 // which is no longer used.
194 // 20: Add visual viewport scroll offset, the offset of the pinched zoomed 194 // 20: Add visual viewport scroll offset, the offset of the pinched zoomed
195 // viewport within the unzoomed main frame. 195 // viewport within the unzoomed main frame.
196 // 21: Add frame sequence number. 196 // 21: Add frame sequence number.
197 // 22: Add scroll restoration type. 197 // 22: Add scroll restoration type.
198 // 23: Remove frame sequence number, there are easier ways. 198 // 23: Remove frame sequence number, there are easier ways.
199 // 24: Add did save scroll or scale state.
200 // 199 //
201 // NOTE: If the version is -1, then the pickle contains only a URL string. 200 // NOTE: If the version is -1, then the pickle contains only a URL string.
202 // See ReadPageState. 201 // See ReadPageState.
203 // 202 //
204 const int kMinVersion = 11; 203 const int kMinVersion = 11;
205 const int kCurrentVersion = 24; 204 const int kCurrentVersion = 23;
206 205
207 // A bunch of convenience functions to read/write to SerializeObjects. The 206 // A bunch of convenience functions to read/write to SerializeObjects. The
208 // de-serializers assume the input data will be in the correct format and fall 207 // de-serializers assume the input data will be in the correct format and fall
209 // back to returning safe defaults when not. 208 // back to returning safe defaults when not.
210 209
211 void WriteData(const void* data, int length, SerializeObject* obj) { 210 void WriteData(const void* data, int length, SerializeObject* obj) {
212 obj->pickle.WriteData(static_cast<const char*>(data), length); 211 obj->pickle.WriteData(static_cast<const char*>(data), length);
213 } 212 }
214 213
215 void ReadData(SerializeObject* obj, const void** data, int* length) { 214 void ReadData(SerializeObject* obj, const void** data, int* length) {
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 void WriteFrameState( 498 void WriteFrameState(
500 const ExplodedFrameState& state, SerializeObject* obj, bool is_top) { 499 const ExplodedFrameState& state, SerializeObject* obj, bool is_top) {
501 // WARNING: This data may be persisted for later use. As such, care must be 500 // WARNING: This data may be persisted for later use. As such, care must be
502 // taken when changing the serialized format. If a new field needs to be 501 // taken when changing the serialized format. If a new field needs to be
503 // written, only adding at the end will make it easier to deal with loading 502 // written, only adding at the end will make it easier to deal with loading
504 // older versions. Similarly, this should NOT save fields with sensitive 503 // older versions. Similarly, this should NOT save fields with sensitive
505 // data, such as password fields. 504 // data, such as password fields.
506 505
507 WriteString(state.url_string, obj); 506 WriteString(state.url_string, obj);
508 WriteString(state.target, obj); 507 WriteString(state.target, obj);
509 WriteBoolean(state.did_save_scroll_or_scale_state, obj);
510 508
511 if (state.did_save_scroll_or_scale_state) { 509 WriteInteger(state.scroll_offset.x(), obj);
512 WriteInteger(state.scroll_offset.x(), obj); 510 WriteInteger(state.scroll_offset.y(), obj);
513 WriteInteger(state.scroll_offset.y(), obj);
514 }
515 511
516 WriteString(state.referrer, obj); 512 WriteString(state.referrer, obj);
517 513
518 WriteStringVector(state.document_state, obj); 514 WriteStringVector(state.document_state, obj);
519 515
520 if (state.did_save_scroll_or_scale_state) 516 WriteReal(state.page_scale_factor, obj);
521 WriteReal(state.page_scale_factor, obj);
522 517
523 WriteInteger64(state.item_sequence_number, obj); 518 WriteInteger64(state.item_sequence_number, obj);
524 WriteInteger64(state.document_sequence_number, obj); 519 WriteInteger64(state.document_sequence_number, obj);
525 WriteInteger(static_cast<int>(state.referrer_policy), obj); 520 WriteInteger(static_cast<int>(state.referrer_policy), obj);
526 521
527 if (state.did_save_scroll_or_scale_state) { 522 WriteReal(state.visual_viewport_scroll_offset.x(), obj);
528 WriteReal(state.visual_viewport_scroll_offset.x(), obj); 523 WriteReal(state.visual_viewport_scroll_offset.y(), obj);
529 WriteReal(state.visual_viewport_scroll_offset.y(), obj);
530 }
531 524
532 WriteInteger(state.scroll_restoration_type, obj); 525 WriteInteger(state.scroll_restoration_type, obj);
533 526
534 bool has_state_object = !state.state_object.is_null(); 527 bool has_state_object = !state.state_object.is_null();
535 WriteBoolean(has_state_object, obj); 528 WriteBoolean(has_state_object, obj);
536 if (has_state_object) 529 if (has_state_object)
537 WriteString(state.state_object, obj); 530 WriteString(state.state_object, obj);
538 531
539 WriteHttpBody(state.http_body, obj); 532 WriteHttpBody(state.http_body, obj);
540 533
(...skipping 20 matching lines...) Expand all
561 ReadString(obj); // Skip obsolete original url string field. 554 ReadString(obj); // Skip obsolete original url string field.
562 555
563 state->target = ReadString(obj); 556 state->target = ReadString(obj);
564 if (obj->version < 15) { 557 if (obj->version < 15) {
565 ReadString(obj); // Skip obsolete parent field. 558 ReadString(obj); // Skip obsolete parent field.
566 ReadString(obj); // Skip obsolete title field. 559 ReadString(obj); // Skip obsolete title field.
567 ReadString(obj); // Skip obsolete alternate title field. 560 ReadString(obj); // Skip obsolete alternate title field.
568 ReadReal(obj); // Skip obsolete visited time field. 561 ReadReal(obj); // Skip obsolete visited time field.
569 } 562 }
570 563
571 if (obj->version >= 24) { 564 int x = ReadInteger(obj);
572 state->did_save_scroll_or_scale_state = ReadBoolean(obj); 565 int y = ReadInteger(obj);
573 } else { 566 state->scroll_offset = gfx::Point(x, y);
574 state->did_save_scroll_or_scale_state = true;
575 }
576
577 if (state->did_save_scroll_or_scale_state) {
578 int x = ReadInteger(obj);
579 int y = ReadInteger(obj);
580 state->scroll_offset = gfx::Point(x, y);
581 }
582 567
583 if (obj->version < 15) { 568 if (obj->version < 15) {
584 ReadBoolean(obj); // Skip obsolete target item flag. 569 ReadBoolean(obj); // Skip obsolete target item flag.
585 ReadInteger(obj); // Skip obsolete visit count field. 570 ReadInteger(obj); // Skip obsolete visit count field.
586 } 571 }
587 state->referrer = ReadString(obj); 572 state->referrer = ReadString(obj);
588 573
589 ReadStringVector(obj, &state->document_state); 574 ReadStringVector(obj, &state->document_state);
590 575
591 if (state->did_save_scroll_or_scale_state) 576 state->page_scale_factor = ReadReal(obj);
592 state->page_scale_factor = ReadReal(obj);
593 577
594 state->item_sequence_number = ReadInteger64(obj); 578 state->item_sequence_number = ReadInteger64(obj);
595 state->document_sequence_number = ReadInteger64(obj); 579 state->document_sequence_number = ReadInteger64(obj);
596 if (obj->version >= 21 && obj->version < 23) 580 if (obj->version >= 21 && obj->version < 23)
597 ReadInteger64(obj); // Skip obsolete frame sequence number. 581 ReadInteger64(obj); // Skip obsolete frame sequence number.
598 582
599 if (obj->version >= 17 && obj->version < 19) 583 if (obj->version >= 17 && obj->version < 19)
600 ReadInteger64(obj); // Skip obsolete target frame id number. 584 ReadInteger64(obj); // Skip obsolete target frame id number.
601 585
602 if (obj->version >= 18) { 586 if (obj->version >= 18) {
603 state->referrer_policy = 587 state->referrer_policy =
604 static_cast<blink::WebReferrerPolicy>(ReadInteger(obj)); 588 static_cast<blink::WebReferrerPolicy>(ReadInteger(obj));
605 } 589 }
606 590
607 if (obj->version >= 20 && state->did_save_scroll_or_scale_state) { 591 if (obj->version >= 20) {
608 double x = ReadReal(obj); 592 double x = ReadReal(obj);
609 double y = ReadReal(obj); 593 double y = ReadReal(obj);
610 state->visual_viewport_scroll_offset = gfx::PointF(x, y); 594 state->visual_viewport_scroll_offset = gfx::PointF(x, y);
611 } else { 595 } else {
612 state->visual_viewport_scroll_offset = gfx::PointF(-1, -1); 596 state->visual_viewport_scroll_offset = gfx::PointF(-1, -1);
613 } 597 }
614 598
615 if (obj->version >= 22) { 599 if (obj->version >= 22) {
616 state->scroll_restoration_type = 600 state->scroll_restoration_type =
617 static_cast<blink::WebHistoryScrollRestorationType>(ReadInteger(obj)); 601 static_cast<blink::WebHistoryScrollRestorationType>(ReadInteger(obj));
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 687
704 } // namespace 688 } // namespace
705 689
706 ExplodedHttpBody::ExplodedHttpBody() : contains_passwords(false) {} 690 ExplodedHttpBody::ExplodedHttpBody() : contains_passwords(false) {}
707 691
708 ExplodedHttpBody::~ExplodedHttpBody() { 692 ExplodedHttpBody::~ExplodedHttpBody() {
709 } 693 }
710 694
711 ExplodedFrameState::ExplodedFrameState() 695 ExplodedFrameState::ExplodedFrameState()
712 : scroll_restoration_type(blink::kWebHistoryScrollRestorationAuto), 696 : scroll_restoration_type(blink::kWebHistoryScrollRestorationAuto),
713 did_save_scroll_or_scale_state(true),
714 item_sequence_number(0), 697 item_sequence_number(0),
715 document_sequence_number(0), 698 document_sequence_number(0),
716 page_scale_factor(0.0), 699 page_scale_factor(0.0),
717 referrer_policy(blink::kWebReferrerPolicyDefault) {} 700 referrer_policy(blink::kWebReferrerPolicyDefault) {}
718 701
719 ExplodedFrameState::ExplodedFrameState(const ExplodedFrameState& other) { 702 ExplodedFrameState::ExplodedFrameState(const ExplodedFrameState& other) {
720 assign(other); 703 assign(other);
721 } 704 }
722 705
723 ExplodedFrameState::~ExplodedFrameState() { 706 ExplodedFrameState::~ExplodedFrameState() {
724 } 707 }
725 708
726 void ExplodedFrameState::operator=(const ExplodedFrameState& other) { 709 void ExplodedFrameState::operator=(const ExplodedFrameState& other) {
727 if (&other != this) 710 if (&other != this)
728 assign(other); 711 assign(other);
729 } 712 }
730 713
731 void ExplodedFrameState::assign(const ExplodedFrameState& other) { 714 void ExplodedFrameState::assign(const ExplodedFrameState& other) {
732 url_string = other.url_string; 715 url_string = other.url_string;
733 referrer = other.referrer; 716 referrer = other.referrer;
734 target = other.target; 717 target = other.target;
735 state_object = other.state_object; 718 state_object = other.state_object;
736 document_state = other.document_state; 719 document_state = other.document_state;
737 scroll_restoration_type = other.scroll_restoration_type; 720 scroll_restoration_type = other.scroll_restoration_type;
738 did_save_scroll_or_scale_state = other.did_save_scroll_or_scale_state;
739 visual_viewport_scroll_offset = other.visual_viewport_scroll_offset; 721 visual_viewport_scroll_offset = other.visual_viewport_scroll_offset;
740 scroll_offset = other.scroll_offset; 722 scroll_offset = other.scroll_offset;
741 item_sequence_number = other.item_sequence_number; 723 item_sequence_number = other.item_sequence_number;
742 document_sequence_number = other.document_sequence_number; 724 document_sequence_number = other.document_sequence_number;
743 page_scale_factor = other.page_scale_factor; 725 page_scale_factor = other.page_scale_factor;
744 referrer_policy = other.referrer_policy; 726 referrer_policy = other.referrer_policy;
745 http_body = other.http_body; 727 http_body = other.http_body;
746 children = other.children; 728 children = other.children;
747 } 729 }
748 730
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 // because it covers additional data (e.g.|contains_sensitive_info|) which 785 // because it covers additional data (e.g.|contains_sensitive_info|) which
804 // is marshaled between native code and java. WriteResourceRequestBody() 786 // is marshaled between native code and java. WriteResourceRequestBody()
805 // serializes data which needs to be saved out to disk. 787 // serializes data which needs to be saved out to disk.
806 WriteBoolean(resource_request_body.contains_sensitive_info(), &obj); 788 WriteBoolean(resource_request_body.contains_sensitive_info(), &obj);
807 return obj.GetAsString(); 789 return obj.GetAsString();
808 } 790 }
809 791
810 #endif 792 #endif
811 793
812 } // namespace content 794 } // namespace content
OLDNEW
« no previous file with comments | « content/common/page_state_serialization.h ('k') | content/common/page_state_serialization_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698