• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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