shaka-packager/tools/page_cycler/webpagereplay/extension/start.js

89 lines
2.5 KiB
JavaScript

// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
document.cookie = "__navigated_to_report=0; path=/";
document.cookie = "__pc_done=0; path=/";
document.cookie = "__pc_timings=; path=/";
function dirname(path) {
var match = path.match(/(.*)\//);
if (match) {
return match[1];
} else {
return ".";
}
}
function IsWprRecordMode() {
var kStatusUrl = "http://wprwprwpr/web-page-replay-command-status";
var isRecordMode;
var xhr = new XMLHttpRequest();
var useAsync = false;
xhr.open("GET", kStatusUrl, useAsync);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var status = JSON.parse(xhr.responseText);
isRecordMode = status["is_record_mode"];
console.log("WPR record mode?: " + isRecordMode);
}
};
try {
xhr.send();
} catch(e) {
throw "Web Page Replay is not responding. Start WPR to continue."
}
return isRecordMode;
}
function TryStart() {
console.log("try start");
var status_element = document.getElementById("status");
var config_json;
var config;
try {
config_json = document.getElementById("json").textContent;
config = JSON.parse(config_json);
} catch(err) {
console.log("Bad json data: " + config_json);
status_element.textContent = "Exception: " + err + "\njson data: " +
config_json;
return;
}
var isRecordMode = false;
try {
isRecordMode = IsWprRecordMode();
} catch (err) {
status_element.textContent = err;
setTimeout(TryStart, 5000);
return;
}
if (!config["shouldStart"]) {
status_element.textContent =
"Press 'Start' to continue (or load this page with 'auto=1').";
return;
}
try {
var reportDir = dirname(dirname(window.location.pathname)) + "/common";
config["reportUrl"] = "file://" + reportDir + "/report.html";
config["isRecordMode"] = isRecordMode;
var port = chrome.runtime.connect();
port.postMessage({message: "start", benchmark: config});
console.log("sending start message: page count, " +
config["pageSets"].length);
} catch(err) {
console.log("TryStart retrying after exception: " + err);
status_element.textContent = "Exception: " + err;
setTimeout(TryStart, 1000);
return;
}
status_element.textContent = "STARTING";
}
// We wait before starting the test just to let chrome warm up better.
setTimeout(TryStart, 250);