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

Side by Side Diff: content/browser/loader/upload_data_stream_builder.cc

Issue 2038813003: Making ResourceRequestBody part of //content's public API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
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 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/browser/loader/upload_data_stream_builder.h" 5 #include "content/browser/loader/upload_data_stream_builder.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <limits> 9 #include <limits>
10 #include <utility> 10 #include <utility>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/memory/ptr_util.h" 15 #include "base/memory/ptr_util.h"
16 #include "base/memory/ref_counted.h" 16 #include "base/memory/ref_counted.h"
17 #include "content/browser/fileapi/upload_file_system_file_element_reader.h" 17 #include "content/browser/fileapi/upload_file_system_file_element_reader.h"
18 #include "content/common/resource_request_body.h" 18 #include "content/common/resource_request_body_impl.h"
19 #include "net/base/elements_upload_data_stream.h" 19 #include "net/base/elements_upload_data_stream.h"
20 #include "net/base/upload_bytes_element_reader.h" 20 #include "net/base/upload_bytes_element_reader.h"
21 #include "net/base/upload_file_element_reader.h" 21 #include "net/base/upload_file_element_reader.h"
22 #include "storage/browser/blob/blob_data_handle.h" 22 #include "storage/browser/blob/blob_data_handle.h"
23 #include "storage/browser/blob/blob_reader.h" 23 #include "storage/browser/blob/blob_reader.h"
24 #include "storage/browser/blob/blob_storage_context.h" 24 #include "storage/browser/blob/blob_storage_context.h"
25 #include "storage/browser/blob/upload_blob_element_reader.h" 25 #include "storage/browser/blob/upload_blob_element_reader.h"
26 26
27 namespace disk_cache { 27 namespace disk_cache {
28 class Entry; 28 class Entry;
29 } 29 }
30 30
31 namespace content { 31 namespace content {
32 namespace { 32 namespace {
33 33
34 // A subclass of net::UploadBytesElementReader which owns ResourceRequestBody. 34 // A subclass of net::UploadBytesElementReader which owns
35 // ResourceRequestBodyImpl.
35 class BytesElementReader : public net::UploadBytesElementReader { 36 class BytesElementReader : public net::UploadBytesElementReader {
36 public: 37 public:
37 BytesElementReader(ResourceRequestBody* resource_request_body, 38 BytesElementReader(ResourceRequestBodyImpl* resource_request_body,
38 const ResourceRequestBody::Element& element) 39 const ResourceRequestBodyImpl::Element& element)
39 : net::UploadBytesElementReader(element.bytes(), element.length()), 40 : net::UploadBytesElementReader(element.bytes(), element.length()),
40 resource_request_body_(resource_request_body) { 41 resource_request_body_(resource_request_body) {
41 DCHECK_EQ(ResourceRequestBody::Element::TYPE_BYTES, element.type()); 42 DCHECK_EQ(ResourceRequestBodyImpl::Element::TYPE_BYTES, element.type());
42 } 43 }
43 44
44 ~BytesElementReader() override {} 45 ~BytesElementReader() override {}
45 46
46 private: 47 private:
47 scoped_refptr<ResourceRequestBody> resource_request_body_; 48 scoped_refptr<ResourceRequestBodyImpl> resource_request_body_;
48 49
49 DISALLOW_COPY_AND_ASSIGN(BytesElementReader); 50 DISALLOW_COPY_AND_ASSIGN(BytesElementReader);
50 }; 51 };
51 52
52 // A subclass of net::UploadFileElementReader which owns ResourceRequestBody. 53 // A subclass of net::UploadFileElementReader which owns
54 // ResourceRequestBodyImpl.
53 // This class is necessary to ensure the BlobData and any attached shareable 55 // This class is necessary to ensure the BlobData and any attached shareable
54 // files survive until upload completion. 56 // files survive until upload completion.
55 class FileElementReader : public net::UploadFileElementReader { 57 class FileElementReader : public net::UploadFileElementReader {
56 public: 58 public:
57 FileElementReader(ResourceRequestBody* resource_request_body, 59 FileElementReader(ResourceRequestBodyImpl* resource_request_body,
58 base::TaskRunner* task_runner, 60 base::TaskRunner* task_runner,
59 const ResourceRequestBody::Element& element) 61 const ResourceRequestBodyImpl::Element& element)
60 : net::UploadFileElementReader(task_runner, 62 : net::UploadFileElementReader(task_runner,
61 element.path(), 63 element.path(),
62 element.offset(), 64 element.offset(),
63 element.length(), 65 element.length(),
64 element.expected_modification_time()), 66 element.expected_modification_time()),
65 resource_request_body_(resource_request_body) { 67 resource_request_body_(resource_request_body) {
66 DCHECK_EQ(ResourceRequestBody::Element::TYPE_FILE, element.type()); 68 DCHECK_EQ(ResourceRequestBodyImpl::Element::TYPE_FILE, element.type());
67 } 69 }
68 70
69 ~FileElementReader() override {} 71 ~FileElementReader() override {}
70 72
71 private: 73 private:
72 scoped_refptr<ResourceRequestBody> resource_request_body_; 74 scoped_refptr<ResourceRequestBodyImpl> resource_request_body_;
73 75
74 DISALLOW_COPY_AND_ASSIGN(FileElementReader); 76 DISALLOW_COPY_AND_ASSIGN(FileElementReader);
75 }; 77 };
76 78
77 } // namespace 79 } // namespace
78 80
79 std::unique_ptr<net::UploadDataStream> UploadDataStreamBuilder::Build( 81 std::unique_ptr<net::UploadDataStream> UploadDataStreamBuilder::Build(
80 ResourceRequestBody* body, 82 ResourceRequestBodyImpl* body,
81 storage::BlobStorageContext* blob_context, 83 storage::BlobStorageContext* blob_context,
82 storage::FileSystemContext* file_system_context, 84 storage::FileSystemContext* file_system_context,
83 base::SingleThreadTaskRunner* file_task_runner) { 85 base::SingleThreadTaskRunner* file_task_runner) {
84 std::vector<std::unique_ptr<net::UploadElementReader>> element_readers; 86 std::vector<std::unique_ptr<net::UploadElementReader>> element_readers;
85 for (const auto& element : *body->elements()) { 87 for (const auto& element : *body->elements()) {
86 switch (element.type()) { 88 switch (element.type()) {
87 case ResourceRequestBody::Element::TYPE_BYTES: 89 case ResourceRequestBodyImpl::Element::TYPE_BYTES:
88 element_readers.push_back( 90 element_readers.push_back(
89 base::WrapUnique(new BytesElementReader(body, element))); 91 base::WrapUnique(new BytesElementReader(body, element)));
90 break; 92 break;
91 case ResourceRequestBody::Element::TYPE_FILE: 93 case ResourceRequestBodyImpl::Element::TYPE_FILE:
92 element_readers.push_back(base::WrapUnique( 94 element_readers.push_back(base::WrapUnique(
93 new FileElementReader(body, file_task_runner, element))); 95 new FileElementReader(body, file_task_runner, element)));
94 break; 96 break;
95 case ResourceRequestBody::Element::TYPE_FILE_FILESYSTEM: 97 case ResourceRequestBodyImpl::Element::TYPE_FILE_FILESYSTEM:
96 // If |body| contains any filesystem URLs, the caller should have 98 // If |body| contains any filesystem URLs, the caller should have
97 // supplied a FileSystemContext. 99 // supplied a FileSystemContext.
98 DCHECK(file_system_context); 100 DCHECK(file_system_context);
99 element_readers.push_back( 101 element_readers.push_back(
100 base::WrapUnique(new content::UploadFileSystemFileElementReader( 102 base::WrapUnique(new content::UploadFileSystemFileElementReader(
101 file_system_context, element.filesystem_url(), element.offset(), 103 file_system_context, element.filesystem_url(), element.offset(),
102 element.length(), element.expected_modification_time()))); 104 element.length(), element.expected_modification_time())));
103 break; 105 break;
104 case ResourceRequestBody::Element::TYPE_BLOB: { 106 case ResourceRequestBodyImpl::Element::TYPE_BLOB: {
105 DCHECK_EQ(std::numeric_limits<uint64_t>::max(), element.length()); 107 DCHECK_EQ(std::numeric_limits<uint64_t>::max(), element.length());
106 DCHECK_EQ(0ul, element.offset()); 108 DCHECK_EQ(0ul, element.offset());
107 std::unique_ptr<storage::BlobDataHandle> handle = 109 std::unique_ptr<storage::BlobDataHandle> handle =
108 blob_context->GetBlobDataFromUUID(element.blob_uuid()); 110 blob_context->GetBlobDataFromUUID(element.blob_uuid());
109 element_readers.push_back( 111 element_readers.push_back(
110 base::WrapUnique(new storage::UploadBlobElementReader( 112 base::WrapUnique(new storage::UploadBlobElementReader(
111 std::move(handle), file_system_context, file_task_runner))); 113 std::move(handle), file_system_context, file_task_runner)));
112 break; 114 break;
113 } 115 }
114 case ResourceRequestBody::Element::TYPE_DISK_CACHE_ENTRY: 116 case ResourceRequestBodyImpl::Element::TYPE_DISK_CACHE_ENTRY:
115 case ResourceRequestBody::Element::TYPE_BYTES_DESCRIPTION: 117 case ResourceRequestBodyImpl::Element::TYPE_BYTES_DESCRIPTION:
116 case ResourceRequestBody::Element::TYPE_UNKNOWN: 118 case ResourceRequestBodyImpl::Element::TYPE_UNKNOWN:
117 NOTREACHED(); 119 NOTREACHED();
118 break; 120 break;
119 } 121 }
120 } 122 }
121 123
122 return base::WrapUnique(new net::ElementsUploadDataStream( 124 return base::WrapUnique(new net::ElementsUploadDataStream(
123 std::move(element_readers), body->identifier())); 125 std::move(element_readers), body->identifier()));
124 } 126 }
125 127
126 } // namespace content 128 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/loader/upload_data_stream_builder.h ('k') | content/browser/loader/upload_data_stream_builder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698