Commit c22a96de authored by Sergey Ulanov's avatar Sergey Ulanov Committed by Commit Bot

[Fuchsia] Set names for all VMOs

Now all VMOs created by chromium code will have name set. This doesn't
affect VMOs allocated using mmap().

Bug: 991805
Change-Id: I2a8e13bb58e1a3b9f27216c636584a92af8d2219
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1758842
Commit-Queue: Sergey Ulanov <sergeyu@chromium.org>
Reviewed-by: default avatarYuchen Liu <yucliu@chromium.org>
Reviewed-by: default avatarWez <wez@chromium.org>
Auto-Submit: Sergey Ulanov <sergeyu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#688235}
parent 4420a01d
......@@ -147,6 +147,12 @@ PlatformSharedMemoryRegion PlatformSharedMemoryRegion::Create(Mode mode,
return {};
}
// TODO(crbug.com/991805): Take base::Location from the caller and use it to
// generate the name here.
constexpr char kVmoName[] = "cr-shared-memory-region";
status = vmo.set_property(ZX_PROP_NAME, kVmoName, strlen(kVmoName));
ZX_DCHECK(status == ZX_OK, status);
const int kNoExecFlags = ZX_DEFAULT_VMO_RIGHTS & ~ZX_RIGHT_EXECUTE;
status = vmo.replace(kNoExecFlags, &vmo);
if (status != ZX_OK) {
......
......@@ -52,6 +52,10 @@ bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
return false;
}
static const char kVmoName[] = "cr-shared-memory";
status = vmo.set_property(ZX_PROP_NAME, kVmoName, strlen(kVmoName));
ZX_DCHECK(status == ZX_OK, status);
if (!options.executable) {
// If options.executable isn't set, drop that permission by replacement.
const int kNoExecFlags = ZX_DEFAULT_VMO_RIGHTS & ~ZX_RIGHT_EXECUTE;
......
......@@ -22,7 +22,7 @@ BindingsManagerFuchsia::~BindingsManagerFuchsia() = default;
void BindingsManagerFuchsia::AddBinding(base::StringPiece binding_name,
base::StringPiece binding_script) {
bindings_[binding_name.as_string()] =
cr_fuchsia::MemBufferFromString(binding_script);
cr_fuchsia::MemBufferFromString(binding_script, "cast-binding-script");
}
void BindingsManagerFuchsia::GetAll(GetAllCallback callback) {
......
......@@ -33,7 +33,7 @@ base::Optional<base::Value> ExecuteJavaScript(fuchsia::web::Frame* frame,
base::RunLoop run_loop;
ResultReceiver<fuchsia::web::Frame_ExecuteJavaScript_Result> result(
run_loop.QuitClosure());
frame->ExecuteJavaScript({"*"}, MemBufferFromString(script),
frame->ExecuteJavaScript({"*"}, MemBufferFromString(script, "test"),
CallbackToFitFunction(result.GetReceiveCallback()));
run_loop.Run();
......
......@@ -26,12 +26,16 @@ bool ReadUTF8FromVMOAsUTF16(const fuchsia::mem::Buffer& buffer,
return base::UTF8ToUTF16(&output_utf8.front(), output_utf8.size(), output);
}
fuchsia::mem::Buffer MemBufferFromString(const base::StringPiece& data) {
fuchsia::mem::Buffer MemBufferFromString(base::StringPiece data,
base::StringPiece name) {
fuchsia::mem::Buffer buffer;
zx_status_t status = zx::vmo::create(data.size(), 0, &buffer.vmo);
ZX_CHECK(status == ZX_OK, status) << "zx_vmo_create";
status = buffer.vmo.set_property(ZX_PROP_NAME, name.data(), name.size());
ZX_DCHECK(status == ZX_OK, status);
status = buffer.vmo.write(data.data(), 0, data.size());
ZX_CHECK(status == ZX_OK, status) << "zx_vmo_write";
......@@ -39,10 +43,12 @@ fuchsia::mem::Buffer MemBufferFromString(const base::StringPiece& data) {
return buffer;
}
fuchsia::mem::Buffer MemBufferFromString16(const base::StringPiece16& data) {
fuchsia::mem::Buffer MemBufferFromString16(const base::StringPiece16& data,
base::StringPiece name) {
return MemBufferFromString(
base::StringPiece(reinterpret_cast<const char*>(data.data()),
data.size() * sizeof(base::char16)));
data.size() * sizeof(base::char16)),
name);
}
bool StringFromMemBuffer(const fuchsia::mem::Buffer& buffer,
......@@ -74,12 +80,17 @@ fuchsia::mem::Buffer MemBufferFromFile(base::File file) {
return output;
}
fuchsia::mem::Buffer CloneBuffer(const fuchsia::mem::Buffer& buffer) {
fuchsia::mem::Buffer CloneBuffer(const fuchsia::mem::Buffer& buffer,
base::StringPiece name) {
fuchsia::mem::Buffer output;
output.size = buffer.size;
zx_status_t status = buffer.vmo.create_child(ZX_VMO_CHILD_COPY_ON_WRITE, 0,
buffer.size, &output.vmo);
ZX_CHECK(status == ZX_OK, status) << "zx_vmo_create_child";
status = output.vmo.set_property(ZX_PROP_NAME, name.data(), name.size());
ZX_DCHECK(status == ZX_OK, status);
return output;
}
......
......@@ -20,10 +20,12 @@ bool ReadUTF8FromVMOAsUTF16(const fuchsia::mem::Buffer& buffer,
base::string16* output);
// Creates a Fuchsia memory buffer from |data|.
fuchsia::mem::Buffer MemBufferFromString(const base::StringPiece& data);
fuchsia::mem::Buffer MemBufferFromString(base::StringPiece data,
base::StringPiece name);
// Creates a Fuchsia memory buffer from the UTF-16 string |data|.
fuchsia::mem::Buffer MemBufferFromString16(const base::StringPiece16& data);
fuchsia::mem::Buffer MemBufferFromString16(const base::StringPiece16& data,
base::StringPiece name);
// Reads the contents of |buffer| into |output|.
// Returns true if the read operation succeeded.
......@@ -35,7 +37,8 @@ bool StringFromMemBuffer(const fuchsia::mem::Buffer& buffer,
fuchsia::mem::Buffer MemBufferFromFile(base::File file);
// Creates a non-resizeable, copy-on-write shared memory clone of |buffer|.
fuchsia::mem::Buffer CloneBuffer(const fuchsia::mem::Buffer& buffer);
fuchsia::mem::Buffer CloneBuffer(const fuchsia::mem::Buffer& buffer,
base::StringPiece name);
} // namespace cr_fuchsia
......
......@@ -87,7 +87,8 @@ base::Optional<fuchsia::web::WebMessage> FidlWebMessageFromMojo(
base::STLClearObject(&data_utf16);
fuchsia::mem::Buffer data = cr_fuchsia::MemBufferFromString(data_utf8);
fuchsia::mem::Buffer data =
cr_fuchsia::MemBufferFromString(data_utf8, "cr-web-message-from-mojo");
if (!data.vmo)
return {};
......
......@@ -266,8 +266,8 @@ void FrameImpl::ExecuteJavaScriptInternal(std::vector<std::string> origins,
}
fuchsia::web::Frame_ExecuteJavaScript_Response response;
response.result =
cr_fuchsia::MemBufferFromString(std::move(result_json));
response.result = cr_fuchsia::MemBufferFromString(
std::move(result_json), "cr-execute-js-response");
result.set_response(std::move(response));
callback(std::move(result));
},
......@@ -372,7 +372,7 @@ void FrameImpl::AddBeforeLoadJavaScript(
// Create a read-only VMO from |script|.
fuchsia::mem::Buffer script_buffer =
cr_fuchsia::MemBufferFromString16(script_utf16);
cr_fuchsia::MemBufferFromString16(script_utf16, "cr-before-load-js");
// Wrap the VMO into a read-only shared-memory container that Mojo can work
// with.
......
......@@ -20,6 +20,7 @@ source_set("core") {
]
public_deps = [
"//base:base",
"//fuchsia/base",
"//net:net",
"//third_party/fuchsia-sdk/sdk:net_oldhttp",
"//third_party/fuchsia-sdk/sdk:sys",
......
......@@ -7,6 +7,7 @@
#include "base/fuchsia/fuchsia_logging.h"
#include "base/message_loop/message_loop_current.h"
#include "base/task/post_task.h"
#include "fuchsia/base/mem_buffer_util.h"
#include "net/base/chunked_upload_data_stream.h"
#include "net/base/net_errors.h"
#include "net/http/http_response_headers.h"
......@@ -30,20 +31,9 @@ oldhttp::URLBodyPtr CreateURLBodyFromBuffer(net::GrowableIOBuffer* buffer) {
// The response buffer size is exactly the offset.
size_t total_size = buffer->offset();
::fuchsia::mem::Buffer mem_buffer;
mem_buffer.size = total_size;
zx_status_t result = zx::vmo::create(total_size, 0, &mem_buffer.vmo);
if (result != ZX_OK) {
ZX_DLOG(WARNING, result) << "zx_vmo_create";
return nullptr;
}
result = mem_buffer.vmo.write(buffer->StartOfBuffer(), 0, total_size);
if (result != ZX_OK) {
ZX_DLOG(WARNING, result) << "zx_vmo_write";
return nullptr;
}
body->set_buffer(std::move(mem_buffer));
body->set_buffer(cr_fuchsia::MemBufferFromString(
base::StringPiece(buffer->StartOfBuffer(), total_size),
"cr-http-url-body"));
return body;
}
......
......@@ -77,7 +77,8 @@ IN_PROC_BROWSER_TEST_F(ApiBindingsClientTest, EndToEnd) {
std::vector<chromium::cast::ApiBinding> binding_list;
chromium::cast::ApiBinding echo_binding;
echo_binding.set_before_load_script(cr_fuchsia::MemBufferFromString(
"window.echo = cast.__platform__.PortConnector.bind('echoService');"));
"window.echo = cast.__platform__.PortConnector.bind('echoService');",
"test"));
binding_list.emplace_back(std::move(echo_binding));
api_service_.set_bindings(std::move(binding_list));
StartClient();
......@@ -92,7 +93,7 @@ IN_PROC_BROWSER_TEST_F(ApiBindingsClientTest, EndToEnd) {
api_service_.RunUntilMessagePortReceived("echoService").Bind();
fuchsia::web::WebMessage message;
message.set_data(cr_fuchsia::MemBufferFromString("ping"));
message.set_data(cr_fuchsia::MemBufferFromString("ping", "ping-msg"));
port->PostMessage(std::move(message),
[](fuchsia::web::MessagePort_PostMessage_Result result) {
EXPECT_TRUE(result.is_response());
......
......@@ -346,7 +346,8 @@ TEST_F(CastRunnerIntegrationTest, ApiBindings) {
std::vector<chromium::cast::ApiBinding> binding_list;
chromium::cast::ApiBinding echo_binding;
echo_binding.set_before_load_script(cr_fuchsia::MemBufferFromString(
"window.echo = cast.__platform__.PortConnector.bind('echoService');"));
"window.echo = cast.__platform__.PortConnector.bind('echoService');",
"test"));
binding_list.emplace_back(std::move(echo_binding));
api_bindings_.set_bindings(std::move(binding_list));
......@@ -359,7 +360,7 @@ TEST_F(CastRunnerIntegrationTest, ApiBindings) {
api_bindings_.RunUntilMessagePortReceived("echoService").Bind();
fuchsia::web::WebMessage message;
message.set_data(cr_fuchsia::MemBufferFromString("ping"));
message.set_data(cr_fuchsia::MemBufferFromString("ping", "ping-msg"));
port->PostMessage(std::move(message),
[](fuchsia::web::MessagePort_PostMessage_Result result) {
EXPECT_TRUE(result.is_response());
......
......@@ -43,7 +43,8 @@ NamedMessagePortConnector::NamedMessagePortConnector(fuchsia::web::Frame* frame)
frame_->AddBeforeLoadJavaScript(
static_cast<uint64_t>(
CastPlatformBindingsId::NAMED_MESSAGE_PORT_CONNECTOR),
std::move(origins), cr_fuchsia::CloneBuffer(bindings_script_),
std::move(origins),
cr_fuchsia::CloneBuffer(bindings_script_, "cast-bindings-js"),
[](fuchsia::web::Frame_AddBeforeLoadJavaScript_Result result) {
CHECK(result.is_response()) << "Couldn't inject bindings.";
});
......@@ -81,7 +82,8 @@ void NamedMessagePortConnector::OnPageLoad() {
control_port_.Unbind();
fuchsia::web::WebMessage message;
message.set_data(cr_fuchsia::MemBufferFromString(kControlPortConnectMessage));
message.set_data(cr_fuchsia::MemBufferFromString(kControlPortConnectMessage,
"cast-connect-message"));
std::vector<fuchsia::web::OutgoingTransferable> outgoing_vector(1);
outgoing_vector[0].set_message_port(control_port_.NewRequest());
message.set_outgoing_transfer(std::move(outgoing_vector));
......
......@@ -97,7 +97,7 @@ IN_PROC_BROWSER_TEST_F(NamedMessagePortConnectorTest, EndToEnd) {
fuchsia::web::MessagePortPtr message_port = message_port_receiver->Bind();
fuchsia::web::WebMessage msg;
msg.set_data(cr_fuchsia::MemBufferFromString("ping"));
msg.set_data(cr_fuchsia::MemBufferFromString("ping", "test"));
cr_fuchsia::ResultReceiver<fuchsia::web::MessagePort_PostMessage_Result>
post_result;
message_port->PostMessage(
......@@ -175,7 +175,7 @@ IN_PROC_BROWSER_TEST_F(NamedMessagePortConnectorTest, MultiplePorts) {
for (fuchsia::web::MessagePortPtr* port : {&port_1, &port_2}) {
fuchsia::web::WebMessage msg;
msg.set_data(cr_fuchsia::MemBufferFromString("ping"));
msg.set_data(cr_fuchsia::MemBufferFromString("ping", "test"));
cr_fuchsia::ResultReceiver<fuchsia::web::MessagePort_PostMessage_Result>
post_result;
(*port)->PostMessage(std::move(msg), cr_fuchsia::CallbackToFitFunction(
......
......@@ -178,7 +178,8 @@ IN_PROC_BROWSER_TEST_F(StubBindingsTest, ApiCoverage) {
{"*"},
cr_fuchsia::MemBufferFromString(
base::StringPrintf("try { cast.__platform__.%s(); } catch {}",
expectation.function_name.c_str())),
expectation.function_name.c_str()),
"test"),
[](fuchsia::web::Frame_ExecuteJavaScriptNoResult_Result result) {
ASSERT_TRUE(result.is_response());
});
......@@ -194,7 +195,7 @@ IN_PROC_BROWSER_TEST_F(StubBindingsTest, FunctionArgumentsInLogMessage) {
frame_->ExecuteJavaScriptNoResult(
{"*"},
cr_fuchsia::MemBufferFromString(
"cast.__platform__.sendAssistantRequest(1,2,'foo');"),
"cast.__platform__.sendAssistantRequest(1,2,'foo');", "test"),
[](fuchsia::web::Frame_ExecuteJavaScriptNoResult_Result result) {
ASSERT_TRUE(result.is_response());
});
......
......@@ -140,7 +140,8 @@ void TouchInputBindings::OnControlMessageReceived(
std::string response_json;
CHECK(base::JSONWriter::Write(response, &response_json));
fuchsia::web::WebMessage response_message = {};
response_message.set_data(cr_fuchsia::MemBufferFromString(response_json));
response_message.set_data(cr_fuchsia::MemBufferFromString(
response_json, "cast-touch-message-response"));
port_->PostMessage(std::move(response_message),
[](fuchsia::web::MessagePort_PostMessage_Result result) {
LOG_IF(ERROR, result.is_err())
......
......@@ -61,11 +61,16 @@ zx::vmo CreateContiguousVmo(size_t size, const zx::handle& bti_handle) {
zx::vmo CreateVmo(size_t size) {
zx::vmo vmo;
zx_status_t status = zx::vmo::create(size, 0, &vmo);
if (status != ZX_OK) {
ZX_DLOG(ERROR, status) << "zx_vmo_create";
return zx::vmo();
}
static const char kVmoName[] = "cr-codec-output";
status = vmo.set_property(ZX_PROP_NAME, kVmoName, strlen(kVmoName));
ZX_DCHECK(status == ZX_OK, status);
return vmo;
}
......
......@@ -41,7 +41,9 @@ fuchsia::media::drm::LicenseServerMessage CreateLicenseServerMessage(
const std::vector<uint8_t>& response) {
fuchsia::media::drm::LicenseServerMessage message;
message.message = cr_fuchsia::MemBufferFromString(
std::string(response.begin(), response.end()));
base::StringPiece(reinterpret_cast<const char*>(response.data()),
response.size()),
"cr-drm-license-server-message");
return message;
}
......
......@@ -171,7 +171,9 @@ void FuchsiaCdmManager::OriginProvisioner::OnProvisioningResponse(
}
fuchsia::media::drm::ProvisioningResponse provision_response;
provision_response.message = cr_fuchsia::MemBufferFromString(response);
provision_response.message =
cr_fuchsia::MemBufferFromString(response, "cr-drm-provision-response");
provisioner_->ProcessProvisioningResponse(
std::move(provision_response),
fit::bind_member(this, &OriginProvisioner::OnProvisioningResponseResult));
......
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