Commit 854fd2b0 authored by Mike Wasserman's avatar Mike Wasserman Committed by aborovova@mozilla.com
Browse files

Bug 1966512 [wpt PR 52546] - Writing Assistance APIs: Move Writer and Rewriter WPTS to external,

Automatic update from web-platform-tests
Writing Assistance APIs: Move Writer and Rewriter WPTS to external

Align with tentative Summarizer WPTs, rename, update meta comments.
Move 'slow' tests into abort and main test files.

Bug: 415105858
Change-Id: I7deb4f94fd1daa0eca4e3c030f75bf8258140659
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6548338


Commit-Queue: Mike Wasserman <msw@chromium.org>
Reviewed-by: default avatarDaseul Lee <dslee@chromium.org>
Auto-Submit: Mike Wasserman <msw@chromium.org>
Commit-Queue: Daseul Lee <dslee@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1460333}

--

wpt-commits: ed4322108f787a20ff10eb3cec67a3d45adb9fa8
wpt-pr: 52546

Differential Revision: https://phabricator.services.mozilla.com/D250210
parent 720cc101
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -3,6 +3,7 @@ const kValidAvailabilities =
const kAvailableAvailabilities = ['downloadable', 'downloading', 'available'];
const kAvailableAvailabilities = ['downloadable', 'downloading', 'available'];


const kTestPrompt = 'Please write a sentence in English.';
const kTestPrompt = 'Please write a sentence in English.';
const kTestContext = 'This is a test; this is only a test.';


// Takes an array of dictionaries mapping keys to value arrays, e.g.:
// Takes an array of dictionaries mapping keys to value arrays, e.g.:
//   [ {Shape: ["Square", "Circle", undefined]}, {Count: [1, 2]} ]
//   [ {Shape: ["Square", "Circle", undefined]}, {Count: [1, 2]} ]
+18 −0
Original line number Original line Diff line number Diff line
<!DOCTYPE HTML>
<meta charset="utf-8">
<script>
window.onmessage = async message => {
  switch (message.data.type) {
    case 'RewriterCreate':
      Rewriter.create()
        .then(t => parent.postMessage('Success', '*'))
        .catch(err => parent.postMessage('Failure: ' + err.name, '*'));
      break;
    case 'RewriterAvailability':
        Rewriter.availability()
        .then(availability => parent.postMessage(availability, '*'))
        .catch(err => parent.postMessage('Failure: ' + err.name, '*'));
      break;
  };
};
</script>
+34 −0
Original line number Original line Diff line number Diff line
// META: title=Rewriter Abort
// META: script=../resources/util.js
// META: timeout=long

'use strict';

promise_test(async t => {
  await testAbortPromise(t, signal => {
    return Rewriter.create({ signal: signal });
  });
}, "Aborting Rewriter.create().");

promise_test(async t => {
  const rewriter = await Rewriter.create();
  await testAbortPromise(t, signal => {
    return rewriter.rewrite(kTestPrompt, { signal: signal });
  });
}, "Aborting Rewriter.rewrite().");

promise_test(async t => {
  const rewriter = await Rewriter.create();
  await testAbortReadableStream(t, signal => {
    return rewriter.rewriteStreaming(kTestPrompt, { signal: signal });
  });
}, "Aborting Rewriter.rewriteStreaming().");

promise_test(async t => {
  const rewriter = await Rewriter.create();
  const controller = new AbortController();
  const streamingResponse = rewriter.rewriteStreaming(
      kTestPrompt, { signal: controller.signal });
  for await (const chunk of streamingResponse) { /* Do nothing */}
  controller.abort();
}, 'Aborting Rewriter.rewriteStreaming() after finished reading.');
+50 −0
Original line number Original line Diff line number Diff line
// META: title=Rewriter Detached Iframe
// META: script=../resources/util.js
// META: timeout=long

'use strict';

promise_test(async (t) => {
  const iframe = document.body.appendChild(document.createElement('iframe'));
  iframe.contentWindow.Rewriter.create();
  iframe.remove();
}, 'Detaching iframe during Rewriter.create() should not leak memory');

promise_test(async (t) => {
  const iframe = document.body.appendChild(document.createElement('iframe'));
  const iframeWindow = iframe.contentWindow;
  const iframeDOMException = iframeWindow.DOMException;
  const iframeRewriter = iframeWindow.Rewriter;
  iframe.remove();

  await promise_rejects_dom(
      t, 'InvalidStateError', iframeDOMException, iframeRewriter.create());
}, 'Rewriter.create() fails on a detached iframe.');

