Chromium Code Reviews| 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)); |