<!-- Generated by //third_party/blink/web_tests/bluetooth/generate.py -->
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/bluetooth/resources/bluetooth-test.js"></script>
<script src="/bluetooth/resources/bluetooth-fake-devices.js"></script>
<script>
'use strict';
bluetooth_test(() => {
  return setBluetoothFakeAdapter('DisconnectingDuringServiceRetrievalAdapter')
    .then(() => requestDeviceWithTrustedClick({
      filters: [{services: ['heart_rate']}]}
    ))
    .then(device => device.gatt.connect())
    .then(gatt => {
      let disconnected = eventPromise(gatt.device, 'gattserverdisconnected');
      let promise = assert_promise_rejects_with_message(
        gatt.getPrimaryServices(),
        new DOMException('GATT Server is disconnected. ' +
                         'Cannot retrieve services. ' +
                         '(Re)connect first with `device.gatt.connect`.',
                         'NetworkError'));
      return disconnected.then(() => gatt.connect()).then(() => promise);
    });
}, 'Device disconnects and we reconnect during a getPrimaryServices call that ' +
   'succeeds. Reject with NetworkError.');

</script>
