1// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
5#ifndef RUNTIME_VM_NATIVE_MESSAGE_HANDLER_H_
6#define RUNTIME_VM_NATIVE_MESSAGE_HANDLER_H_
7
8#include "include/dart_api.h"
9#include "include/dart_native_api.h"
10#include "vm/message_handler.h"
11
12namespace dart {
13
14// A NativeMessageHandler accepts messages and dispatches them to
15// native C handlers.
16class NativeMessageHandler : public MessageHandler {
17 public:
18 NativeMessageHandler(const char* name, Dart_NativeMessageHandler func);
19 ~NativeMessageHandler();
20
21 const char* name() const { return name_; }
22 Dart_NativeMessageHandler func() const { return func_; }
23
24 MessageStatus HandleMessage(std::unique_ptr<Message> message);
25
26#if defined(DEBUG)
27 // Check that it is safe to access this handler.
28 void CheckAccess();
29#endif
30
31 // Delete this handlers when its last live port is closed.
32 virtual bool OwnedByPortMap() const { return true; }
33
34 private:
35 char* name_;
36 Dart_NativeMessageHandler func_;
37};
38
39} // namespace dart
40
41#endif // RUNTIME_VM_NATIVE_MESSAGE_HANDLER_H_
42