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

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
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..63ce3d9e9ea16b9512e319ae68e3637fdbc1786d 100644
--- a/ios/web/webui/mojo_facade.mm
+++ b/ios/web/webui/mojo_facade.mm
@@ -62,20 +62,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 +110,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());
- }
-
- CHECK(options_as_value->IsType(base::Value::Type::NONE));
-
- mojo::MessagePipe message_pipe;
+ mojo::ScopedMessagePipeHandle handle0, handle1;
+ MojoResult mojo_result = mojo::CreateMessagePipe(nullptr, &handle0, &handle1);
std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue);
Eugene But (OOO till 7-30) 2017/06/24 01:09:51 nit: s/new base::DictionaryValue/base::MakeUnique<
yzshen1 2017/06/26 20:09:59 Done.
yzshen1 2017/06/26 20:09:59 Done.
- result->SetInteger("handle0", message_pipe.handle0.release().value());
- result->SetInteger("handle1", message_pipe.handle1.release().value());
+ result->SetInteger("result", mojo_result);
+ if (mojo_result == MOJO_RESULT_OK) {
+ result->SetInteger("handle0", handle0.release().value());
+ result->SetInteger("handle1", 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 +163,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 +187,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,13 +196,7 @@ 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;
@@ -240,7 +222,7 @@ std::unique_ptr<base::Value> MojoFacade::HandleCoreReadMessage(
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,13 +231,14 @@ 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::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];
+ });
mojo::SimpleWatcher* watcher = new mojo::SimpleWatcher(
FROM_HERE, mojo::SimpleWatcher::ArmingPolicy::AUTOMATIC);
watchers_.insert(std::make_pair(++last_watch_id_, base::WrapUnique(watcher)));
@@ -263,7 +246,7 @@ std::unique_ptr<base::Value> MojoFacade::HandleSupportWatch(
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));

Powered by Google App Engine
This is Rietveld 408576698