// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// https://webbluetoothchrome.github.io/web-bluetooth/#idl-def-bluetoothgattcharacteristic

// Implement BluetoothGATTCharacteristic interface: https://crbug.com/483344

[
    GarbageCollected,
    ActiveDOMObject,
    RuntimeEnabled=WebBluetooth,
] interface BluetoothGATTCharacteristic : EventTarget {//: CharacteristicEventHandlers {
    // TODO(ortuno): Add test to make sure service matches the service
    // used to call getCharacteristic.
    // readonly    attribute BluetoothGATTService     service;
    readonly    attribute UUID                   uuid;
    readonly    attribute BluetoothCharacteristicProperties properties;
    readonly    attribute ArrayBuffer?             value;
    // Promise<BluetoothGATTDescriptor>           getDescriptor(BluetoothDescriptorUUID descriptor);
    // Promise<sequence<BluetoothGATTDescriptor>> getDescriptors(optional BluetoothDescriptorUUID descriptor);
    [CallWith=ScriptState] Promise<ArrayBuffer> readValue();
    [CallWith=ScriptState] Promise<void>        writeValue(BufferSource value);
    [CallWith=ScriptState] Promise<void>        startNotifications();
    [CallWith=ScriptState] Promise<void>        stopNotifications();

    // TODO(ortuno): Move this to CharacteristicEventHandlers.
    // http://crbug.com/537459
    attribute EventHandler oncharacteristicvaluechanged;
};
