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

Unified Diff: content/common/page_state_serialization.cc

Issue 2038233002: Using ResourceRequestBody as the type of HTTP body outside of //content. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@make-resource-request-body-public
Patch Set: Rebasing... Created 4 years, 6 months 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
« no previous file with comments | « content/common/page_state_serialization.h ('k') | content/content_common.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/common/page_state_serialization.cc
diff --git a/content/common/page_state_serialization.cc b/content/common/page_state_serialization.cc
index a09ceb4993482e37a68cc5d1f97013754e60d2de..7a917d6f3945b500b8be7feae3cf7be1380629fb 100644
--- a/content/common/page_state_serialization.cc
+++ b/content/common/page_state_serialization.cc
@@ -28,36 +28,41 @@ float g_device_scale_factor_for_testing = 0.0;
//-----------------------------------------------------------------------------
-void AppendDataToHttpBody(ExplodedHttpBody* http_body, const char* data,
- int data_length) {
- http_body->request_body->AppendBytes(data, data_length);
-}
-
-void AppendFileRangeToHttpBody(ExplodedHttpBody* http_body,
- const base::NullableString16& file_path,
- int file_start,
- int file_length,
- double file_modification_time) {
- http_body->request_body->AppendFileRange(
+void AppendDataToRequestBody(
+ const scoped_refptr<ResourceRequestBodyImpl>& request_body,
+ const char* data,
+ int data_length) {
+ request_body->AppendBytes(data, data_length);
+}
+
+void AppendFileRangeToRequestBody(
+ const scoped_refptr<ResourceRequestBodyImpl>& request_body,
+ const base::NullableString16& file_path,
+ int file_start,
+ int file_length,
+ double file_modification_time) {
+ request_body->AppendFileRange(
base::FilePath::FromUTF16Unsafe(file_path.string()),
static_cast<uint64_t>(file_start), static_cast<uint64_t>(file_length),
base::Time::FromDoubleT(file_modification_time));
}
-void AppendURLRangeToHttpBody(ExplodedHttpBody* http_body,
- const GURL& url,
- int file_start,
- int file_length,
- double file_modification_time) {
- http_body->request_body->AppendFileSystemFileRange(
+void AppendURLRangeToRequestBody(
+ const scoped_refptr<ResourceRequestBodyImpl>& request_body,
+ const GURL& url,
+ int file_start,
+ int file_length,
+ double file_modification_time) {
+ request_body->AppendFileSystemFileRange(
url, static_cast<uint64_t>(file_start),
static_cast<uint64_t>(file_length),
base::Time::FromDoubleT(file_modification_time));
}
-void AppendBlobToHttpBody(ExplodedHttpBody* http_body,
- const std::string& uuid) {
- http_body->request_body->AppendBlob(uuid);
+void AppendBlobToRequestBody(
+ const scoped_refptr<ResourceRequestBodyImpl>& request_body,
+ const std::string& uuid) {
+ request_body->AppendBlob(uuid);
}
//----------------------------------------------------------------------------
@@ -387,15 +392,10 @@ void ReadStringVector(SerializeObject* obj,
(*result)[i] = ReadString(obj);
}
-// Writes an ExplodedHttpBody object into a SerializeObject for serialization.
-void WriteHttpBody(const ExplodedHttpBody& http_body, SerializeObject* obj) {
- bool is_null = http_body.request_body == nullptr;
- WriteBoolean(!is_null, obj);
- if (is_null)
- return;
-
- WriteAndValidateVectorSize(*http_body.request_body->elements(), obj);
- for (const auto& element : *http_body.request_body->elements()) {
+void WriteResourceRequestBody(const ResourceRequestBodyImpl& request_body,
+ SerializeObject* obj) {
+ WriteAndValidateVectorSize(*request_body.elements(), obj);
+ for (const auto& element : *request_body.elements()) {
switch (element.type()) {
case ResourceRequestBodyImpl::Element::TYPE_BYTES:
WriteInteger(blink::WebHTTPBody::Element::TypeData, obj);
@@ -427,16 +427,12 @@ void WriteHttpBody(const ExplodedHttpBody& http_body, SerializeObject* obj) {
continue;
}
}
- WriteInteger64(http_body.request_body->identifier(), obj);
- WriteBoolean(http_body.contains_passwords, obj);
+ WriteInteger64(request_body.identifier(), obj);
}
-void ReadHttpBody(SerializeObject* obj, ExplodedHttpBody* http_body) {
- // An initial boolean indicates if we have an HTTP body.
- if (!ReadBoolean(obj))
- return;
-
- http_body->request_body = new ResourceRequestBodyImpl();
+void ReadResourceRequestBody(
+ SerializeObject* obj,
+ const scoped_refptr<ResourceRequestBodyImpl>& request_body) {
int num_elements = ReadInteger(obj);
for (int i = 0; i < num_elements; ++i) {
int type = ReadInteger(obj);
@@ -445,33 +441,53 @@ void ReadHttpBody(SerializeObject* obj, ExplodedHttpBody* http_body) {
int length = -1;
ReadData(obj, &data, &length);
if (length >= 0) {
- AppendDataToHttpBody(http_body, static_cast<const char*>(data),
- length);
+ AppendDataToRequestBody(request_body, static_cast<const char*>(data),
+ length);
}
} else if (type == blink::WebHTTPBody::Element::TypeFile) {
base::NullableString16 file_path = ReadString(obj);
int64_t file_start = ReadInteger64(obj);
int64_t file_length = ReadInteger64(obj);
double file_modification_time = ReadReal(obj);
- AppendFileRangeToHttpBody(http_body, file_path, file_start, file_length,
- file_modification_time);
+ AppendFileRangeToRequestBody(request_body, file_path, file_start,
+ file_length, file_modification_time);
} else if (type == blink::WebHTTPBody::Element::TypeFileSystemURL) {
GURL url = ReadGURL(obj);
int64_t file_start = ReadInteger64(obj);
int64_t file_length = ReadInteger64(obj);
double file_modification_time = ReadReal(obj);
- AppendURLRangeToHttpBody(http_body, url, file_start, file_length,
- file_modification_time);
+ AppendURLRangeToRequestBody(request_body, url, file_start, file_length,
+ file_modification_time);
} else if (type == blink::WebHTTPBody::Element::TypeBlob) {
if (obj->version >= 16) {
std::string blob_uuid = ReadStdString(obj);
- AppendBlobToHttpBody(http_body, blob_uuid);
+ AppendBlobToRequestBody(request_body, blob_uuid);
} else {
ReadGURL(obj); // Skip the obsolete blob url value.
}
}
}
- http_body->request_body->set_identifier(ReadInteger64(obj));
+ request_body->set_identifier(ReadInteger64(obj));
+}
+
+// Writes an ExplodedHttpBody object into a SerializeObject for serialization.
+void WriteHttpBody(const ExplodedHttpBody& http_body, SerializeObject* obj) {
+ bool is_null = http_body.request_body == nullptr;
+ WriteBoolean(!is_null, obj);
+ if (is_null)
+ return;
+
+ WriteResourceRequestBody(*http_body.request_body, obj);
+ WriteBoolean(http_body.contains_passwords, obj);
+}
+
+void ReadHttpBody(SerializeObject* obj, ExplodedHttpBody* http_body) {
+ // An initial boolean indicates if we have an HTTP body.
+ if (!ReadBoolean(obj))
+ return;
+
+ http_body->request_body = new ResourceRequestBodyImpl();
+ ReadResourceRequestBody(obj, http_body->request_body);
if (obj->version >= 12)
http_body->contains_passwords = ReadBoolean(obj);
@@ -743,6 +759,24 @@ bool DecodePageStateWithDeviceScaleFactorForTesting(
g_device_scale_factor_for_testing = 0.0;
return rv;
}
+
+scoped_refptr<ResourceRequestBodyImpl> DecodeResourceRequestBody(
+ const char* data,
+ size_t size) {
+ scoped_refptr<ResourceRequestBodyImpl> result = new ResourceRequestBodyImpl();
+ SerializeObject obj(data, static_cast<int>(size));
+ ReadResourceRequestBody(&obj, result);
+ return obj.parse_error ? nullptr : result;
+}
+
+std::string EncodeResourceRequestBody(
+ const ResourceRequestBodyImpl& resource_request_body) {
+ SerializeObject obj;
+ obj.version = kCurrentVersion;
+ WriteResourceRequestBody(resource_request_body, &obj);
+ return obj.GetAsString();
+}
+
#endif
} // namespace content
« no previous file with comments | « content/common/page_state_serialization.h ('k') | content/content_common.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698