<!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>

<iframe
  id="testIframe"
  sandbox="allow-scripts allow-same-origin"
  style="display:none"
  src="resources/iframe-listen-orientation-change.html"
>
</iframe>

<script>
  promise_test(async t => {
    t.add_cleanup(async () => {
      try {
      await document.exitFullscreen();
      } catch (e) {}
      screen.orientation.unlock();
    });
    await test_driver.bless("request fullscreen", () => {
      return document.documentElement.requestFullscreen();
    });
    let orientations = [
      "portrait-primary",
      "portrait-secondary",
      "landscape-primary",
      "landscape-secondary",
    ];
    if (screen.orientation.type.includes("portrait")) {
      orientations = orientations.reverse();
    }
    const messageWatcher = new EventWatcher(t, window, "message");

    for (const orientation of orientations) {
      await screen.orientation.lock(orientation);
      const message = await messageWatcher.wait_for("message");
      assert_equals(
        message.data,
        orientation,
        "subframe receives orientation change event"
      );
    }
  }, "Test subframes receive orientation change events");
</script>
