diff options
-rw-r--r-- | chrome/browser/prerender/prerender_browsertest.cc | 42 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_contents.cc | 9 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_contents.h | 4 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_handle.cc | 15 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_handle.h | 5 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_link_manager.cc | 21 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_link_manager.h | 2 | ||||
-rw-r--r-- | chrome/common/prerender_messages.h | 4 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerender_dispatcher.cc | 14 | ||||
-rw-r--r-- | chrome/renderer/prerender/prerender_dispatcher.h | 1 | ||||
-rw-r--r-- | chrome/test/data/prerender/prerender_events_common.js | 53 | ||||
-rw-r--r-- | chrome/test/data/prerender/prerender_loader.html | 16 | ||||
-rw-r--r-- | chrome/test/data/prerender/prerender_loader_removing_links.html | 18 | ||||
-rw-r--r-- | chrome/test/data/prerender/prerender_page_pending.html | 18 | ||||
-rw-r--r-- | chrome/test/data/prerender/prerender_page_removes_pending.html | 18 |
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> |