feat: migrate webRequest module to NetworkService (Part 8) (#19841)
* fix: fill uploadData property * fix: requestHeaders in onBeforeSendHeaders * fix: responseHeaders in onHeadersReceived * fix: header keys should not be lowercased * fix: gin::Dictionary::Get succeeds even though key does not exist... * fix: throw for invalid filters * test: re-enable api-web-request-spec * chore: do not use deprecated base::Value API
This commit is contained in:
parent
f10f44acf5
commit
b7defaaf6a
5 changed files with 95 additions and 43 deletions
|
@ -160,15 +160,10 @@ v8::Local<v8::Value> Converter<net::HttpResponseHeaders*>::ToV8(
|
|||
std::string value;
|
||||
while (headers->EnumerateHeaderLines(&iter, &key, &value)) {
|
||||
key = base::ToLowerASCII(key);
|
||||
if (response_headers.FindKey(key)) {
|
||||
base::ListValue* values = nullptr;
|
||||
if (response_headers.GetList(key, &values))
|
||||
values->AppendString(value);
|
||||
} else {
|
||||
auto values = std::make_unique<base::ListValue>();
|
||||
values->AppendString(value);
|
||||
response_headers.Set(key, std::move(values));
|
||||
}
|
||||
base::Value* values = response_headers.FindListKey(key);
|
||||
if (!values)
|
||||
values = response_headers.SetKey(key, base::ListValue());
|
||||
values->GetList().emplace_back(value);
|
||||
}
|
||||
}
|
||||
return ConvertToV8(isolate, response_headers);
|
||||
|
@ -251,6 +246,37 @@ bool Converter<net::HttpRequestHeaders>::FromV8(v8::Isolate* isolate,
|
|||
return true;
|
||||
}
|
||||
|
||||
// static
|
||||
v8::Local<v8::Value> Converter<network::ResourceRequestBody>::ToV8(
|
||||
v8::Isolate* isolate,
|
||||
const network::ResourceRequestBody& val) {
|
||||
const auto& elements = *val.elements();
|
||||
v8::Local<v8::Array> arr = v8::Array::New(isolate, elements.size());
|
||||
for (size_t i = 0; i < elements.size(); ++i) {
|
||||
const auto& element = elements[i];
|
||||
gin::Dictionary upload_data(isolate, v8::Object::New(isolate));
|
||||
switch (element.type()) {
|
||||
case network::mojom::DataElementType::kFile:
|
||||
upload_data.Set("file", element.path().value());
|
||||
break;
|
||||
case network::mojom::DataElementType::kBytes:
|
||||
upload_data.Set("bytes", node::Buffer::Copy(isolate, element.bytes(),
|
||||
element.length())
|
||||
.ToLocalChecked());
|
||||
break;
|
||||
case network::mojom::DataElementType::kBlob:
|
||||
upload_data.Set("blobUUID", element.blob_uuid());
|
||||
break;
|
||||
default:
|
||||
NOTREACHED() << "Found unsupported data element";
|
||||
}
|
||||
arr->Set(isolate->GetCurrentContext(), static_cast<uint32_t>(i),
|
||||
ConvertToV8(isolate, upload_data))
|
||||
.Check();
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
// static
|
||||
v8::Local<v8::Value> Converter<network::ResourceRequest>::ToV8(
|
||||
v8::Isolate* isolate,
|
||||
|
@ -260,33 +286,8 @@ v8::Local<v8::Value> Converter<network::ResourceRequest>::ToV8(
|
|||
dict.Set("url", val.url.spec());
|
||||
dict.Set("referrer", val.referrer.spec());
|
||||
dict.Set("headers", val.headers);
|
||||
if (val.request_body) {
|
||||
const auto& elements = *val.request_body->elements();
|
||||
v8::Local<v8::Array> arr = v8::Array::New(isolate, elements.size());
|
||||
for (size_t i = 0; i < elements.size(); ++i) {
|
||||
const auto& element = elements[i];
|
||||
gin::Dictionary upload_data(isolate, v8::Object::New(isolate));
|
||||
switch (element.type()) {
|
||||
case network::mojom::DataElementType::kFile:
|
||||
upload_data.Set("file", element.path().value());
|
||||
break;
|
||||
case network::mojom::DataElementType::kBytes:
|
||||
upload_data.Set("bytes", node::Buffer::Copy(isolate, element.bytes(),
|
||||
element.length())
|
||||
.ToLocalChecked());
|
||||
break;
|
||||
case network::mojom::DataElementType::kBlob:
|
||||
upload_data.Set("blobUUID", element.blob_uuid());
|
||||
break;
|
||||
default:
|
||||
NOTREACHED() << "Found unsupported data element";
|
||||
}
|
||||
arr->Set(isolate->GetCurrentContext(), static_cast<uint32_t>(i),
|
||||
ConvertToV8(isolate, upload_data))
|
||||
.Check();
|
||||
}
|
||||
dict.Set("uploadData", arr);
|
||||
}
|
||||
if (val.request_body)
|
||||
dict.Set("uploadData", ConvertToV8(isolate, *val.request_body));
|
||||
return ConvertToV8(isolate, dict);
|
||||
}
|
||||
|
||||
|
|
|
@ -69,6 +69,12 @@ struct Converter<net::HttpRequestHeaders> {
|
|||
net::HttpRequestHeaders* out);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct Converter<network::ResourceRequestBody> {
|
||||
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
||||
const network::ResourceRequestBody& val);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct Converter<network::ResourceRequest> {
|
||||
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue