<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script src="resources/utils.js"></script>
<title>Test changing a fenced frame's src attribute when there has been a config
with url installed already does not trigger navigation.</title>

<body>

<script>
function getTimeoutPromise(t) {
  return new Promise(resolve =>
    t.step_timeout(() => resolve("NOT LOADED"), 2000));
}

promise_test(async (t) => {
  const fenced_frame_loaded_key = token();

  const url = generateURL(
    'resources/fenced-frame-loaded.html', [fenced_frame_loaded_key]);
  const url_string = url.toString();

  // Create a fenced frame and install an inner config constructed with an url.
  const fenced_frame = document.createElement('fencedframe');
  const config = new FencedFrameConfig(url_string);
  fenced_frame.config = config;
  document.body.append(fenced_frame);

  // Installing a config to the fenced frame triggers navigation.
  const load_expected = "fenced frame loaded";
  const load_actual = await nextValueFromServer(fenced_frame_loaded_key);
  assert_equals(load_actual, load_expected,
    "Fenced frame successfully loaded.");

  const src_key = token();
  const src_url = generateURL(
    'resources/fenced-frame-loaded.html', [src_key]);

  // Changing the src attribute, should not trigger navigation.
  fenced_frame.src = src_url;
  const src_loaded_promise = nextValueFromServer(src_key);
  const src_loaded_result = await Promise.any([src_loaded_promise,
    getTimeoutPromise(t)]);
  assert_equals(src_loaded_result, "NOT LOADED");

}, 'Changing the src attribute of a fenced frame when a config with url',
  'has already been installed does not trigger navigation.');
</script>

</body>
