| 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 "content/common/page_state_serialization.h" | 5 #include "content/common/page_state_serialization.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/pickle.h" | 10 #include "base/pickle.h" |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 // 15: Removes a bunch of values we defined but never used. | 188 // 15: Removes a bunch of values we defined but never used. |
| 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 pinch viewport scroll offset, the offset of the pinched zoomed | 194 // 20: Add pinch 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 // | 199 // |
| 199 // 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. |
| 200 // See ReadPageState. | 201 // See ReadPageState. |
| 201 // | 202 // |
| 202 const int kMinVersion = 11; | 203 const int kMinVersion = 11; |
| 203 const int kCurrentVersion = 22; | 204 const int kCurrentVersion = 23; |
| 204 | 205 |
| 205 // A bunch of convenience functions to read/write to SerializeObjects. The | 206 // A bunch of convenience functions to read/write to SerializeObjects. The |
| 206 // 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 |
| 207 // back to returning safe defaults when not. | 208 // back to returning safe defaults when not. |
| 208 | 209 |
| 209 void WriteData(const void* data, int length, SerializeObject* obj) { | 210 void WriteData(const void* data, int length, SerializeObject* obj) { |
| 210 obj->pickle.WriteData(static_cast<const char*>(data), length); | 211 obj->pickle.WriteData(static_cast<const char*>(data), length); |
| 211 } | 212 } |
| 212 | 213 |
| 213 void ReadData(SerializeObject* obj, const void** data, int* length) { | 214 void ReadData(SerializeObject* obj, const void** data, int* length) { |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 WriteString(state.target, obj); | 487 WriteString(state.target, obj); |
| 487 WriteInteger(state.scroll_offset.x(), obj); | 488 WriteInteger(state.scroll_offset.x(), obj); |
| 488 WriteInteger(state.scroll_offset.y(), obj); | 489 WriteInteger(state.scroll_offset.y(), obj); |
| 489 WriteString(state.referrer, obj); | 490 WriteString(state.referrer, obj); |
| 490 | 491 |
| 491 WriteStringVector(state.document_state, obj); | 492 WriteStringVector(state.document_state, obj); |
| 492 | 493 |
| 493 WriteReal(state.page_scale_factor, obj); | 494 WriteReal(state.page_scale_factor, obj); |
| 494 WriteInteger64(state.item_sequence_number, obj); | 495 WriteInteger64(state.item_sequence_number, obj); |
| 495 WriteInteger64(state.document_sequence_number, obj); | 496 WriteInteger64(state.document_sequence_number, obj); |
| 496 WriteInteger64(state.frame_sequence_number, obj); | |
| 497 WriteInteger(state.referrer_policy, obj); | 497 WriteInteger(state.referrer_policy, obj); |
| 498 WriteReal(state.pinch_viewport_scroll_offset.x(), obj); | 498 WriteReal(state.pinch_viewport_scroll_offset.x(), obj); |
| 499 WriteReal(state.pinch_viewport_scroll_offset.y(), obj); | 499 WriteReal(state.pinch_viewport_scroll_offset.y(), obj); |
| 500 | 500 |
| 501 WriteInteger(state.scroll_restoration_type, obj); | 501 WriteInteger(state.scroll_restoration_type, obj); |
| 502 | 502 |
| 503 bool has_state_object = !state.state_object.is_null(); | 503 bool has_state_object = !state.state_object.is_null(); |
| 504 WriteBoolean(has_state_object, obj); | 504 WriteBoolean(has_state_object, obj); |
| 505 if (has_state_object) | 505 if (has_state_object) |
| 506 WriteString(state.state_object, obj); | 506 WriteString(state.state_object, obj); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 545 ReadBoolean(obj); // Skip obsolete target item flag. | 545 ReadBoolean(obj); // Skip obsolete target item flag. |
| 546 ReadInteger(obj); // Skip obsolete visit count field. | 546 ReadInteger(obj); // Skip obsolete visit count field. |
| 547 } | 547 } |
| 548 state->referrer = ReadString(obj); | 548 state->referrer = ReadString(obj); |
| 549 | 549 |
| 550 ReadStringVector(obj, &state->document_state); | 550 ReadStringVector(obj, &state->document_state); |
| 551 | 551 |
| 552 state->page_scale_factor = ReadReal(obj); | 552 state->page_scale_factor = ReadReal(obj); |
| 553 state->item_sequence_number = ReadInteger64(obj); | 553 state->item_sequence_number = ReadInteger64(obj); |
| 554 state->document_sequence_number = ReadInteger64(obj); | 554 state->document_sequence_number = ReadInteger64(obj); |
| 555 if (obj->version >= 21) | 555 if (obj->version >= 21 && obj->version < 23) |
| 556 state->frame_sequence_number = ReadInteger64(obj); | 556 ReadInteger64(obj); // Skip obsolete frame sequence number. |
| 557 | 557 |
| 558 if (obj->version >= 17 && obj->version < 19) | 558 if (obj->version >= 17 && obj->version < 19) |
| 559 ReadInteger64(obj); // Skip obsolete target frame id number. | 559 ReadInteger64(obj); // Skip obsolete target frame id number. |
| 560 | 560 |
| 561 if (obj->version >= 18) { | 561 if (obj->version >= 18) { |
| 562 state->referrer_policy = | 562 state->referrer_policy = |
| 563 static_cast<blink::WebReferrerPolicy>(ReadInteger(obj)); | 563 static_cast<blink::WebReferrerPolicy>(ReadInteger(obj)); |
| 564 } | 564 } |
| 565 | 565 |
| 566 if (obj->version >= 20) { | 566 if (obj->version >= 20) { |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 678 is_null(true) { | 678 is_null(true) { |
| 679 } | 679 } |
| 680 | 680 |
| 681 ExplodedHttpBody::~ExplodedHttpBody() { | 681 ExplodedHttpBody::~ExplodedHttpBody() { |
| 682 } | 682 } |
| 683 | 683 |
| 684 ExplodedFrameState::ExplodedFrameState() | 684 ExplodedFrameState::ExplodedFrameState() |
| 685 : scroll_restoration_type(blink::WebHistoryScrollRestorationAuto), | 685 : scroll_restoration_type(blink::WebHistoryScrollRestorationAuto), |
| 686 item_sequence_number(0), | 686 item_sequence_number(0), |
| 687 document_sequence_number(0), | 687 document_sequence_number(0), |
| 688 frame_sequence_number(0), | |
| 689 page_scale_factor(0.0), | 688 page_scale_factor(0.0), |
| 690 referrer_policy(blink::WebReferrerPolicyDefault) { | 689 referrer_policy(blink::WebReferrerPolicyDefault) { |
| 691 } | 690 } |
| 692 | 691 |
| 693 ExplodedFrameState::ExplodedFrameState(const ExplodedFrameState& other) { | 692 ExplodedFrameState::ExplodedFrameState(const ExplodedFrameState& other) { |
| 694 assign(other); | 693 assign(other); |
| 695 } | 694 } |
| 696 | 695 |
| 697 ExplodedFrameState::~ExplodedFrameState() { | 696 ExplodedFrameState::~ExplodedFrameState() { |
| 698 } | 697 } |
| 699 | 698 |
| 700 void ExplodedFrameState::operator=(const ExplodedFrameState& other) { | 699 void ExplodedFrameState::operator=(const ExplodedFrameState& other) { |
| 701 if (&other != this) | 700 if (&other != this) |
| 702 assign(other); | 701 assign(other); |
| 703 } | 702 } |
| 704 | 703 |
| 705 void ExplodedFrameState::assign(const ExplodedFrameState& other) { | 704 void ExplodedFrameState::assign(const ExplodedFrameState& other) { |
| 706 url_string = other.url_string; | 705 url_string = other.url_string; |
| 707 referrer = other.referrer; | 706 referrer = other.referrer; |
| 708 target = other.target; | 707 target = other.target; |
| 709 state_object = other.state_object; | 708 state_object = other.state_object; |
| 710 document_state = other.document_state; | 709 document_state = other.document_state; |
| 711 scroll_restoration_type = other.scroll_restoration_type; | 710 scroll_restoration_type = other.scroll_restoration_type; |
| 712 pinch_viewport_scroll_offset = other.pinch_viewport_scroll_offset; | 711 pinch_viewport_scroll_offset = other.pinch_viewport_scroll_offset; |
| 713 scroll_offset = other.scroll_offset; | 712 scroll_offset = other.scroll_offset; |
| 714 item_sequence_number = other.item_sequence_number; | 713 item_sequence_number = other.item_sequence_number; |
| 715 document_sequence_number = other.document_sequence_number; | 714 document_sequence_number = other.document_sequence_number; |
| 716 frame_sequence_number = other.frame_sequence_number; | |
| 717 page_scale_factor = other.page_scale_factor; | 715 page_scale_factor = other.page_scale_factor; |
| 718 referrer_policy = other.referrer_policy; | 716 referrer_policy = other.referrer_policy; |
| 719 http_body = other.http_body; | 717 http_body = other.http_body; |
| 720 children = other.children; | 718 children = other.children; |
| 721 } | 719 } |
| 722 | 720 |
| 723 ExplodedPageState::ExplodedPageState() { | 721 ExplodedPageState::ExplodedPageState() { |
| 724 } | 722 } |
| 725 | 723 |
| 726 ExplodedPageState::~ExplodedPageState() { | 724 ExplodedPageState::~ExplodedPageState() { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 751 float device_scale_factor, | 749 float device_scale_factor, |
| 752 ExplodedPageState* exploded) { | 750 ExplodedPageState* exploded) { |
| 753 g_device_scale_factor_for_testing = device_scale_factor; | 751 g_device_scale_factor_for_testing = device_scale_factor; |
| 754 bool rv = DecodePageState(encoded, exploded); | 752 bool rv = DecodePageState(encoded, exploded); |
| 755 g_device_scale_factor_for_testing = 0.0; | 753 g_device_scale_factor_for_testing = 0.0; |
| 756 return rv; | 754 return rv; |
| 757 } | 755 } |
| 758 #endif | 756 #endif |
| 759 | 757 |
| 760 } // namespace content | 758 } // namespace content |
| OLD | NEW |