<!DOCTYPE html>
<script>
  'use strict'

  // Sends two messages to its creator:
  // (1) The result of showDirectoryPicker().
  // (2) The result of navigator.storage.getDirectory().

  function post_message(data) {
    if (window.parent !== null) {
      window.parent.postMessage(data, { targetOrigin: '*' });
    }
    if (window.opener !== null) {
      window.opener.postMessage(data, { targetOrigin: '*' });
    }
  }

  try {
    window.showDirectoryPicker()
      .then(() => {
        post_message('showDirectoryPicker(): FULFILLED');
      }).catch(error => {
        post_message(`showDirectoryPicker(): REJECTED: ${error.name}`);
      });
  } catch (error) {
    post_message(`showDirectoryPicker(): EXCEPTION: ${error.name}`);
  }

  try {
    navigator.storage.getDirectory()
      .then(() => {
        post_message('navigator.storage.getDirectory(): FULFILLED');
      }).catch(error => {
        post_message(`navigator.storage.getDirectory(): REJECTED: ${error.name}`);
      });
  } catch (error) {
    post_message(`navigator.storage.getDirectory(): EXCEPTION: ${error.name}`);
  }
</script>
