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

Side by Side Diff: content/common/page_state_serialization.cc

Issue 2954343005: Merge ResourceRequestBodyImpl and ResourceRequestBody. (Closed)
Patch Set: Remove comment Created 3 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/common/page_state_serialization.h" 5 #include "content/common/page_state_serialization.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <limits> 10 #include <limits>
11 11
12 #include "base/pickle.h" 12 #include "base/pickle.h"
13 #include "base/strings/nullable_string16.h" 13 #include "base/strings/nullable_string16.h"
14 #include "base/strings/string_number_conversions.h" 14 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/string_util.h" 15 #include "base/strings/string_util.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
17 #include "build/build_config.h" 17 #include "build/build_config.h"
18 #include "content/common/resource_request_body_impl.h" 18 #include "content/public/common/resource_request_body.h"
19 #include "ui/display/display.h" 19 #include "ui/display/display.h"
20 #include "ui/display/screen.h" 20 #include "ui/display/screen.h"
21 21
22 namespace content { 22 namespace content {
23 namespace { 23 namespace {
24 24
25 #if defined(OS_ANDROID) 25 #if defined(OS_ANDROID)
26 float g_device_scale_factor_for_testing = 0.0; 26 float g_device_scale_factor_for_testing = 0.0;
27 #endif 27 #endif
28 28
29 //----------------------------------------------------------------------------- 29 //-----------------------------------------------------------------------------
30 30
31 void AppendDataToRequestBody( 31 void AppendDataToRequestBody(
32 const scoped_refptr<ResourceRequestBodyImpl>& request_body, 32 const scoped_refptr<ResourceRequestBody>& request_body,
33 const char* data, 33 const char* data,
34 int data_length) { 34 int data_length) {
35 request_body->AppendBytes(data, data_length); 35 request_body->AppendBytes(data, data_length);
36 } 36 }
37 37
38 void AppendFileRangeToRequestBody( 38 void AppendFileRangeToRequestBody(
39 const scoped_refptr<ResourceRequestBodyImpl>& request_body, 39 const scoped_refptr<ResourceRequestBody>& request_body,
40 const base::NullableString16& file_path, 40 const base::NullableString16& file_path,
41 int file_start, 41 int file_start,
42 int file_length, 42 int file_length,
43 double file_modification_time) { 43 double file_modification_time) {
44 request_body->AppendFileRange( 44 request_body->AppendFileRange(
45 base::FilePath::FromUTF16Unsafe(file_path.string()), 45 base::FilePath::FromUTF16Unsafe(file_path.string()),
46 static_cast<uint64_t>(file_start), static_cast<uint64_t>(file_length), 46 static_cast<uint64_t>(file_start), static_cast<uint64_t>(file_length),
47 base::Time::FromDoubleT(file_modification_time)); 47 base::Time::FromDoubleT(file_modification_time));
48 } 48 }
49 49
50 void AppendURLRangeToRequestBody( 50 void AppendURLRangeToRequestBody(
51 const scoped_refptr<ResourceRequestBodyImpl>& request_body, 51 const scoped_refptr<ResourceRequestBody>& request_body,
52 const GURL& url, 52 const GURL& url,
53 int file_start, 53 int file_start,
54 int file_length, 54 int file_length,
55 double file_modification_time) { 55 double file_modification_time) {
56 request_body->AppendFileSystemFileRange( 56 request_body->AppendFileSystemFileRange(
57 url, static_cast<uint64_t>(file_start), 57 url, static_cast<uint64_t>(file_start),
58 static_cast<uint64_t>(file_length), 58 static_cast<uint64_t>(file_length),
59 base::Time::FromDoubleT(file_modification_time)); 59 base::Time::FromDoubleT(file_modification_time));
60 } 60 }
61 61
62 void AppendBlobToRequestBody( 62 void AppendBlobToRequestBody(
63 const scoped_refptr<ResourceRequestBodyImpl>& request_body, 63 const scoped_refptr<ResourceRequestBody>& request_body,
64 const std::string& uuid) { 64 const std::string& uuid) {
65 request_body->AppendBlob(uuid); 65 request_body->AppendBlob(uuid);
66 } 66 }
67 67
68 //---------------------------------------------------------------------------- 68 //----------------------------------------------------------------------------
69 69
70 void AppendReferencedFilesFromHttpBody( 70 void AppendReferencedFilesFromHttpBody(
71 const std::vector<ResourceRequestBodyImpl::Element>& elements, 71 const std::vector<ResourceRequestBody::Element>& elements,
72 std::vector<base::NullableString16>* referenced_files) { 72 std::vector<base::NullableString16>* referenced_files) {
73 for (size_t i = 0; i < elements.size(); ++i) { 73 for (size_t i = 0; i < elements.size(); ++i) {
74 if (elements[i].type() == ResourceRequestBodyImpl::Element::TYPE_FILE) 74 if (elements[i].type() == ResourceRequestBody::Element::TYPE_FILE)
75 referenced_files->push_back( 75 referenced_files->push_back(
76 base::NullableString16(elements[i].path().AsUTF16Unsafe(), false)); 76 base::NullableString16(elements[i].path().AsUTF16Unsafe(), false));
77 } 77 }
78 } 78 }
79 79
80 bool AppendReferencedFilesFromDocumentState( 80 bool AppendReferencedFilesFromDocumentState(
81 const std::vector<base::NullableString16>& document_state, 81 const std::vector<base::NullableString16>& document_state,
82 std::vector<base::NullableString16>* referenced_files) { 82 std::vector<base::NullableString16>* referenced_files) {
83 if (document_state.empty()) 83 if (document_state.empty())
84 return true; 84 return true;
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 void ReadStringVector(SerializeObject* obj, 386 void ReadStringVector(SerializeObject* obj,
387 std::vector<base::NullableString16>* result) { 387 std::vector<base::NullableString16>* result) {
388 size_t num_elements = 388 size_t num_elements =
389 ReadAndValidateVectorSize(obj, sizeof(base::NullableString16)); 389 ReadAndValidateVectorSize(obj, sizeof(base::NullableString16));
390 390
391 result->resize(num_elements); 391 result->resize(num_elements);
392 for (size_t i = 0; i < num_elements; ++i) 392 for (size_t i = 0; i < num_elements; ++i)
393 (*result)[i] = ReadString(obj); 393 (*result)[i] = ReadString(obj);
394 } 394 }
395 395
396 void WriteResourceRequestBody(const ResourceRequestBodyImpl& request_body, 396 void WriteResourceRequestBody(const ResourceRequestBody& request_body,
397 SerializeObject* obj) { 397 SerializeObject* obj) {
398 WriteAndValidateVectorSize(*request_body.elements(), obj); 398 WriteAndValidateVectorSize(*request_body.elements(), obj);
399 for (const auto& element : *request_body.elements()) { 399 for (const auto& element : *request_body.elements()) {
400 switch (element.type()) { 400 switch (element.type()) {
401 case ResourceRequestBodyImpl::Element::TYPE_BYTES: 401 case ResourceRequestBody::Element::TYPE_BYTES:
402 WriteInteger(blink::WebHTTPBody::Element::kTypeData, obj); 402 WriteInteger(blink::WebHTTPBody::Element::kTypeData, obj);
403 WriteData(element.bytes(), static_cast<int>(element.length()), obj); 403 WriteData(element.bytes(), static_cast<int>(element.length()), obj);
404 break; 404 break;
405 case ResourceRequestBodyImpl::Element::TYPE_FILE: 405 case ResourceRequestBody::Element::TYPE_FILE:
406 WriteInteger(blink::WebHTTPBody::Element::kTypeFile, obj); 406 WriteInteger(blink::WebHTTPBody::Element::kTypeFile, obj);
407 WriteString( 407 WriteString(
408 base::NullableString16(element.path().AsUTF16Unsafe(), false), obj); 408 base::NullableString16(element.path().AsUTF16Unsafe(), false), obj);
409 WriteInteger64(static_cast<int64_t>(element.offset()), obj); 409 WriteInteger64(static_cast<int64_t>(element.offset()), obj);
410 WriteInteger64(static_cast<int64_t>(element.length()), obj); 410 WriteInteger64(static_cast<int64_t>(element.length()), obj);
411 WriteReal(element.expected_modification_time().ToDoubleT(), obj); 411 WriteReal(element.expected_modification_time().ToDoubleT(), obj);
412 break; 412 break;
413 case ResourceRequestBodyImpl::Element::TYPE_FILE_FILESYSTEM: 413 case ResourceRequestBody::Element::TYPE_FILE_FILESYSTEM:
414 WriteInteger(blink::WebHTTPBody::Element::kTypeFileSystemURL, obj); 414 WriteInteger(blink::WebHTTPBody::Element::kTypeFileSystemURL, obj);
415 WriteGURL(element.filesystem_url(), obj); 415 WriteGURL(element.filesystem_url(), obj);
416 WriteInteger64(static_cast<int64_t>(element.offset()), obj); 416 WriteInteger64(static_cast<int64_t>(element.offset()), obj);
417 WriteInteger64(static_cast<int64_t>(element.length()), obj); 417 WriteInteger64(static_cast<int64_t>(element.length()), obj);
418 WriteReal(element.expected_modification_time().ToDoubleT(), obj); 418 WriteReal(element.expected_modification_time().ToDoubleT(), obj);
419 break; 419 break;
420 case ResourceRequestBodyImpl::Element::TYPE_BLOB: 420 case ResourceRequestBody::Element::TYPE_BLOB:
421 WriteInteger(blink::WebHTTPBody::Element::kTypeBlob, obj); 421 WriteInteger(blink::WebHTTPBody::Element::kTypeBlob, obj);
422 WriteStdString(element.blob_uuid(), obj); 422 WriteStdString(element.blob_uuid(), obj);
423 break; 423 break;
424 case ResourceRequestBodyImpl::Element::TYPE_BYTES_DESCRIPTION: 424 case ResourceRequestBody::Element::TYPE_BYTES_DESCRIPTION:
425 case ResourceRequestBodyImpl::Element::TYPE_DISK_CACHE_ENTRY: 425 case ResourceRequestBody::Element::TYPE_DISK_CACHE_ENTRY:
426 default: 426 default:
427 NOTREACHED(); 427 NOTREACHED();
428 continue; 428 continue;
429 } 429 }
430 } 430 }
431 WriteInteger64(request_body.identifier(), obj); 431 WriteInteger64(request_body.identifier(), obj);
432 } 432 }
433 433
434 void ReadResourceRequestBody( 434 void ReadResourceRequestBody(
435 SerializeObject* obj, 435 SerializeObject* obj,
436 const scoped_refptr<ResourceRequestBodyImpl>& request_body) { 436 const scoped_refptr<ResourceRequestBody>& request_body) {
437 int num_elements = ReadInteger(obj); 437 int num_elements = ReadInteger(obj);
438 for (int i = 0; i < num_elements; ++i) { 438 for (int i = 0; i < num_elements; ++i) {
439 int type = ReadInteger(obj); 439 int type = ReadInteger(obj);
440 if (type == blink::WebHTTPBody::Element::kTypeData) { 440 if (type == blink::WebHTTPBody::Element::kTypeData) {
441 const void* data; 441 const void* data;
442 int length = -1; 442 int length = -1;
443 ReadData(obj, &data, &length); 443 ReadData(obj, &data, &length);
444 if (length >= 0) { 444 if (length >= 0) {
445 AppendDataToRequestBody(request_body, static_cast<const char*>(data), 445 AppendDataToRequestBody(request_body, static_cast<const char*>(data),
446 length); 446 length);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 480
481 WriteResourceRequestBody(*http_body.request_body, obj); 481 WriteResourceRequestBody(*http_body.request_body, obj);
482 WriteBoolean(http_body.contains_passwords, obj); 482 WriteBoolean(http_body.contains_passwords, obj);
483 } 483 }
484 484
485 void ReadHttpBody(SerializeObject* obj, ExplodedHttpBody* http_body) { 485 void ReadHttpBody(SerializeObject* obj, ExplodedHttpBody* http_body) {
486 // An initial boolean indicates if we have an HTTP body. 486 // An initial boolean indicates if we have an HTTP body.
487 if (!ReadBoolean(obj)) 487 if (!ReadBoolean(obj))
488 return; 488 return;
489 489
490 http_body->request_body = new ResourceRequestBodyImpl(); 490 http_body->request_body = new ResourceRequestBody();
491 ReadResourceRequestBody(obj, http_body->request_body); 491 ReadResourceRequestBody(obj, http_body->request_body);
492 492
493 if (obj->version >= 12) 493 if (obj->version >= 12)
494 http_body->contains_passwords = ReadBoolean(obj); 494 http_body->contains_passwords = ReadBoolean(obj);
495 } 495 }
496 496
497 // Writes the ExplodedFrameState data into the SerializeObject object for 497 // Writes the ExplodedFrameState data into the SerializeObject object for
498 // serialization. 498 // serialization.
499 void WriteFrameState( 499 void WriteFrameState(
500 const ExplodedFrameState& state, SerializeObject* obj, bool is_top) { 500 const ExplodedFrameState& state, SerializeObject* obj, bool is_top) {
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 bool DecodePageStateWithDeviceScaleFactorForTesting( 774 bool DecodePageStateWithDeviceScaleFactorForTesting(
775 const std::string& encoded, 775 const std::string& encoded,
776 float device_scale_factor, 776 float device_scale_factor,
777 ExplodedPageState* exploded) { 777 ExplodedPageState* exploded) {
778 g_device_scale_factor_for_testing = device_scale_factor; 778 g_device_scale_factor_for_testing = device_scale_factor;
779 bool rv = DecodePageState(encoded, exploded); 779 bool rv = DecodePageState(encoded, exploded);
780 g_device_scale_factor_for_testing = 0.0; 780 g_device_scale_factor_for_testing = 0.0;
781 return rv; 781 return rv;
782 } 782 }
783 783
784 scoped_refptr<ResourceRequestBodyImpl> DecodeResourceRequestBody( 784 scoped_refptr<ResourceRequestBody> DecodeResourceRequestBody(const char* data,
785 const char* data, 785 size_t size) {
786 size_t size) { 786 scoped_refptr<ResourceRequestBody> result = new ResourceRequestBody();
787 scoped_refptr<ResourceRequestBodyImpl> result = new ResourceRequestBodyImpl();
788 SerializeObject obj(data, static_cast<int>(size)); 787 SerializeObject obj(data, static_cast<int>(size));
789 ReadResourceRequestBody(&obj, result); 788 ReadResourceRequestBody(&obj, result);
790 // Please see the EncodeResourceRequestBody() function below for information 789 // Please see the EncodeResourceRequestBody() function below for information
791 // about why the contains_sensitive_info() field is being explicitly 790 // about why the contains_sensitive_info() field is being explicitly
792 // deserialized. 791 // deserialized.
793 result->set_contains_sensitive_info(ReadBoolean(&obj)); 792 result->set_contains_sensitive_info(ReadBoolean(&obj));
794 return obj.parse_error ? nullptr : result; 793 return obj.parse_error ? nullptr : result;
795 } 794 }
796 795
797 std::string EncodeResourceRequestBody( 796 std::string EncodeResourceRequestBody(
798 const ResourceRequestBodyImpl& resource_request_body) { 797 const ResourceRequestBody& resource_request_body) {
799 SerializeObject obj; 798 SerializeObject obj;
800 obj.version = kCurrentVersion; 799 obj.version = kCurrentVersion;
801 WriteResourceRequestBody(resource_request_body, &obj); 800 WriteResourceRequestBody(resource_request_body, &obj);
802 // EncodeResourceRequestBody() is different from WriteResourceRequestBody() 801 // EncodeResourceRequestBody() is different from WriteResourceRequestBody()
803 // because it covers additional data (e.g.|contains_sensitive_info|) which 802 // because it covers additional data (e.g.|contains_sensitive_info|) which
804 // is marshaled between native code and java. WriteResourceRequestBody() 803 // is marshaled between native code and java. WriteResourceRequestBody()
805 // serializes data which needs to be saved out to disk. 804 // serializes data which needs to be saved out to disk.
806 WriteBoolean(resource_request_body.contains_sensitive_info(), &obj); 805 WriteBoolean(resource_request_body.contains_sensitive_info(), &obj);
807 return obj.GetAsString(); 806 return obj.GetAsString();
808 } 807 }
809 808
810 #endif 809 #endif
811 810
812 } // namespace content 811 } // namespace content
OLDNEW
« no previous file with comments | « content/common/page_state_serialization.h ('k') | content/common/page_state_serialization_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698