<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta name="timeout" content="long"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="./resources/compression-dictionary-util.js"></script>
</head>
<body>
<script>

compression_dictionary_promise_test(async (t) => {
  const dict = await (await fetch(kRegisterDictionaryPath)).text();
  assert_equals(dict, kDefaultDictionaryContent);
  // Wait until `available-dictionary` header is available.
  assert_equals(
      await waitUntilAvailableDictionaryHeader(t, {}),
      kDefaultDictionaryHashBase64);
}, 'Simple dictionary registration and unregistration');

compression_dictionary_promise_test(async (t) => {
  const dict = await (await fetch(`${kRegisterDictionaryPath}?id=test`)).text();
  // Wait until `available-dictionary` header is available.
  assert_equals(
      await waitUntilAvailableDictionaryHeader(t, {}),
      kDefaultDictionaryHashBase64);
  assert_equals((await checkHeaders())['dictionary-id'], '"test"');
}, 'Dictionary registration with dictionary ID');

compression_dictionary_promise_test(async (t) => {
  // Registers a first dictionary.
  const dictionary_path1 = `${kRegisterDictionaryPath}?id=id1`;
  const dict1 = await (await fetch(dictionary_path1)).text();
  // Wait until `available-dictionary` header is available.
  assert_equals(
      await waitUntilAvailableDictionaryHeader(t, {}),
      kDefaultDictionaryHashBase64);
  // Check the `dictionary-id` header.
  assert_equals((await checkHeaders())['dictionary-id'], '"id1"');

  // Registers a second dictionary.
  const kAlternativeDictionaryContent =
      'This is an alternative test dictionary.';
  const dictionary_path2 =
      `${kRegisterDictionaryPath}?content=${kAlternativeDictionaryContent}&id=id2`;
  const expected_dictionary_header =
      await calculateDictionaryHash(kAlternativeDictionaryContent);
  const dict2 = await (await fetch(dictionary_path2)).text();
  assert_equals(dict2, kAlternativeDictionaryContent);
  // Wait until `available-dictionary` header is available.
  // Note: Passing `expected_header` to ignore the old dictionary.
  assert_equals(
      await waitUntilAvailableDictionaryHeader(
          t, {expected_header: expected_dictionary_header}),
      expected_dictionary_header);
  // Check the `dictionary-id` header.
  assert_equals((await checkHeaders())['dictionary-id'], '"id2"');
}, 'New dictionary registration overrides the existing one');

</script>
</body>
