<!DOCTYPE html>
<html>
<title>Service Workers: Cache</title>
    <head>
        <link rel="help" href="https://w3c.github.io/ServiceWorker/#cache">
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>

        <script src=/resources/WebIDLParser.js></script>
        <script src=/resources/idlharness.js></script>

    </head>
    <body>

<script type=text/plain id="idl_0">
[Exposed=(Window,Worker)]
interface Cache {
  Promise<Response> match(RequestInfo request, optional CacheQueryOptions options);
  Promise<sequence<Response>> matchAll(optional RequestInfo request, optional CacheQueryOptions options);
  Promise<void> add(RequestInfo request);
  Promise<void> addAll(sequence<RequestInfo> requests);
  Promise<void> put(RequestInfo request, Response response);
  Promise<boolean> delete(RequestInfo request, optional CacheQueryOptions options);
  Promise<sequence<Request>> keys(optional RequestInfo request, optional CacheQueryOptions options);
};

dictionary CacheQueryOptions {
  boolean ignoreSearch = false;
  boolean ignoreMethod = false;
  boolean ignoreVary = false;
  DOMString cacheName;
};

dictionary CacheBatchOperation {
  DOMString type;
  Request request;
  Response response;
  CacheQueryOptions options;
};
</script>



    <script type=text/plain id="untested_idls">
        interface AbstractResponse {};
        interface Request {};
        interface ScalarValueString {};
    </script>

    <script>
        var idl_array = new IdlArray();
        idl_array.add_untested_idls(document.getElementById("untested_idls").textContent);
        idl_array.add_idls(document.getElementById("idl_0").textContent);
        idl_array.add_objects({
            Cache: ["throw new Error ('No object defined for the Cache interface')"],
            QueryParams: ["throw new Error ('No object defined for the QueryParams dictionary')"],
            CacheIterationCallback: ["throw new Error ('No object defined for the CacheIterationCallback callback')"]
        });
        idl_array.test();
    </script>

    </body>
</html>

