<!DOCTYPE html>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../../resources/bluetooth/bluetooth-helpers.js"></script>
<script>
'use strict';
promise_test(
    () => {
      let val = new Uint8Array([1]);
        return setBluetoothFakeAdapter('DisconnectingHealthThermometerAdapter')
            .then(
                () => requestDeviceWithKeyDown(
                    {filters: [{services: ['health_thermometer']}]}))
            .then(device => device.gatt.connect())
            .then(
                gattServer =>
                    gattServer.getPrimaryService('health_thermometer'))
            .then(service => service.getCharacteristic('measurement_interval'))
            .then(
                characteristic => characteristic.getDescriptor(0x2902))
            .then(descriptor => {
              return assert_promise_rejects_with_message(
                  descriptor.writeValue(val),
                  new DOMException(
                      'writeValue() called on blocklisted object marked exclude-writes. ' +
                          'https://goo.gl/4NeimX',
                      'SecurityError'));
            })},
    'Attempt to call writeValue on a blocked descriptor must generate a SecurityError');

</script>
