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

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

Issue 166273007: Reland r251495: Re-enable prerender RemovingLink browser tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
« no previous file with comments | « chrome/browser/prerender/prerender_browsertest.cc ('k') | chrome/test/data/prerender/prerender_loader.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 7903b3eddd9cb69bdf70d35beee5e208a9e1d90d..6d125e1e0a20ef9ee82fe263d2b282db2c47c048 100644
--- a/chrome/test/data/prerender/prerender_events_common.js
+++ b/chrome/test/data/prerender/prerender_events_common.js
@@ -10,66 +10,80 @@
// Currently only errors with the ordering of Prerender events are caught.
var hadPrerenderEventErrors = false;
-var receivedPrerenderStartEvents = [];
-var receivedPrerenderLoadEvents = [];
-var receivedPrerenderDomContentLoadedEvents = [];
-var receivedPrerenderStopEvents = [];
-
-function PrerenderStartHandler(index) {
- if (receivedPrerenderStartEvents[index] ||
- receivedPrerenderLoadEvents[index] ||
- receivedPrerenderStopEvents[index]) {
- hadPrerenderEventErrors = true;
- return;
+var receivedPrerenderEvents = {
+ 'webkitprerenderstart': [],
+ 'webkitprerenderdomcontentloaded': [],
+ 'webkitprerenderload': [],
+ 'webkitprerenderstop': [],
+}
+// A list of callbacks to be called on every prerender event. Each callback
+// returns true if it should never be called again, or false to remain in the
+// list and be called on future events. These are used to implement
+// WaitForPrerenderEventCount.
+var prerenderEventCallbacks = [];
+
+function GetPrerenderEventCount(index, type) {
+ return receivedPrerenderEvents[type][index] || 0;
+}
+
+function PrerenderEventHandler(index, ev) {
+ // Check for errors.
+ if (ev.type == 'webkitprerenderstart') {
+ // No event may preceed start.
+ if (GetPrerenderEventCount(index, 'webkitprerenderstart') ||
+ GetPrerenderEventCount(index, 'webkitprerenderdomcontentloaded') ||
+ GetPrerenderEventCount(index, 'webkitprerenderload') ||
+ GetPrerenderEventCount(index, 'webkitprerenderstop')) {
+ hadPrerenderEventErrors = true;
+ }
+ } else {
+ // There may be multiple load or domcontentloaded events, but they must not
+ // come after start and must come before stop. And there may be at most one
+ // start. Note that stop may be delivered without any load events.
+ if (!GetPrerenderEventCount(index, 'webkitprerenderstart') ||
+ GetPrerenderEventCount(index, 'webkitprerenderstop')) {
+ hadPrerenderEventErrors = true;
+ }
}
- receivedPrerenderStartEvents[index] = true;
-}
-function PrerenderLoadHandler(index) {
- if (!receivedPrerenderStartEvents[index] ||
- receivedPrerenderStopEvents[index]) {
- hadPrerenderEventErrors = true;
- return;
- }
- if (!receivedPrerenderLoadEvents[index])
- receivedPrerenderLoadEvents[index] = 0;
- receivedPrerenderLoadEvents[index]++;
-}
+ // Update count.
+ receivedPrerenderEvents[ev.type][index] =
+ (receivedPrerenderEvents[ev.type][index] || 0) + 1;
-function PrerenderDomContentLoadedHandler(index) {
- if (!receivedPrerenderStartEvents[index] ||
- receivedPrerenderStopEvents[index]) {
- hadPrerenderEventErrors = true;
- return;
- }
- if (!receivedPrerenderDomContentLoadedEvents[index])
- receivedPrerenderDomContentLoadedEvents[index] = 0;
- receivedPrerenderDomContentLoadedEvents[index]++;
+ // Run all callbacks. Remove the ones that are done.
+ prerenderEventCallbacks = prerenderEventCallbacks.filter(function(callback) {
+ return !callback();
+ });
}
-function PrerenderStopHandler(index) {
- if (!receivedPrerenderStartEvents[index] ||
- receivedPrerenderStopEvents[index]) {
- hadPrerenderEventErrors = true;
- return;
- }
- receivedPrerenderStopEvents[index] = true;
+// 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);
- link.addEventListener('webkitprerenderload',
- PrerenderLoadHandler.bind(null, index), false);
+ PrerenderEventHandler.bind(null, index), false);
link.addEventListener('webkitprerenderdomcontentloaded',
- PrerenderDomContentLoadedHandler.bind(null, index),
- false);
+ PrerenderEventHandler.bind(null, index), false);
+ link.addEventListener('webkitprerenderload',
+ 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);
@@ -77,6 +91,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;
« no previous file with comments | « chrome/browser/prerender/prerender_browsertest.cc ('k') | chrome/test/data/prerender/prerender_loader.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698