Index: android_webview/native/state_serializer.cc |
diff --git a/android_webview/native/state_serializer.cc b/android_webview/native/state_serializer.cc |
index 22139a279e1367a1e56e8d69ec4a3ae3938e7977..fc9cf9bd5ef62d5c1485071ea18e1b80956aab4f 100644 |
--- a/android_webview/native/state_serializer.cc |
+++ b/android_webview/native/state_serializer.cc |
@@ -34,7 +34,7 @@ namespace { |
// Sanity check value that we are restoring from a valid pickle. |
// This can potentially used as an actual serialization version number in the |
// future if we ever decide to support restoring from older versions. |
-const uint32 AW_STATE_VERSION = 20130814; |
+const uint32 AW_STATE_VERSION = 20151204; |
} // namespace |
@@ -179,6 +179,20 @@ bool WriteNavigationEntryToPickle(const content::NavigationEntry& entry, |
if (!pickle->WriteString(entry.GetBaseURLForDataURL().spec())) |
return false; |
+ { |
+ const char* data = nullptr; |
+ size_t size = 0; |
+ scoped_refptr<const base::RefCountedString> s = entry.GetDataURLAsString(); |
+ if (s) { |
+ data = s->front_as<char>(); |
+ size = s->size(); |
+ } |
+ // Even when |entry.GetDataForDataURL()| is null we still need to write a |
+ // zero-length entry to ensure the fields all line up when read back in. |
+ if (!pickle->WriteData(data, size)) |
+ return false; |
+ } |
+ |
if (!pickle->WriteBool(static_cast<int>(entry.GetIsOverridingUserAgent()))) |
return false; |
@@ -261,6 +275,18 @@ bool RestoreNavigationEntryFromPickle(base::PickleIterator* iterator, |
} |
{ |
+ const char* data; |
+ int size; |
+ if (!iterator->ReadData(&data, &size)) |
+ return false; |
+ if (size > 0) { |
+ scoped_refptr<base::RefCountedString> ref = new base::RefCountedString(); |
+ ref->data().assign(data, size); |
+ entry->SetDataURLAsString(ref); |
+ } |
+ } |
+ |
+ { |
bool is_overriding_user_agent; |
if (!iterator->ReadBool(&is_overriding_user_agent)) |
return false; |