<!DOCTYPE html>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src="/common/get-host-info.sub.js"></script>

<body>

<script>
'use strict';

const host = get_host_info();
const remoteBaseURL = host.HTTPS_REMOTE_ORIGIN + window.location.pathname.replace(/\/[^\/]*$/, '/') ;
const localBaseURL = host.HTTPS_ORIGIN + window.location.pathname.replace(/\/[^\/]*$/, '/') ;

promise_test(async t => {
  const messageWatcher = new EventWatcher(t, window, "message");
  var iframe = document.createElement("iframe");
  iframe.src = localBaseURL + "resources/iframe.html";

  document.body.appendChild(iframe);

  const message = await messageWatcher.wait_for("message");
  assert_equals(message.data.result, "Pass");
  assert_equals(message.data.sms, "hello");

}, "Test SMSReceiver API enabled in same origin iframes");

promise_test(async t => {
  const messageWatcher = new EventWatcher(t, window, "message");
  var iframe = document.createElement("iframe");
  iframe.src = remoteBaseURL + "resources/iframe.html"
  document.body.appendChild(iframe);

  const message = await messageWatcher.wait_for("message");
  assert_equals(message.data.result, "Fail");
  assert_equals(message.data.errorType, "NotAllowedError");

}, "Test SMSReceiver API disabled in cross origin iframes");

</script>
</body>
