Revision 9e5f7873e4b07edcc806f6249286b5364ec1733f authored by Chromium WPT Sync on 23 February 2017, 20:50:10 UTC, committed by GitHub on 23 February 2017, 20:50:10 UTC
WPT tests for allow-top-navigation-by-user-activation for iframe@sandbox.
2 parent s 2a40eec + 533f802
Raw File
navigation.html
<!DOCTYPE html>
<html>
  <head>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="support/test_utils.js"></script>
  </head>

  <body>
    <script>
      /** Ensures that all datatypes are nonempty. */
      function populateDatatypes() {
        return Promise.all(TestUtils.DATATYPES.map(function(datatype) {
          return datatype.add().then(datatype.isEmpty().then(function(isEmpty) {
            assert_false(
                isEmpty,
                datatype.name + " has to be nonempty before the test starts.");
          }));
        }));
      }

      /**
       * @param Array.<Array.<Datatype>> combination A combination of datatypes.
       * @param Dict.<string, boolean> report A map between a datatype name and
       *     whether it is empty.
       * @return boolean Whether all datatypes are empty if and only if they are
       *     included in the |combination|.
       */
      function verifyDatatypes(combination, report) {
        TestUtils.DATATYPES.forEach(function(datatype) {
          if (combination.indexOf(datatype) != -1) {
            assert_true(
                report[datatype.name],
                datatype.name + " should have been cleared.");
          } else {
            assert_false(
                report[datatype.name],
                datatype.name + " should NOT have been cleared.");
          }
        })
      }

      TestUtils.COMBINATIONS.forEach(function(combination) {
        var test_name =
            "Clear datatypes on navigation: " +
            combination.map(function(e) { return e.name; }).join(", ");

        promise_test(function(test) {
          return populateDatatypes()
              .then(function() {
                // Navigate to a resource with a Clear-Site-Data header in an
                // iframe, then verify that the correct types have been deleted.
                return new Promise(function(resolve, reject) {
                  window.addEventListener("message", resolve);
                  var iframe = document.createElement("iframe");
                  iframe.src = TestUtils.getClearSiteDataUrl(combination);
                  document.body.appendChild(iframe);
                }).then(function(messageEvent) {
                  verifyDatatypes(combination, messageEvent.data);
                });
              });
        }, test_name);
      });
    </script>
  </body>
</html>
back to top