Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4608)

Unified Diff: chrome/test/data/extensions/api_test/activity_log_private/friend/reply.js

Issue 19014003: Modifications to activity logging end to end tests. Reduces the number of window.open calls to make… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased with other changes Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/extensions/api_test/activity_log_private/friend/reply.js
diff --git a/chrome/test/data/extensions/api_test/activity_log_private/friend/reply.js b/chrome/test/data/extensions/api_test/activity_log_private/friend/reply.js
index 7b1168b6a5e71246eab5e060367ab141964b259f..0c843ba66424bbf16524843e1790dd1445a08ed7 100644
--- a/chrome/test/data/extensions/api_test/activity_log_private/friend/reply.js
+++ b/chrome/test/data/extensions/api_test/activity_log_private/friend/reply.js
@@ -4,7 +4,6 @@
var defaultUrl = 'http://www.google.com';
-
// Utility function to open a URL in a new tab. If the useIncognito global is
// true, the URL is opened in a new incognito window, otherwise it is opened in
// a new tab in the current window. Alternatively, whether to use incognito
@@ -23,89 +22,62 @@ function openTab(url, incognito) {
// Makes an API call.
function makeApiCall() {
+ resetStatus();
chrome.cookies.set({
'url': 'https://www.cnn.com',
'name': 'activity_log_test_cookie',
'value': 'abcdefg'
});
- setCompleted('makeApiCall');
+ appendCompleted('makeApiCall');
}
// Makes an API call that has a custom binding.
function makeSpecialApiCalls() {
+ resetStatus();
var url = chrome.extension.getURL('image/cat.jpg');
var noparam = chrome.extension.getViews();
- setCompleted('makeSpecialApiCalls');
+ appendCompleted('makeSpecialApiCalls');
}
// Checks that we don't double-log calls that go through setHandleRequest
// *and* the ExtensionFunction machinery.
function checkNoDoubleLogging() {
+ resetStatus();
chrome.omnibox.setDefaultSuggestion({description: 'hello world'});
- setCompleted('checkNoDoubleLogging');
+ appendCompleted('checkNoDoubleLogging');
}
// Check whether we log calls to chrome.app.*;
function checkAppCalls() {
+ resetStatus();
var callback = function() {};
chrome.app.getDetails();
var b = chrome.app.isInstalled;
var c = chrome.app.installState(callback);
- setCompleted('checkAppCalls');
+ appendCompleted('checkAppCalls');
}
// Makes an API call that the extension doesn't have permission for.
// Don't add the management permission or this test won't test the code path.
function makeBlockedApiCall() {
+ resetStatus();
try {
var allExtensions = chrome.management.getAll();
} catch (err) { }
- setCompleted('makeBlockedApiCall');
+ appendCompleted('makeBlockedApiCall');
}
-// Injects a content script.
-function injectContentScript() {
- chrome.tabs.onUpdated.addListener(
- function callback(tabId, changeInfo, tab) {
- if (changeInfo['status'] === 'complete' &&
- tab.url.match(/google\.com/g)) {
- chrome.tabs.onUpdated.removeListener(callback);
- chrome.tabs.executeScript(
- tab.id,
- {'file': 'google_cs.js'},
- function() {
- chrome.tabs.remove(tabId);
- setCompleted('injectContentScript');
- });
- }
- }
- );
- openTab(defaultUrl);
-}
-
-// Injects a blob of script into a page.
-function injectScriptBlob() {
- chrome.tabs.onUpdated.addListener(
- function callback(tabId, changeInfo, tab) {
- if (changeInfo['status'] === 'complete' &&
- tab.url.match(/google\.com/g)) {
- chrome.tabs.onUpdated.removeListener(callback);
- chrome.tabs.executeScript(
- tab.id,
- {'code': 'document.write("g o o g l e");'},
- function() {
- chrome.tabs.remove(tabId);
- setCompleted('injectScriptBlob');
- });
- }
- }
- );
- openTab(defaultUrl);
+function callObjectMethod() {
+ resetStatus();
+ var storageArea = chrome.storage.sync;
+ storageArea.clear();
+ appendCompleted('callObjectMethod');
}
// Modifies the headers sent and received in an HTTP request using the
// webRequest API.
function doWebRequestModifications() {
+ resetStatus();
// Install a webRequest handler that will add an HTTP header to the outgoing
// request for the main page.
function doModifyHeaders(details) {
@@ -149,49 +121,10 @@ function doWebRequestModifications() {
if (changeInfo['status'] === 'complete' &&
tab.url.match(/google\.com/g)) {
chrome.webRequest.onBeforeSendHeaders.removeListener(doModifyHeaders);
- // TODO(karenlees): you added this line in debugging, make sure it is
- // really needed.
chrome.webRequest.onHeadersReceived.removeListener(doModifyHeaders);
chrome.tabs.onUpdated.removeListener(closeTab);
chrome.tabs.remove(tabId);
- setCompleted('doWebRequestModifications');
- }
- }
- );
- openTab(defaultUrl);
-}
-
-function getSetObjectProperties() {
- chrome.tabs.onUpdated.addListener(
- function getTabProperties(tabId, changeInfo, tab) {
- if (changeInfo['status'] === 'complete' &&
- tab.url.match(/google\.com/g)) {
- console.log(tab.id + ' ' + tab.index + ' ' + tab.url);
- tab.index = 3333333333333333333;
- chrome.tabs.onUpdated.removeListener(getTabProperties);
- chrome.tabs.remove(tabId);
- setCompleted('getSetObjectProperties');
- }
- }
- );
- openTab(defaultUrl);
-}
-
-function callObjectMethod() {
- var storageArea = chrome.storage.sync;
- storageArea.clear();
- setCompleted('callObjectMethod()');
-}
-
-function sendMessageToCS() {
- chrome.tabs.onUpdated.addListener(
- function messageCS(tabId, changeInfo, tab) {
- if (changeInfo['status'] === 'complete' &&
- tab.url.match(/google\.com/g)) {
- chrome.tabs.sendMessage(tabId, 'hellooooo!');
- chrome.tabs.onUpdated.removeListener(messageCS);
- chrome.tabs.remove(tabId);
- setCompleted('sendMessageToCS');
+ appendCompleted('doWebRequestModifications');
}
}
);
@@ -199,37 +132,41 @@ function sendMessageToCS() {
}
function sendMessageToSelf() {
+ resetStatus();
try {
chrome.runtime.sendMessage('hello hello');
- setCompleted('sendMessageToSelf');
+ appendCompleted('sendMessageToSelf');
} catch (err) {
setError(err + ' in function: sendMessageToSelf');
}
}
function sendMessageToOther() {
+ resetStatus();
try {
chrome.runtime.sendMessage('ocacnieaapoflmkebkeaidpgfngocapl',
'knock knock',
function response() {
console.log("who's there?");
+ appendCompleted('sendMessageToOther');
});
- setCompleted('sendMessageToOther');
} catch (err) {
setError(err + ' in function: sendMessageToOther');
}
}
function connectToOther() {
+ resetStatus();
try {
chrome.runtime.connect('ocacnieaapoflmkebkeaidpgfngocapl');
- setCompleted('connectToOther');
+ appendCompleted('connectToOther');
} catch (err) {
setError(err + ' in function:connectToOther');
}
}
function tabIdTranslation() {
+ resetStatus();
var tabIds = [-1, -1];
// Test the case of a single int
@@ -238,7 +175,7 @@ function tabIdTranslation() {
if (changeInfo['status'] === 'complete' &&
tab.url.match(/google\.com/g)) {
chrome.tabs.executeScript(
- //tab.id,
+ tabId,
{'file': 'google_cs.js'},
function() {
chrome.tabs.onUpdated.removeListener(testSingleInt);
@@ -253,200 +190,46 @@ function tabIdTranslation() {
chrome.tabs.onUpdated.addListener(
function testArray(tabId, changeInfo, tab) {
if (changeInfo['status'] === 'complete' && tab.url.match(/google\.be/g)) {
- //chrome.tabs.move(tabId, {'index': -1});
+ chrome.tabs.move(tabId, {'index': -1});
tabIds[1] = tabId;
chrome.tabs.onUpdated.removeListener(testArray);
chrome.tabs.remove(tabIds);
- setCompleted('tabIdTranslation');
- }
- }
- );
-
- openTab(defaultUrl);
-}
-
-// DOM API TEST METHODS -- PUT YOUR TESTS BELOW HERE
-////////////////////////////////////////////////////////////////////////////////
-
-// Does an XHR from this [privileged] context.
-function doBackgroundXHR() {
- var request = new XMLHttpRequest();
- request.open('POST', defaultUrl, false);
- request.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');
- try {
- request.send();
- } catch (err) {
- // doesn't matter if it works or not; should be recorded either way
- }
- setCompleted('doBackgroundXHR');
-}
-
-// Does an XHR from inside a content script.
-function doContentScriptXHR() {
- var code = 'var request = new XMLHttpRequest(); ' +
- 'request.open("POST", "http://www.cnn.com", false); ' +
- 'request.setRequestHeader("Content-type", ' +
- ' "text/plain;charset=UTF-8"); ' +
- 'request.send(); ' +
- 'document.write("sent an XHR");';
- chrome.tabs.onUpdated.addListener(
- function callback(tabId, changeInfo, tab) {
- if (changeInfo['status'] === 'complete' &&
- tab.url.match(/google\.com/g)) {
- chrome.tabs.onUpdated.removeListener(callback);
- chrome.tabs.executeScript(
- tab.id,
- {'code': code},
- function() {
- chrome.tabs.remove(tabId);
- setCompleted('doContentScriptXHR');
- });
+ appendCompleted('tabIdTranslation');
}
}
);
- openTab(defaultUrl);
-}
-// Accesses the Location object from inside a content script.
-function doLocationAccess() {
- var code = 'window.location = "http://www.google.com/#foo"; ' +
- 'document.location = "http://www.google.com/#bar"; ' +
- 'var loc = window.location; ' +
- 'loc.assign("http://www.google.com/#fo"); ' +
- 'loc.replace("http://www.google.com/#bar");';
- chrome.tabs.onUpdated.addListener(
- function callback(tabId, changeInfo, tab) {
- if (changeInfo['status'] === 'complete' &&
- tab.url.match(/google\.com/g)) {
- chrome.tabs.onUpdated.removeListener(callback);
- chrome.tabs.executeScript(
- tab.id,
- {'code': code},
- function() {
- chrome.tabs.remove(tabId);
- setCompleted('doLocationAccess');
- });
- }
- }
- );
openTab(defaultUrl);
}
-// Mutates the DOM tree from inside a content script.
-function doDOMMutation1() {
- var code = 'var d1 = document.createElement("div"); ' +
- 'var d2 = document.createElement("div"); ' +
- 'document.body.appendChild(d1); ' +
- 'document.body.insertBefore(d2, d1); ' +
- 'document.body.replaceChild(d1, d2);';
+function executeApiCallsOnTabUpdated() {
+ resetStatus();
chrome.tabs.onUpdated.addListener(
function callback(tabId, changeInfo, tab) {
if (changeInfo['status'] === 'complete' &&
tab.url.match(/google\.com/g)) {
chrome.tabs.onUpdated.removeListener(callback);
- chrome.tabs.executeScript(
- tab.id,
- {'code': code},
- function() {
- chrome.tabs.remove(tabId);
- setCompleted('doDOMMutation1');
- });
- }
- }
- );
- openTab(defaultUrl);
-}
-function doDOMMutation2() {
- var code = 'document.write("Hello using document.write"); ' +
- 'document.writeln("Hello using document.writeln"); ' +
- 'document.body.innerHTML = "Hello using innerHTML";';
- chrome.tabs.onUpdated.addListener(
- function callback(tabId, changeInfo, tab) {
- if (changeInfo['status'] === 'complete' &&
- tab.url.match(/google\.com/g)) {
- chrome.tabs.onUpdated.removeListener(callback);
- chrome.tabs.executeScript(
- tab.id,
- {'code': code},
- function() {
- chrome.tabs.remove(tabId);
- setCompleted('doDOMMutation2');
- });
- }
- }
- );
- openTab(defaultUrl);
-}
-
-// Accesses the HTML5 Navigator API from inside a content script.
-function doNavigatorAPIAccess() {
- var code = 'var geo = navigator.geolocation; ' +
- 'var successCallback = function(x) { }; ' +
- 'var errorCallback = function(x) { }; ' +
- 'geo.getCurrentPosition(successCallback, errorCallback); ';
- 'var id = geo.watchPosition(successCallback, errorCallback);';
- chrome.tabs.onUpdated.addListener(
- function callback(tabId, changeInfo, tab) {
- if (changeInfo['status'] === 'complete' &&
- tab.url.match(/google\.com/g)) {
- chrome.tabs.onUpdated.removeListener(callback);
- chrome.tabs.executeScript(
- tab.id,
- {'code': code},
- function() {
- chrome.tabs.remove(tabId);
- setCompleted('doNavigatorAPIAccess');
- });
- }
- }
- );
- openTab(defaultUrl);
-}
+ // Send a message.
+ chrome.tabs.sendMessage(tabId, 'hellooooo!');
+ appendCompleted('sendMessageToCS');
-// Accesses the HTML5 WebStorage API from inside a content script.
-function doWebStorageAPIAccess1() {
- var code = 'var store = window.sessionStorage; ' +
- 'store.setItem("foo", 42); ' +
- 'var val = store.getItem("foo"); ' +
- 'store.removeItem("foo"); ' +
- 'store.clear();';
- chrome.tabs.onUpdated.addListener(
- function callback(tabId, changeInfo, tab) {
- if (changeInfo['status'] === 'complete' &&
- tab.url.match(/google\.com/g)) {
- chrome.tabs.onUpdated.removeListener(callback);
+ // Inject a content script
chrome.tabs.executeScript(
tab.id,
- {'code': code},
+ {'file': 'google_cs.js'},
function() {
- chrome.tabs.remove(tabId);
- setCompleted('doWebStorageAPIAccess1');
+ appendCompleted('injectContentScript');
});
- }
- }
- );
- openTab(defaultUrl);
-}
-// Accesses local storage from inside a content script.
-function doWebStorageAPIAccess2() {
- var code = 'var store = window.localStorage; ' +
- 'store.setItem("foo", 42); ' +
- 'var val = store.getItem("foo"); ' +
- 'store.removeItem("foo"); ' +
- 'store.clear();';
- chrome.tabs.onUpdated.addListener(
- function callback(tabId, changeInfo, tab) {
- if (changeInfo['status'] === 'complete' &&
- tab.url.match(/google\.com/g)) {
- chrome.tabs.onUpdated.removeListener(callback);
+ // Injects a blob of script into a page and cleans up the tab when
+ // finished.
chrome.tabs.executeScript(
tab.id,
- {'code': code},
+ {'code': 'document.write("g o o g l e");'},
function() {
+ appendCompleted('injectScriptBlob');
chrome.tabs.remove(tabId);
- setCompleted('doWebStorageAPIAccess2');
});
}
}
@@ -454,90 +237,104 @@ function doWebStorageAPIAccess2() {
openTab(defaultUrl);
}
-// Accesses the HTML5 Notification API from inside a content script.
-function doNotificationAPIAccess() {
- var code = 'try {' +
- ' webkitNotifications.createNotification("myIcon.png", ' +
- ' "myTitle", ' +
- ' "myContent");' +
- '} catch (e) {}';
- chrome.tabs.onUpdated.addListener(
- function callback(tabId, changeInfo, tab) {
- if (changeInfo['status'] === 'complete' &&
- tab.url.match(/google\.com/g)) {
- chrome.tabs.onUpdated.removeListener(callback);
- chrome.tabs.executeScript(
- tab.id,
- {'code': code},
- function() {
- chrome.tabs.remove(tabId);
- setCompleted('doNotifcationAPIAccess');
- });
- }
- }
- );
- openTab(defaultUrl);
-}
-// Accesses the HTML5 ApplicationCache API from inside a content script.
-function doApplicationCacheAPIAccess() {
- var code = 'var appCache = window.applicationCache;';
- chrome.tabs.onUpdated.addListener(
- function callback(tabId, changeInfo, tab) {
- if (changeInfo['status'] === 'complete' &&
- tab.url.match(/google\.com/g)) {
- chrome.tabs.onUpdated.removeListener(callback);
- chrome.tabs.executeScript(
- tab.id,
- {'code': code},
- function() {
- chrome.tabs.remove(tabId);
- setCompleted('doApplictionCacheAPIAccess');
- });
- }
- }
- );
- openTab(defaultUrl);
-}
+// DOM API TEST METHODS -- PUT YOUR TESTS BELOW HERE
+////////////////////////////////////////////////////////////////////////////////
-// Accesses the HTML5 WebDatabase API from inside a content script.
-function doWebDatabaseAPIAccess() {
- var code = 'var db = openDatabase("testdb", "1.0", "test database", ' +
- ' 1024 * 1024);';
- chrome.tabs.onUpdated.addListener(
- function callback(tabId, changeInfo, tab) {
- if (changeInfo['status'] === 'complete' &&
- tab.url.match(/google\.com/g)) {
- chrome.tabs.onUpdated.removeListener(callback);
- chrome.tabs.executeScript(
- tab.id,
- {'code': code},
- function() {
- chrome.tabs.remove(tabId);
- setCompleted('doWebDatabaseAPIAccess');
- });
- }
- }
- );
- openTab(defaultUrl);
-}
+// Does an XHR from this [privileged] context.
+function doBackgroundXHR() {
+ resetStatus();
+ var request = new XMLHttpRequest();
+ request.open('POST', defaultUrl, false);
+ request.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');
+ try {
+ request.send();
+ } catch (err) {
+ // doesn't matter if it works or not; should be recorded either way
+ }
+ appendCompleted('doBackgroundXHR');
+}
+
+function executeDOMChangesOnTabUpdated() {
+ resetStatus();
+ code = '';
+
+ // Accesses the Location object from inside a content script.
+ code = 'window.location = "http://www.google.com/#foo"; ' +
+ 'document.location = "http://www.google.com/#bar"; ' +
+ 'var loc = window.location; ' +
+ 'loc.assign("http://www.google.com/#fo"); ' +
+ 'loc.replace("http://www.google.com/#bar");';
+
+ // Mutates the DOM tree from inside a content script.
+ code += 'var d1 = document.createElement("div"); ' +
+ 'var d2 = document.createElement("div"); ' +
+ 'document.body.appendChild(d1); ' +
+ 'document.body.insertBefore(d2, d1); ' +
+ 'document.body.replaceChild(d1, d2);';
+
+ code += 'document.write("Hello using document.write"); ' +
+ 'document.writeln("Hello using document.writeln"); ' +
+ 'document.body.innerHTML = "Hello using innerHTML";';
+
+ // Accesses the HTML5 Navigator API from inside a content script.
+ code += 'var geo = navigator.geolocation; ' +
+ 'var successCallback = function(x) { }; ' +
+ 'var errorCallback = function(x) { }; ' +
+ 'geo.getCurrentPosition(successCallback, errorCallback); ' +
+ 'var id = geo.watchPosition(successCallback, errorCallback);';
+
+ // Accesses the HTML5 WebStorage API from inside a content script.
+ code += 'var store = window.sessionStorage; ' +
+ 'store.setItem("foo", 42); ' +
+ 'var val = store.getItem("foo"); ' +
+ 'store.removeItem("foo"); ' +
+ 'store.clear();';
+
+ // Same but for localStorage.
+ code += 'var store = window.localStorage; ' +
+ 'store.setItem("foo", 42); ' +
+ 'var val = store.getItem("foo"); ' +
+ 'store.removeItem("foo"); ' +
+ 'store.clear();';
+
+ // Accesses the HTML5 Notification API from inside a content script.
+ code += 'try {' +
+ ' webkitNotifications.createNotification("myIcon.png", ' +
+ ' "myTitle", ' +
+ ' "myContent");' +
+ '} catch (e) {}';
+
+ // Accesses the HTML5 ApplicationCache API from inside a content script.
+ code += 'var appCache = window.applicationCache;';
+
+ // Accesses the HTML5 WebDatabase API from inside a content script.
+ code += 'var db = openDatabase("testdb", "1.0", "test database", ' +
+ ' 1024 * 1024);';
+
+ // Accesses the HTML5 Canvas API from inside a content script.
+ code += 'var testCanvas = document.createElement("canvas"); ' +
+ 'var testContext = testCanvas.getContext("2d");';
+
+ // Does an XHR from inside a content script.
+ code += 'var request = new XMLHttpRequest(); ' +
+ 'request.open("POST", "http://www.cnn.com", false); ' +
+ 'request.setRequestHeader("Content-type", ' +
+ ' "text/plain;charset=UTF-8"); ' +
+ 'request.send(); ' +
+ 'document.write("sent an XHR");';
-// Accesses the HTML5 Canvas API from inside a content script.
-function doCanvasAPIAccess() {
- var code = 'var testCanvas = document.createElement("canvas"); ' +
- 'var testContext = testCanvas.getContext("2d");';
chrome.tabs.onUpdated.addListener(
function callback(tabId, changeInfo, tab) {
if (changeInfo['status'] === 'complete' &&
tab.url.match(/google\.com/g)) {
chrome.tabs.onUpdated.removeListener(callback);
chrome.tabs.executeScript(
- tab.id,
- {'code': code},
- function() {
- chrome.tabs.remove(tabId);
- setCompleted('doCanvasAPIAccess');
- });
+ tabId, {'code': code},
+ function() {
+ chrome.tabs.remove(tabId);
+ appendCompleted('executeDOMChangesOnTabUpdated');
+ });
}
}
);
@@ -548,31 +345,18 @@ function doCanvasAPIAccess() {
var fnMap = {};
fnMap['api_call'] = makeApiCall;
fnMap['special_call'] = makeSpecialApiCalls;
-fnMap['blocked_call'] = makeBlockedApiCall;
-fnMap['inject_cs'] = injectContentScript;
-fnMap['inject_blob'] = injectScriptBlob;
-fnMap['webrequest'] = doWebRequestModifications;
fnMap['double'] = checkNoDoubleLogging;
fnMap['app_bindings'] = checkAppCalls;
-fnMap['object_properties'] = getSetObjectProperties;
+fnMap['blocked_call'] = makeBlockedApiCall;
fnMap['object_methods'] = callObjectMethod;
-fnMap['message_cs'] = sendMessageToCS;
fnMap['message_self'] = sendMessageToSelf;
fnMap['message_other'] = sendMessageToOther;
fnMap['connect_other'] = connectToOther;
-fnMap['tab_ids'] = tabIdTranslation;
fnMap['background_xhr'] = doBackgroundXHR;
-fnMap['cs_xhr'] = doContentScriptXHR;
-fnMap['location_access'] = doLocationAccess;
-fnMap['dom_mutation1'] = doDOMMutation1;
-fnMap['dom_mutation2'] = doDOMMutation2;
-fnMap['navigator_access'] = doNavigatorAPIAccess;
-fnMap['web_storage_access1'] = doWebStorageAPIAccess1;
-fnMap['web_storage_access2'] = doWebStorageAPIAccess2;
-fnMap['notification_access'] = doNotificationAPIAccess;
-fnMap['application_cache_access'] = doApplicationCacheAPIAccess;
-fnMap['web_database_access'] = doWebDatabaseAPIAccess;
-fnMap['canvas_access'] = doCanvasAPIAccess;
+fnMap['webrequest'] = doWebRequestModifications;
+fnMap['tab_ids'] = tabIdTranslation;
+fnMap['dom_tab_updated'] = executeDOMChangesOnTabUpdated;
+fnMap['api_tab_updated'] = executeApiCallsOnTabUpdated;
// Setup function mapping for the automated tests.
try {
@@ -602,16 +386,29 @@ function $(o) {
}
var completed = 0;
-function setCompleted(str) {
- completed++;
+function resetStatus(str) {
+ completed = 0;
if ($('status') != null) {
- $('status').innerText = 'Completed ' + str;
+ $('status').innerText = '';
}
- console.log('[SUCCESS] ' + str);
}
-function setError(str) {
- $('status').innerText = 'Error: ' + str;
+function appendCompleted(str) {
+ if ($('status') != null) {
+ if (completed > 0) {
+ $('status').innerText += ', ' + str;
+ } else {
+ $('status').innerText = 'Completed: ' + str;
+ }
+ }
+ completed += 1;
+ console.log('Completed ' + str);
+}
+
+function appendError(str) {
+ if ($('status') != null) {
+ $('status').innerText += 'Error: ' + str;
+ }
}
// Set up the event listeners for use in manual run mode.
@@ -621,10 +418,12 @@ function setupEvents() {
$(key).addEventListener('click', fnMap[key]);
}
}
- $('incognito_checkbox').addEventListener(
- 'click',
- function() { useIncognito = $('incognito_checkbox').checked; });
- setCompleted('setup events');
+ if ($('incognito_checkbox') != null) {
+ $('incognito_checkbox').addEventListener(
+ 'click',
+ function() { useIncognito = $('incognito_checkbox').checked; });
+ }
completed = 0;
+ appendCompleted('setup events');
}
document.addEventListener('DOMContentLoaded', setupEvents);

Powered by Google App Engine
This is Rietveld 408576698