<!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';
bluetooth_test(() => {
  let stop_promise;
  return setBluetoothFakeAdapter('HeartRateAdapter')
    .then(() => requestDeviceWithKeyDown({
      filters: [{services: ['heart_rate']}]}))
    .then(device => device.gatt.connect())
    .then(gattServer => gattServer.getPrimaryService('heart_rate'))
    .then(service => service.getCharacteristic('heart_rate_measurement'))
    .then(characteristic => {
      return characteristic.startNotifications().then(() => {
        stop_promise = characteristic.stopNotifications();
        // We intentionally don't return the promise so that 'characteristic'
        // goes out of scope while the request is still pending.
      });
    })
    .then(() => runGarbageCollection())
    .then(() => stop_promise);
  // TODO(ortuno): Assert that notifications are not active.
  // http://crbug.com/600762
}, 'Object gets garbage collected while stop request is pending. Make sure ' +
   'we don\'t crash while the request is pending.');
</script>
