Chrome Release Bot (LUCI) 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
..
resources 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
DIR_METADATA 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
README.md 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
add-fencedframe-to-detached-iframe.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
ancestor-throttle.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
attribution-reporting-allow-all.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
attribution-reporting-allow-all.https.html.headers 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
attribution-reporting-allow-none.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
attribution-reporting-allow-none.https.html.headers 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
attribution-reporting-allow-self.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
attribution-reporting-allow-self.https.html.headers 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
attribution-reporting-unset.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
attribution-reporting-unset.https.html.headers 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
autofocus-denied.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
autoplay.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
background-fetch.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
background-sync.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
badging.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
battery_status.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
before-unload.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
can-load-api.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
client-hints-meta.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
client-hints.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
client-hints.https.html.headers 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
compute-pressure.https.window.js 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
consume-user-activation.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
content-index.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
coop-bcg-swap.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
create-credential.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
create-in-sandbox-and-adopt-outside-sandbox.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
csp-fenced-frame-src-allowed.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
csp-fenced-frame-src-blocked.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
csp-frame-src-allowed.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
csp-frame-src-blocked.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
csp-transparent-url-opaque-ads.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
csp-urn.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
csp.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
cspee.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
disallowed-navigations.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
document-referrer.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
download.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
embedder-coop-coep-blocked.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
embedder-coop-coep-blocked.https.html.headers 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
embedder-csp-not-propagate.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
embedder-no-coep.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
embedder-require-corp.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
embedder-require-corp.https.html.headers 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
fedcm-get-credential.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
fence-api.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
fence-report-event.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
fragment-navigation.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
frame-navigation.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
gamepad.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
get-mode-in-nested-frame.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
header-referrer.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
header-secFetchDest.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
hid.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
history-back-and-forward-should-not-work-in-fenced-tree.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
history-length-fenced-navigations-replace-do-not-contribute-to-joint.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
history-length-outer-page-navigation-not-reflected-in-fenced.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
ignore-child-fenced-frame-onload-event.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
input-on-coop-fenced-frame.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
input-on-coop-fenced-frame.https.html.headers 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
insecure-context.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
intersection-observer.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
invalid-url.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
key-scrolling.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
key-value-store.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
location-ancestorOrigins.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
maxframes.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
mediaDevices-setCaptureHandle.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
navigate-ancestor-by-name.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
navigate-ancestor-nested-fenced-frame.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
navigate-ancestor-nested-iframe.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
navigate-ancestor-top-level-fenced-frame.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
navigate-by-name-succeed.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
navigate-descendant-by-name.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
navigate-related-page-by-name.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
navigator-keyboard-layout-map.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
navigator-keyboard-lock.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
navigator-subapp.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
navigator-vibrate.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
navigator-virtualkeyboard.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
nested-opaque-ad-sizes.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
notification.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
opaque-ad-sizes.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
payment-handler.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
payment-request.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
permission-geolocation.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
permission-notification.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
picture-in-picture.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
popup-noopener.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
prerender.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
presentation-receiver.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
ready-state-change-crash.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
reinsert.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
resize-lock-input.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
resize-lock-zoom.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
resize-lock.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
sandbox-mandatory-flags.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
sandboxed-features-alert.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
sandboxed-features-confirm.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
sandboxed-features-documentdomain.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
sandboxed-features-pointerlock.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
sandboxed-features-presentation-request.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
sandboxed-features-printdialog.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
sandboxed-features-prompt.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
sandboxed-features-screen-orientation-lock.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
script-focus.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
self-urn-navigation.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
serviceWorker-dedicated-worker.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
serviceWorker-frameType.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
serviceWorker-push.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
show-directory-picker.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
show-open-file-picker.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
storage-partitioning.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
subframe-loading.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
tab-focus-last-element.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
tab-focus.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
unfenced-top.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
unique-cookie-partition.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
urn.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
user-activation.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
visual-viewport.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
web-bluetooth.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
web-nfc.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
web-share.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
web-usb.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
window-close.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
window-frameElement.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
window-navigation-204.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
window-outer-dimensions.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
window-parent.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година
window-top.https.html 4762b62e7d Publish DEPS for 106.0.5249.13 пре 1 година

README.md

Fenced Frames

This directory contains Web Platform Tests for the Fenced Frames feature.

These tests are generally intended to be upstreamed to the Web Platform Tests repository (i.e., moved from wpt_internal/fenced_frame/ to external/wpt/). There are a few reasons why we’re holding off doing that right now, see Fenced Frames Testing Plan > Web Platform Tests.

In general, these tests should follow Chromium’s web tests guidelines and web-platform-tests guidelines. This document describes how to use the specific fenced frame testing infrastructure.

How to write tests

The <fencedframe> element has a strict requirement that it cannot directly communicate with or reach its embedder document. The fenced frame does have network access however, so we can use a server as a middleman to communicate with the outer page. There are two main test patterns we use: remote execution (recommended) and message passing (deprecated).

Remote execution

Remote execution uses the helper attachFencedFrameContext() defined in resources/utils.js, which requires /common/dispatcher/dispatcher.js and /common/utils.js. This returns a fenced frame that is wrapped with additional functionality from RemoteContext, which allows you to perform a remote procedure call into the frame using the function execute(function, [arguments]=[]).

