1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5document.cookie = "__navigated_to_report=0; path=/"; 6document.cookie = "__pc_done=0; path=/"; 7document.cookie = "__pc_timings=; path=/"; 8 9function dirname(path) { 10 var match = path.match(/(.*)\//); 11 if (match) { 12 return match[1]; 13 } else { 14 return "."; 15 } 16} 17 18function IsWprRecordMode() { 19 var kStatusUrl = "http://wprwprwpr/web-page-replay-command-status"; 20 var isRecordMode; 21 var xhr = new XMLHttpRequest(); 22 var useAsync = false; 23 xhr.open("GET", kStatusUrl, useAsync); 24 xhr.onreadystatechange = function() { 25 if (xhr.readyState == 4 && xhr.status == 200) { 26 var status = JSON.parse(xhr.responseText); 27 isRecordMode = status["is_record_mode"]; 28 console.log("WPR record mode?: " + isRecordMode); 29 } 30 }; 31 try { 32 xhr.send(); 33 } catch(e) { 34 throw "Web Page Replay is not responding. Start WPR to continue." 35 } 36 return isRecordMode; 37} 38 39 40function TryStart() { 41 console.log("try start"); 42 var status_element = document.getElementById("status"); 43 44 var config_json; 45 var config; 46 try { 47 config_json = document.getElementById("json").textContent; 48 config = JSON.parse(config_json); 49 } catch(err) { 50 console.log("Bad json data: " + config_json); 51 status_element.textContent = "Exception: " + err + "\njson data: " + 52 config_json; 53 return; 54 } 55 var isRecordMode = false; 56 try { 57 isRecordMode = IsWprRecordMode(); 58 } catch (err) { 59 status_element.textContent = err; 60 setTimeout(TryStart, 5000); 61 return; 62 } 63 64 if (!config["shouldStart"]) { 65 status_element.textContent = 66 "Press 'Start' to continue (or load this page with 'auto=1')."; 67 return; 68 } 69 70 try { 71 var reportDir = dirname(dirname(window.location.pathname)) + "/common"; 72 config["reportUrl"] = "file://" + reportDir + "/report.html"; 73 config["isRecordMode"] = isRecordMode; 74 var port = chrome.runtime.connect(); 75 port.postMessage({message: "start", benchmark: config}); 76 console.log("sending start message: page count, " + 77 config["pageSets"].length); 78 } catch(err) { 79 console.log("TryStart retrying after exception: " + err); 80 status_element.textContent = "Exception: " + err; 81 setTimeout(TryStart, 1000); 82 return; 83 } 84 status_element.textContent = "STARTING"; 85} 86 87// We wait before starting the test just to let chrome warm up better. 88setTimeout(TryStart, 250); 89