OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/resource_request_body.h" | 5 #include "content/common/resource_request_body.h" |
6 | 6 |
| 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "content/common/page_state_serialization.h" |
| 9 |
| 10 using blink::WebHTTPBody; |
| 11 using blink::WebString; |
| 12 |
7 namespace content { | 13 namespace content { |
8 | 14 |
9 ResourceRequestBody::ResourceRequestBody() | 15 ResourceRequestBody::ResourceRequestBody() |
10 : identifier_(0) { | 16 : identifier_(0) { |
11 } | 17 } |
12 | 18 |
| 19 void ResourceRequestBody::AppendExplodedHTTPBodyElement( |
| 20 const ExplodedHttpBodyElement& element) { |
| 21 switch (element.type) { |
| 22 case WebHTTPBody::Element::TypeData: |
| 23 if (!element.data.empty()) { |
| 24 // Blink sometimes gives empty data to append. These aren't |
| 25 // necessary so they are just optimized out here. |
| 26 AppendBytes(element.data.data(), static_cast<int>(element.data.size())); |
| 27 } |
| 28 break; |
| 29 case WebHTTPBody::Element::TypeFile: |
| 30 if (element.file_length == -1) { |
| 31 AppendFileRange( |
| 32 base::FilePath::FromUTF16Unsafe(element.file_path.string()), 0, |
| 33 std::numeric_limits<uint64_t>::max(), base::Time()); |
| 34 } else { |
| 35 AppendFileRange( |
| 36 base::FilePath::FromUTF16Unsafe(element.file_path.string()), |
| 37 static_cast<uint64_t>(element.file_start), |
| 38 static_cast<uint64_t>(element.file_length), |
| 39 base::Time::FromDoubleT(element.file_modification_time)); |
| 40 } |
| 41 break; |
| 42 case WebHTTPBody::Element::TypeFileSystemURL: { |
| 43 GURL file_system_url = element.filesystem_url; |
| 44 DCHECK(file_system_url.SchemeIsFileSystem()); |
| 45 AppendFileSystemFileRange( |
| 46 file_system_url, static_cast<uint64_t>(element.file_start), |
| 47 static_cast<uint64_t>(element.file_length), |
| 48 base::Time::FromDoubleT(element.file_modification_time)); |
| 49 break; |
| 50 } |
| 51 case WebHTTPBody::Element::TypeBlob: |
| 52 AppendBlob(element.blob_uuid); |
| 53 break; |
| 54 default: |
| 55 NOTREACHED(); |
| 56 } |
| 57 } |
| 58 |
13 void ResourceRequestBody::AppendBytes(const char* bytes, int bytes_len) { | 59 void ResourceRequestBody::AppendBytes(const char* bytes, int bytes_len) { |
14 if (bytes_len > 0) { | 60 if (bytes_len > 0) { |
15 elements_.push_back(Element()); | 61 elements_.push_back(Element()); |
16 elements_.back().SetToBytes(bytes, bytes_len); | 62 elements_.back().SetToBytes(bytes, bytes_len); |
17 } | 63 } |
18 } | 64 } |
19 | 65 |
20 void ResourceRequestBody::AppendFileRange( | 66 void ResourceRequestBody::AppendFileRange( |
21 const base::FilePath& file_path, | 67 const base::FilePath& file_path, |
22 uint64_t offset, | 68 uint64_t offset, |
(...skipping 12 matching lines...) Expand all Loading... |
35 void ResourceRequestBody::AppendFileSystemFileRange( | 81 void ResourceRequestBody::AppendFileSystemFileRange( |
36 const GURL& url, | 82 const GURL& url, |
37 uint64_t offset, | 83 uint64_t offset, |
38 uint64_t length, | 84 uint64_t length, |
39 const base::Time& expected_modification_time) { | 85 const base::Time& expected_modification_time) { |
40 elements_.push_back(Element()); | 86 elements_.push_back(Element()); |
41 elements_.back().SetToFileSystemUrlRange(url, offset, length, | 87 elements_.back().SetToFileSystemUrlRange(url, offset, length, |
42 expected_modification_time); | 88 expected_modification_time); |
43 } | 89 } |
44 | 90 |
| 91 scoped_refptr<ResourceRequestBody> ResourceRequestBody::MakeCopy() { |
| 92 scoped_refptr<ResourceRequestBody> copy = new ResourceRequestBody(); |
| 93 copy->set_identifier(identifier_); |
| 94 for (auto element : elements_) |
| 95 copy->elements_mutable()->push_back(element); |
| 96 return copy; |
| 97 } |
| 98 |
45 ResourceRequestBody::~ResourceRequestBody() { | 99 ResourceRequestBody::~ResourceRequestBody() { |
46 } | 100 } |
47 | 101 |
48 } // namespace content | 102 } // namespace content |
OLD | NEW |