summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjaphet@chromium.org <japhet@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-05 01:03:56 +0000
committerjaphet@chromium.org <japhet@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-05 01:03:56 +0000
commit804c8a5d30eda316ab287d1ab7f95e074d9dc43e (patch)
tree7538a96b3b54540f85324b79bf62d7af3d88d679
parentf2ec2e91f7bba7d18f3d9df353b296100fb1410b (diff)
downloadchromium_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.cc7
-rw-r--r--content/common/page_state_serialization.h1
-rw-r--r--content/common/page_state_serialization_unittest.cc7
-rw-r--r--content/public/renderer/history_item_serialization.cc3
-rw-r--r--content/test/data/page_state/serialized_v16.dat18
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