Remove DataElementType::kBlob
It's no longer being used. Fixed: 846167 Change-Id: I3636e12cdab07188c90199329826de4ef18432f9 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2444430 Reviewed-by: Kinuko Yasuda <kinuko@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org> Reviewed-by: Marijn Kruisselbrink <mek@chromium.org> Commit-Queue: Matt Menke <mmenke@chromium.org> Cr-Commit-Position: refs/heads/master@{#813901}
This commit is contained in:
content
browser
common
renderer
loader
services/network
public
cpp
data_element.ccdata_element.hnetwork_ipc_param_traits.ccresource_request_body.ccresource_request_body.hurl_request_mojom_traits.ccurl_request_mojom_traits.h
mojom
third_party/blink
common
public
common
mojom
platform
renderer
platform
exported
loader
network
tools/ipc_fuzzer/fuzzer
@ -78,7 +78,6 @@ class BlobURLTest : public testing::Test {
|
|||||||
BlobURLTest()
|
BlobURLTest()
|
||||||
: task_environment_(BrowserTaskEnvironment::IO_MAINLOOP),
|
: task_environment_(BrowserTaskEnvironment::IO_MAINLOOP),
|
||||||
blob_data_(new BlobDataBuilder("uuid")),
|
blob_data_(new BlobDataBuilder("uuid")),
|
||||||
blob_uuid_(blob_data_->uuid()),
|
|
||||||
response_error_code_(net::OK),
|
response_error_code_(net::OK),
|
||||||
expected_error_code_(net::OK),
|
expected_error_code_(net::OK),
|
||||||
expected_status_code_(0) {}
|
expected_status_code_(0) {}
|
||||||
@ -309,7 +308,6 @@ class BlobURLTest : public testing::Test {
|
|||||||
storage::BlobUrlRegistry blob_url_registry_;
|
storage::BlobUrlRegistry blob_url_registry_;
|
||||||
std::unique_ptr<storage::BlobDataHandle> blob_handle_;
|
std::unique_ptr<storage::BlobDataHandle> blob_handle_;
|
||||||
std::unique_ptr<BlobDataBuilder> blob_data_;
|
std::unique_ptr<BlobDataBuilder> blob_data_;
|
||||||
std::string blob_uuid_;
|
|
||||||
std::unique_ptr<BlobDataSnapshot> blob_data_snapshot_;
|
std::unique_ptr<BlobDataSnapshot> blob_data_snapshot_;
|
||||||
std::string response_;
|
std::string response_;
|
||||||
int response_error_code_;
|
int response_error_code_;
|
||||||
|
@ -1289,11 +1289,6 @@ bool ChildProcessSecurityPolicyImpl::CanReadRequestBody(
|
|||||||
// Data is self-contained within |body| - no need to check access.
|
// Data is self-contained within |body| - no need to check access.
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case network::mojom::DataElementType::kBlob:
|
|
||||||
// No need to validate - the unguessability of the uuid of the blob is a
|
|
||||||
// sufficient defense against access from an unrelated renderer.
|
|
||||||
break;
|
|
||||||
|
|
||||||
case network::mojom::DataElementType::kDataPipe:
|
case network::mojom::DataElementType::kDataPipe:
|
||||||
// Data is self-contained within |body| - no need to check access.
|
// Data is self-contained within |body| - no need to check access.
|
||||||
break;
|
break;
|
||||||
|
@ -54,12 +54,6 @@ void AppendFileRangeToRequestBody(
|
|||||||
file_modification_time);
|
file_modification_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppendBlobToRequestBody(
|
|
||||||
const scoped_refptr<network::ResourceRequestBody>& request_body,
|
|
||||||
const std::string& uuid) {
|
|
||||||
request_body->AppendBlob(uuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
void AppendReferencedFilesFromHttpBody(
|
void AppendReferencedFilesFromHttpBody(
|
||||||
@ -290,10 +284,6 @@ GURL ReadGURL(SerializeObject* obj) {
|
|||||||
return GURL();
|
return GURL();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WriteStdString(const std::string& s, SerializeObject* obj) {
|
|
||||||
obj->pickle.WriteString(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string ReadStdString(SerializeObject* obj) {
|
std::string ReadStdString(SerializeObject* obj) {
|
||||||
std::string s;
|
std::string s;
|
||||||
if (obj->iter.ReadString(&s))
|
if (obj->iter.ReadString(&s))
|
||||||
@ -416,10 +406,6 @@ void WriteResourceRequestBody(const network::ResourceRequestBody& request_body,
|
|||||||
WriteInteger64(static_cast<int64_t>(element.length()), obj);
|
WriteInteger64(static_cast<int64_t>(element.length()), obj);
|
||||||
WriteReal(element.expected_modification_time().ToDoubleT(), obj);
|
WriteReal(element.expected_modification_time().ToDoubleT(), obj);
|
||||||
break;
|
break;
|
||||||
case network::mojom::DataElementType::kBlob:
|
|
||||||
WriteInteger(blink::WebHTTPBody::Element::kTypeBlob, obj);
|
|
||||||
WriteStdString(element.blob_uuid(), obj);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
continue;
|
continue;
|
||||||
@ -451,11 +437,11 @@ void ReadResourceRequestBody(
|
|||||||
request_body, file_path, file_start, file_length,
|
request_body, file_path, file_start, file_length,
|
||||||
base::Time::FromDoubleT(file_modification_time));
|
base::Time::FromDoubleT(file_modification_time));
|
||||||
} else if (type == blink::WebHTTPBody::Element::kTypeBlob) {
|
} else if (type == blink::WebHTTPBody::Element::kTypeBlob) {
|
||||||
|
// Skip obsolete blob values.
|
||||||
if (obj->version >= 16) {
|
if (obj->version >= 16) {
|
||||||
std::string blob_uuid = ReadStdString(obj);
|
ReadStdString(obj);
|
||||||
AppendBlobToRequestBody(request_body, blob_uuid);
|
|
||||||
} else {
|
} else {
|
||||||
ReadGURL(obj); // Skip the obsolete blob url value.
|
ReadGURL(obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -691,9 +677,6 @@ void WriteResourceRequestBody(const network::ResourceRequestBody& request_body,
|
|||||||
data_element->set_file(std::move(file));
|
data_element->set_file(std::move(file));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case network::mojom::DataElementType::kBlob:
|
|
||||||
data_element->set_blob_uuid(element.blob_uuid());
|
|
||||||
break;
|
|
||||||
case network::mojom::DataElementType::kDataPipe:
|
case network::mojom::DataElementType::kDataPipe:
|
||||||
NOTIMPLEMENTED();
|
NOTIMPLEMENTED();
|
||||||
break;
|
break;
|
||||||
@ -727,7 +710,7 @@ void ReadResourceRequestBody(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case blink::mojom::Element::Tag::BLOB_UUID:
|
case blink::mojom::Element::Tag::BLOB_UUID:
|
||||||
AppendBlobToRequestBody(request_body, element->get_blob_uuid());
|
// No longer supported.
|
||||||
break;
|
break;
|
||||||
case blink::mojom::Element::Tag::DEPRECATED_FILE_SYSTEM_FILE:
|
case blink::mojom::Element::Tag::DEPRECATED_FILE_SYSTEM_FILE:
|
||||||
// No longer supported.
|
// No longer supported.
|
||||||
|
@ -50,7 +50,6 @@ void ExpectEquality(const network::DataElement& expected,
|
|||||||
EXPECT_EQ(expected.length(), actual.length());
|
EXPECT_EQ(expected.length(), actual.length());
|
||||||
EXPECT_EQ(expected.expected_modification_time(),
|
EXPECT_EQ(expected.expected_modification_time(),
|
||||||
actual.expected_modification_time());
|
actual.expected_modification_time());
|
||||||
EXPECT_EQ(expected.blob_uuid(), actual.blob_uuid());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
@ -686,8 +685,6 @@ TEST_F(PageStateSerializationTest, BackwardsCompat_HttpBody) {
|
|||||||
std::string test_body("foo");
|
std::string test_body("foo");
|
||||||
http_body.request_body->AppendBytes(test_body.data(), test_body.size());
|
http_body.request_body->AppendBytes(test_body.data(), test_body.size());
|
||||||
|
|
||||||
http_body.request_body->AppendBlob("some_uuid");
|
|
||||||
|
|
||||||
base::FilePath path(FILE_PATH_LITERAL("file.txt"));
|
base::FilePath path(FILE_PATH_LITERAL("file.txt"));
|
||||||
http_body.request_body->AppendFileRange(base::FilePath(path), 100, 1024,
|
http_body.request_body->AppendFileRange(base::FilePath(path), 100, 1024,
|
||||||
base::Time::FromDoubleT(9999.0));
|
base::Time::FromDoubleT(9999.0));
|
||||||
|
@ -137,9 +137,6 @@ WebHTTPBody GetWebHTTPBodyForRequestBody(
|
|||||||
modification_time);
|
modification_time);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case network::mojom::DataElementType::kBlob:
|
|
||||||
http_body.AppendBlob(WebString::FromASCII(element.blob_uuid()));
|
|
||||||
break;
|
|
||||||
case network::mojom::DataElementType::kDataPipe: {
|
case network::mojom::DataElementType::kDataPipe: {
|
||||||
http_body.AppendDataPipe(element.CloneDataPipeGetter());
|
http_body.AppendDataPipe(element.CloneDataPipeGetter());
|
||||||
break;
|
break;
|
||||||
|
@ -40,15 +40,6 @@ void DataElement::SetToFilePathRange(
|
|||||||
expected_modification_time_ = expected_modification_time;
|
expected_modification_time_ = expected_modification_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataElement::SetToBlobRange(const std::string& blob_uuid,
|
|
||||||
uint64_t offset,
|
|
||||||
uint64_t length) {
|
|
||||||
type_ = mojom::DataElementType::kBlob;
|
|
||||||
blob_uuid_ = blob_uuid;
|
|
||||||
offset_ = offset;
|
|
||||||
length_ = length;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DataElement::SetToDataPipe(
|
void DataElement::SetToDataPipe(
|
||||||
mojo::PendingRemote<mojom::DataPipeGetter> data_pipe_getter) {
|
mojo::PendingRemote<mojom::DataPipeGetter> data_pipe_getter) {
|
||||||
DCHECK(data_pipe_getter);
|
DCHECK(data_pipe_getter);
|
||||||
@ -116,9 +107,6 @@ void PrintTo(const DataElement& x, std::ostream* os) {
|
|||||||
*os << "TYPE_FILE, path: " << x.path().AsUTF8Unsafe()
|
*os << "TYPE_FILE, path: " << x.path().AsUTF8Unsafe()
|
||||||
<< ", expected_modification_time: " << x.expected_modification_time();
|
<< ", expected_modification_time: " << x.expected_modification_time();
|
||||||
break;
|
break;
|
||||||
case mojom::DataElementType::kBlob:
|
|
||||||
*os << "TYPE_BLOB, uuid: " << x.blob_uuid();
|
|
||||||
break;
|
|
||||||
case mojom::DataElementType::kDataPipe:
|
case mojom::DataElementType::kDataPipe:
|
||||||
*os << "TYPE_DATA_PIPE";
|
*os << "TYPE_DATA_PIPE";
|
||||||
break;
|
break;
|
||||||
@ -145,8 +133,6 @@ bool operator==(const DataElement& a, const DataElement& b) {
|
|||||||
case mojom::DataElementType::kFile:
|
case mojom::DataElementType::kFile:
|
||||||
return a.path() == b.path() &&
|
return a.path() == b.path() &&
|
||||||
a.expected_modification_time() == b.expected_modification_time();
|
a.expected_modification_time() == b.expected_modification_time();
|
||||||
case mojom::DataElementType::kBlob:
|
|
||||||
return a.blob_uuid() == b.blob_uuid();
|
|
||||||
case mojom::DataElementType::kDataPipe:
|
case mojom::DataElementType::kDataPipe:
|
||||||
return false;
|
return false;
|
||||||
case mojom::DataElementType::kChunkedDataPipe:
|
case mojom::DataElementType::kChunkedDataPipe:
|
||||||
|
@ -35,8 +35,8 @@ class FetchAPIDataElementDataView;
|
|||||||
|
|
||||||
namespace network {
|
namespace network {
|
||||||
|
|
||||||
// Represents part of an upload body. This could be either one of bytes, file or
|
// Represents part of an upload body. This could be one of raw bytes, file data,
|
||||||
// blob data.
|
// or a mojo pipe that streams data.
|
||||||
class COMPONENT_EXPORT(NETWORK_CPP_BASE) DataElement {
|
class COMPONENT_EXPORT(NETWORK_CPP_BASE) DataElement {
|
||||||
public:
|
public:
|
||||||
static const uint64_t kUnknownSize = std::numeric_limits<uint64_t>::max();
|
static const uint64_t kUnknownSize = std::numeric_limits<uint64_t>::max();
|
||||||
@ -54,7 +54,6 @@ class COMPONENT_EXPORT(NETWORK_CPP_BASE) DataElement {
|
|||||||
return reinterpret_cast<const char*>(buf_.data());
|
return reinterpret_cast<const char*>(buf_.data());
|
||||||
}
|
}
|
||||||
const base::FilePath& path() const { return path_; }
|
const base::FilePath& path() const { return path_; }
|
||||||
const std::string& blob_uuid() const { return blob_uuid_; }
|
|
||||||
uint64_t offset() const { return offset_; }
|
uint64_t offset() const { return offset_; }
|
||||||
uint64_t length() const { return length_; }
|
uint64_t length() const { return length_; }
|
||||||
const base::Time& expected_modification_time() const {
|
const base::Time& expected_modification_time() const {
|
||||||
@ -94,22 +93,12 @@ class COMPONENT_EXPORT(NETWORK_CPP_BASE) DataElement {
|
|||||||
length_ = buf_.size();
|
length_ = buf_.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sets TYPE_BLOB data.
|
|
||||||
void SetToBlob(const std::string& uuid) {
|
|
||||||
SetToBlobRange(uuid, 0, std::numeric_limits<uint64_t>::max());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sets TYPE_FILE data with range.
|
// Sets TYPE_FILE data with range.
|
||||||
void SetToFilePathRange(const base::FilePath& path,
|
void SetToFilePathRange(const base::FilePath& path,
|
||||||
uint64_t offset,
|
uint64_t offset,
|
||||||
uint64_t length,
|
uint64_t length,
|
||||||
const base::Time& expected_modification_time);
|
const base::Time& expected_modification_time);
|
||||||
|
|
||||||
// Sets TYPE_BLOB data with range.
|
|
||||||
void SetToBlobRange(const std::string& blob_uuid,
|
|
||||||
uint64_t offset,
|
|
||||||
uint64_t length);
|
|
||||||
|
|
||||||
// Sets TYPE_DATA_PIPE data. The data pipe consumer can safely wait for the
|
// Sets TYPE_DATA_PIPE data. The data pipe consumer can safely wait for the
|
||||||
// callback passed to Read() to be invoked before reading the request body.
|
// callback passed to Read() to be invoked before reading the request body.
|
||||||
void SetToDataPipe(
|
void SetToDataPipe(
|
||||||
@ -149,8 +138,6 @@ class COMPONENT_EXPORT(NETWORK_CPP_BASE) DataElement {
|
|||||||
std::vector<uint8_t> buf_;
|
std::vector<uint8_t> buf_;
|
||||||
// For TYPE_FILE.
|
// For TYPE_FILE.
|
||||||
base::FilePath path_;
|
base::FilePath path_;
|
||||||
// For TYPE_BLOB.
|
|
||||||
std::string blob_uuid_;
|
|
||||||
// For TYPE_DATA_PIPE.
|
// For TYPE_DATA_PIPE.
|
||||||
mojo::PendingRemote<mojom::DataPipeGetter> data_pipe_getter_;
|
mojo::PendingRemote<mojom::DataPipeGetter> data_pipe_getter_;
|
||||||
// For TYPE_CHUNKED_DATA_PIPE.
|
// For TYPE_CHUNKED_DATA_PIPE.
|
||||||
|
@ -30,12 +30,6 @@ void ParamTraits<network::DataElement>::Write(base::Pickle* m,
|
|||||||
WriteParam(m, p.expected_modification_time());
|
WriteParam(m, p.expected_modification_time());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case network::mojom::DataElementType::kBlob: {
|
|
||||||
WriteParam(m, p.blob_uuid());
|
|
||||||
WriteParam(m, p.offset());
|
|
||||||
WriteParam(m, p.length());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case network::mojom::DataElementType::kDataPipe: {
|
case network::mojom::DataElementType::kDataPipe: {
|
||||||
WriteParam(m, p.CloneDataPipeGetter().PassPipe().release());
|
WriteParam(m, p.CloneDataPipeGetter().PassPipe().release());
|
||||||
break;
|
break;
|
||||||
@ -86,18 +80,6 @@ bool ParamTraits<network::DataElement>::Read(const base::Pickle* m,
|
|||||||
expected_modification_time);
|
expected_modification_time);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case network::mojom::DataElementType::kBlob: {
|
|
||||||
std::string blob_uuid;
|
|
||||||
uint64_t offset, length;
|
|
||||||
if (!ReadParam(m, iter, &blob_uuid))
|
|
||||||
return false;
|
|
||||||
if (!ReadParam(m, iter, &offset))
|
|
||||||
return false;
|
|
||||||
if (!ReadParam(m, iter, &length))
|
|
||||||
return false;
|
|
||||||
r->SetToBlobRange(blob_uuid, offset, length);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
case network::mojom::DataElementType::kDataPipe: {
|
case network::mojom::DataElementType::kDataPipe: {
|
||||||
mojo::MessagePipeHandle message_pipe;
|
mojo::MessagePipeHandle message_pipe;
|
||||||
if (!ReadParam(m, iter, &message_pipe))
|
if (!ReadParam(m, iter, &message_pipe))
|
||||||
|
@ -57,17 +57,6 @@ void ResourceRequestBody::AppendFileRange(
|
|||||||
expected_modification_time);
|
expected_modification_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResourceRequestBody::AppendBlob(const std::string& uuid) {
|
|
||||||
AppendBlob(uuid, std::numeric_limits<uint64_t>::max());
|
|
||||||
}
|
|
||||||
|
|
||||||
void ResourceRequestBody::AppendBlob(const std::string& uuid, uint64_t length) {
|
|
||||||
DCHECK(EnableToAppendElement());
|
|
||||||
|
|
||||||
elements_.push_back(DataElement());
|
|
||||||
elements_.back().SetToBlobRange(uuid, 0 /* offset */, length);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ResourceRequestBody::AppendDataPipe(
|
void ResourceRequestBody::AppendDataPipe(
|
||||||
mojo::PendingRemote<mojom::DataPipeGetter> data_pipe_getter) {
|
mojo::PendingRemote<mojom::DataPipeGetter> data_pipe_getter) {
|
||||||
DCHECK(EnableToAppendElement());
|
DCHECK(EnableToAppendElement());
|
||||||
|
@ -45,19 +45,6 @@ class COMPONENT_EXPORT(NETWORK_CPP_BASE) ResourceRequestBody
|
|||||||
uint64_t length,
|
uint64_t length,
|
||||||
const base::Time& expected_modification_time);
|
const base::Time& expected_modification_time);
|
||||||
|
|
||||||
// Appends a blob. If the 2-parameter version is used, the resulting body can
|
|
||||||
// be read by Blink, which is needed when the body is sent to Blink, e.g., for
|
|
||||||
// service worker interception. The length must be size of the entire blob,
|
|
||||||
// not a subrange of it. If the length is unknown, use the 1-parameter
|
|
||||||
// version, but this means the body/blob won't be readable by Blink (that's OK
|
|
||||||
// if this ResourceRequestBody will only be sent to the browser process and
|
|
||||||
// won't be sent to Blink).
|
|
||||||
//
|
|
||||||
// TODO(crbug.com/846167): Remove these functions when NetworkService is
|
|
||||||
// enabled, as blobs are passed via AppendDataPipe in that case.
|
|
||||||
void AppendBlob(const std::string& uuid);
|
|
||||||
void AppendBlob(const std::string& uuid, uint64_t length);
|
|
||||||
|
|
||||||
void AppendDataPipe(
|
void AppendDataPipe(
|
||||||
mojo::PendingRemote<mojom::DataPipeGetter> data_pipe_getter);
|
mojo::PendingRemote<mojom::DataPipeGetter> data_pipe_getter);
|
||||||
|
|
||||||
|
@ -266,10 +266,6 @@ bool StructTraits<network::mojom::DataElementDataView, network::DataElement>::
|
|||||||
network::debug::SetDeserializationCrashKeyString("data_element_path");
|
network::debug::SetDeserializationCrashKeyString("data_element_path");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!data.ReadBlobUuid(&out->blob_uuid_)) {
|
|
||||||
network::debug::SetDeserializationCrashKeyString("data_element_blob_uuid");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!data.ReadExpectedModificationTime(&out->expected_modification_time_)) {
|
if (!data.ReadExpectedModificationTime(&out->expected_modification_time_)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -314,9 +314,6 @@ struct COMPONENT_EXPORT(NETWORK_CPP_BASE)
|
|||||||
static const base::FilePath& path(const network::DataElement& element) {
|
static const base::FilePath& path(const network::DataElement& element) {
|
||||||
return element.path_;
|
return element.path_;
|
||||||
}
|
}
|
||||||
static const std::string& blob_uuid(const network::DataElement& element) {
|
|
||||||
return element.blob_uuid_;
|
|
||||||
}
|
|
||||||
static mojo::PendingRemote<network::mojom::DataPipeGetter> data_pipe_getter(
|
static mojo::PendingRemote<network::mojom::DataPipeGetter> data_pipe_getter(
|
||||||
const network::DataElement& element) {
|
const network::DataElement& element) {
|
||||||
if (element.type_ != network::mojom::DataElementType::kDataPipe)
|
if (element.type_ != network::mojom::DataElementType::kDataPipe)
|
||||||
|
@ -59,17 +59,13 @@ enum URLRequestReferrerPolicy {
|
|||||||
enum DataElementType {
|
enum DataElementType {
|
||||||
kUnknown = -1,
|
kUnknown = -1,
|
||||||
|
|
||||||
// Only used for Upload with Network Service as of now:
|
|
||||||
kDataPipe,
|
kDataPipe,
|
||||||
kChunkedDataPipe,
|
kChunkedDataPipe,
|
||||||
kReadOnceStream,
|
kReadOnceStream,
|
||||||
|
|
||||||
// Used for Upload when Network Service is disabled:
|
|
||||||
kBlob,
|
|
||||||
kFile,
|
|
||||||
|
|
||||||
// Commonly used in every case:
|
|
||||||
kBytes,
|
kBytes,
|
||||||
|
|
||||||
|
// TODO(https://crbug.com/1132362): Remove this.
|
||||||
|
kFile,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Options that may only be set on URLRequests passed to a URLLoaderFactory
|
// Options that may only be set on URLRequests passed to a URLLoaderFactory
|
||||||
@ -430,9 +426,6 @@ struct DataElement {
|
|||||||
array<uint8> buf;
|
array<uint8> buf;
|
||||||
// For kFile
|
// For kFile
|
||||||
mojo_base.mojom.FilePath path;
|
mojo_base.mojom.FilePath path;
|
||||||
// For kBlob
|
|
||||||
// TODO(richard.li): Deprecate this once NetworkService is fully shipped.
|
|
||||||
string blob_uuid;
|
|
||||||
// For kDataPipe
|
// For kDataPipe
|
||||||
pending_remote<network.mojom.DataPipeGetter>? data_pipe_getter;
|
pending_remote<network.mojom.DataPipeGetter>? data_pipe_getter;
|
||||||
// For kChunkedDataPipe
|
// For kChunkedDataPipe
|
||||||
|
@ -224,10 +224,6 @@ std::unique_ptr<net::UploadDataStream> CreateUploadDataStream(
|
|||||||
element_readers.push_back(std::make_unique<FileElementReader>(
|
element_readers.push_back(std::make_unique<FileElementReader>(
|
||||||
body, file_task_runner, element, std::move(*opened_file++)));
|
body, file_task_runner, element, std::move(*opened_file++)));
|
||||||
break;
|
break;
|
||||||
case network::mojom::DataElementType::kBlob: {
|
|
||||||
CHECK(false) << "Network service always uses DATA_PIPE for blobs.";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case network::mojom::DataElementType::kDataPipe: {
|
case network::mojom::DataElementType::kDataPipe: {
|
||||||
element_readers.push_back(std::make_unique<DataPipeElementReader>(
|
element_readers.push_back(std::make_unique<DataPipeElementReader>(
|
||||||
body, element.CloneDataPipeGetter()));
|
body, element.CloneDataPipeGetter()));
|
||||||
|
@ -26,12 +26,11 @@ bool StructTraits<
|
|||||||
blink::mojom::FetchAPIDataElementDataView,
|
blink::mojom::FetchAPIDataElementDataView,
|
||||||
network::DataElement>::Read(blink::mojom::FetchAPIDataElementDataView data,
|
network::DataElement>::Read(blink::mojom::FetchAPIDataElementDataView data,
|
||||||
network::DataElement* out) {
|
network::DataElement* out) {
|
||||||
base::Optional<std::string> blob_uuid;
|
if (!data.ReadPath(&out->path_) ||
|
||||||
if (!data.ReadPath(&out->path_) || !data.ReadBlobUuid(&blob_uuid) ||
|
|
||||||
!data.ReadExpectedModificationTime(&out->expected_modification_time_)) {
|
!data.ReadExpectedModificationTime(&out->expected_modification_time_)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
out->blob_uuid_ = std::move(blob_uuid).value_or(std::string());
|
|
||||||
if (data.type() == network::mojom::DataElementType::kBytes) {
|
if (data.type() == network::mojom::DataElementType::kBytes) {
|
||||||
if (!data.ReadBuf(&out->buf_))
|
if (!data.ReadBuf(&out->buf_))
|
||||||
return false;
|
return false;
|
||||||
|
@ -61,9 +61,6 @@ struct BLINK_COMMON_EXPORT
|
|||||||
static const base::FilePath& path(const network::DataElement& element) {
|
static const base::FilePath& path(const network::DataElement& element) {
|
||||||
return element.path_;
|
return element.path_;
|
||||||
}
|
}
|
||||||
static const std::string& blob_uuid(const network::DataElement& element) {
|
|
||||||
return element.blob_uuid_;
|
|
||||||
}
|
|
||||||
static mojo::PendingRemote<network::mojom::DataPipeGetter> data_pipe_getter(
|
static mojo::PendingRemote<network::mojom::DataPipeGetter> data_pipe_getter(
|
||||||
const network::DataElement& element) {
|
const network::DataElement& element) {
|
||||||
if (element.type_ != network::mojom::DataElementType::kDataPipe)
|
if (element.type_ != network::mojom::DataElementType::kDataPipe)
|
||||||
|
@ -122,8 +122,6 @@ struct FetchAPIDataElement {
|
|||||||
array<uint8> buf;
|
array<uint8> buf;
|
||||||
// For kFile
|
// For kFile
|
||||||
mojo_base.mojom.FilePath path;
|
mojo_base.mojom.FilePath path;
|
||||||
// For kBlob
|
|
||||||
string? blob_uuid;
|
|
||||||
// For kDataPipe
|
// For kDataPipe
|
||||||
pending_remote<network.mojom.DataPipeGetter>? data_pipe_getter;
|
pending_remote<network.mojom.DataPipeGetter>? data_pipe_getter;
|
||||||
// For kChunkedDataPipe
|
// For kChunkedDataPipe
|
||||||
|
@ -62,7 +62,6 @@ class WebHTTPBody {
|
|||||||
int64_t file_start;
|
int64_t file_start;
|
||||||
int64_t file_length; // -1 means to the end of the file.
|
int64_t file_length; // -1 means to the end of the file.
|
||||||
base::Optional<base::Time> modification_time;
|
base::Optional<base::Time> modification_time;
|
||||||
WebString blob_uuid;
|
|
||||||
uint64_t blob_length;
|
uint64_t blob_length;
|
||||||
CrossVariantMojoRemote<mojom::BlobInterfaceBase> optional_blob;
|
CrossVariantMojoRemote<mojom::BlobInterfaceBase> optional_blob;
|
||||||
CrossVariantMojoRemote<network::mojom::DataPipeGetterInterfaceBase>
|
CrossVariantMojoRemote<network::mojom::DataPipeGetterInterfaceBase>
|
||||||
|
@ -73,7 +73,6 @@ bool WebHTTPBody::ElementAt(size_t index, Element& result) const {
|
|||||||
result.file_start = 0;
|
result.file_start = 0;
|
||||||
result.file_length = 0;
|
result.file_length = 0;
|
||||||
result.modification_time = base::nullopt;
|
result.modification_time = base::nullopt;
|
||||||
result.blob_uuid.Reset();
|
|
||||||
|
|
||||||
switch (element.type_) {
|
switch (element.type_) {
|
||||||
case FormDataElement::kData:
|
case FormDataElement::kData:
|
||||||
@ -89,13 +88,10 @@ bool WebHTTPBody::ElementAt(size_t index, Element& result) const {
|
|||||||
break;
|
break;
|
||||||
case FormDataElement::kEncodedBlob:
|
case FormDataElement::kEncodedBlob:
|
||||||
result.type = Element::kTypeBlob;
|
result.type = Element::kTypeBlob;
|
||||||
result.blob_uuid = element.blob_uuid_;
|
|
||||||
result.blob_length = std::numeric_limits<uint64_t>::max();
|
result.blob_length = std::numeric_limits<uint64_t>::max();
|
||||||
if (element.optional_blob_data_handle_) {
|
result.optional_blob =
|
||||||
result.optional_blob =
|
element.optional_blob_data_handle_->CloneBlobRemote();
|
||||||
element.optional_blob_data_handle_->CloneBlobRemote();
|
result.blob_length = element.optional_blob_data_handle_->size();
|
||||||
result.blob_length = element.optional_blob_data_handle_->size();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case FormDataElement::kDataPipe:
|
case FormDataElement::kDataPipe:
|
||||||
result.type = Element::kTypeDataPipe;
|
result.type = Element::kTypeDataPipe;
|
||||||
|
@ -53,25 +53,19 @@ StructTraits<blink::mojom::FetchAPIRequestBodyDataView,
|
|||||||
out->expected_modification_time =
|
out->expected_modification_time =
|
||||||
element.expected_file_modification_time_.value_or(base::Time());
|
element.expected_file_modification_time_.value_or(base::Time());
|
||||||
break;
|
break;
|
||||||
case blink::FormDataElement::kEncodedBlob:
|
case blink::FormDataElement::kEncodedBlob: {
|
||||||
if (element.optional_blob_data_handle_) {
|
out->type = network::mojom::DataElementType::kDataPipe;
|
||||||
out->type = network::mojom::DataElementType::kDataPipe;
|
out->length = element.optional_blob_data_handle_->size();
|
||||||
out->length = element.optional_blob_data_handle_->size();
|
|
||||||
|
|
||||||
mojo::Remote<blink::mojom::blink::Blob> blob_remote(
|
mojo::Remote<blink::mojom::blink::Blob> blob_remote(
|
||||||
mojo::PendingRemote<blink::mojom::blink::Blob>(
|
mojo::PendingRemote<blink::mojom::blink::Blob>(
|
||||||
element.optional_blob_data_handle_->CloneBlobRemote()
|
element.optional_blob_data_handle_->CloneBlobRemote()
|
||||||
.PassPipe(),
|
.PassPipe(),
|
||||||
blink::mojom::blink::Blob::Version_));
|
blink::mojom::blink::Blob::Version_));
|
||||||
mojo::PendingRemote<network::mojom::blink::DataPipeGetter>
|
blob_remote->AsDataPipeGetter(
|
||||||
data_pipe_getter_remote;
|
out->data_pipe_getter.InitWithNewPipeAndPassReceiver());
|
||||||
blob_remote->AsDataPipeGetter(
|
|
||||||
out->data_pipe_getter.InitWithNewPipeAndPassReceiver());
|
|
||||||
} else {
|
|
||||||
out->type = network::mojom::DataElementType::kBlob;
|
|
||||||
out->blob_uuid = element.blob_uuid_;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case blink::FormDataElement::kDataPipe:
|
case blink::FormDataElement::kDataPipe:
|
||||||
out->type = network::mojom::DataElementType::kDataPipe;
|
out->type = network::mojom::DataElementType::kDataPipe;
|
||||||
if (element.data_pipe_getter_) {
|
if (element.data_pipe_getter_) {
|
||||||
@ -159,7 +153,6 @@ bool StructTraits<blink::mojom::FetchAPIRequestBodyDataView,
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case network::mojom::DataElementType::kBlob:
|
|
||||||
case network::mojom::DataElementType::kUnknown:
|
case network::mojom::DataElementType::kUnknown:
|
||||||
case network::mojom::DataElementType::kChunkedDataPipe:
|
case network::mojom::DataElementType::kChunkedDataPipe:
|
||||||
case network::mojom::DataElementType::kReadOnceStream:
|
case network::mojom::DataElementType::kReadOnceStream:
|
||||||
|
@ -55,7 +55,9 @@ FormDataElement::FormDataElement(const String& blob_uuid,
|
|||||||
scoped_refptr<BlobDataHandle> optional_handle)
|
scoped_refptr<BlobDataHandle> optional_handle)
|
||||||
: type_(kEncodedBlob),
|
: type_(kEncodedBlob),
|
||||||
blob_uuid_(blob_uuid),
|
blob_uuid_(blob_uuid),
|
||||||
optional_blob_data_handle_(std::move(optional_handle)) {}
|
optional_blob_data_handle_(std::move(optional_handle)) {
|
||||||
|
DCHECK(optional_blob_data_handle_);
|
||||||
|
}
|
||||||
|
|
||||||
FormDataElement::FormDataElement(
|
FormDataElement::FormDataElement(
|
||||||
scoped_refptr<WrappedDataPipeGetter> data_pipe_getter)
|
scoped_refptr<WrappedDataPipeGetter> data_pipe_getter)
|
||||||
|
@ -5,16 +5,22 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "base/sequenced_task_runner.h"
|
#include "base/sequenced_task_runner.h"
|
||||||
|
#include "base/test/task_environment.h"
|
||||||
#include "mojo/public/cpp/bindings/pending_remote.h"
|
#include "mojo/public/cpp/bindings/pending_remote.h"
|
||||||
|
#include "mojo/public/cpp/bindings/receiver.h"
|
||||||
|
#include "mojo/public/cpp/bindings/remote.h"
|
||||||
#include "mojo/public/cpp/bindings/string_traits_wtf.h"
|
#include "mojo/public/cpp/bindings/string_traits_wtf.h"
|
||||||
#include "mojo/public/cpp/test_support/test_utils.h"
|
#include "mojo/public/cpp/test_support/test_utils.h"
|
||||||
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
|
#include "third_party/blink/public/mojom/blob/blob_registry.mojom-blink.h"
|
||||||
|
#include "third_party/blink/public/platform/platform.h"
|
||||||
#include "third_party/blink/renderer/platform/blob/blob_data.h"
|
#include "third_party/blink/renderer/platform/blob/blob_data.h"
|
||||||
#include "third_party/blink/renderer/platform/network/encoded_form_data.h"
|
#include "third_party/blink/renderer/platform/network/encoded_form_data.h"
|
||||||
|
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
|
||||||
|
|
||||||
namespace blink {
|
namespace blink {
|
||||||
|
|
||||||
|
using mojom::blink::BlobRegistry;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
class EncodedFormDataTest : public testing::Test {
|
class EncodedFormDataTest : public testing::Test {
|
||||||
@ -44,7 +50,13 @@ TEST_F(EncodedFormDataTest, DeepCopy) {
|
|||||||
original->AppendData("Foo", 3);
|
original->AppendData("Foo", 3);
|
||||||
original->AppendFileRange("example.txt", 12345, 56789,
|
original->AppendFileRange("example.txt", 12345, 56789,
|
||||||
base::Time::FromDoubleT(9999.0));
|
base::Time::FromDoubleT(9999.0));
|
||||||
original->AppendBlob("originalUUID", nullptr);
|
|
||||||
|
mojo::PendingRemote<mojom::blink::Blob> remote;
|
||||||
|
mojo::PendingReceiver<mojom::blink::Blob> receiver =
|
||||||
|
remote.InitWithNewPipeAndPassReceiver();
|
||||||
|
original->AppendBlob(
|
||||||
|
"originalUUID", BlobDataHandle::Create("uuid", "" /* type */,
|
||||||
|
0u /* size */, std::move(remote)));
|
||||||
|
|
||||||
Vector<char> boundary_vector;
|
Vector<char> boundary_vector;
|
||||||
boundary_vector.Append("----boundaryForTest", 19);
|
boundary_vector.Append("----boundaryForTest", 19);
|
||||||
|
@ -1817,7 +1817,7 @@ struct FuzzTraits<network::DataElement> {
|
|||||||
if (!fuzzer->ShouldGenerate())
|
if (!fuzzer->ShouldGenerate())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
switch (RandInRange(3)) {
|
switch (RandInRange(2)) {
|
||||||
case 0: {
|
case 0: {
|
||||||
// network::DataElement::Type::TYPE_BYTES
|
// network::DataElement::Type::TYPE_BYTES
|
||||||
if (RandEvent(2)) {
|
if (RandEvent(2)) {
|
||||||
@ -1847,20 +1847,6 @@ struct FuzzTraits<network::DataElement> {
|
|||||||
p->SetToFilePathRange(path, offset, length, modification_time);
|
p->SetToFilePathRange(path, offset, length, modification_time);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case 2: {
|
|
||||||
// network::DataElement::Type::TYPE_BLOB
|
|
||||||
std::string uuid;
|
|
||||||
uint64_t offset;
|
|
||||||
uint64_t length;
|
|
||||||
if (!FuzzParam(&uuid, fuzzer))
|
|
||||||
return false;
|
|
||||||
if (!FuzzParam(&offset, fuzzer))
|
|
||||||
return false;
|
|
||||||
if (!FuzzParam(&length, fuzzer))
|
|
||||||
return false;
|
|
||||||
p->SetToBlobRange(uuid, offset, length);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
default: {
|
default: {
|
||||||
NOTREACHED();
|
NOTREACHED();
|
||||||
return false;
|
return false;
|
||||||
|
Reference in New Issue
Block a user