| 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 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 // 13: Adds support for URL (FileSystem URL) | 186 // 13: Adds support for URL (FileSystem URL) |
| 187 // 14: Adds list of referenced files, version written only for first item. | 187 // 14: Adds list of referenced files, version written only for first item. |
| 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 // | 197 // |
| 197 // NOTE: If the version is -1, then the pickle contains only a URL string. | 198 // NOTE: If the version is -1, then the pickle contains only a URL string. |
| 198 // See ReadPageState. | 199 // See ReadPageState. |
| 199 // | 200 // |
| 200 const int kMinVersion = 11; | 201 const int kMinVersion = 11; |
| 201 const int kCurrentVersion = 20; | 202 const int kCurrentVersion = 21; |
| 202 | 203 |
| 203 // A bunch of convenience functions to read/write to SerializeObjects. The | 204 // A bunch of convenience functions to read/write to SerializeObjects. The |
| 204 // de-serializers assume the input data will be in the correct format and fall | 205 // de-serializers assume the input data will be in the correct format and fall |
| 205 // back to returning safe defaults when not. | 206 // back to returning safe defaults when not. |
| 206 | 207 |
| 207 void WriteData(const void* data, int length, SerializeObject* obj) { | 208 void WriteData(const void* data, int length, SerializeObject* obj) { |
| 208 obj->pickle.WriteData(static_cast<const char*>(data), length); | 209 obj->pickle.WriteData(static_cast<const char*>(data), length); |
| 209 } | 210 } |
| 210 | 211 |
| 211 void ReadData(SerializeObject* obj, const void** data, int* length) { | 212 void ReadData(SerializeObject* obj, const void** data, int* length) { |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 504 WriteString(state.target, obj); | 505 WriteString(state.target, obj); |
| 505 WriteInteger(state.scroll_offset.x(), obj); | 506 WriteInteger(state.scroll_offset.x(), obj); |
| 506 WriteInteger(state.scroll_offset.y(), obj); | 507 WriteInteger(state.scroll_offset.y(), obj); |
| 507 WriteString(state.referrer, obj); | 508 WriteString(state.referrer, obj); |
| 508 | 509 |
| 509 WriteStringVector(state.document_state, obj); | 510 WriteStringVector(state.document_state, obj); |
| 510 | 511 |
| 511 WriteReal(state.page_scale_factor, obj); | 512 WriteReal(state.page_scale_factor, obj); |
| 512 WriteInteger64(state.item_sequence_number, obj); | 513 WriteInteger64(state.item_sequence_number, obj); |
| 513 WriteInteger64(state.document_sequence_number, obj); | 514 WriteInteger64(state.document_sequence_number, obj); |
| 515 WriteInteger64(state.frame_sequence_number, obj); |
| 514 WriteInteger(state.referrer_policy, obj); | 516 WriteInteger(state.referrer_policy, obj); |
| 515 WriteReal(state.pinch_viewport_scroll_offset.x(), obj); | 517 WriteReal(state.pinch_viewport_scroll_offset.x(), obj); |
| 516 WriteReal(state.pinch_viewport_scroll_offset.y(), obj); | 518 WriteReal(state.pinch_viewport_scroll_offset.y(), obj); |
| 517 | 519 |
| 518 bool has_state_object = !state.state_object.is_null(); | 520 bool has_state_object = !state.state_object.is_null(); |
| 519 WriteBoolean(has_state_object, obj); | 521 WriteBoolean(has_state_object, obj); |
| 520 if (has_state_object) | 522 if (has_state_object) |
| 521 WriteString(state.state_object, obj); | 523 WriteString(state.state_object, obj); |
| 522 | 524 |
| 523 WriteHttpBody(state.http_body, obj); | 525 WriteHttpBody(state.http_body, obj); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 560 ConsumeBoolean(obj); // Skip obsolete target item flag. | 562 ConsumeBoolean(obj); // Skip obsolete target item flag. |
| 561 ConsumeInteger(obj); // Skip obsolete visit count field. | 563 ConsumeInteger(obj); // Skip obsolete visit count field. |
| 562 } | 564 } |
| 563 state->referrer = ReadString(obj); | 565 state->referrer = ReadString(obj); |
| 564 | 566 |
| 565 ReadStringVector(obj, &state->document_state); | 567 ReadStringVector(obj, &state->document_state); |
| 566 | 568 |
| 567 state->page_scale_factor = ReadReal(obj); | 569 state->page_scale_factor = ReadReal(obj); |
| 568 state->item_sequence_number = ReadInteger64(obj); | 570 state->item_sequence_number = ReadInteger64(obj); |
| 569 state->document_sequence_number = ReadInteger64(obj); | 571 state->document_sequence_number = ReadInteger64(obj); |
| 572 if (obj->version >= 21) |
| 573 state->frame_sequence_number = ReadInteger64(obj); |
| 570 | 574 |
| 571 if (obj->version >= 17 && obj->version < 19) | 575 if (obj->version >= 17 && obj->version < 19) |
| 572 ConsumeInteger64(obj); // Skip obsolete target frame id number. | 576 ConsumeInteger64(obj); // Skip obsolete target frame id number. |
| 573 | 577 |
| 574 if (obj->version >= 18) { | 578 if (obj->version >= 18) { |
| 575 state->referrer_policy = | 579 state->referrer_policy = |
| 576 static_cast<blink::WebReferrerPolicy>(ReadInteger(obj)); | 580 static_cast<blink::WebReferrerPolicy>(ReadInteger(obj)); |
| 577 } | 581 } |
| 578 | 582 |
| 579 if (obj->version >= 20) { | 583 if (obj->version >= 20) { |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 contains_passwords(false), | 689 contains_passwords(false), |
| 686 is_null(true) { | 690 is_null(true) { |
| 687 } | 691 } |
| 688 | 692 |
| 689 ExplodedHttpBody::~ExplodedHttpBody() { | 693 ExplodedHttpBody::~ExplodedHttpBody() { |
| 690 } | 694 } |
| 691 | 695 |
| 692 ExplodedFrameState::ExplodedFrameState() | 696 ExplodedFrameState::ExplodedFrameState() |
| 693 : item_sequence_number(0), | 697 : item_sequence_number(0), |
| 694 document_sequence_number(0), | 698 document_sequence_number(0), |
| 699 frame_sequence_number(0), |
| 695 page_scale_factor(0.0), | 700 page_scale_factor(0.0), |
| 696 referrer_policy(blink::WebReferrerPolicyDefault) { | 701 referrer_policy(blink::WebReferrerPolicyDefault) { |
| 697 } | 702 } |
| 698 | 703 |
| 699 ExplodedFrameState::ExplodedFrameState(const ExplodedFrameState& other) { | 704 ExplodedFrameState::ExplodedFrameState(const ExplodedFrameState& other) { |
| 700 assign(other); | 705 assign(other); |
| 701 } | 706 } |
| 702 | 707 |
| 703 ExplodedFrameState::~ExplodedFrameState() { | 708 ExplodedFrameState::~ExplodedFrameState() { |
| 704 } | 709 } |
| 705 | 710 |
| 706 void ExplodedFrameState::operator=(const ExplodedFrameState& other) { | 711 void ExplodedFrameState::operator=(const ExplodedFrameState& other) { |
| 707 if (&other != this) | 712 if (&other != this) |
| 708 assign(other); | 713 assign(other); |
| 709 } | 714 } |
| 710 | 715 |
| 711 void ExplodedFrameState::assign(const ExplodedFrameState& other) { | 716 void ExplodedFrameState::assign(const ExplodedFrameState& other) { |
| 712 url_string = other.url_string; | 717 url_string = other.url_string; |
| 713 referrer = other.referrer; | 718 referrer = other.referrer; |
| 714 target = other.target; | 719 target = other.target; |
| 715 state_object = other.state_object; | 720 state_object = other.state_object; |
| 716 document_state = other.document_state; | 721 document_state = other.document_state; |
| 717 pinch_viewport_scroll_offset = other.pinch_viewport_scroll_offset; | 722 pinch_viewport_scroll_offset = other.pinch_viewport_scroll_offset; |
| 718 scroll_offset = other.scroll_offset; | 723 scroll_offset = other.scroll_offset; |
| 719 item_sequence_number = other.item_sequence_number; | 724 item_sequence_number = other.item_sequence_number; |
| 720 document_sequence_number = other.document_sequence_number; | 725 document_sequence_number = other.document_sequence_number; |
| 726 frame_sequence_number = other.frame_sequence_number; |
| 721 page_scale_factor = other.page_scale_factor; | 727 page_scale_factor = other.page_scale_factor; |
| 722 referrer_policy = other.referrer_policy; | 728 referrer_policy = other.referrer_policy; |
| 723 http_body = other.http_body; | 729 http_body = other.http_body; |
| 724 children = other.children; | 730 children = other.children; |
| 725 } | 731 } |
| 726 | 732 |
| 727 ExplodedPageState::ExplodedPageState() { | 733 ExplodedPageState::ExplodedPageState() { |
| 728 } | 734 } |
| 729 | 735 |
| 730 ExplodedPageState::~ExplodedPageState() { | 736 ExplodedPageState::~ExplodedPageState() { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 755 float device_scale_factor, | 761 float device_scale_factor, |
| 756 ExplodedPageState* exploded) { | 762 ExplodedPageState* exploded) { |
| 757 g_device_scale_factor_for_testing = device_scale_factor; | 763 g_device_scale_factor_for_testing = device_scale_factor; |
| 758 bool rv = DecodePageState(encoded, exploded); | 764 bool rv = DecodePageState(encoded, exploded); |
| 759 g_device_scale_factor_for_testing = 0.0; | 765 g_device_scale_factor_for_testing = 0.0; |
| 760 return rv; | 766 return rv; |
| 761 } | 767 } |
| 762 #endif | 768 #endif |
| 763 | 769 |
| 764 } // namespace content | 770 } // namespace content |
| OLD | NEW |