This interface allows us to write an entire test in only one file, with minimal boilerplate and an obvious control flow between all the frames on the page (including nested fenced frames, which can be achieved with nested execute calls).

Let’s see an example of communication between the top-level frame and the fenced frame.

promise_test(async () => {
  const important_value = "Hello";

  // First, create an empty fenced frame.
  const frame = attachFencedFrameContext();

  // Next, make a function call into the frame, passing a particular string
  // "Hello" as an argument. Make sure to `await` the call.
  const response = await frame.execute((message_from_embedder) => {

    // This code runs inside the fenced frame.
    if (message_from_embedder == "Hello") {
      // Message that we received was expected.
      return "Hello to you too");
    } else {
      // Message that we received was *not* expected, let's report an error to
      // the outer page so it fails the test.
      return "Unexpected message";
    }

  }, [important_value]);

  // Assert that the returned value was what we expected.
  // Keep in mind that in a less contrived example, you can perform this assert
  // inside the fenced frame.
  assert_equals(response, "Hello to you too",
      "The fenced frame received the message, and said hello back to us".)
}, "Fenced frame and receive and send a greeting");

For test examples, see document-referrer.https.html, hid.https.html, or web-usb.https.html.

Some tips to keep in mind while writing tests using remote execution:

  • The functions attachFencedFrameContext() and attachIFrameContext() optionally take a dictionary of configs as an argument. You can use it to pass:

    • HTML source code to inject into the frame’s DOM tree. For example:

      attachFencedFrameContext({html: '<button id="Button">Click me!</button>'};
      
    • Response headers. For example:

      attachFencedFrameContext({headers: [["Content-Security-Policy", "frame-src 'self'"]]});
      
    • Attributes to set on the frame. For example:

      attachIFrameContext({attributes: [["csp", "frame-src 'self'"]]})
      
    • Origin of the url to allow cross-origin test. For example:

      attachIFrameContext({origin:get_host_info().HTTPS_REMOTE_ORIGIN})
      
  • There is also a helper attachIFrameContext(), which does the same thing but for iframes instead of fencedframes.

  • Make sure to await the result of an execute call, even if it doesn’t return anything.

  • In order to save a global variable, you need to explicitly assign to window.variable_name. Assigning to variable_name without declaring it will not persist across execute calls. This is especially important for tests with nested frames, if you want to keep a handle to the nested frame across multiple calls.

  • Remember to declare the function passed to execute as async if it itself needs to invoke any async functions, including to create nested frames.

Message passing (deprecated)

Message passing is done by using the helpers defined in resources/utils.js to send a message to the server, and poll the server for a response. All messages have a unique key associated with them so that documents that want to receive messages can poll the server for a given message that can be identified by a unique key.

Let’s see an example of sending a message to the server that a fenced frame will receive and respond to.

outer-page.js:

promise_test(async () => {
  const important_message_key = token();
  const fenced_frame_ack_key = token();
  const important_value = "Hello";

  // First, let's embed a new fenced frame in our test, and pass the key we
  // just created into it as a parameter.
  const frame_url = generateURL("resources/page-inner.html",
      [important_message_key, fenced_frame_ack_key]);
  attachFencedFrame(frame_url);

  // Then, let's send the message over to the fenced frame.
  writeValueToServer(important_message_key, important_value);

  // Now that the message has been sent to the fenced frame, let's wait for its
  // ACK, so that we don't exit the test before the fenced frame gets the
  // message.
  const response_from_fenced_frame = await
      nextValueFromServer(fenced_frame_ack_key);
  assert_equals(response_from_fenced_frame, "Hello to you too",
      "The fenced frame received the message, and said hello back to us");
}, "Fenced frame and receive and send a greeting");

inner-fenced-frame.js:

async function init() { // Needed in order to use top-level await.
  const [important_message_key, fenced_frame_ack_key] = parseKeylist();
  const greeting_from_embedder = await nextValueFromServer(important_message_key);

  if (greeting_from_embedder == "Hello") {
    // Message that we received was expected.
    writeValueToServer(fenced_frame_ack_key, "Hello to you too");
  } else {
    // Message that we received was *not* expected, let's report an error to the
    // outer page so it fails the test.
    writeValueToServer(fenced_frame_ack_key, "Unexpected message");
  }
}

init();

When you write a new web platform test, it will likely involve passing a new message like the messages above, to and from the fenced frame. Keep in mind that you may have to use a pair of keys, so that when one document writes a message associated with one unique key, it can listen for an ACK from the receiving document, so that it doesn’t write over the message again before the receiving document actually reads it. No two tests should ever use the same key to communicate information to and from a fenced frame, as this will cause server-side race conditions.

For a good test example, see window-parent.html.

Underlying implementations

This directory contains tests that exercise the blink::features::kFencedFrames feature. Specifically, they exercise the default implementation mode of fenced frames, which is blink::features::FencedFramesImplementationType::kShadowDOM.

The test are also run exercising the MPArch implementation path (blink::features::FencedFramesImplementationType::kMPArch) via the virtual test suite (see the VirtualTestSuites file).

Wrap lines at 80 columns

This is the convention for most Chromium/WPT style tests. Note that git cl format [--js] does not reformat js code in .html files.