gecko-dev/testing/marionette/navigate.js
Henrik Skupin bdc3b68d5c Bug 1291320 - Refactor page load algorithm for listener framescript. r=ato,automatedtester
This refactoring allows us to re-use the same load algorithm for
each command which could trigger a page load. It also takes remoteness
changes into account, and waits until the load has been done.

With this change we no longer check for readyState only, but observe
the necessary DOM events as fired for page unloads and loads. This will
help us to implement the page loading strategy later.

By observing the DOM events, I also expect a small increase of performance
for any kind of page load, given that we now return immediately and do not
have a delay of 100ms at maximum.

MozReview-Commit-ID: IVtO6KgJFES

--HG--
extra : rebase_source : 40f90e3b9d1bf0a2f9123271cd08513769616e41
2017-03-28 21:41:38 +02:00

44 lines
1.1 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.importGlobalProperties(["URL"]);
this.EXPORTED_SYMBOLS = ["navigate"];
this.navigate = {};
/**
* Determines if we expect to get a DOM load event (DOMContentLoaded)
* on navigating to the |url|.
*
* @param {string} url
* Destination URL
*
* @return {boolean}
* Full page load would be expected if url gets loaded.
*
* @throws TypeError
* If |url| is an invalid URL.
*/
navigate.isLoadEventExpected = function (url) {
// assume we will go somewhere exciting
if (typeof url == "undefined") {
throw TypeError("Expected destination URL");
}
switch (new URL(url).protocol) {
// assume javascript:<whatever> will modify current document
// but this is not an entirely safe assumption to make,
// considering it could be used to set window.location
case "javascript:":
return false;
}
return true;
};