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

Unified Diff: chrome/test/data/prerender/prerender_events_common.js

Issue 142013004: Re-enable prerender RemovingLink browser tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: New test, and machinery to support said test. Created 6 years, 10 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/prerender/prerender_events_common.js
diff --git a/chrome/test/data/prerender/prerender_events_common.js b/chrome/test/data/prerender/prerender_events_common.js
index 74fb184ef637c2605e71bd89deee638f019141ca..56783c51151693c4272ac04c240c273611fef2e8 100644
--- a/chrome/test/data/prerender/prerender_events_common.js
+++ b/chrome/test/data/prerender/prerender_events_common.js
@@ -10,51 +10,73 @@
// Currently only errors with the ordering of Prerender events are caught.
var hadPrerenderEventErrors = false;
-var receivedPrerenderStartEvents = [];
-var receivedPrerenderLoadEvents = [];
-var receivedPrerenderStopEvents = [];
-
-function PrerenderStartHandler(index) {
- if (receivedPrerenderStartEvents[index] ||
- receivedPrerenderLoadEvents[index] ||
- receivedPrerenderStopEvents[index]) {
- hadPrerenderEventErrors = true;
- return;
- }
- receivedPrerenderStartEvents[index] = true;
+var receivedPrerenderEvents = {
+ 'webkitprerenderstart': [],
+ 'webkitprerenderload': [],
+ 'webkitprerenderstop': [],
}
+var prerenderEventCallbacks = [];
-function PrerenderLoadHandler(index) {
- if (!receivedPrerenderStartEvents[index] ||
- receivedPrerenderStopEvents[index]) {
- hadPrerenderEventErrors = true;
- return;
- }
- if (!receivedPrerenderLoadEvents[index])
- receivedPrerenderLoadEvents[index] = 0;
- receivedPrerenderLoadEvents[index]++;
+function GetPrerenderEventCount(index, type) {
+ return receivedPrerenderEvents[type][index] || 0;
}
-function PrerenderStopHandler(index) {
- if (!receivedPrerenderStartEvents[index] ||
- receivedPrerenderStopEvents[index]) {
- hadPrerenderEventErrors = true;
- return;
+function PrerenderEventHandler(index, ev) {
+ // Check for errors.
+ if (ev.type == 'webkitprerenderstart') {
+ if (GetPrerenderEventCount(index, 'webkitprerenderstart') ||
+ GetPrerenderEventCount(index, 'webkitprerenderload') ||
+ GetPrerenderEventCount(index, 'webkitprerenderstop')) {
+ hadPrerenderEventErrors = true;
+ }
+ } else if (ev.type == 'webkitprerenderload') {
+ if (!GetPrerenderEventCount(index, 'webkitprerenderstart') ||
+ GetPrerenderEventCount(index, 'webkitprerenderstop')) {
mmenke 2014/02/13 16:34:33 Can we get multiple load events? I guess if a pag
davidben 2014/02/14 01:01:13 Done. Yeah, multiple loads are possible.
+ hadPrerenderEventErrors = true;
mmenke 2014/02/14 17:33:01 Why did you delete this block?
davidben 2014/02/14 19:18:26 The check for all the events other than webkitprer
mmenke 2014/02/14 19:25:44 Good point.
+ }
+ } else if (ev.type == 'webkitprerenderstop') {
+ if (!GetPrerenderEventCount(index, 'webkitprerenderstart') ||
+ GetPrerenderEventCount(index, 'webkitprerenderstop')) {
mmenke 2014/02/13 16:34:33 Think it's worth commenting that there may or may
davidben 2014/02/14 01:01:13 Done.
+ hadPrerenderEventErrors = true;
+ }
}
- receivedPrerenderStopEvents[index] = true;
+
+ // Update count.
+ receivedPrerenderEvents[ev.type][index] =
+ (receivedPrerenderEvents[ev.type][index] || 0) + 1;
mmenke 2014/02/13 16:34:33 nit: +2 indent.
davidben 2014/02/14 01:01:13 Done.
+
+ // Run all callbacks. Remove the ones that are done.
mmenke 2014/02/13 16:34:33 There's no documentation of how these callbacks sh
davidben 2014/02/14 01:01:13 Done.
+ prerenderEventCallbacks = prerenderEventCallbacks.filter(function(cb) {
mmenke 2014/02/13 16:34:33 nit: "cb" is more often writen out.
davidben 2014/02/14 01:01:13 Done.
+ return !cb();
+ });
+}
+
+// Calls |callback| when at least |count| instances of event |type| have been
+// observed for prerender |index|.
+function WaitForPrerenderEventCount(index, type, count, callback) {
+ var checkCount = function() {
+ if (GetPrerenderEventCount(index, type) >= count) {
+ callback();
+ return true;
+ }
+ return false;
+ };
+ if (!checkCount())
+ prerenderEventCallbacks.push(checkCount);
}
function AddEventHandlersToLinkElement(link, index) {
link.addEventListener('webkitprerenderstart',
- PrerenderStartHandler.bind(null, index), false);
+ PrerenderEventHandler.bind(null, index), false);
link.addEventListener('webkitprerenderload',
- PrerenderLoadHandler.bind(null, index), false);
+ PrerenderEventHandler.bind(null, index), false);
link.addEventListener('webkitprerenderstop',
- PrerenderStopHandler.bind(null, index), false);
+ PrerenderEventHandler.bind(null, index), false);
}
function AddPrerender(url, index) {
var link = document.createElement('link');
+ link.id = 'prerenderElement' + index;
link.rel = 'prerender';
link.href = url;
AddEventHandlersToLinkElement(link, index);
@@ -62,6 +84,19 @@ function AddPrerender(url, index) {
return link;
}
+function RemoveLinkElement(index) {
+ var link = document.getElementById('prerenderElement' + index);
+ link.parentElement.removeChild(link);
+}
+
+function ExtractGetParameterBadlyAndInsecurely(param, defaultValue) {
+ var re = RegExp('[&?]' + param + '=([^&?#]*)');
+ var result = re.exec(document.location);
+ if (result)
+ return result[1];
+ return defaultValue;
+}
+
function AddAnchor(href, target) {
var a = document.createElement('a');
a.href = href;

Powered by Google App Engine
This is Rietveld 408576698