1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <string>
6
7 #include "flutter/lib/ui/isolate_name_server/isolate_name_server.h"
8 #include "flutter/lib/ui/isolate_name_server/isolate_name_server_natives.h"
9 #include "flutter/lib/ui/ui_dart_state.h"
10
11 namespace flutter {
12
LookupPortByName(const std::string & name)13 Dart_Handle IsolateNameServerNatives::LookupPortByName(
14 const std::string& name) {
15 auto name_server = UIDartState::Current()->GetIsolateNameServer();
16 if (!name_server) {
17 return Dart_Null();
18 }
19 Dart_Port port = name_server->LookupIsolatePortByName(name);
20 if (port == ILLEGAL_PORT) {
21 return Dart_Null();
22 }
23 return Dart_NewSendPort(port);
24 }
25
RegisterPortWithName(Dart_Handle port_handle,const std::string & name)26 Dart_Handle IsolateNameServerNatives::RegisterPortWithName(
27 Dart_Handle port_handle,
28 const std::string& name) {
29 auto name_server = UIDartState::Current()->GetIsolateNameServer();
30 if (!name_server) {
31 return Dart_False();
32 }
33 Dart_Port port = ILLEGAL_PORT;
34 Dart_SendPortGetId(port_handle, &port);
35 if (!name_server->RegisterIsolatePortWithName(port, name)) {
36 return Dart_False();
37 }
38 return Dart_True();
39 }
40
RemovePortNameMapping(const std::string & name)41 Dart_Handle IsolateNameServerNatives::RemovePortNameMapping(
42 const std::string& name) {
43 auto name_server = UIDartState::Current()->GetIsolateNameServer();
44 if (!name_server) {
45 return Dart_False();
46 }
47 if (!name_server->RemoveIsolateNameMapping(name)) {
48 return Dart_False();
49 }
50 return Dart_True();
51 }
52
53 #define FOR_EACH_BINDING(V) \
54 V(IsolateNameServerNatives, LookupPortByName) \
55 V(IsolateNameServerNatives, RegisterPortWithName) \
56 V(IsolateNameServerNatives, RemovePortNameMapping)
57
FOR_EACH_BINDING(DART_NATIVE_CALLBACK_STATIC)58 FOR_EACH_BINDING(DART_NATIVE_CALLBACK_STATIC)
59
60 #define DART_REGISTER_NATIVE_STATIC_(CLASS, METHOD) \
61 DART_REGISTER_NATIVE_STATIC(CLASS, METHOD),
62
63 void IsolateNameServerNatives::RegisterNatives(
64 tonic::DartLibraryNatives* natives) {
65 natives->Register({FOR_EACH_BINDING(DART_REGISTER_NATIVE_STATIC_)});
66 }
67
68 } // namespace flutter
69