diff options
author | shishir@chromium.org <shishir@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-06 23:01:07 +0000 |
---|---|---|
committer | shishir@chromium.org <shishir@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-06 23:01:07 +0000 |
commit | de1fcdd5944c7095ffac2bff41e55baa6779ebfb (patch) | |
tree | e7975c610b3ed781d8c2eb3bde597d5c43eb4172 /chrome/browser/prerender/prerender_browsertest.cc | |
parent | 45d83a197a7aa201a0cbe72cbf08b79f72649eba (diff) | |
download | chromium_src-de1fcdd5944c7095ffac2bff41e55baa6779ebfb.zip chromium_src-de1fcdd5944c7095ffac2bff41e55baa6779ebfb.tar.gz chromium_src-de1fcdd5944c7095ffac2bff41e55baa6779ebfb.tar.bz2 |
Fixing PrerenderBrowserTest.PrerenderHTML5VideoNetwork test to test for stalled event.
BUG=None
TEST=PrerenderBrowserTest.PrerenderHTML5VideoNetwork
Review URL: http://codereview.chromium.org/9972001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@131204 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/prerender/prerender_browsertest.cc')
-rw-r--r-- | chrome/browser/prerender/prerender_browsertest.cc | 96 |
1 files changed, 81 insertions, 15 deletions
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc index 1c0b922..3a06eaf 100644 --- a/chrome/browser/prerender/prerender_browsertest.cc +++ b/chrome/browser/prerender/prerender_browsertest.cc @@ -71,6 +71,10 @@ namespace prerender { namespace { +// Constants used in the test HTML files. +static const char* kReadyTitle = "READY"; +static const char* kPassTitle = "PASS"; + std::string CreateClientRedirect(const std::string& dest_url) { const char* const kClientRedirectBase = "client-redirect?"; return kClientRedirectBase + dest_url; @@ -125,7 +129,8 @@ class TestPrerenderContents : public PrerenderContents { const GURL& url, const content::Referrer& referrer, int expected_number_of_loads, - FinalStatus expected_final_status) + FinalStatus expected_final_status, + bool prerender_should_wait_for_ready_title) : PrerenderContents(prerender_manager, prerender_tracker, profile, url, referrer, ORIGIN_LINK_REL_PRERENDER, PrerenderManager::kNoExperiment), @@ -140,7 +145,9 @@ class TestPrerenderContents : public PrerenderContents { expected_final_status != FINAL_STATUS_EVICTED && expected_final_status != FINAL_STATUS_APP_TERMINATING && expected_final_status != FINAL_STATUS_MAX), - expected_pending_prerenders_(0) { + expected_pending_prerenders_(0), + prerender_should_wait_for_ready_title_( + prerender_should_wait_for_ready_title) { if (expected_number_of_loads == 0) MessageLoopForUI::current()->Quit(); } @@ -225,6 +232,24 @@ class TestPrerenderContents : public PrerenderContents { } } + virtual WebContents* CreateWebContents( + content::SessionStorageNamespace* session_storage_namespace) OVERRIDE { + WebContents* web_contents = PrerenderContents::CreateWebContents( + session_storage_namespace); + string16 ready_title = ASCIIToUTF16(kReadyTitle); + if (prerender_should_wait_for_ready_title_) + ready_title_watcher_.reset(new ui_test_utils::TitleWatcher( + web_contents, ready_title)); + return web_contents; + } + + void WaitForPrerenderToHaveReadyTitleIfRequired() { + if (ready_title_watcher_.get()) { + string16 ready_title = ASCIIToUTF16(kReadyTitle); + ASSERT_EQ(ready_title, ready_title_watcher_->WaitAndGetTitle()); + } + } + // Waits until the prerender has |expected_pending_prerenders| pending // prerenders. void WaitForPendingPrerenders(size_t expected_pending_prerenders) { @@ -302,6 +327,11 @@ class TestPrerenderContents : public PrerenderContents { // Total number of pending prerenders we're currently waiting for. Zero // indicates we currently aren't waiting for any. size_t expected_pending_prerenders_; + + // If true, before calling DidPrerenderPass, will wait for the title of the + // prerendered page to turn to "READY". + bool prerender_should_wait_for_ready_title_; + scoped_ptr<ui_test_utils::TitleWatcher> ready_title_watcher_; }; // PrerenderManager that uses TestPrerenderContents. @@ -309,9 +339,12 @@ class WaitForLoadPrerenderContentsFactory : public PrerenderContents::Factory { public: WaitForLoadPrerenderContentsFactory( int expected_number_of_loads, - const std::deque<FinalStatus>& expected_final_status_queue) + const std::deque<FinalStatus>& expected_final_status_queue, + bool prerender_should_wait_for_ready_title) : expected_number_of_loads_(expected_number_of_loads), - expected_final_status_queue_(expected_final_status_queue) { + expected_final_status_queue_(expected_final_status_queue), + prerender_should_wait_for_ready_title_( + prerender_should_wait_for_ready_title) { VLOG(1) << "Factory created with queue length " << expected_final_status_queue_.size(); } @@ -335,12 +368,14 @@ class WaitForLoadPrerenderContentsFactory : public PrerenderContents::Factory { return new TestPrerenderContents(prerender_manager, prerender_tracker, profile, url, referrer, expected_number_of_loads_, - expected_final_status); + expected_final_status, + prerender_should_wait_for_ready_title_); } private: int expected_number_of_loads_; std::deque<FinalStatus> expected_final_status_queue_; + bool prerender_should_wait_for_ready_title_; }; #if defined(ENABLE_SAFE_BROWSING) @@ -481,21 +516,42 @@ class PrerenderBrowserTest : public InProcessBrowserTest { void PrerenderTestURL(const std::string& html_file, FinalStatus expected_final_status, int expected_number_of_loads) { + PrerenderTestURL(html_file, + expected_final_status, + expected_number_of_loads, + false); + } + + void PrerenderTestURL(const std::string& html_file, + FinalStatus expected_final_status, + int expected_number_of_loads, + bool prerender_should_wait_for_ready_title) { std::deque<FinalStatus> expected_final_status_queue(1, expected_final_status); PrerenderTestURL(html_file, expected_final_status_queue, - expected_number_of_loads); + expected_number_of_loads, + prerender_should_wait_for_ready_title); } void PrerenderTestURL( const std::string& html_file, const std::deque<FinalStatus>& expected_final_status_queue, - int expected_number_of_loads) { + int expected_number_of_loads, + bool prerender_should_wait_for_ready_title) { GURL url = test_server()->GetURL(html_file); PrerenderTestURLImpl(url, url, expected_final_status_queue, - expected_number_of_loads); + expected_number_of_loads, + prerender_should_wait_for_ready_title); + } + + void PrerenderTestURL( + const std::string& html_file, + const std::deque<FinalStatus>& expected_final_status_queue, + int expected_number_of_loads) { + PrerenderTestURL(html_file, expected_final_status_queue, + expected_number_of_loads, false); } void PrerenderTestURL( @@ -506,7 +562,8 @@ class PrerenderBrowserTest : public InProcessBrowserTest { expected_final_status); PrerenderTestURLImpl(url, url, expected_final_status_queue, - expected_number_of_loads); + expected_number_of_loads, + false); } void PrerenderTestURL( @@ -518,7 +575,8 @@ class PrerenderBrowserTest : public InProcessBrowserTest { expected_final_status); PrerenderTestURLImpl(prerender_url, destination_url, expected_final_status_queue, - expected_number_of_loads); + expected_number_of_loads, + false); } void NavigateToDestURL() const { @@ -585,7 +643,7 @@ class PrerenderBrowserTest : public InProcessBrowserTest { } void NavigateToDestUrlAndWaitForPassTitle() { - string16 expected_title = ASCIIToUTF16("PASS"); + string16 expected_title = ASCIIToUTF16(kPassTitle); ui_test_utils::TitleWatcher title_watcher( GetPrerenderContents()->prerender_contents()->web_contents(), expected_title); @@ -731,7 +789,8 @@ class PrerenderBrowserTest : public InProcessBrowserTest { const GURL& prerender_url, const GURL& destination_url, const std::deque<FinalStatus>& expected_final_status_queue, - int expected_number_of_loads) { + int expected_number_of_loads, + bool prerender_should_wait_for_ready_title) { dest_url_ = destination_url; std::vector<net::TestServer::StringPair> replacement_text; @@ -762,8 +821,10 @@ class PrerenderBrowserTest : public InProcessBrowserTest { prerender_manager()->mutable_config().https_allowed = true; ASSERT_TRUE(prerender_contents_factory_ == NULL); prerender_contents_factory_ = - new WaitForLoadPrerenderContentsFactory(expected_number_of_loads, - expected_final_status_queue); + new WaitForLoadPrerenderContentsFactory( + expected_number_of_loads, + expected_final_status_queue, + prerender_should_wait_for_ready_title); prerender_manager()->SetPrerenderContentsFactory( prerender_contents_factory_); FinalStatus expected_final_status = expected_final_status_queue.front(); @@ -785,6 +846,10 @@ class PrerenderBrowserTest : public InProcessBrowserTest { EXPECT_EQ(FINAL_STATUS_MAX, prerender_contents->final_status()); if (call_javascript_ && expected_number_of_loads > 0) { + // Wait for the prerendered page to change title to signal it is ready + // if required. + prerender_contents->WaitForPrerenderToHaveReadyTitleIfRequired(); + // Check if page behaves as expected while in prerendered state. bool prerender_test_result = false; ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( @@ -1451,7 +1516,8 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5VideoJs) { IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5VideoNetwork) { PrerenderTestURL("files/prerender/prerender_html5_video_network.html", FINAL_STATUS_USED, - 1); + 1, + true); NavigateToDestUrlAndWaitForPassTitle(); } |