blob: 752595545cb3961b5690da300863f5fe3b69b030 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_SHELL_PLATFORM_FUCHSIA_DART_PKG_ZIRCON_SDK_EXT_HANDLE_DISPOSITION_H_
#define FLUTTER_SHELL_PLATFORM_FUCHSIA_DART_PKG_ZIRCON_SDK_EXT_HANDLE_DISPOSITION_H_
#include <zircon/syscalls.h>
#include <vector>
#include "flutter/fml/memory/ref_counted.h"
#include "handle.h"
#include "third_party/dart/runtime/include/dart_api.h"
#include "third_party/tonic/dart_library_natives.h"
#include "third_party/tonic/dart_wrappable.h"
namespace zircon {
namespace dart {
/**
* HandleDisposition is the native peer of a Dart object (HandleDisposition
* in dart:zircon) that holds a Handle and additional properties.
*/
class HandleDisposition : public fml::RefCountedThreadSafe<HandleDisposition>,
public tonic::DartWrappable {
DEFINE_WRAPPERTYPEINFO();
FML_FRIEND_REF_COUNTED_THREAD_SAFE(HandleDisposition);
FML_FRIEND_MAKE_REF_COUNTED(HandleDisposition);
public:
static void RegisterNatives(tonic::DartLibraryNatives* natives);
static fml::RefPtr<HandleDisposition> create(zx_handle_op_t operation,
fml::RefPtr<dart::Handle> handle,
zx_obj_type_t type,
zx_rights_t rights);
zx_handle_op_t operation() const { return operation_; }
fml::RefPtr<dart::Handle> handle() const { return handle_; }
zx_obj_type_t type() const { return type_; }
zx_rights_t rights() const { return rights_; }
zx_status_t result() const { return result_; }
void set_result(zx_status_t result) { result_ = result; }
private:
explicit HandleDisposition(zx_handle_op_t operation,
fml::RefPtr<dart::Handle> handle,
zx_obj_type_t type,
zx_rights_t rights,
zx_status_t result)
: operation_(operation),
handle_(handle),
type_(type),
rights_(rights),
result_(result) {}
void RetainDartWrappableReference() const override { AddRef(); }
void ReleaseDartWrappableReference() const override { Release(); }
const zx_handle_op_t operation_;
const fml::RefPtr<dart::Handle> handle_;
const zx_obj_type_t type_;
const zx_rights_t rights_;
zx_status_t result_;
};
} // namespace dart
} // namespace zircon
#endif // FLUTTER_SHELL_PLATFORM_FUCHSIA_DART_PKG_ZIRCON_SDK_EXT_HANDLE_DISPOSITION_H_