<!DOCTYPE html>
<!--
  Copyright 2023 The Cobalt Authors. All Rights Reserved.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<html>
<head>
  <title>Cobalt Service Worker Fetch Main Resource Test</title>
  <script src='black_box_js_test_utils.js'></script>
</head>
<body>
  <script>
    h5vcc.storage.enableCache();
    const mebibyte = 1024 * 1024;
    const res = h5vcc.storage.setQuota({
      other: 14 * mebibyte,
      html: mebibyte,
      css: mebibyte,
      image: mebibyte,
      font: mebibyte,
      splash: mebibyte,
      uncompiled_js: mebibyte,
      compiled_js: mebibyte,
      cache_api: mebibyte,
      service_worker_js: mebibyte,
      total: 23 * mebibyte,
    });
    h5vcc.storage.clearServiceWorkerCache();

    const unregisterAll = () => navigator.serviceWorker.getRegistrations().then(registrations =>
        Promise.all(registrations.map(r => r.unregister())));
    const fail = msg => {
      if (msg) {
        console.error(msg);
      }
      unregisterAll().then(notReached);
    };
    const timeoutId = window.setTimeout(fail, 5000);
    navigator.serviceWorker.ready.then(async () => {
      clearTimeout(timeoutId);
      window.location = 'service_worker_fetch_main_resource.html';
    }).catch(fail);

    unregisterAll().then(() =>
      navigator.serviceWorker.register('service_worker_fetch_main_resource_test.js')).catch(fail);
  </script>
</body>
</html>
