Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2953)

Unified Diff: android_webview/native/state_serializer.cc

Issue 84703003: Allow data URL > 2MB for loadDataWithBaseURL (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/native/state_serializer.cc
diff --git a/android_webview/native/state_serializer.cc b/android_webview/native/state_serializer.cc
index f4a628b39a70bf1023f80b24e00c3361f50016fe..457ea20cc0ab992277858a04e5535f2ddacd7bab 100644
--- a/android_webview/native/state_serializer.cc
+++ b/android_webview/native/state_serializer.cc
@@ -35,7 +35,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 = 20131123;
} // namespace
@@ -177,6 +177,20 @@ bool WriteNavigationEntryToPickle(const content::NavigationEntry& entry,
if (!pickle->WriteString(entry.GetOriginalRequestURL().spec()))
return false;
+ {
+ const char* data = NULL;
+ size_t size = 0;
+ scoped_refptr<base::RefCountedMemory> d = entry.GetDataForDataURL();
+ if (d.get()) {
+ data = reinterpret_cast<const char*>(d->front());
+ size = d->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->WriteString(entry.GetBaseURLForDataURL().spec()))
return false;
@@ -255,6 +269,18 @@ bool RestoreNavigationEntryFromPickle(PickleIterator* iterator,
}
{
+ const char* data;
+ int len;
+ if (!iterator->ReadData(&data, &len))
+ return false;
+ if (len > 0) {
+ scoped_refptr<base::RefCountedString> ref = new base::RefCountedString;
+ ref->data().assign(data, len);
+ entry->SetDataForDataURL(ref.get());
+ }
+ }
+
+ {
string base_url_for_data_url;
if (!iterator->ReadString(&base_url_for_data_url))
return false;

Powered by Google App Engine
This is Rietveld 408576698