feat: migrate protocol module to NetworkService (Part 12) (#18726)

* Support "uploadData" in "request" argument

* Support "uploadData" option in http handler

* Fix building on win32
This commit is contained in:
Cheng Zhao 2019-06-12 08:37:06 +09:00 committed by GitHub
parent e5d1e7b4da
commit 0e3ab7c128
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 51 additions and 7 deletions

View file

@ -15,7 +15,8 @@ URLPipeLoader::URLPipeLoader(
std::unique_ptr<network::ResourceRequest> request,
network::mojom::URLLoaderRequest loader,
network::mojom::URLLoaderClientPtr client,
const net::NetworkTrafficAnnotationTag& annotation)
const net::NetworkTrafficAnnotationTag& annotation,
base::DictionaryValue upload_data)
: binding_(this, std::move(loader)),
client_(std::move(client)),
weak_factory_(this) {
@ -26,7 +27,7 @@ URLPipeLoader::URLPipeLoader(
base::SequencedTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
base::BindOnce(&URLPipeLoader::Start, weak_factory_.GetWeakPtr(), factory,
std::move(request), annotation));
std::move(request), annotation, std::move(upload_data)));
}
URLPipeLoader::~URLPipeLoader() = default;
@ -34,10 +35,19 @@ URLPipeLoader::~URLPipeLoader() = default;
void URLPipeLoader::Start(
scoped_refptr<network::SharedURLLoaderFactory> factory,
std::unique_ptr<network::ResourceRequest> request,
const net::NetworkTrafficAnnotationTag& annotation) {
const net::NetworkTrafficAnnotationTag& annotation,
base::DictionaryValue upload_data) {
loader_ = network::SimpleURLLoader::Create(std::move(request), annotation);
loader_->SetOnResponseStartedCallback(base::Bind(
&URLPipeLoader::OnResponseStarted, weak_factory_.GetWeakPtr()));
// TODO(zcbenz): The old protocol API only supports string as upload data,
// we should seek to support more types in future.
std::string content_type, data;
if (upload_data.GetString("contentType", &content_type) &&
upload_data.GetString("data", &data))
loader_->AttachStringForUpload(data, content_type);
loader_->DownloadAsStream(factory.get(), this);
}