Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(427)

Unified Diff: ios/web/webui/mojo_facade.mm

Issue 2946383002: Support new-style Mojo JS core API on IOS. (Closed)
Patch Set: . Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/web/webui/mojo_facade.h ('k') | ios/web/webui/mojo_facade_unittest.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/web/webui/mojo_facade.mm
diff --git a/ios/web/webui/mojo_facade.mm b/ios/web/webui/mojo_facade.mm
index 32b6433537875f42fed73ced1ad286de6df0b230..0cb7b4ae100200c9b8b385905eb32d0c3addf85f 100644
--- a/ios/web/webui/mojo_facade.mm
+++ b/ios/web/webui/mojo_facade.mm
@@ -34,8 +34,7 @@ namespace {
// Wraps an integer into |base::Value| as |Type::INTEGER|.
template <typename IntegerT>
std::unique_ptr<base::Value> ValueFromInteger(IntegerT handle) {
- return std::unique_ptr<base::Value>(
- new base::Value(static_cast<int>(handle)));
+ return base::MakeUnique<base::Value>(static_cast<int>(handle));
}
} // namespace
@@ -62,20 +61,20 @@ std::string MojoFacade::HandleMojoMessage(
GetMessageNameAndArguments(mojo_message_as_json, &name, &args);
std::unique_ptr<base::Value> result;
- if (name == "interface_provider.getInterface") {
- result = HandleInterfaceProviderGetInterface(args.get());
- } else if (name == "core.close") {
- result = HandleCoreClose(args.get());
- } else if (name == "core.createMessagePipe") {
- result = HandleCoreCreateMessagePipe(args.get());
- } else if (name == "core.writeMessage") {
- result = HandleCoreWriteMessage(args.get());
- } else if (name == "core.readMessage") {
- result = HandleCoreReadMessage(args.get());
- } else if (name == "support.watch") {
- result = HandleSupportWatch(args.get());
- } else if (name == "support.cancelWatch") {
- result = HandleSupportCancelWatch(args.get());
+ if (name == "Mojo.bindInterface") {
+ result = HandleMojoBindInterface(args.get());
+ } else if (name == "MojoHandle.close") {
+ result = HandleMojoHandleClose(args.get());
+ } else if (name == "Mojo.createMessagePipe") {
+ result = HandleMojoCreateMessagePipe(args.get());
+ } else if (name == "MojoHandle.writeMessage") {
+ result = HandleMojoHandleWriteMessage(args.get());
+ } else if (name == "MojoHandle.readMessage") {
+ result = HandleMojoHandleReadMessage(args.get());
+ } else if (name == "MojoHandle.watch") {
+ result = HandleMojoHandleWatch(args.get());
+ } else if (name == "MojoWatcher.cancel") {
+ result = HandleMojoWatcherCancel(args.get());
}
if (!result) {
@@ -110,55 +109,49 @@ void MojoFacade::GetMessageNameAndArguments(
*out_args = args->CreateDeepCopy();
}
-std::unique_ptr<base::Value> MojoFacade::HandleInterfaceProviderGetInterface(
+std::unique_ptr<base::Value> MojoFacade::HandleMojoBindInterface(
const base::DictionaryValue* args) {
const base::Value* interface_name_as_value = nullptr;
CHECK(args->Get("interfaceName", &interface_name_as_value));
+ int raw_handle = 0;
+ CHECK(args->GetInteger("requestHandle", &raw_handle));
+
+ mojo::ScopedMessagePipeHandle handle(
+ static_cast<mojo::MessagePipeHandle>(raw_handle));
// By design interface_provider.getInterface either succeeds or crashes, so
// check if interface name is a valid string is intentionally omitted.
std::string interface_name_as_string;
interface_name_as_value->GetAsString(&interface_name_as_string);
- mojo::MessagePipe pipe;
interface_provider_->GetInterface(interface_name_as_string,
- std::move(pipe.handle0));
-
- return ValueFromInteger(pipe.handle1.release().value());
+ std::move(handle));
+ return nullptr;
}
-std::unique_ptr<base::Value> MojoFacade::HandleCoreClose(
+std::unique_ptr<base::Value> MojoFacade::HandleMojoHandleClose(
const base::DictionaryValue* args) {
int handle = 0;
CHECK(args->GetInteger("handle", &handle));
mojo::Handle(handle).Close();
-
- return ValueFromInteger(MOJO_RESULT_OK);
+ return nullptr;
}
-std::unique_ptr<base::Value> MojoFacade::HandleCoreCreateMessagePipe(
+std::unique_ptr<base::Value> MojoFacade::HandleMojoCreateMessagePipe(
base::DictionaryValue* args) {
- const base::Value* options_as_value = nullptr;
- CHECK(args->Get("optionsDict", &options_as_value));
-
- if (options_as_value->IsType(base::Value::Type::DICTIONARY)) {
- // There are no options defined for CreateMessagePipe yet.
- const base::DictionaryValue* options_as_dict;
- options_as_value->GetAsDictionary(&options_as_dict);
- CHECK(options_as_dict->empty());
+ mojo::ScopedMessagePipeHandle handle0, handle1;
+ MojoResult mojo_result = mojo::CreateMessagePipe(nullptr, &handle0, &handle1);
+ auto result = base::MakeUnique<base::DictionaryValue>();
+ result->SetInteger("result", mojo_result);
+ if (mojo_result == MOJO_RESULT_OK) {
+ result->SetInteger("handle0", handle0.release().value());
+ result->SetInteger("handle1", handle1.release().value());
}
-
- CHECK(options_as_value->IsType(base::Value::Type::NONE));
-
- mojo::MessagePipe message_pipe;
- std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue);
- result->SetInteger("handle0", message_pipe.handle0.release().value());
- result->SetInteger("handle1", message_pipe.handle1.release().value());
return std::unique_ptr<base::Value>(result.release());
}
-std::unique_ptr<base::Value> MojoFacade::HandleCoreWriteMessage(
+std::unique_ptr<base::Value> MojoFacade::HandleMojoHandleWriteMessage(
base::DictionaryValue* args) {
int handle = 0;
CHECK(args->GetInteger("handle", &handle));
@@ -169,13 +162,7 @@ std::unique_ptr<base::Value> MojoFacade::HandleCoreWriteMessage(
base::DictionaryValue* buffer = nullptr;
CHECK(args->GetDictionary("buffer", &buffer));
- const base::Value* flags_as_value = nullptr;
- CHECK(args->Get("flags", &flags_as_value));
-
int flags = MOJO_WRITE_MESSAGE_FLAG_NONE;
- if (!flags_as_value->GetAsInteger(&flags)) {
- flags = MOJO_WRITE_MESSAGE_FLAG_NONE;
- }
std::vector<MojoHandle> handles(handles_list->GetSize());
for (size_t i = 0; i < handles_list->GetSize(); i++) {
@@ -199,7 +186,7 @@ std::unique_ptr<base::Value> MojoFacade::HandleCoreWriteMessage(
return ValueFromInteger(result);
}
-std::unique_ptr<base::Value> MojoFacade::HandleCoreReadMessage(
+std::unique_ptr<base::Value> MojoFacade::HandleMojoHandleReadMessage(
const base::DictionaryValue* args) {
const base::Value* handle_as_value = nullptr;
CHECK(args->Get("handle", &handle_as_value));
@@ -208,39 +195,33 @@ std::unique_ptr<base::Value> MojoFacade::HandleCoreReadMessage(
handle_as_int = 0;
}
- const base::Value* flags_as_value = nullptr;
- CHECK(args->Get("flags", &flags_as_value));
-
int flags = MOJO_READ_MESSAGE_FLAG_NONE;
- if (!flags_as_value->GetAsInteger(&flags)) {
- flags = MOJO_READ_MESSAGE_FLAG_NONE;
- }
std::vector<uint8_t> bytes;
std::vector<mojo::ScopedHandle> handles;
mojo::MessagePipeHandle handle(static_cast<MojoHandle>(handle_as_int));
MojoResult mojo_result =
mojo::ReadMessageRaw(handle, &bytes, &handles, flags);
- std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue);
+ auto result = base::MakeUnique<base::DictionaryValue>();
if (mojo_result == MOJO_RESULT_OK) {
- base::ListValue* handles_list = new base::ListValue;
+ auto handles_list = base::MakeUnique<base::ListValue>();
for (uint32_t i = 0; i < handles.size(); i++) {
handles_list->AppendInteger(handles[i].release().value());
}
- result->Set("handles", std::unique_ptr<base::Value>(handles_list));
+ result->Set("handles", std::move(handles_list));
- base::ListValue* buffer = new base::ListValue;
+ auto buffer = base::MakeUnique<base::ListValue>();
for (uint32_t i = 0; i < bytes.size(); i++) {
buffer->AppendInteger(bytes[i]);
}
- result->Set("buffer", std::unique_ptr<base::Value>(buffer));
+ result->Set("buffer", std::move(buffer));
}
result->SetInteger("result", mojo_result);
return std::unique_ptr<base::Value>(result.release());
}
-std::unique_ptr<base::Value> MojoFacade::HandleSupportWatch(
+std::unique_ptr<base::Value> MojoFacade::HandleMojoHandleWatch(
const base::DictionaryValue* args) {
int handle = 0;
CHECK(args->GetInteger("handle", &handle));
@@ -249,21 +230,22 @@ std::unique_ptr<base::Value> MojoFacade::HandleSupportWatch(
int callback_id;
CHECK(args->GetInteger("callbackId", &callback_id));
- mojo::SimpleWatcher::ReadyCallback callback = base::BindBlockArc(^(
- MojoResult result) {
- NSString* script =
- [NSString stringWithFormat:@"__crWeb.mojo.signalWatch(%d, %d)",
- callback_id, result];
- [script_evaluator_ executeJavaScript:script completionHandler:nil];
- });
- mojo::SimpleWatcher* watcher = new mojo::SimpleWatcher(
+ mojo::SimpleWatcher::ReadyCallback callback =
+ base::BindBlockArc(^(MojoResult result) {
+ NSString* script = [NSString
+ stringWithFormat:
+ @"Mojo.internal.watchCallbacksHolder.callCallback(%d, %d)",
+ callback_id, result];
+ [script_evaluator_ executeJavaScript:script completionHandler:nil];
+ });
+ auto watcher = base::MakeUnique<mojo::SimpleWatcher>(
FROM_HERE, mojo::SimpleWatcher::ArmingPolicy::AUTOMATIC);
- watchers_.insert(std::make_pair(++last_watch_id_, base::WrapUnique(watcher)));
watcher->Watch(static_cast<mojo::Handle>(handle), signals, callback);
+ watchers_.insert(std::make_pair(++last_watch_id_, std::move(watcher)));
return ValueFromInteger(last_watch_id_);
}
-std::unique_ptr<base::Value> MojoFacade::HandleSupportCancelWatch(
+std::unique_ptr<base::Value> MojoFacade::HandleMojoWatcherCancel(
const base::DictionaryValue* args) {
int watch_id = 0;
CHECK(args->GetInteger("watchId", &watch_id));
« no previous file with comments | « ios/web/webui/mojo_facade.h ('k') | ios/web/webui/mojo_facade_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698