promise_test(async (t) => {
  const iframe = document.body.appendChild(document.createElement('iframe'));
  const iframeDOMException = iframe.contentWindow.DOMException;
  const rewriter = await iframe.contentWindow.Rewriter.create();
  iframe.remove();

  await promise_rejects_dom(
      t, 'InvalidStateError', iframeDOMException, rewriter.rewrite('hello'));
}, 'Rewriter.rewrite() fails on a detached iframe.');

promise_test(async (t) => {
  const iframe = document.body.appendChild(document.createElement('iframe'));
  const iframeWindow = iframe.contentWindow;
  const iframeDOMException = iframeWindow.DOMException;
  const rewriter = await iframeWindow.Rewriter.create();
  iframe.remove();

  assert_throws_dom(
      'InvalidStateError', iframeDOMException, () => rewriter.rewriteStreaming('hello'));
}, 'Rewriter.rewriteStreaming() fails on a detached iframe.');

promise_test(async (t) => {
  const iframe = document.body.appendChild(document.createElement('iframe'));
  const rewriter = await iframe.contentWindow.Rewriter.create();
  rewriter.rewrite('hello');
  iframe.remove();
}, 'Detaching iframe during Rewriter.rewrite() should not leak memory');
+115 −0
Original line number Original line Diff line number Diff line
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<body></body>
<script>
'use strict';

const { HTTPS_ORIGIN, HTTPS_NOTSAMESITE_ORIGIN } = get_host_info();
const PATH = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1);
const IFRAME_PATH = PATH + 'resources/iframe-helper.html';

function load_iframe(src, permission_policy, test_name) {
  let iframe = document.createElement('iframe');
  return new Promise((resolve, reject) => {
    iframe.onload = () => {
      iframe.contentWindow.postMessage({type: test_name}, '*');
      resolve(iframe);
    }
    iframe.src = src;
    iframe.allow = permission_policy;
    document.body.appendChild(iframe);
  });
}

promise_test(async t => {
  const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH;
  await load_iframe(src, /*permission_policy=*/"", "RewriterCreate");
  return new Promise((resolve, reject) => {
    window.onmessage = message => {
      if (message.data == 'Failure: NotAllowedError') {
        resolve();
      } else {
        reject(message.data)
      }
    }
  });
}, "Throw a 'NotAllowedError' when creating Rewriter within cross-origin iframe");

promise_test(async t => {
  const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH;
  load_iframe(src, "rewriter", "RewriterCreate");

  return new Promise((resolve, reject) => {
    window.onmessage = message => {
      if (message.data == 'Success') {
        resolve();
      } else {
        reject(message.data)
      }
    }
  });
}, "Rewriter can be created within cross-origin iframe with permission policy");

promise_test(async t => {
  const src = HTTPS_ORIGIN + IFRAME_PATH;
  load_iframe(src, /*permission_policy=*/"", "RewriterCreate");

  return new Promise((resolve, reject) => {
    window.onmessage = message => {
      if (message.data == 'Success') {
        resolve();
      } else {
        reject(message.data)
      }
    }
  });
}, "Rewriter can be used within same-origin iframe");

promise_test(async t => {
  const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH;
  load_iframe(src, /*permission_policy=*/"", "RewriterAvailability");

  return new Promise((resolve, reject) => {
    window.onmessage = message => {
      if (message.data == 'unavailable') {
        resolve();
      } else {
        reject(message.data)
      }
    }
  });
}, "Rewriter is unavailable within cross-origin iframe");

promise_test(async t => {
  const src = HTTPS_NOTSAMESITE_ORIGIN + IFRAME_PATH;
  load_iframe(src, "rewriter", "RewriterAvailability");

  return new Promise((resolve, reject) => {
    window.onmessage = message => {
      if (message.data != 'unavailable') {
        resolve();
      } else {
        reject(message.data)
      }
    }
  });
}, "Rewriter is available within cross-origin iframe with permission policy");

promise_test(async t => {
  const src = HTTPS_ORIGIN + IFRAME_PATH;
  load_iframe(src, /*permission_policy=*/"", "RewriterAvailability");

  return new Promise((resolve, reject) => {
    window.onmessage = message => {
      if (message.data != 'unavailable') {
        resolve();
      } else {
        reject(message.data)
      }
    }
  });
}, "Rewriter is available within same-origin iframe");

</script>
Loading