diff options
author | japhet@chromium.org <japhet@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-05 01:03:56 +0000 |
---|---|---|
committer | japhet@chromium.org <japhet@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-05 01:03:56 +0000 |
commit | 804c8a5d30eda316ab287d1ab7f95e074d9dc43e (patch) | |
tree | 7538a96b3b54540f85324b79bf62d7af3d88d679 | |
parent | f2ec2e91f7bba7d18f3d9df353b296100fb1410b (diff) | |
download | chromium_src-804c8a5d30eda316ab287d1ab7f95e074d9dc43e.zip chromium_src-804c8a5d30eda316ab287d1ab7f95e074d9dc43e.tar.gz chromium_src-804c8a5d30eda316ab287d1ab7f95e074d9dc43e.tar.bz2 |
Add a target_frame_id to the history serialization format.
BUG=312929
Review URL: https://codereview.chromium.org/51423002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@232864 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | content/common/page_state_serialization.cc | 7 | ||||
-rw-r--r-- | content/common/page_state_serialization.h | 1 | ||||
-rw-r--r-- | content/common/page_state_serialization_unittest.cc | 7 | ||||
-rw-r--r-- | content/public/renderer/history_item_serialization.cc | 3 | ||||
-rw-r--r-- | content/test/data/page_state/serialized_v16.dat | 18 |
5 files changed, 35 insertions, 1 deletions
diff --git a/content/common/page_state_serialization.cc b/content/common/page_state_serialization.cc index e22cf41..3c9375b 100644 --- a/content/common/page_state_serialization.cc +++ b/content/common/page_state_serialization.cc @@ -187,12 +187,13 @@ struct SerializeObject { // 14: Adds list of referenced files, version written only for first item. // 15: Removes a bunch of values we defined but never used. // 16: Switched from blob urls to blob uuids. +// 17: Add a target frame id number. // // NOTE: If the version is -1, then the pickle contains only a URL string. // See ReadPageState. // const int kMinVersion = 11; -const int kCurrentVersion = 16; +const int kCurrentVersion = 17; // A bunch of convenience functions to read/write to SerializeObjects. The // de-serializers assume the input data will be in the correct format and fall @@ -502,6 +503,7 @@ void WriteFrameState( WriteReal(state.page_scale_factor, obj); WriteInteger64(state.item_sequence_number, obj); WriteInteger64(state.document_sequence_number, obj); + WriteInteger64(state.target_frame_id, obj); bool has_state_object = !state.state_object.is_null(); WriteBoolean(has_state_object, obj); @@ -552,6 +554,8 @@ void ReadFrameState(SerializeObject* obj, bool is_top, state->page_scale_factor = ReadReal(obj); state->item_sequence_number = ReadInteger64(obj); state->document_sequence_number = ReadInteger64(obj); + if (obj->version >= 17) + state->target_frame_id = ReadInteger64(obj); bool has_state_object = ReadBoolean(obj); if (has_state_object) @@ -660,6 +664,7 @@ ExplodedHttpBody::~ExplodedHttpBody() { ExplodedFrameState::ExplodedFrameState() : item_sequence_number(0), document_sequence_number(0), + target_frame_id(0), page_scale_factor(0.0) { } diff --git a/content/common/page_state_serialization.h b/content/common/page_state_serialization.h index b46bc01..607a89a 100644 --- a/content/common/page_state_serialization.h +++ b/content/common/page_state_serialization.h @@ -50,6 +50,7 @@ struct CONTENT_EXPORT ExplodedFrameState { gfx::Point scroll_offset; int64 item_sequence_number; int64 document_sequence_number; + int64 target_frame_id; double page_scale_factor; ExplodedHttpBody http_body; std::vector<ExplodedFrameState> children; diff --git a/content/common/page_state_serialization_unittest.cc b/content/common/page_state_serialization_unittest.cc index d53300f..5b79c96 100644 --- a/content/common/page_state_serialization_unittest.cc +++ b/content/common/page_state_serialization_unittest.cc @@ -75,6 +75,7 @@ void ExpectEquality(const ExplodedFrameState& a, const ExplodedFrameState& b) { EXPECT_EQ(a.scroll_offset, b.scroll_offset); EXPECT_EQ(a.item_sequence_number, b.item_sequence_number); EXPECT_EQ(a.document_sequence_number, b.document_sequence_number); + EXPECT_EQ(a.target_frame_id, b.target_frame_id); EXPECT_EQ(a.page_scale_factor, b.page_scale_factor); ExpectEquality(a.http_body, b.http_body); ExpectEquality(a.children, b.children); @@ -103,6 +104,7 @@ class PageStateSerializationTest : public testing::Test { frame_state->scroll_offset = gfx::Point(0, 100); frame_state->item_sequence_number = 1; frame_state->document_sequence_number = 2; + frame_state->target_frame_id = 3; frame_state->page_scale_factor = 2.0; } @@ -140,6 +142,7 @@ class PageStateSerializationTest : public testing::Test { frame_state->scroll_offset = gfx::Point(42, -42); frame_state->item_sequence_number = 123; frame_state->document_sequence_number = 456; + frame_state->target_frame_id = 0; frame_state->page_scale_factor = 2.0f; frame_state->document_state.push_back( @@ -414,5 +417,9 @@ TEST_F(PageStateSerializationTest, BackwardsCompat_v15) { TestBackwardsCompat(15); } +TEST_F(PageStateSerializationTest, BackwardsCompat_v16) { + TestBackwardsCompat(16); +} + } // namespace } // namespace content diff --git a/content/public/renderer/history_item_serialization.cc b/content/public/renderer/history_item_serialization.cc index 6bef7de..9ca4135 100644 --- a/content/public/renderer/history_item_serialization.cc +++ b/content/public/renderer/history_item_serialization.cc @@ -91,6 +91,7 @@ bool RecursivelyGenerateFrameState(const WebHistoryItem& item, state->item_sequence_number = item.itemSequenceNumber(); state->document_sequence_number = item.documentSequenceNumber(); + state->target_frame_id = item.targetFrameID(); state->page_scale_factor = item.pageScaleFactor(); ToNullableString16Vector(item.documentState(), &state->document_state); @@ -139,6 +140,8 @@ bool RecursivelyGenerateHistoryItem(const ExplodedFrameState& state, if (state.document_sequence_number) item->setDocumentSequenceNumber(state.document_sequence_number); + item->setTargetFrameID(state.target_frame_id); + item->setHTTPContentType(state.http_body.http_content_type); if (!state.http_body.is_null) { WebHTTPBody http_body; diff --git a/content/test/data/page_state/serialized_v16.dat b/content/test/data/page_state/serialized_v16.dat new file mode 100644 index 0000000..33a0d01 --- /dev/null +++ b/content/test/data/page_state/serialized_v16.dat @@ -0,0 +1,18 @@ +1AMAABEAAAABAAAAEAAAAGYAaQBsAGUALgB0AHgAdAAoAAAAaAB0AHQAcAA6AC8ALwBjAGgAcgBv +AG0AaQB1AG0ALgBvAHIAZwAvACgAAABoAHQAdABwADoALwAvAGMAaAByAG8AbQBpAHUAbQAuAG8A +cgBnAC8ADAAAAHQAYQByAGcAZQB0ACoAAADW////JAAAAGgAdAB0AHAAOgAvAC8AZwBvAG8AZwBs +AGUALgBjAG8AbQAvAAgAAABgAAAACgANAD8AJQAgAFcAZQBiAEsAaQB0ACAAcwBlAHIAaQBhAGwA +aQB6AGUAZAAgAGYAbwByAG0AIABzAHQAYQB0AGUAIAB2AGUAcgBzAGkAbwBuACAAOAAgAAoADQA9 +ACYAEAAAAGYAbwByAG0AIABrAGUAeQACAAAAMQAAAAYAAABmAG8AbwAAAAgAAABmAGkAbABlAAIA +AAAyAAAAEAAAAGYAaQBsAGUALgB0AHgAdAAWAAAAZABpAHMAcABsAGEAeQBOAGEAbQBlAAAACAAA +AAAAAAAAAABAewAAAAAAAADIAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAAAAABAAAABmaXJz +dCBkYXRhIGJsb2NrAQAAABAAAABmAGkAbABlAC4AdAB4AHQAAAAAAAAAAAD//////////wgAAAAA +AAAAAAD4fwAAAAAPAAAAZGF0YSB0aGUgc2Vjb25kABUDAAAAAAAAAAAAAA4AAABmAG8AbwAvAGIA +YQByAAAAAQAAACgAAABoAHQAdABwADoALwAvAGMAaAByAG8AbQBpAHUAbQAuAG8AcgBnAC8AKAAA +AGgAdAB0AHAAOgAvAC8AYwBoAHIAbwBtAGkAdQBtAC4AbwByAGcALwD/////KgAAANb///8kAAAA +aAB0AHQAcAA6AC8ALwBnAG8AbwBnAGwAZQAuAGMAbwBtAC8ACAAAAGAAAAAKAA0APwAlACAAVwBl +AGIASwBpAHQAIABzAGUAcgBpAGEAbABpAHoAZQBkACAAZgBvAHIAbQAgAHMAdABhAHQAZQAgAHYA +ZQByAHMAaQBvAG4AIAA4ACAACgANAD0AJgAQAAAAZgBvAHIAbQAgAGsAZQB5AAIAAAAxAAAABgAA +AGYAbwBvAAAACAAAAGYAaQBsAGUAAgAAADIAAAAQAAAAZgBpAGwAZQAuAHQAeAB0ABYAAABkAGkA +cwBwAGwAYQB5AE4AYQBtAGUAAAAIAAAAAAAAAAAAAEB7AAAAAAAAAMgBAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAP////8AAAAA |