Commit d3c312ef authored by jam's avatar jam Committed by Commit bot

Reduce boilerplate when creating simple mojom::URLLoaders.

Add new constructors for mojo::DataPipe and content::ResourceRequestCompletionStatus to do this.

BUG=717714

Review-Url: https://codereview.chromium.org/2875143002
Cr-Commit-Position: refs/heads/master@{#471129}
parent 68edd5fc
...@@ -26,16 +26,7 @@ void StartBlobInternalsURLLoader( ...@@ -26,16 +26,7 @@ void StartBlobInternalsURLLoader(
std::string output = storage::ViewBlobInternalsJob::GenerateHTML( std::string output = storage::ViewBlobInternalsJob::GenerateHTML(
blob_storage_context->context()); blob_storage_context->context());
mojo::DataPipe data_pipe(output.size());
MojoCreateDataPipeOptions options;
options.struct_size = sizeof(MojoCreateDataPipeOptions);
options.flags = MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
options.element_num_bytes = 1;
options.capacity_num_bytes = output.size();
mojo::DataPipe data_pipe(options);
DCHECK(data_pipe.producer_handle.is_valid());
DCHECK(data_pipe.consumer_handle.is_valid());
void* buffer = nullptr; void* buffer = nullptr;
uint32_t num_bytes = output.size(); uint32_t num_bytes = output.size();
...@@ -50,14 +41,7 @@ void StartBlobInternalsURLLoader( ...@@ -50,14 +41,7 @@ void StartBlobInternalsURLLoader(
CHECK_EQ(result, MOJO_RESULT_OK); CHECK_EQ(result, MOJO_RESULT_OK);
client->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle)); client->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle));
client->OnComplete(ResourceRequestCompletionStatus(output.size()));
ResourceRequestCompletionStatus request_complete_data;
request_complete_data.error_code = net::OK;
request_complete_data.exists_in_cache = false;
request_complete_data.completion_time = base::TimeTicks::Now();
request_complete_data.encoded_data_length = output.size();
request_complete_data.encoded_body_length = output.size();
client->OnComplete(request_complete_data);
} }
} // namespace content } // namespace content
...@@ -22,28 +22,11 @@ void StartHistogramInternalsURLLoader(const ResourceRequest& request, ...@@ -22,28 +22,11 @@ void StartHistogramInternalsURLLoader(const ResourceRequest& request,
base::StatisticsRecorder::ImportProvidedHistograms(); base::StatisticsRecorder::ImportProvidedHistograms();
std::string data = HistogramInternalsRequestJob::GenerateHTML(request.url); std::string data = HistogramInternalsRequestJob::GenerateHTML(request.url);
mojo::DataPipe data_pipe(data.size());
MojoCreateDataPipeOptions options;
options.struct_size = sizeof(MojoCreateDataPipeOptions);
options.flags = MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
options.element_num_bytes = 1;
options.capacity_num_bytes = data.size();
mojo::DataPipe data_pipe(options);
DCHECK(data_pipe.producer_handle.is_valid());
DCHECK(data_pipe.consumer_handle.is_valid());
CHECK(mojo::common::BlockingCopyFromString(data, data_pipe.producer_handle)); CHECK(mojo::common::BlockingCopyFromString(data, data_pipe.producer_handle));
client->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle)); client->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle));
client->OnComplete(ResourceRequestCompletionStatus(data.size()));
ResourceRequestCompletionStatus request_complete_data;
request_complete_data.error_code = net::OK;
request_complete_data.exists_in_cache = false;
request_complete_data.completion_time = base::TimeTicks::Now();
request_complete_data.encoded_data_length = data.size();
request_complete_data.encoded_body_length = data.size();
client->OnComplete(request_complete_data);
} }
} // namespace content } // namespace content
...@@ -90,15 +90,7 @@ void ReadData(scoped_refptr<ResourceResponse> headers, ...@@ -90,15 +90,7 @@ void ReadData(scoped_refptr<ResourceResponse> headers,
uint32_t output_size = uint32_t output_size =
gzipped ? compression::GetUncompressedSize(input) : bytes->size(); gzipped ? compression::GetUncompressedSize(input) : bytes->size();
MojoCreateDataPipeOptions options; mojo::DataPipe data_pipe(output_size);
options.struct_size = sizeof(MojoCreateDataPipeOptions);
options.flags = MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
options.element_num_bytes = 1;
options.capacity_num_bytes = output_size;
mojo::DataPipe data_pipe(options);
DCHECK(data_pipe.producer_handle.is_valid());
DCHECK(data_pipe.consumer_handle.is_valid());
void* buffer = nullptr; void* buffer = nullptr;
uint32_t num_bytes = output_size; uint32_t num_bytes = output_size;
...@@ -118,14 +110,7 @@ void ReadData(scoped_refptr<ResourceResponse> headers, ...@@ -118,14 +110,7 @@ void ReadData(scoped_refptr<ResourceResponse> headers,
CHECK_EQ(result, MOJO_RESULT_OK); CHECK_EQ(result, MOJO_RESULT_OK);
client->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle)); client->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle));
client->OnComplete(ResourceRequestCompletionStatus(output_size));
ResourceRequestCompletionStatus request_complete_data;
request_complete_data.error_code = net::OK;
request_complete_data.exists_in_cache = false;
request_complete_data.completion_time = base::TimeTicks::Now();
request_complete_data.encoded_data_length = output_size;
request_complete_data.encoded_body_length = output_size;
client->OnComplete(request_complete_data);
} }
void DataAvailable(scoped_refptr<ResourceResponse> headers, void DataAvailable(scoped_refptr<ResourceResponse> headers,
......
...@@ -4,11 +4,20 @@ ...@@ -4,11 +4,20 @@
#include "content/common/resource_request_completion_status.h" #include "content/common/resource_request_completion_status.h"
#include "net/base/net_errors.h"
namespace content { namespace content {
ResourceRequestCompletionStatus::ResourceRequestCompletionStatus() {} ResourceRequestCompletionStatus::ResourceRequestCompletionStatus() {}
ResourceRequestCompletionStatus::ResourceRequestCompletionStatus( ResourceRequestCompletionStatus::ResourceRequestCompletionStatus(
const ResourceRequestCompletionStatus& status) = default; const ResourceRequestCompletionStatus& status) = default;
ResourceRequestCompletionStatus::ResourceRequestCompletionStatus(int64_t length)
: error_code(net::OK),
completion_time(base::TimeTicks::Now()),
encoded_data_length(length),
encoded_body_length(length) {}
ResourceRequestCompletionStatus::~ResourceRequestCompletionStatus() {} ResourceRequestCompletionStatus::~ResourceRequestCompletionStatus() {}
} // namespace content } // namespace content
...@@ -17,6 +17,9 @@ struct CONTENT_EXPORT ResourceRequestCompletionStatus { ...@@ -17,6 +17,9 @@ struct CONTENT_EXPORT ResourceRequestCompletionStatus {
ResourceRequestCompletionStatus(); ResourceRequestCompletionStatus();
ResourceRequestCompletionStatus( ResourceRequestCompletionStatus(
const ResourceRequestCompletionStatus& status); const ResourceRequestCompletionStatus& status);
explicit ResourceRequestCompletionStatus(int64_t length);
// Sets error_code to net::OK, completition_time to base::TimeTicks::Now(),
// and encoded_data_length = encoded_body_length = |length|;
~ResourceRequestCompletionStatus(); ~ResourceRequestCompletionStatus();
// The error code. // The error code.
......
...@@ -52,28 +52,13 @@ class CacheURLLoader { ...@@ -52,28 +52,13 @@ class CacheURLLoader {
private: private:
void DataAvailable(int result) { void DataAvailable(int result) {
DCHECK_EQ(net::OK, result); DCHECK_EQ(net::OK, result);
MojoCreateDataPipeOptions options; mojo::DataPipe data_pipe(data_.size());
options.struct_size = sizeof(MojoCreateDataPipeOptions);
options.flags = MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
options.element_num_bytes = 1;
options.capacity_num_bytes = data_.size();
mojo::DataPipe data_pipe(options);
DCHECK(data_pipe.producer_handle.is_valid());
DCHECK(data_pipe.consumer_handle.is_valid());
CHECK( CHECK(
mojo::common::BlockingCopyFromString(data_, data_pipe.producer_handle)); mojo::common::BlockingCopyFromString(data_, data_pipe.producer_handle));
client_->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle)); client_->OnStartLoadingResponseBody(std::move(data_pipe.consumer_handle));
client_->OnComplete(ResourceRequestCompletionStatus(data_.size()));
ResourceRequestCompletionStatus request_complete_data;
request_complete_data.error_code = net::OK;
request_complete_data.exists_in_cache = false;
request_complete_data.completion_time = base::TimeTicks::Now();
request_complete_data.encoded_data_length = data_.size();
request_complete_data.encoded_body_length = data_.size();
client_->OnComplete(request_complete_data);
// So we don't delete |this| in the constructor. // So we don't delete |this| in the constructor.
base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this); base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this);
......
...@@ -268,15 +268,7 @@ void URLLoaderImpl::OnResponseStarted(net::URLRequest* url_request, ...@@ -268,15 +268,7 @@ void URLLoaderImpl::OnResponseStarted(net::URLRequest* url_request,
std::vector<uint8_t>(data, data + metadata->size())); std::vector<uint8_t>(data, data + metadata->size()));
} }
MojoCreateDataPipeOptions options; mojo::DataPipe data_pipe(kDefaultAllocationSize);
options.struct_size = sizeof(MojoCreateDataPipeOptions);
options.flags = MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
options.element_num_bytes = 1;
options.capacity_num_bytes = kDefaultAllocationSize;
mojo::DataPipe data_pipe(options);
DCHECK(data_pipe.producer_handle.is_valid());
DCHECK(data_pipe.consumer_handle.is_valid());
response_body_stream_ = std::move(data_pipe.producer_handle); response_body_stream_ = std::move(data_pipe.producer_handle);
response_body_consumer_handle_ = std::move(data_pipe.consumer_handle); response_body_consumer_handle_ = std::move(data_pipe.consumer_handle);
......
...@@ -20,26 +20,23 @@ namespace media { ...@@ -20,26 +20,23 @@ namespace media {
namespace { namespace {
std::unique_ptr<mojo::DataPipe> CreateDataPipe(DemuxerStream::Type type) { std::unique_ptr<mojo::DataPipe> CreateDataPipe(DemuxerStream::Type type) {
MojoCreateDataPipeOptions options; uint32_t capacity = 0;
options.struct_size = sizeof(MojoCreateDataPipeOptions);
options.flags = MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
options.element_num_bytes = 1;
if (type == DemuxerStream::AUDIO) { if (type == DemuxerStream::AUDIO) {
// TODO(timav): Consider capacity calculation based on AudioDecoderConfig. // TODO(timav): Consider capacity calculation based on AudioDecoderConfig.
options.capacity_num_bytes = 512 * 1024; capacity = 512 * 1024;
} else if (type == DemuxerStream::VIDEO) { } else if (type == DemuxerStream::VIDEO) {
// Video can get quite large; at 4K, VP9 delivers packets which are ~1MB in // Video can get quite large; at 4K, VP9 delivers packets which are ~1MB in
// size; so allow for some head room. // size; so allow for some head room.
// TODO(xhwang, sandersd): Provide a better way to customize this value. // TODO(xhwang, sandersd): Provide a better way to customize this value.
options.capacity_num_bytes = 2 * (1024 * 1024); capacity = 2 * (1024 * 1024);
} else { } else {
NOTREACHED() << "Unsupported type: " << type; NOTREACHED() << "Unsupported type: " << type;
// Choose an arbitrary size. // Choose an arbitrary size.
options.capacity_num_bytes = 512 * 1024; capacity = 512 * 1024;
} }
return base::MakeUnique<mojo::DataPipe>(options); return base::MakeUnique<mojo::DataPipe>(capacity);
} }
bool IsPipeReadWriteError(MojoResult result) { bool IsPipeReadWriteError(MojoResult result) {
......
...@@ -31,12 +31,7 @@ class MojoDecoderBufferConverter { ...@@ -31,12 +31,7 @@ class MojoDecoderBufferConverter {
public: public:
MojoDecoderBufferConverter( MojoDecoderBufferConverter(
uint32_t data_pipe_capacity_bytes = kDefaultDataPipeCapacityBytes) { uint32_t data_pipe_capacity_bytes = kDefaultDataPipeCapacityBytes) {
MojoCreateDataPipeOptions options; mojo::DataPipe data_pipe(data_pipe_capacity_bytes);
options.struct_size = sizeof(MojoCreateDataPipeOptions);
options.flags = MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
options.element_num_bytes = 1;
options.capacity_num_bytes = data_pipe_capacity_bytes;
mojo::DataPipe data_pipe(options);
writer = base::MakeUnique<MojoDecoderBufferWriter>( writer = base::MakeUnique<MojoDecoderBufferWriter>(
std::move(data_pipe.producer_handle)); std::move(data_pipe.producer_handle));
......
...@@ -23,13 +23,7 @@ namespace remoting { ...@@ -23,13 +23,7 @@ namespace remoting {
mojo::DataPipe* DemuxerStreamAdapter::CreateDataPipe() { mojo::DataPipe* DemuxerStreamAdapter::CreateDataPipe() {
// Capacity in bytes for Mojo data pipe. // Capacity in bytes for Mojo data pipe.
constexpr int kMojoDataPipeCapacityInBytes = 512 * 1024; constexpr int kMojoDataPipeCapacityInBytes = 512 * 1024;
return new mojo::DataPipe(kMojoDataPipeCapacityInBytes);
MojoCreateDataPipeOptions options;
options.struct_size = sizeof(MojoCreateDataPipeOptions);
options.flags = MOJO_WRITE_DATA_FLAG_NONE;
options.element_num_bytes = 1;
options.capacity_num_bytes = kMojoDataPipeCapacityInBytes;
return new mojo::DataPipe(options);
} }
DemuxerStreamAdapter::DemuxerStreamAdapter( DemuxerStreamAdapter::DemuxerStreamAdapter(
......
...@@ -134,6 +134,7 @@ inline MojoResult EndReadDataRaw(DataPipeConsumerHandle data_pipe_consumer, ...@@ -134,6 +134,7 @@ inline MojoResult EndReadDataRaw(DataPipeConsumerHandle data_pipe_consumer,
class DataPipe { class DataPipe {
public: public:
DataPipe(); DataPipe();
explicit DataPipe(uint32_t capacity_num_bytes);
explicit DataPipe(const MojoCreateDataPipeOptions& options); explicit DataPipe(const MojoCreateDataPipeOptions& options);
~DataPipe(); ~DataPipe();
...@@ -148,6 +149,19 @@ inline DataPipe::DataPipe() { ...@@ -148,6 +149,19 @@ inline DataPipe::DataPipe() {
DCHECK_EQ(MOJO_RESULT_OK, result); DCHECK_EQ(MOJO_RESULT_OK, result);
} }
inline DataPipe::DataPipe(uint32_t capacity_num_bytes) {
MojoCreateDataPipeOptions options;
options.struct_size = sizeof(MojoCreateDataPipeOptions);
options.flags = MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
options.element_num_bytes = 1;
options.capacity_num_bytes = capacity_num_bytes;
mojo::DataPipe data_pipe(options);
MojoResult result =
CreateDataPipe(&options, &producer_handle, &consumer_handle);
ALLOW_UNUSED_LOCAL(result);
DCHECK_EQ(MOJO_RESULT_OK, result);
}
inline DataPipe::DataPipe(const MojoCreateDataPipeOptions& options) { inline DataPipe::DataPipe(const MojoCreateDataPipeOptions& options) {
MojoResult result = MojoResult result =
CreateDataPipe(&options, &producer_handle, &consumer_handle); CreateDataPipe(&options, &producer_handle, &consumer_handle);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment