Index: chrome/browser/prerender/prerender_browsertest.cc |
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc |
index 7e1edf9552e4b7eb5eedf553403f9a032f4ed77b..cb7a934b5406b4bfe2b7f600bdca80e887ac248a 100644 |
--- a/chrome/browser/prerender/prerender_browsertest.cc |
+++ b/chrome/browser/prerender/prerender_browsertest.cc |
@@ -16,6 +16,8 @@ |
#include "chrome/browser/favicon/favicon_tab_helper.h" |
#include "chrome/browser/prefs/pref_service.h" |
#include "chrome/browser/prerender/prerender_contents.h" |
+#include "chrome/browser/prerender/prerender_link_manager.h" |
+#include "chrome/browser/prerender/prerender_link_manager_factory.h" |
#include "chrome/browser/prerender/prerender_manager.h" |
#include "chrome/browser/prerender/prerender_manager_factory.h" |
#include "chrome/browser/profiles/profile.h" |
@@ -222,10 +224,9 @@ class TestPrerenderContents : public PrerenderContents { |
} |
} |
- virtual void AddPendingPrerender(Origin origin, |
- const GURL& url, |
+ virtual void AddPendingPrerender(const GURL& url, |
const content::Referrer& referrer) OVERRIDE { |
- PrerenderContents::AddPendingPrerender(origin, url, referrer); |
+ PrerenderContents::AddPendingPrerender(url, referrer); |
if (expected_pending_prerenders_ > 0 && |
pending_prerender_list()->size() == expected_pending_prerenders_) { |
MessageLoop::current()->Quit(); |
@@ -298,7 +299,7 @@ class TestPrerenderContents : public PrerenderContents { |
} else if (is_visible && was_hidden_) { |
// Once hidden, a prerendered RenderViewHost should only be shown after |
// being removed from the PrerenderContents for display. |
- EXPECT_FALSE(render_view_host()); |
+ EXPECT_FALSE(GetRenderViewHost()); |
was_shown_ = true; |
} |
return; |
@@ -624,6 +625,10 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
OpenDestURLWithJSImpl("WindowOpen()"); |
} |
+ void RemoveLinkElementAndNavigate() const { |
+ OpenDestURLWithJSImpl("RemoveLinkElementAndNavigate()"); |
+ } |
+ |
void ClickToNextPageAfterPrerender(Browser* browser) { |
ui_test_utils::WindowedNotificationObserver new_page_observer( |
content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
@@ -727,6 +732,14 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
return prerender_manager; |
} |
+ PrerenderLinkManager* GetPrerenderLinkManager() const { |
+ Profile* profile = |
+ current_browser()->GetSelectedTabContentsWrapper()->profile(); |
+ PrerenderLinkManager* prerender_link_manager = |
+ PrerenderLinkManagerFactory::GetForProfile(profile); |
+ return prerender_link_manager; |
+ } |
+ |
// Returns length of |prerender_manager_|'s history, or -1 on failure. |
int GetHistoryLength() const { |
scoped_ptr<DictionaryValue> prerender_dict( |
@@ -754,6 +767,10 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
loader_path_ = path; |
} |
+ void set_loader_query_and_fragment(const std::string& query_and_fragment) { |
+ loader_query_and_fragment_ = query_and_fragment; |
+ } |
+ |
GURL GetCrossDomainTestUrl(const std::string& path) { |
static const std::string secondary_domain = "www.foo.com"; |
host_resolver()->AddRule(secondary_domain, "127.0.0.1"); |
@@ -814,7 +831,8 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
ASSERT_TRUE(https_src_server->Start()); |
src_server = https_src_server.get(); |
} |
- GURL src_url = src_server->GetURL(replacement_path); |
+ GURL loader_url = src_server->GetURL(replacement_path + |
+ loader_query_and_fragment_); |
ASSERT_TRUE(prerender_manager()); |
prerender_manager()->mutable_config().rate_limit_enabled = false; |
@@ -834,7 +852,7 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
// loading, rather than the page directly navigated to, need to |
// handle browser navigation directly. |
current_browser()->OpenURL(OpenURLParams( |
- src_url, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED, |
+ loader_url, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED, |
false)); |
ui_test_utils::RunMessageLoop(); |
@@ -853,7 +871,7 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
// Check if page behaves as expected while in prerendered state. |
bool prerender_test_result = false; |
ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
- prerender_contents->render_view_host_mutable(), L"", |
+ prerender_contents->GetRenderViewHostMutable(), L"", |
L"window.domAutomationController.send(DidPrerenderPass())", |
&prerender_test_result)); |
EXPECT_TRUE(prerender_test_result); |
@@ -944,6 +962,7 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
bool use_https_src_server_; |
bool call_javascript_; |
std::string loader_path_; |
+ std::string loader_query_and_fragment_; |
Browser* explicitly_set_browser_; |
}; |
@@ -953,6 +972,44 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { |
PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
NavigateToDestURL(); |
+ ASSERT_TRUE(GetPrerenderLinkManager()->IsEmpty()); |
+} |
+ |
+// TODO(gavinp): After https://bugs.webkit.org/show_bug.cgi?id=85005 lands, |
+// enable this test. |
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
+ DISABLED_PrerenderPageRemovingLink) { |
+ set_loader_path("files/prerender/prerender_loader_removing_links.html"); |
+ set_loader_query_and_fragment("?links_to_insert=1&links_to_remove=1"); |
+ PrerenderTestURL("files/prerender/prerender_page.html", |
+ FINAL_STATUS_CANCELLED, 1); |
+ RemoveLinkElementAndNavigate(); |
+ ASSERT_TRUE(GetPrerenderLinkManager()->IsEmpty()); |
+} |
+ |
+// TODO(gavinp): After https://bugs.webkit.org/show_bug.cgi?id=85005 lands, |
+// enable this test. |
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
+ DISABLED_PrerenderPageRemovingLinkWithTwoLinks) { |
+ set_loader_path("files/prerender/prerender_loader_removing_links.html"); |
+ set_loader_query_and_fragment("?links_to_insert=2&links_to_remove=2"); |
+ PrerenderTestURL("files/prerender/prerender_page.html", |
+ FINAL_STATUS_CANCELLED, 1); |
+ RemoveLinkElementAndNavigate(); |
+ ASSERT_TRUE(GetPrerenderLinkManager()->IsEmpty()); |
+} |
+ |
+// TODO(gavinp): After https://bugs.webkit.org/show_bug.cgi?id=85005 lands, |
+// enable this test. |
+IN_PROC_BROWSER_TEST_F( |
+ PrerenderBrowserTest, |
+ DISABLED_PrerenderPageRemovingLinkWithTwoLinksRemovingOne) { |
+ set_loader_path("files/prerender/prerender_loader_removing_links.html"); |
+ set_loader_query_and_fragment("?links_to_insert=2&links_to_remove=1"); |
+ PrerenderTestURL("files/prerender/prerender_page.html", |
+ FINAL_STATUS_USED, 1); |
+ RemoveLinkElementAndNavigate(); |
+ ASSERT_FALSE(GetPrerenderLinkManager()->IsEmpty()); |
} |
// Checks that prerendering works in incognito mode. |