Index: chrome/browser/prerender/prerender_browsertest.cc |
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc |
index 798807f9c3adb4923c84991389b37b28bcc3fcd2..fbfb180e3d809ca724ba102fb744cbf4c61a5a2b 100644 |
--- a/chrome/browser/prerender/prerender_browsertest.cc |
+++ b/chrome/browser/prerender/prerender_browsertest.cc |
@@ -157,6 +157,17 @@ bool ShouldAbortPrerenderBeforeSwap(FinalStatus status) { |
} |
} |
+// Convenience function to wait for a title. Handles the case when the |
+// WebContents already has the expected title. |
+void WaitForASCIITitle(WebContents* web_contents, |
+ const char* expected_title_ascii) { |
+ base::string16 expected_title = base::ASCIIToUTF16(expected_title_ascii); |
+ if (web_contents->GetTitle() == expected_title) |
+ return; |
+ content::TitleWatcher title_watcher(web_contents, expected_title); |
+ EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
+} |
+ |
// Waits for the destruction of a RenderProcessHost's IPC channel. |
// Used to make sure the PrerenderLinkManager's OnChannelClosed function has |
// been called, before checking its state. |
@@ -376,22 +387,6 @@ class TestPrerenderContents : public PrerenderContents { |
} |
} |
- virtual WebContents* CreateWebContents( |
- content::SessionStorageNamespace* session_storage_namespace) OVERRIDE { |
mmenke
2014/01/17 22:00:38
PrerenderContents::CreateWebContents need no longe
davidben
2014/01/17 22:32:04
Ooh, forgot about that. Done.
|
- WebContents* web_contents = PrerenderContents::CreateWebContents( |
- session_storage_namespace); |
- // Create a ready title watcher. (May or may not be used.) |
- base::string16 ready_title = base::ASCIIToUTF16(kReadyTitle); |
- ready_title_watcher_.reset(new content::TitleWatcher( |
- web_contents, ready_title)); |
- return web_contents; |
- } |
- |
- void WaitForPrerenderToHaveReadyTitle() { |
- base::string16 ready_title = base::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) { |
@@ -464,9 +459,6 @@ 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_; |
- |
- // Will wait for the title of the prerendered page to turn to "READY". |
- scoped_ptr<content::TitleWatcher> ready_title_watcher_; |
}; |
// A handle to a TestPrerenderContents whose lifetime is under the caller's |
@@ -880,7 +872,6 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
#if defined(FULL_SAFE_BROWSING) |
safe_browsing_factory_(new TestSafeBrowsingServiceFactory()), |
#endif |
- use_https_src_server_(false), |
call_javascript_(true), |
check_load_events_(true), |
loader_path_("files/prerender/prerender_loader.html"), |
@@ -889,8 +880,7 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
virtual ~PrerenderBrowserTest() {} |
content::SessionStorageNamespace* GetSessionStorageNamespace() const { |
- WebContents* web_contents = |
- current_browser()->tab_strip_model()->GetActiveWebContents(); |
+ WebContents* web_contents = GetActiveWebContents(); |
if (!web_contents) |
return NULL; |
return web_contents->GetController().GetDefaultSessionStorageNamespace(); |
@@ -940,6 +930,19 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
ChromeResourceDispatcherHostDelegate:: |
SetExternalProtocolHandlerDelegateForTesting( |
&external_protocol_handler_delegate_); |
+ |
+ PrerenderManager* prerender_manager = GetPrerenderManager(); |
+ CHECK(prerender_manager); |
+ prerender_manager->mutable_config().rate_limit_enabled = false; |
+ CHECK(prerender_contents_factory_ == NULL); |
+ prerender_contents_factory_ = new TestPrerenderContentsFactory; |
+ prerender_manager->SetPrerenderContentsFactory(prerender_contents_factory_); |
+ } |
+ |
+ // Convenience function to get the currently active WebContents in |
+ // current_browser(). |
+ WebContents* GetActiveWebContents() const { |
+ return current_browser()->tab_strip_model()->GetActiveWebContents(); |
} |
// Overload for a single expected final status |
@@ -947,47 +950,20 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
const std::string& html_file, |
FinalStatus expected_final_status, |
int expected_number_of_loads) { |
- return PrerenderTestURL(html_file, |
+ GURL url = test_server()->GetURL(html_file); |
+ return PrerenderTestURL(url, |
expected_final_status, |
- expected_number_of_loads, |
- false); |
- } |
- |
- scoped_ptr<TestPrerender> PrerenderTestURL( |
- const std::string& html_file, |
- FinalStatus expected_final_status, |
- int expected_number_of_loads, |
- bool prerender_should_wait_for_ready_title) { |
- std::vector<FinalStatus> expected_final_status_queue( |
- 1, expected_final_status); |
- std::vector<TestPrerender*> prerenders; |
- PrerenderTestURL( |
- html_file, |
- expected_final_status_queue, |
- expected_number_of_loads, |
- prerender_should_wait_for_ready_title).release(&prerenders); |
- CHECK_EQ(1u, prerenders.size()); |
- return scoped_ptr<TestPrerender>(prerenders[0]); |
+ expected_number_of_loads); |
} |
ScopedVector<TestPrerender> PrerenderTestURL( |
const std::string& html_file, |
const std::vector<FinalStatus>& expected_final_status_queue, |
- int expected_number_of_loads, |
- bool prerender_should_wait_for_ready_title) { |
+ int expected_number_of_loads) { |
GURL url = test_server()->GetURL(html_file); |
- return PrerenderTestURLImpl(url, url, |
+ return PrerenderTestURLImpl(url, |
expected_final_status_queue, |
- expected_number_of_loads, |
- prerender_should_wait_for_ready_title); |
- } |
- |
- ScopedVector<TestPrerender> PrerenderTestURL( |
- const std::string& html_file, |
- const std::vector<FinalStatus>& expected_final_status_queue, |
- int expected_number_of_loads) { |
- return PrerenderTestURL(html_file, expected_final_status_queue, |
- expected_number_of_loads, false); |
+ expected_number_of_loads); |
} |
scoped_ptr<TestPrerender> PrerenderTestURL( |
@@ -997,26 +973,9 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
std::vector<FinalStatus> expected_final_status_queue( |
1, expected_final_status); |
std::vector<TestPrerender*> prerenders; |
- PrerenderTestURLImpl(url, url, |
+ PrerenderTestURLImpl(url, |
expected_final_status_queue, |
- expected_number_of_loads, |
- false).release(&prerenders); |
- CHECK_EQ(1u, prerenders.size()); |
- return scoped_ptr<TestPrerender>(prerenders[0]); |
- } |
- |
- scoped_ptr<TestPrerender> PrerenderTestURL( |
- const GURL& prerender_url, |
- const GURL& destination_url, |
- FinalStatus expected_final_status, |
- int expected_number_of_loads) { |
- std::vector<FinalStatus> expected_final_status_queue( |
- 1, expected_final_status); |
- std::vector<TestPrerender*> prerenders; |
- PrerenderTestURLImpl(prerender_url, destination_url, |
- expected_final_status_queue, |
- expected_number_of_loads, |
- false).release(&prerenders); |
+ expected_number_of_loads).release(&prerenders); |
CHECK_EQ(1u, prerenders.size()); |
return scoped_ptr<TestPrerender>(prerenders[0]); |
} |
@@ -1035,15 +994,6 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
expect_swap_to_succeed); |
} |
- void NavigateToDestUrlAndWaitForPassTitle() { |
- base::string16 expected_title = base::ASCIIToUTF16(kPassTitle); |
- content::TitleWatcher title_watcher( |
- GetPrerenderContents()->prerender_contents(), |
- expected_title); |
- NavigateToDestURL(); |
- EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); |
- } |
- |
void NavigateToURL(const std::string& dest_html_file) const { |
NavigateToURLWithDisposition(dest_html_file, CURRENT_TAB, true); |
} |
@@ -1070,43 +1020,42 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
} |
void OpenDestURLViaClick() const { |
- OpenDestURLWithJSImpl("Click()", false); |
+ OpenURLViaClick(dest_url_); |
+ } |
mmenke
2014/01/17 22:00:38
nit: +line break?
davidben
2014/01/17 22:32:04
Done.
|
+ void OpenURLViaClick(const GURL& url) const { |
+ OpenURLWithJSImpl("Click", url, false); |
} |
void OpenDestURLViaClickTarget() const { |
- OpenDestURLWithJSImpl("ClickTarget()", true); |
+ OpenURLWithJSImpl("ClickTarget", dest_url_, true); |
} |
void OpenDestURLViaClickNewWindow() const { |
- OpenDestURLWithJSImpl("ShiftClick()", true); |
+ OpenURLWithJSImpl("ShiftClick", dest_url_, true); |
} |
void OpenDestURLViaClickNewForegroundTab() const { |
#if defined(OS_MACOSX) |
- OpenDestURLWithJSImpl("MetaShiftClick()", true); |
+ OpenURLWithJSImpl("MetaShiftClick", dest_url_, true); |
#else |
- OpenDestURLWithJSImpl("CtrlShiftClick()", true); |
+ OpenURLWithJSImpl("CtrlShiftClick", dest_url_, true); |
#endif |
} |
void OpenDestURLViaClickNewBackgroundTab() const { |
- TestPrerenderContents* prerender_contents = GetPrerenderContents(); |
- ASSERT_TRUE(prerender_contents != NULL); |
- prerender_contents->set_should_be_shown(false); |
#if defined(OS_MACOSX) |
- OpenDestURLWithJSImpl("MetaClick()", true); |
+ OpenURLWithJSImpl("MetaClick", dest_url_, true); |
#else |
- OpenDestURLWithJSImpl("CtrlClick()", true); |
+ OpenURLWithJSImpl("CtrlClick", dest_url_, true); |
#endif |
} |
void OpenDestURLViaWindowOpen() const { |
- OpenDestURLWithJSImpl("WindowOpen()", true); |
+ OpenURLWithJSImpl("WindowOpen", dest_url_, true); |
} |
void RemoveLinkElement(int i) const { |
- current_browser()->tab_strip_model()->GetActiveWebContents()-> |
- GetRenderViewHost()->ExecuteJavascriptInWebFrame( |
+ GetActiveWebContents()->GetRenderViewHost()->ExecuteJavascriptInWebFrame( |
base::string16(), |
base::ASCIIToUTF16(base::StringPrintf("RemoveLinkElement(%d)", i))); |
} |
@@ -1115,7 +1064,7 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
content::WindowedNotificationObserver new_page_observer( |
content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
content::NotificationService::AllSources()); |
- RenderViewHost* render_view_host = current_browser()->tab_strip_model()-> |
+ RenderViewHost* render_view_host = |
GetActiveWebContents()->GetRenderViewHost(); |
render_view_host->ExecuteJavascriptInWebFrame( |
base::string16(), |
@@ -1139,7 +1088,7 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
back_nav_observer.Wait(); |
bool original_prerender_page = false; |
ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
- current_browser()->tab_strip_model()->GetActiveWebContents(), |
+ GetActiveWebContents(), |
"window.domAutomationController.send(IsOriginalPrerenderPage())", |
&original_prerender_page)); |
EXPECT_TRUE(original_prerender_page); |
@@ -1149,8 +1098,7 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
// in. This must be called when the prerendered page is the current page |
// in the active tab. |
void GoBackToPageBeforePrerender() { |
- WebContents* tab = |
- current_browser()->tab_strip_model()->GetActiveWebContents(); |
+ WebContents* tab = GetActiveWebContents(); |
ASSERT_TRUE(tab); |
EXPECT_FALSE(tab->IsLoading()); |
TestNavigationObserver back_nav_observer(tab); |
@@ -1173,8 +1121,15 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
url, GetSessionStorageNamespace()) != NULL; |
} |
- void set_use_https_src(bool use_https_src_server) { |
- use_https_src_server_ = use_https_src_server; |
+ void UseHttpsSrcServer() { |
+ if (https_src_server_) |
+ return; |
+ https_src_server_.reset( |
+ new net::SpawnedTestServer( |
+ net::SpawnedTestServer::TYPE_HTTPS, |
+ net::SpawnedTestServer::kLocalhost, |
+ base::FilePath(FILE_PATH_LITERAL("chrome/test/data")))); |
+ CHECK(https_src_server_->Start()); |
} |
void DisableJavascriptCalls() { |
@@ -1209,7 +1164,7 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
"receivedPrerenderStartEvents[%d]))", index); |
CHECK(content::ExecuteScriptAndExtractBool( |
- current_browser()->tab_strip_model()->GetActiveWebContents(), |
+ GetActiveWebContents(), |
expression, |
&received_prerender_started)); |
return received_prerender_started; |
@@ -1222,7 +1177,7 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
"receivedPrerenderLoadEvents[%d] || 0)", index); |
CHECK(content::ExecuteScriptAndExtractInt( |
- current_browser()->tab_strip_model()->GetActiveWebContents(), |
+ GetActiveWebContents(), |
expression, |
&load_event_count)); |
return load_event_count; |
@@ -1235,7 +1190,7 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
"receivedPrerenderStopEvents[%d]))", index); |
CHECK(content::ExecuteScriptAndExtractBool( |
- current_browser()->tab_strip_model()->GetActiveWebContents(), |
+ GetActiveWebContents(), |
expression, |
&received_prerender_stopped)); |
return received_prerender_stopped; |
@@ -1244,7 +1199,7 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
bool HadPrerenderEventErrors() const { |
bool had_prerender_event_errors; |
CHECK(content::ExecuteScriptAndExtractBool( |
- current_browser()->tab_strip_model()->GetActiveWebContents(), |
+ GetActiveWebContents(), |
"window.domAutomationController.send(Boolean(" |
" hadPrerenderEventErrors))", |
&had_prerender_event_errors)); |
@@ -1358,17 +1313,13 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
private: |
ScopedVector<TestPrerender> PrerenderTestURLImpl( |
const GURL& prerender_url, |
- const GURL& destination_url, |
const std::vector<FinalStatus>& expected_final_status_queue, |
- int expected_number_of_loads, |
- bool prerender_should_wait_for_ready_title) { |
- dest_url_ = destination_url; |
+ int expected_number_of_loads) { |
+ dest_url_ = prerender_url; |
mmenke
2014/01/17 22:00:38
Wonder if we should just get rid of this in anothe
davidben
2014/01/17 22:32:04
'this' being the dest_url_ line? Well there's also
mmenke
2014/01/21 17:16:10
Yea, 'this' being get rid of dest_url_ completely.
|
std::vector<net::SpawnedTestServer::StringPair> replacement_text; |
replacement_text.push_back( |
make_pair("REPLACE_WITH_PRERENDER_URL", prerender_url.spec())); |
- replacement_text.push_back( |
- make_pair("REPLACE_WITH_DESTINATION_URL", destination_url.spec())); |
std::string replacement_path; |
CHECK(net::SpawnedTestServer::GetFilePathWithReplacements( |
loader_path_, |
@@ -1376,26 +1327,11 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
&replacement_path)); |
const net::SpawnedTestServer* src_server = test_server(); |
- scoped_ptr<net::SpawnedTestServer> https_src_server; |
- if (use_https_src_server_) { |
- https_src_server.reset( |
- new net::SpawnedTestServer( |
- net::SpawnedTestServer::TYPE_HTTPS, |
- net::SpawnedTestServer::kLocalhost, |
- base::FilePath(FILE_PATH_LITERAL("chrome/test/data")))); |
- CHECK(https_src_server->Start()); |
- src_server = https_src_server.get(); |
- } |
+ if (https_src_server_) |
+ src_server = https_src_server_.get(); |
mmenke
2014/01/17 22:00:38
Good idea...scoping here does seem like it was a w
|
GURL loader_url = src_server->GetURL(replacement_path + |
loader_query_and_fragment_); |
- PrerenderManager* prerender_manager = GetPrerenderManager(); |
- CHECK(prerender_manager); |
- prerender_manager->mutable_config().rate_limit_enabled = false; |
- CHECK(prerender_contents_factory_ == NULL); |
- prerender_contents_factory_ = new TestPrerenderContentsFactory; |
- prerender_manager->SetPrerenderContentsFactory(prerender_contents_factory_); |
- |
VLOG(1) << "Running test with queue length " << |
expected_final_status_queue.size(); |
CHECK(!expected_final_status_queue.empty()); |
@@ -1428,13 +1364,9 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
if (call_javascript_) { |
- // Wait for the prerendered page to change title to signal it is ready |
- // if required. |
- if (prerender_should_wait_for_ready_title) |
- prerender_contents->WaitForPrerenderToHaveReadyTitle(); |
- |
// Check if page behaves as expected while in prerendered state. |
- EXPECT_TRUE(DidPrerenderPass(prerender_contents->prerender_contents())); |
+ EXPECT_TRUE(DidPrerenderPass( |
+ prerenders[0]->contents()->prerender_contents())); |
mmenke
2014/01/17 22:00:38
prerenders[0]->contents() is just prerender_conten
davidben
2014/01/17 22:32:04
Oh, hrm, I must have just done that blindly withou
|
} |
} |
@@ -1456,11 +1388,6 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
// Make sure in navigating we have a URL to use in the PrerenderManager. |
ASSERT_NE(static_cast<PrerenderContents*>(NULL), GetPrerenderContents()); |
- // If opening the page in a background tab, it won't be shown when swapped |
- // in. |
- if (params.disposition == NEW_BACKGROUND_TAB) |
- GetPrerenderContents()->set_should_be_shown(false); |
- |
WebContents* web_contents = GetPrerenderContents()->prerender_contents(); |
// Navigate and wait for either the load to finish normally or for a swap to |
@@ -1468,9 +1395,8 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
// TODO(davidben): The only handles CURRENT_TAB navigations, which is the |
// only case tested or prerendered right now. |
CHECK_EQ(CURRENT_TAB, params.disposition); |
- NavigationOrSwapObserver swap_observer( |
- current_browser()->tab_strip_model(), |
- current_browser()->tab_strip_model()->GetActiveWebContents()); |
+ NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), |
+ GetActiveWebContents()); |
WebContents* target_web_contents = current_browser()->OpenURL(params); |
swap_observer.Wait(); |
@@ -1485,25 +1411,25 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
// page. |javascript_function_name| should be a 0 argument function which is |
// invoked. |new_web_contents| is true if the navigation is expected to |
// happen in a new WebContents via OpenURL. |
- void OpenDestURLWithJSImpl(const std::string& javascript_function_name, |
- bool new_web_contents) const { |
- TestPrerenderContents* prerender_contents = GetPrerenderContents(); |
mmenke
2014/01/17 22:00:38
Can we make GetPrerenderContents() private now?
davidben
2014/01/17 22:32:04
Done.
|
- ASSERT_NE(static_cast<PrerenderContents*>(NULL), prerender_contents); |
- |
- WebContents* web_contents = current_browser()->tab_strip_model()-> |
- GetActiveWebContents(); |
- RenderViewHost* render_view_host = web_contents->GetRenderViewHost(); |
+ void OpenURLWithJSImpl(const std::string& javascript_function_name, |
+ const GURL& url, |
+ bool new_web_contents) const { |
+ WebContents* web_contents = GetActiveWebContents(); |
+ RenderViewHost* render_view_host = |
+ GetActiveWebContents()->GetRenderViewHost(); |
+ std::string javascript = base::StringPrintf( |
+ "%s('%s')", javascript_function_name.c_str(), url.spec().c_str()); |
if (new_web_contents) { |
NewTabNavigationOrSwapObserver observer; |
render_view_host->ExecuteJavascriptInWebFrame( |
- base::string16(), base::ASCIIToUTF16(javascript_function_name)); |
+ base::string16(), base::ASCIIToUTF16(javascript)); |
observer.Wait(); |
} else { |
NavigationOrSwapObserver observer(current_browser()->tab_strip_model(), |
web_contents); |
render_view_host->ExecuteJavascriptInWebFrame( |
- base::string16(), base::ASCIIToUTF16(javascript_function_name)); |
+ base::string16(), base::ASCIIToUTF16(javascript)); |
observer.Wait(); |
} |
} |
@@ -1514,7 +1440,7 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
#endif |
NeverRunsExternalProtocolHandlerDelegate external_protocol_handler_delegate_; |
GURL dest_url_; |
- bool use_https_src_server_; |
+ scoped_ptr<net::SpawnedTestServer> https_src_server_; |
bool call_javascript_; |
bool check_load_events_; |
std::string loader_path_; |
@@ -1529,7 +1455,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { |
PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
ChannelDestructionWatcher channel_close_watcher; |
- channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> |
+ channel_close_watcher.WatchChannel( |
GetActiveWebContents()->GetRenderProcessHost()); |
NavigateToDestURL(); |
channel_close_watcher.WaitForChannelClose(); |
@@ -1548,7 +1474,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderPagePending) { |
ChannelDestructionWatcher first_channel_close_watcher; |
- first_channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> |
+ first_channel_close_watcher.WatchChannel( |
GetActiveWebContents()->GetRenderProcessHost()); |
NavigateToDestURL(); |
// NavigateToDestURL doesn't run a message loop. Normally that's fine, but in |
@@ -1564,7 +1490,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderPagePending) { |
// Now navigate to our target page. |
ChannelDestructionWatcher second_channel_close_watcher; |
- second_channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> |
+ second_channel_close_watcher.WatchChannel( |
GetActiveWebContents()->GetRenderProcessHost()); |
ui_test_utils::NavigateToURLWithDisposition( |
current_browser(), prerender_page_url, CURRENT_TAB, |
@@ -1581,7 +1507,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovesPending) { |
FINAL_STATUS_USED, 1); |
ChannelDestructionWatcher channel_close_watcher; |
- channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> |
+ channel_close_watcher.WatchChannel( |
GetActiveWebContents()->GetRenderProcessHost()); |
NavigateToDestURL(); |
channel_close_watcher.WaitForChannelClose(); |
@@ -1678,7 +1604,7 @@ IN_PROC_BROWSER_TEST_F( |
EXPECT_FALSE(IsEmptyPrerenderLinkManager()); |
ChannelDestructionWatcher channel_close_watcher; |
- channel_close_watcher.WatchChannel(browser()->tab_strip_model()-> |
+ channel_close_watcher.WatchChannel( |
GetActiveWebContents()->GetRenderProcessHost()); |
NavigateToDestURL(); |
channel_close_watcher.WaitForChannelClose(); |
@@ -1686,13 +1612,18 @@ IN_PROC_BROWSER_TEST_F( |
EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
} |
+class PrerenderIncognitoBrowserTest : public PrerenderBrowserTest { |
+ public: |
+ virtual void SetUpOnMainThread() OVERRIDE { |
+ Profile* normal_profile = current_browser()->profile(); |
+ set_browser(ui_test_utils::OpenURLOffTheRecord( |
+ normal_profile, GURL("about:blank"))); |
+ PrerenderBrowserTest::SetUpOnMainThread(); |
+ } |
+}; |
+ |
// Checks that prerendering works in incognito mode. |
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderIncognito) { |
- Profile* normal_profile = current_browser()->profile(); |
- set_browser( |
- ui_test_utils::OpenURLOffTheRecord(normal_profile, GURL("about:blank"))); |
- // Increase memory expectations on the incognito PrerenderManager. |
- IncreasePrerenderMemory(); |
+IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) { |
PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
NavigateToDestURL(); |
} |
mmenke
2014/01/17 22:00:38
optional: Suggest moving this test and its fixtur
davidben
2014/01/17 22:32:04
Done.
|
@@ -1823,9 +1754,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNaClPluginDisabled) { |
// TODO(mmenke): While this should reliably fail on regressions, the |
// reliability depends on the specifics of ppapi plugin |
// loading. It would be great if we could avoid that. |
- WebContents* web_contents = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- EXPECT_TRUE(DidDisplayPass(web_contents)); |
+ EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
} |
// Checks that plugins in an iframe are not loaded while a page is |
@@ -1913,8 +1842,8 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
CreateClientRedirect("files/prerender/prerender_page.html")); |
GURL destination_url = test_server()->GetURL( |
"files/prerender/prerender_page.html"); |
- PrerenderTestURL(prerender_url, destination_url, FINAL_STATUS_USED, 2); |
- OpenDestURLViaClick(); |
+ PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 2); |
+ OpenURLViaClick(destination_url); |
} |
// Checks that a prerender for an https will prevent a prerender from happening. |
@@ -2019,8 +1948,8 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
CreateServerRedirect("files/prerender/prerender_page.html")); |
GURL destination_url = test_server()->GetURL( |
"files/prerender/prerender_page.html"); |
- PrerenderTestURL(prerender_url, destination_url, FINAL_STATUS_USED, 1); |
- OpenDestURLViaClick(); |
+ PrerenderTestURL(prerender_url, FINAL_STATUS_USED, 1); |
+ OpenURLViaClick(destination_url); |
} |
// Checks that server-issued redirects from an http to an https |
@@ -2118,7 +2047,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReferrer) { |
// HTTPS. |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
PrerenderNoSSLReferrer) { |
- set_use_https_src(true); |
+ UseHttpsSrcServer(); |
PrerenderTestURL("files/prerender/prerender_no_referrer.html", |
FINAL_STATUS_USED, |
1); |
@@ -2137,14 +2066,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelReferrer) { |
1); |
OpenDestURLViaClick(); |
- bool display_test_result = false; |
- WebContents* web_contents = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
- web_contents, |
- "window.domAutomationController.send(DidDisplayPass())", |
- &display_test_result)); |
- EXPECT_TRUE(display_test_result); |
+ EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
content::SetBrowserClientForTesting(original_browser_client); |
} |
@@ -2196,9 +2118,10 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderInfiniteLoop) { |
expected_final_status_queue.push_back(FINAL_STATUS_USED); |
expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); |
- PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); |
- ASSERT_TRUE(GetPrerenderContents()); |
- GetPrerenderContents()->WaitForPendingPrerenders(1u); |
+ ScopedVector<TestPrerender> prerenders = |
+ PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); |
+ ASSERT_TRUE(prerenders[0]->contents()); |
+ prerenders[0]->contents()->WaitForPendingPrerenders(1u); |
// Next url should be in pending list but not an active entry. |
EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileB)); |
@@ -2232,9 +2155,10 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); |
expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); |
- PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); |
- ASSERT_TRUE(GetPrerenderContents()); |
- GetPrerenderContents()->WaitForPendingPrerenders(2u); |
+ ScopedVector<TestPrerender> prerenders = |
+ PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); |
+ ASSERT_TRUE(prerenders[0]->contents()); |
+ prerenders[0]->contents()->WaitForPendingPrerenders(2u); |
// Next url should be in pending list but not an active entry. |
EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileB)); |
@@ -2319,9 +2243,10 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderTaskManager) { |
// Times out under AddressSanitizer, see http://crbug.com/108402 |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderHTML5Audio) { |
PrerenderTestURL("files/prerender/prerender_html5_audio.html", |
- FINAL_STATUS_USED, |
- 1); |
- NavigateToDestUrlAndWaitForPassTitle(); |
+ FINAL_STATUS_USED, |
+ 1); |
+ NavigateToDestURL(); |
+ WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
} |
// Checks that audio loads are deferred on prerendering and played back when |
@@ -2332,7 +2257,8 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
PrerenderTestURL("files/prerender/prerender_html5_audio_autoplay.html", |
FINAL_STATUS_USED, |
1); |
- NavigateToDestUrlAndWaitForPassTitle(); |
+ NavigateToDestURL(); |
+ WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
} |
// Checks that audio loads are deferred on prerendering and played back when |
@@ -2342,7 +2268,8 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
PrerenderTestURL("files/prerender/prerender_html5_audio_jsplay.html", |
FINAL_STATUS_USED, |
1); |
- NavigateToDestUrlAndWaitForPassTitle(); |
+ NavigateToDestURL(); |
+ WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
} |
// Checks that video loads are deferred on prerendering. |
@@ -2350,7 +2277,8 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderHTML5Video) { |
PrerenderTestURL("files/prerender/prerender_html5_video.html", |
FINAL_STATUS_USED, |
1); |
- NavigateToDestUrlAndWaitForPassTitle(); |
+ NavigateToDestURL(); |
+ WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
} |
// Checks that video tags inserted by javascript are deferred and played |
@@ -2360,17 +2288,22 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
PrerenderTestURL("files/prerender/prerender_html5_video_script.html", |
FINAL_STATUS_USED, |
1); |
- NavigateToDestUrlAndWaitForPassTitle(); |
+ NavigateToDestURL(); |
+ WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
} |
// Checks for correct network events by using a busy sleep the javascript. |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
DISABLED_PrerenderHTML5VideoNetwork) { |
- PrerenderTestURL("files/prerender/prerender_html5_video_network.html", |
- FINAL_STATUS_USED, |
- 1, |
- true); |
- NavigateToDestUrlAndWaitForPassTitle(); |
+ DisableJavascriptCalls(); |
+ scoped_ptr<TestPrerender> prerender = |
+ PrerenderTestURL("files/prerender/prerender_html5_video_network.html", |
+ FINAL_STATUS_USED, |
+ 1); |
+ WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); |
+ EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); |
+ NavigateToDestURL(); |
+ WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
} |
// Checks that scripts can retrieve the correct window size while prerendering. |
@@ -2868,14 +2801,15 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderLocalStorageWrite) { |
// Checks that the favicon is properly loaded on prerender. |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
DISABLED_PrerenderFavicon) { |
- PrerenderTestURL("files/prerender/prerender_favicon.html", |
- FINAL_STATUS_USED, |
- 1); |
- TestPrerenderContents* prerender_contents = GetPrerenderContents(); |
- ASSERT_TRUE(prerender_contents != NULL); |
+ scoped_ptr<TestPrerender> prerender = |
+ PrerenderTestURL("files/prerender/prerender_favicon.html", |
+ FINAL_STATUS_USED, |
+ 1); |
+ ASSERT_TRUE(prerender->contents()); |
content::WindowedNotificationObserver favicon_update_watcher( |
chrome::NOTIFICATION_FAVICON_UPDATED, |
- content::Source<WebContents>(prerender_contents->prerender_contents())); |
+ content::Source<WebContents>( |
+ prerender->contents()->prerender_contents())); |
NavigateToDestURL(); |
favicon_update_watcher.Wait(); |
} |
@@ -2940,7 +2874,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelAll) { |
GetPrerenderManager()->CancelAllPrerenders(); |
prerender->WaitForStop(); |
- EXPECT_TRUE(GetPrerenderContents() == NULL); |
+ EXPECT_FALSE(prerender->contents()); |
} |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEvents) { |
@@ -2968,7 +2902,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
GetPrerenderManager()->CancelAllPrerenders(); |
prerender->WaitForStop(); |
- EXPECT_TRUE(GetPrerenderContents() == NULL); |
+ EXPECT_FALSE(prerender->contents()); |
} |
// Prerendering and history tests. |
@@ -3037,9 +2971,12 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewForegroundTab) { |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
DISABLED_PrerenderClickNewBackgroundTab) { |
- PrerenderTestURL("files/prerender/prerender_page_with_link.html", |
- FINAL_STATUS_APP_TERMINATING, |
- 1); |
+ scoped_ptr<TestPrerender> prerender = |
+ PrerenderTestURL("files/prerender/prerender_page_with_link.html", |
+ FINAL_STATUS_APP_TERMINATING, |
+ 1); |
+ ASSERT_TRUE(prerender->contents()); |
+ prerender->contents()->set_should_be_shown(false); |
OpenDestURLViaClickNewBackgroundTab(); |
} |
@@ -3144,7 +3081,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReferrerPolicy) { |
// Checks that the referrer policy is used when prerendering on HTTPS. |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
PrerenderSSLReferrerPolicy) { |
- set_use_https_src(true); |
+ UseHttpsSrcServer(); |
set_loader_path("files/prerender/prerender_loader_with_referrer_policy.html"); |
PrerenderTestURL("files/prerender/prerender_referrer_policy.html", |
FINAL_STATUS_USED, |
@@ -3360,7 +3297,8 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHTML5MediaSourceVideo) { |
PrerenderTestURL("files/prerender/prerender_html5_video_media_source.html", |
FINAL_STATUS_USED, |
1); |
- NavigateToDestUrlAndWaitForPassTitle(); |
+ NavigateToDestURL(); |
+ WaitForASCIITitle(GetActiveWebContents(), kPassTitle); |
} |
// Checks that a prerender that creates an audio stream (via a WebAudioDevice) |
@@ -3375,8 +3313,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderWebAudioDevice) { |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCapturedWebContents) { |
PrerenderTestURL("files/prerender/prerender_page.html", |
FINAL_STATUS_PAGE_BEING_CAPTURED, 1); |
- WebContents* web_contents = |
- current_browser()->tab_strip_model()->GetActiveWebContents(); |
+ WebContents* web_contents = GetActiveWebContents(); |
web_contents->IncrementCapturerCount(); |
NavigateToDestURLWithDisposition(CURRENT_TAB, false); |
web_contents->DecrementCapturerCount(); |
@@ -3441,13 +3378,16 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, CancelMatchCompleteDummy) { |
// Checks that a deferred redirect to an image is not loaded until the |
// page is visible. |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { |
- // We do NOT wait for a load event, as the image will block the |
- // load. Instead, wait for the title to change. |
- scoped_ptr<TestPrerender> prerender = |
- PrerenderTestURL("files/prerender/prerender_deferred_image.html", |
- FINAL_STATUS_USED, 0, true); |
+ DisableJavascriptCalls(); |
- // The prerender hasn't loaded yet because its image is deferred. |
+ // The prerender will not completely load until after the swap, so wait for a |
+ // title change before calling DidPrerenderPass. |
+ scoped_ptr<TestPrerender> prerender = |
+ PrerenderTestURL( |
+ "files/prerender/prerender_deferred_image.html", |
+ FINAL_STATUS_USED, 0); |
+ WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); |
+ EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); |
EXPECT_EQ(0, prerender->number_of_loads()); |
// Navigate, waiting for both the swap and an extra load from the prerender. |
@@ -3457,9 +3397,8 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { |
content::NOTIFICATION_LOAD_STOP, |
content::Source<NavigationController>( |
&prerender->contents()->prerender_contents()->GetController())); |
- NavigationOrSwapObserver swap_observer( |
- current_browser()->tab_strip_model(), |
- current_browser()->tab_strip_model()->GetActiveWebContents()); |
+ NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), |
+ GetActiveWebContents()); |
ui_test_utils::NavigateToURLWithDisposition( |
current_browser(), dest_url(), CURRENT_TAB, |
ui_test_utils::BROWSER_TEST_NONE); |
@@ -3470,22 +3409,23 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { |
EXPECT_EQ(0, prerender->number_of_loads()); |
// Now check DidDisplayPass. |
- EXPECT_TRUE(DidDisplayPass( |
- current_browser()->tab_strip_model()->GetActiveWebContents())); |
+ EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
} |
// Checks that a deferred redirect to an image is not loaded until the |
// page is visible, even after another redirect. |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
PrerenderDeferredImageAfterRedirect) { |
- // We do NOT wait for a load event, as the image will block the |
- // load. Instead, wait for the title to change. |
+ DisableJavascriptCalls(); |
+ |
+ // The prerender will not completely load until after the swap, so wait for a |
+ // title change before calling DidPrerenderPass. |
scoped_ptr<TestPrerender> prerender = |
PrerenderTestURL( |
- "files/prerender/prerender_deferred_image.html#double_redirect", |
- FINAL_STATUS_USED, 0, true); |
- |
- // The prerender hasn't loaded yet because its image is deferred. |
+ "files/prerender/prerender_deferred_image.html", |
+ FINAL_STATUS_USED, 0); |
+ WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); |
+ EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); |
EXPECT_EQ(0, prerender->number_of_loads()); |
// Navigate, waiting for both the swap and an extra load from the prerender. |
@@ -3495,9 +3435,8 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
content::NOTIFICATION_LOAD_STOP, |
content::Source<NavigationController>( |
&prerender->contents()->prerender_contents()->GetController())); |
- NavigationOrSwapObserver swap_observer( |
- current_browser()->tab_strip_model(), |
- current_browser()->tab_strip_model()->GetActiveWebContents()); |
+ NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), |
+ GetActiveWebContents()); |
ui_test_utils::NavigateToURLWithDisposition( |
current_browser(), dest_url(), CURRENT_TAB, |
ui_test_utils::BROWSER_TEST_NONE); |
@@ -3508,8 +3447,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
EXPECT_EQ(0, prerender->number_of_loads()); |
// Now check DidDisplayPass. |
- EXPECT_TRUE(DidDisplayPass( |
- current_browser()->tab_strip_model()->GetActiveWebContents())); |
+ EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
} |
// Checks that deferred redirects in the main frame are followed. |
@@ -3597,8 +3535,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageNewTab) { |
NavigateToDestURLWithDisposition(CURRENT_TAB, false); |
// Verify DidDisplayPass manually since the previous call skipped it. |
- EXPECT_TRUE(DidDisplayPass( |
- current_browser()->tab_strip_model()->GetActiveWebContents())); |
+ EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
} |
// Verify that session storage conflicts don't merge. |
@@ -3617,8 +3554,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSessionStorageConflict) { |
NavigateToDestURLWithDisposition(CURRENT_TAB, false); |
// Verify DidDisplayPass in the new tab. |
- EXPECT_TRUE(DidDisplayPass( |
- current_browser()->tab_strip_model()->GetActiveWebContents())); |
+ EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
} |
// Checks that prerenders honor |should_replace_current_entry|. |
@@ -3630,9 +3566,8 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReplaceCurrentEntry) { |
params.should_replace_current_entry = true; |
NavigateToURLWithParams(params, false); |
- WebContents* web_contents = |
- current_browser()->tab_strip_model()->GetActiveWebContents(); |
- const NavigationController& controller = web_contents->GetController(); |
+ const NavigationController& controller = |
+ GetActiveWebContents()->GetController(); |
// First entry is about:blank, second is prerender_page.html. |
EXPECT_TRUE(controller.GetPendingEntry() == NULL); |
EXPECT_EQ(2, controller.GetEntryCount()); |