1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/web_applications/test/signed_web_bundle_utils.h"
#include "base/containers/span.h"
#include "base/functional/bind.h"
#include "base/test/test_future.h"
#include "chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace web_app {
mojo::ScopedDataPipeConsumerHandle ReadResponseBody(
uint64_t response_length,
base::OnceCallback<void(mojo::ScopedDataPipeProducerHandle producer_handle,
base::OnceCallback<void(net::Error net_error)>)>
read_response_body_callback,
base::OnceCallback<void(net::Error)> on_response_read_callback) {
mojo::ScopedDataPipeProducerHandle producer;
mojo::ScopedDataPipeConsumerHandle consumer;
MojoCreateDataPipeOptions options;
options.struct_size = sizeof(MojoCreateDataPipeOptions);
options.element_num_bytes = 1;
options.capacity_num_bytes = response_length + 1;
EXPECT_EQ(MOJO_RESULT_OK, mojo::CreateDataPipe(&options, producer, consumer));
std::move(read_response_body_callback)
.Run(std::move(producer), std::move(on_response_read_callback));
return consumer;
}
std::string ReadAndFulfillResponseBody(
SignedWebBundleReader& reader,
web_package::mojom::BundleResponsePtr response) {
uint64_t response_length = response->payload_length;
return ReadAndFulfillResponseBody(
response_length,
base::BindOnce(&SignedWebBundleReader::ReadResponseBody,
// It is okay to use a bare pointer here, since the
// callback is executed synchronously.
base::Unretained(&reader), std::move(response)));
}
std::string ReadAndFulfillResponseBody(
uint64_t response_length,
base::OnceCallback<void(mojo::ScopedDataPipeProducerHandle producer_handle,
base::OnceCallback<void(net::Error net_error)>)>
read_response_body_callback) {
base::test::TestFuture<net::Error> error_future;
mojo::ScopedDataPipeConsumerHandle consumer =
ReadResponseBody(response_length, std::move(read_response_body_callback),
error_future.GetCallback());
EXPECT_EQ(net::OK, error_future.Get());
std::string buffer(response_length, '\0');
size_t bytes_read = 0;
MojoResult read_result =
consumer->ReadData(MOJO_READ_DATA_FLAG_NONE,
base::as_writable_byte_span(buffer), bytes_read);
EXPECT_EQ(MOJO_RESULT_OK, read_result);
EXPECT_EQ(buffer.size(), bytes_read);
return buffer.substr(0, bytes_read);
}
} // namespace web_app
|