summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/prerender/prerender_browsertest.cc42
-rw-r--r--chrome/browser/prerender/prerender_contents.cc9
-rw-r--r--chrome/browser/prerender/prerender_contents.h4
-rw-r--r--chrome/browser/prerender/prerender_handle.cc15
-rw-r--r--chrome/browser/prerender/prerender_handle.h5
-rw-r--r--chrome/browser/prerender/prerender_link_manager.cc21
-rw-r--r--chrome/browser/prerender/prerender_link_manager.h2
-rw-r--r--chrome/common/prerender_messages.h4
-rw-r--r--chrome/renderer/prerender/prerender_dispatcher.cc14
-rw-r--r--chrome/renderer/prerender/prerender_dispatcher.h1
-rw-r--r--chrome/test/data/prerender/prerender_events_common.js53
-rw-r--r--chrome/test/data/prerender/prerender_loader.html16
-rw-r--r--chrome/test/data/prerender/prerender_loader_removing_links.html18
-rw-r--r--chrome/test/data/prerender/prerender_page_pending.html18
-rw-r--r--chrome/test/data/prerender/prerender_page_removes_pending.html18
15 files changed, 174 insertions, 66 deletions
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc
index 922d817..8b5ac62 100644
--- a/chrome/browser/prerender/prerender_browsertest.cc
+++ b/chrome/browser/prerender/prerender_browsertest.cc
@@ -864,6 +864,19 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest {
return received_prerender_started;
}
+ bool DidReceivePrerenderLoadEventForLinkNumber(int index) const {
+ bool received_prerender_loaded;
+ std::string expression = base::StringPrintf(
+ "window.domAutomationController.send(Boolean("
+ "receivedPrerenderLoadEvents[%d]))", index);
+
+ CHECK(content::ExecuteJavaScriptAndExtractBool(
+ chrome::GetActiveWebContents(current_browser())->GetRenderViewHost(),
+ "", expression,
+ &received_prerender_loaded));
+ return received_prerender_loaded;
+ }
+
bool DidReceivePrerenderStopEventForLinkNumber(int index) const {
bool received_prerender_stopped;
std::string expression = base::StringPrintf(
@@ -878,6 +891,15 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest {
return received_prerender_stopped;
}
+ bool HadPrerenderEventErrors() const {
+ bool had_prerender_event_errors;
+ CHECK(content::ExecuteJavaScriptAndExtractBool(
+ chrome::GetActiveWebContents(current_browser())->GetRenderViewHost(),
+ "", "window.domAutomationController.send(Boolean("
+ "hadPrerenderEventErrors))", &had_prerender_event_errors));
+ return had_prerender_event_errors;
+ }
+
// Asserting on this can result in flaky tests. PrerenderHandles are
// removed from the PrerenderLinkManager when the prerender is canceled from
// the browser, when the prerenders are cancelled from the renderer process,
@@ -1183,6 +1205,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderPagePending) {
EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
+ EXPECT_FALSE(HadPrerenderEventErrors());
const GURL prerender_page_url =
test_server()->GetURL("files/prerender/prerender_page.html");
@@ -1216,6 +1239,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovesPending) {
EXPECT_FALSE(DidReceivePrerenderStartEventForLinkNumber(1));
EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
+ EXPECT_FALSE(HadPrerenderEventErrors());
// IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
// calls did a thread/process hop to the renderer which insured pending
// renderer events have arrived.
@@ -1238,6 +1262,7 @@ IN_PROC_BROWSER_TEST_F(
RemoveLinkElement(0);
EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
+ EXPECT_FALSE(HadPrerenderEventErrors());
// IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
// calls did a thread/process hop to the renderer which insured pending
// renderer events have arrived.
@@ -1265,6 +1290,7 @@ IN_PROC_BROWSER_TEST_F(
EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
+ EXPECT_FALSE(HadPrerenderEventErrors());
// IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
// calls did a thread/process hop to the renderer which insured pending
// renderer events have arrived.
@@ -1298,6 +1324,7 @@ IN_PROC_BROWSER_TEST_F(
EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
+ EXPECT_FALSE(HadPrerenderEventErrors());
// IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
// calls did a thread/process hop to the renderer which insured pending
// renderer events have arrived.
@@ -2409,6 +2436,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEvents) {
PrerenderTestURL("files/prerender/prerender_page.html",
FINAL_STATUS_CANCELLED, 1);
EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
+ EXPECT_TRUE(DidReceivePrerenderLoadEventForLinkNumber(0));
EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
MessageLoop::current()->PostTask(
@@ -2417,6 +2445,20 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEvents) {
EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
EXPECT_TRUE(DidReceivePrerenderStopEventForLinkNumber(0));
+ EXPECT_FALSE(HadPrerenderEventErrors());
+}
+
+// PrerenderBrowserTest.PrerenderEventsNoLoad may pass flakily on regression,
+// so please be aggressive about filing bugs when this test is failing.
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEventsNoLoad) {
+ // This should be canceled.
+ PrerenderTestURL("files/prerender/prerender_http_auth_container.html",
+ FINAL_STATUS_AUTH_NEEDED,
+ 1);
+ EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
+ EXPECT_FALSE(DidReceivePrerenderLoadEventForLinkNumber(0));
+ EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
+ EXPECT_FALSE(HadPrerenderEventErrors());
}
// Prerendering and history tests.
diff --git a/chrome/browser/prerender/prerender_contents.cc b/chrome/browser/prerender/prerender_contents.cc
index 22165b1..0eb4159 100644
--- a/chrome/browser/prerender/prerender_contents.cc
+++ b/chrome/browser/prerender/prerender_contents.cc
@@ -140,6 +140,10 @@ class PrerenderContents::WebContentsDelegateImpl
PrerenderContents* prerender_contents_;
};
+void PrerenderContents::Observer::OnPrerenderStopLoading(
+ PrerenderContents* contents) {
+}
+
void PrerenderContents::Observer::OnPrerenderAddAlias(
PrerenderContents* contents,
const GURL& alias_url) {
@@ -467,6 +471,10 @@ void PrerenderContents::NotifyPrerenderStart() {
FOR_EACH_OBSERVER(Observer, observer_list_, OnPrerenderStart(this));
}
+void PrerenderContents::NotifyPrerenderStopLoading() {
+ FOR_EACH_OBSERVER(Observer, observer_list_, OnPrerenderStopLoading(this));
+}
+
void PrerenderContents::NotifyPrerenderStop() {
DCHECK_NE(FINAL_STATUS_MAX, final_status_);
FOR_EACH_OBSERVER(Observer, observer_list_, OnPrerenderStop(this));
@@ -541,6 +549,7 @@ void PrerenderContents::RenderViewGone(base::TerminationStatus status) {
void PrerenderContents::DidStopLoading(
content::RenderViewHost* render_view_host) {
has_stopped_loading_ = true;
+ NotifyPrerenderStopLoading();
}
void PrerenderContents::DidStartProvisionalLoadForFrame(
diff --git a/chrome/browser/prerender/prerender_contents.h b/chrome/browser/prerender/prerender_contents.h
index e264906..1fc9065 100644
--- a/chrome/browser/prerender/prerender_contents.h
+++ b/chrome/browser/prerender/prerender_contents.h
@@ -75,6 +75,9 @@ class PrerenderContents : public content::NotificationObserver,
// Signals that the prerender has started running.
virtual void OnPrerenderStart(PrerenderContents* contents) = 0;
+ // Signals that the prerender has had its load event.
+ virtual void OnPrerenderStopLoading(PrerenderContents* contents);
+
// Signals that the prerender has stopped running.
virtual void OnPrerenderStop(PrerenderContents* contents) = 0;
@@ -292,6 +295,7 @@ class PrerenderContents : public content::NotificationObserver,
// These call out to methods on our Observers, using our observer_list_. Note
// that NotifyPrerenderStop() also clears the observer list.
void NotifyPrerenderStart();
+ void NotifyPrerenderStopLoading();
void NotifyPrerenderStop();
void NotifyPrerenderAddAlias(const GURL& alias_url);
void NotifyPrerenderCreatedMatchCompleteReplacement(
diff --git a/chrome/browser/prerender/prerender_handle.cc b/chrome/browser/prerender/prerender_handle.cc
index 5ef9b4d..412dceb 100644
--- a/chrome/browser/prerender/prerender_handle.cc
+++ b/chrome/browser/prerender/prerender_handle.cc
@@ -91,13 +91,13 @@ void PrerenderHandle::OnPrerenderStart(PrerenderContents* prerender_contents) {
observer_->OnPrerenderStart(this);
}
-void PrerenderHandle::OnPrerenderAddAlias(PrerenderContents* prerender_contents,
- const GURL& alias_url) {
+void PrerenderHandle::OnPrerenderStopLoading(
+ PrerenderContents* prerender_contents) {
DCHECK(CalledOnValidThread());
DCHECK(prerender_data_);
DCHECK_EQ(prerender_data_->contents(), prerender_contents);
if (observer_)
- observer_->OnPrerenderAddAlias(this, alias_url);
+ observer_->OnPrerenderStopLoading(this);
}
void PrerenderHandle::OnPrerenderStop(PrerenderContents* prerender_contents) {
@@ -106,6 +106,15 @@ void PrerenderHandle::OnPrerenderStop(PrerenderContents* prerender_contents) {
observer_->OnPrerenderStop(this);
}
+void PrerenderHandle::OnPrerenderAddAlias(PrerenderContents* prerender_contents,
+ const GURL& alias_url) {
+ DCHECK(CalledOnValidThread());
+ DCHECK(prerender_data_);
+ DCHECK_EQ(prerender_data_->contents(), prerender_contents);
+ if (observer_)
+ observer_->OnPrerenderAddAlias(this, alias_url);
+}
+
void PrerenderHandle::OnPrerenderCreatedMatchCompleteReplacement(
PrerenderContents* contents, PrerenderContents* replacement) {
DCHECK(CalledOnValidThread());
diff --git a/chrome/browser/prerender/prerender_handle.h b/chrome/browser/prerender/prerender_handle.h
index 156b92d..c0dc0d8 100644
--- a/chrome/browser/prerender/prerender_handle.h
+++ b/chrome/browser/prerender/prerender_handle.h
@@ -35,6 +35,9 @@ class PrerenderHandle : public base::NonThreadSafe,
// Signals that the prerender has started running.
virtual void OnPrerenderStart(PrerenderHandle* handle) = 0;
+ // Signals that the prerender has had its load event.
+ virtual void OnPrerenderStopLoading(PrerenderHandle* handle) = 0;
+
// Signals that the prerender has stopped running.
virtual void OnPrerenderStop(PrerenderHandle* handle) = 0;
@@ -80,6 +83,8 @@ class PrerenderHandle : public base::NonThreadSafe,
// From PrerenderContents::Observer:
virtual void OnPrerenderStart(PrerenderContents* prerender_contents) OVERRIDE;
+ virtual void OnPrerenderStopLoading(PrerenderContents* prerender_contents)
+ OVERRIDE;
virtual void OnPrerenderStop(PrerenderContents* prerender_contents) OVERRIDE;
virtual void OnPrerenderAddAlias(PrerenderContents* prerender_contents,
const GURL& alias_url) OVERRIDE;
diff --git a/chrome/browser/prerender/prerender_link_manager.cc b/chrome/browser/prerender/prerender_link_manager.cc
index 89b228e..597c352 100644
--- a/chrome/browser/prerender/prerender_link_manager.cc
+++ b/chrome/browser/prerender/prerender_link_manager.cc
@@ -309,15 +309,14 @@ void PrerenderLinkManager::OnPrerenderStart(
new PrerenderMsg_OnPrerenderStart(prerender->prerender_id));
}
-void PrerenderLinkManager::OnPrerenderAddAlias(
- PrerenderHandle* prerender_handle,
- const GURL& alias_url) {
+void PrerenderLinkManager::OnPrerenderStopLoading(
+ PrerenderHandle* prerender_handle) {
LinkPrerender* prerender = FindByPrerenderHandle(prerender_handle);
if (!prerender)
return;
+
Send(prerender->launcher_child_id,
- new PrerenderMsg_OnPrerenderAddAlias(prerender->prerender_id,
- alias_url));
+ new PrerenderMsg_OnPrerenderStopLoading(prerender->prerender_id));
}
void PrerenderLinkManager::OnPrerenderStop(
@@ -332,4 +331,16 @@ void PrerenderLinkManager::OnPrerenderStop(
StartPrerenders();
}
+void PrerenderLinkManager::OnPrerenderAddAlias(
+ PrerenderHandle* prerender_handle,
+ const GURL& alias_url) {
+ LinkPrerender* prerender = FindByPrerenderHandle(prerender_handle);
+ if (!prerender)
+ return;
+
+ Send(prerender->launcher_child_id,
+ new PrerenderMsg_OnPrerenderAddAlias(prerender->prerender_id,
+ alias_url));
+}
+
} // namespace prerender
diff --git a/chrome/browser/prerender/prerender_link_manager.h b/chrome/browser/prerender/prerender_link_manager.h
index a881485..a914cfc 100644
--- a/chrome/browser/prerender/prerender_link_manager.h
+++ b/chrome/browser/prerender/prerender_link_manager.h
@@ -113,6 +113,8 @@ class PrerenderLinkManager : public ProfileKeyedService,
// From PrerenderHandle::Observer:
virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE;
+ virtual void OnPrerenderStopLoading(PrerenderHandle* prerender_handle)
+ OVERRIDE;
virtual void OnPrerenderStop(PrerenderHandle* prerender_handle) OVERRIDE;
virtual void OnPrerenderAddAlias(PrerenderHandle* prerender_handle,
const GURL& alias_url) OVERRIDE;
diff --git a/chrome/common/prerender_messages.h b/chrome/common/prerender_messages.h
index c5d6b2a..a90daf4 100644
--- a/chrome/common/prerender_messages.h
+++ b/chrome/common/prerender_messages.h
@@ -49,6 +49,10 @@ IPC_MESSAGE_ROUTED1(PrerenderMsg_SetIsPrerendering,
IPC_MESSAGE_CONTROL1(PrerenderMsg_OnPrerenderStart,
int /* prerender_id */)
+// Signals to launcher that a prerender is running.
+IPC_MESSAGE_CONTROL1(PrerenderMsg_OnPrerenderStopLoading,
+ int /* prerender_id */)
+
// Signals to a launcher that a new alias has been added to a prerender.
IPC_MESSAGE_CONTROL2(PrerenderMsg_OnPrerenderAddAlias,
int /* prerender_id */,
diff --git a/chrome/renderer/prerender/prerender_dispatcher.cc b/chrome/renderer/prerender/prerender_dispatcher.cc
index d9c4b93..ecbe6ba 100644
--- a/chrome/renderer/prerender/prerender_dispatcher.cc
+++ b/chrome/renderer/prerender/prerender_dispatcher.cc
@@ -46,6 +46,18 @@ void PrerenderDispatcher::OnPrerenderStart(int prerender_id) {
OnPrerenderAddAlias(prerender_id, prerender.url());
}
+void PrerenderDispatcher::OnPrerenderStopLoading(int prerender_id) {
+ DCHECK_NE(0u, prerenders_.count(prerender_id));
+ std::map<int, WebPrerender>::iterator it = prerenders_.find(prerender_id);
+
+ WebPrerender& prerender = it->second;
+ DCHECK(!prerender.isNull())
+ << "OnPrerenderStopLoading shouldn't be called from a unit test, the only"
+ << "context in which a WebPrerender in the dispatcher can be null.";
+
+ prerender.didSendLoadForPrerender();
+}
+
void PrerenderDispatcher::OnPrerenderAddAlias(int prerender_id,
const GURL& url) {
DCHECK_NE(0u, prerenders_.count(prerender_id));
@@ -84,6 +96,8 @@ bool PrerenderDispatcher::OnControlMessageReceived(
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(PrerenderDispatcher, message)
IPC_MESSAGE_HANDLER(PrerenderMsg_OnPrerenderStart, OnPrerenderStart)
+ IPC_MESSAGE_HANDLER(PrerenderMsg_OnPrerenderStopLoading,
+ OnPrerenderStopLoading)
IPC_MESSAGE_HANDLER(PrerenderMsg_OnPrerenderAddAlias, OnPrerenderAddAlias)
IPC_MESSAGE_HANDLER(PrerenderMsg_OnPrerenderStop, OnPrerenderStop)
IPC_MESSAGE_UNHANDLED(handled = false)
diff --git a/chrome/renderer/prerender/prerender_dispatcher.h b/chrome/renderer/prerender/prerender_dispatcher.h
index 9d63639..fa011c3 100644
--- a/chrome/renderer/prerender/prerender_dispatcher.h
+++ b/chrome/renderer/prerender/prerender_dispatcher.h
@@ -34,6 +34,7 @@ class PrerenderDispatcher : public content::RenderProcessObserver,
// Message handlers for messages from the browser process.
void OnPrerenderStart(int prerender_id);
+ void OnPrerenderStopLoading(int prerender_id);
void OnPrerenderAddAlias(int prerender_id, const GURL& url);
void OnPrerenderStop(int prerender_id);
diff --git a/chrome/test/data/prerender/prerender_events_common.js b/chrome/test/data/prerender/prerender_events_common.js
new file mode 100644
index 0000000..c6367d8
--- /dev/null
+++ b/chrome/test/data/prerender/prerender_events_common.js
@@ -0,0 +1,53 @@
+// 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.
+
+// Common js for prerender loaders; defines the helper functions that put
+// event handlers on prerenders and track the events for browser tests.
+
+// TODO(gavinp): Put more common loader logic in here.
+
+// 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;
+}
+
+function PrerenderLoadHandler(index) {
+ if (!receivedPrerenderStartEvents[index] ||
+ receivedPrerenderLoadEvents[index] ||
+ receivedPrerenderStopEvents[index]) {
+ hadPrerenderEventErrors = true;
+ return;
+ }
+ receivedPrerenderLoadEvents[index] = true;
+}
+
+function PrerenderStopHandler(index) {
+ if (!receivedPrerenderStartEvents[index] ||
+ receivedPrerenderStopEvents[index]) {
+ hadPrerenderEventErrors = true;
+ return;
+ }
+ receivedPrerenderStopEvents[index] = true;
+}
+
+function AddEventHandlersToLinkElement(link, index) {
+ link.addEventListener('webkitprerenderstart',
+ PrerenderStartHandler.bind(null, index), false);
+ link.addEventListener('webkitprerenderload',
+ PrerenderLoadHandler.bind(null, index), false);
+ link.addEventListener('webkitprerenderstop',
+ PrerenderStopHandler.bind(null, index), false);
+}
diff --git a/chrome/test/data/prerender/prerender_loader.html b/chrome/test/data/prerender/prerender_loader.html
index abd3875..c5e438b 100644
--- a/chrome/test/data/prerender/prerender_loader.html
+++ b/chrome/test/data/prerender/prerender_loader.html
@@ -2,18 +2,9 @@
<head>
<title>Preloader</title>
-<script>
- var receivedPrerenderStartEvents = [];
- var receivedPrerenderStopEvents = [];
-
- function PrerenderStartHandler() {
- receivedPrerenderStartEvents[0] = true;
- }
-
- function PrerenderStopHandler() {
- receivedPrerenderStopEvents[0] = true;
- }
+<script src="prerender_events_common.js"></script>
+<script>
function Click() {
var eventObject = document.createEvent('MouseEvents');
eventObject.initMouseEvent('click');
@@ -76,8 +67,7 @@
<script>
document.write('<link id="theprerender" rel="prerender" href="REPLACE_WITH_PRERENDER_URL"/>');
prerender = document.getElementById('theprerender');
- prerender.addEventListener('webkitprerenderstart', PrerenderStartHandler, false);
- prerender.addEventListener('webkitprerenderstop', PrerenderStopHandler, false);
+ AddEventHandlersToLinkElement(prerender, 0);
</script>
<a target="_blank" id="toClickTarget"
href="REPLACE_WITH_DESTINATION_URL">Link To click in new window</a>
diff --git a/chrome/test/data/prerender/prerender_loader_removing_links.html b/chrome/test/data/prerender/prerender_loader_removing_links.html
index e318869..847cf77 100644
--- a/chrome/test/data/prerender/prerender_loader_removing_links.html
+++ b/chrome/test/data/prerender/prerender_loader_removing_links.html
@@ -2,6 +2,8 @@
<head>
<title>Preloader</title>
+<script src="prerender_events_common.js"></script>
+
<script>
function ExtractGetParameterBadlyAndInsecurely(param, defaultValue) {
var re = RegExp('[&?]' + param + '=([^&?#]*)');
@@ -14,17 +16,6 @@ function ExtractGetParameterBadlyAndInsecurely(param, defaultValue) {
var numLinksToInsert =
ExtractGetParameterBadlyAndInsecurely('links_to_insert', 1);
-var receivedPrerenderStartEvents = [];
-var receivedPrerenderStopEvents = [];
-
-function PrerenderStartHandlerForLink(index) {
- receivedPrerenderStartEvents[index] = true;
-}
-
-function PrerenderStopHandlerForLink(index) {
- receivedPrerenderStopEvents[index] = true;
-}
-
function RemoveLinkElement(index) {
var link = document.getElementById('prerenderElement' + index);
link.parentElement.removeChild(link);
@@ -38,10 +29,7 @@ for (var i = 0; i < numLinksToInsert; ++i) {
'<link id="prerenderElement' + i +
'" rel="prerender" href="REPLACE_WITH_PRERENDER_URL"/>');
var link = document.getElementById('prerenderElement' + i);
- link.addEventListener('webkitprerenderstart',
- PrerenderStartHandlerForLink.bind(null, i), false);
- link.addEventListener('webkitprerenderstop',
- PrerenderStopHandlerForLink.bind(null, i), false);
+ AddEventHandlersToLinkElement(link, i);
}
</script>
<a id="toClick" href="REPLACE_WITH_DESTINATION_URL">Link To Click For First Prerender</a>
diff --git a/chrome/test/data/prerender/prerender_page_pending.html b/chrome/test/data/prerender/prerender_page_pending.html
index 01f8b08..177a8ea 100644
--- a/chrome/test/data/prerender/prerender_page_pending.html
+++ b/chrome/test/data/prerender/prerender_page_pending.html
@@ -7,20 +7,11 @@ but not earlier.
<head>
<title>Prerender Page</title>
+<script src="prerender_events_common.js"></script>
+
<script>
var pageWasPrerendered = false;
-var receivedPrerenderStartEvents = [];
-var receivedPrerenderStopEvents = [];
-
-function PrerenderStartHandlerForLink(index) {
- receivedPrerenderStartEvents[index] = true;
-}
-
-function PrerenderStopHandlerForLink(index) {
- receivedPrerenderStopEvents[index] = true;
-}
-
function DidPrerenderPass() {
pageWasPrerendered = true;
return !receivedPrerenderStartEvents[0] && !receivedPrerenderStopEvents[0];
@@ -33,10 +24,7 @@ function DidDisplayPass() {
}
var link = document.getElementById('thePrerender');
-link.addEventListener('webkitprerenderstart',
- PrerenderStartHandlerForLink.bind(null, 0), false);
-link.addEventListener('webkitprerenderstop',
- PrerenderStopHandlerForLink.bind(null, 0), false);
+AddEventHandlersToLinkElement(link, 0);
</script>
</head>
diff --git a/chrome/test/data/prerender/prerender_page_removes_pending.html b/chrome/test/data/prerender/prerender_page_removes_pending.html
index e6797c4..4340c8f 100644
--- a/chrome/test/data/prerender/prerender_page_removes_pending.html
+++ b/chrome/test/data/prerender/prerender_page_removes_pending.html
@@ -7,20 +7,11 @@ while pending never start.
<head>
<title>Prerender Page</title>
+<script src="prerender_events_common.js"></script>
+
<script>
var pageWasPrerendered = false;
-var receivedPrerenderStartEvents = [];
-var receivedPrerenderStopEvents = [];
-
-function PrerenderStartHandlerForLink(index) {
- receivedPrerenderStartEvents[index] = true;
-}
-
-function PrerenderStopHandlerForLink(index) {
- receivedPrerenderStopEvents[index] = true;
-}
-
function DidPrerenderPass() {
pageWasPrerendered = true;
var link = document.getElementById('thePrerender');
@@ -37,10 +28,7 @@ function DidDisplayPass() {
}
var link = document.getElementById('thePrerender');
-link.addEventListener('webkitprerenderstart',
- PrerenderStartHandlerForLink.bind(null, 0), false);
-link.addEventListener('webkitprerenderstop',
- PrerenderStopHandlerForLink.bind(null, 0), false);
+AddEventHandlersToLink(link, 0);
</script>
</head>