Index: chrome/browser/prerender/prerender_browsertest.cc |
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc |
index fffe4ed0df9e2e114203bb166954e28ec5da10a4..6b2063326885d6282ef9206d1eabe30d22f31329 100644 |
--- a/chrome/browser/prerender/prerender_browsertest.cc |
+++ b/chrome/browser/prerender/prerender_browsertest.cc |
@@ -17,6 +17,7 @@ |
#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_handle.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" |
@@ -110,13 +111,11 @@ bool ShouldRenderPrerenderedPageCorrectly(FinalStatus status) { |
case FINAL_STATUS_USED: |
case FINAL_STATUS_WINDOW_OPENER: |
case FINAL_STATUS_APP_TERMINATING: |
- case FINAL_STATUS_FRAGMENT_MISMATCH: |
case FINAL_STATUS_CACHE_OR_HISTORY_CLEARED: |
// We'll crash the renderer after it's loaded. |
case FINAL_STATUS_RENDERER_CRASHED: |
case FINAL_STATUS_CANCELLED: |
case FINAL_STATUS_DEVTOOLS_ATTACHED: |
- case FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH: |
return true; |
default: |
return false; |
@@ -126,6 +125,10 @@ bool ShouldRenderPrerenderedPageCorrectly(FinalStatus status) { |
// PrerenderContents that stops the UI message loop on DidStopLoading(). |
class TestPrerenderContents : public PrerenderContents { |
public: |
+ using PrerenderContents::PendingPrerenderInfo; |
dominich
2012/06/28 00:34:32
Do you really need these as a derived class of Pre
gavinp
2012/07/02 18:19:29
They are, but TestPrerenderManager calls them, and
|
+ using PrerenderContents::PendingPrerenderList; |
+ using PrerenderContents::pending_prerender_list; |
+ |
TestPrerenderContents( |
PrerenderManager* prerender_manager, |
PrerenderTracker* prerender_tracker, |
@@ -226,14 +229,16 @@ class TestPrerenderContents : public PrerenderContents { |
} |
} |
- virtual void AddPendingPrerender(const GURL& url, |
- const content::Referrer& referrer, |
- const gfx::Size& size) OVERRIDE { |
- PrerenderContents::AddPendingPrerender(url, referrer, size); |
+ virtual PrerenderHandle AddPendingPrerender(const GURL& url, |
+ const content::Referrer& referrer, |
+ const gfx::Size& size) OVERRIDE { |
+ PrerenderHandle handle = |
+ PrerenderContents::AddPendingPrerender(url, referrer, size); |
if (expected_pending_prerenders_ > 0 && |
pending_prerender_list()->size() == expected_pending_prerenders_) { |
MessageLoop::current()->Quit(); |
} |
+ return handle; |
} |
virtual WebContents* CreateWebContents( |
@@ -273,6 +278,8 @@ class TestPrerenderContents : public PrerenderContents { |
int number_of_loads() const { return number_of_loads_; } |
+ FinalStatus expected_final_status() const { return expected_final_status_; } |
+ |
private: |
virtual void OnRenderViewHostCreated( |
RenderViewHost* new_render_view_host) OVERRIDE { |
@@ -489,6 +496,11 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
virtual ~PrerenderBrowserTest() {} |
+ content::SessionStorageNamespace* GetSessionStorageNamespace() const { |
+ return current_browser()->GetActiveTabContents()->web_contents()-> |
+ GetRenderViewHost()->GetSessionStorageNamespace(); |
+ } |
+ |
virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |
#if defined(ENABLE_SAFE_BROWSING) |
SafeBrowsingService::RegisterFactory(safe_browsing_factory_.get()); |
@@ -702,17 +714,35 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
} |
bool UrlIsInPrerenderManager(const std::string& html_file) const { |
- GURL dest_url = test_server()->GetURL(html_file); |
- return (GetPrerenderManager()->FindEntry(dest_url) != NULL); |
+ return UrlIsInPrerenderManager(test_server()->GetURL(html_file)); |
} |
- bool UrlIsInPrerenderManager(const GURL& url) { |
- return (GetPrerenderManager()->FindEntry(url) != NULL); |
+ bool UrlIsInPrerenderManager(const GURL& url) const { |
+ return |
dominich
2012/06/28 00:34:32
nit:
return GetPrerenderManager()->FindEntry(
|
+ GetPrerenderManager()->FindEntry(url, |
+ GetSessionStorageNamespace()) != NULL; |
} |
bool UrlIsPendingInPrerenderManager(const std::string& html_file) const { |
+ TestPrerenderContents* test_prerender_contents = GetPrerenderContents(); |
+ if (!test_prerender_contents) |
+ return false; |
GURL dest_url = test_server()->GetURL(html_file); |
- return GetPrerenderManager()->IsPendingEntry(dest_url); |
+ for (TestPrerenderContents::PendingPrerenderList::const_iterator |
+ it = test_prerender_contents->pending_prerender_list()->begin(), |
+ end = test_prerender_contents->pending_prerender_list()->end(); |
+ it != end; |
+ ++it) { |
+ if (it->url == dest_url) { |
+ EXPECT_FALSE(GetPrerenderManager()->FindHandle( |
+ dest_url, GetSessionStorageNamespace())); |
+ EXPECT_TRUE(test_prerender_contents->IsPendingEntry( |
+ it->prerender_handle_impl->AsWeakPtr())); |
+ EXPECT_TRUE(it->prerender_handle_impl->IsPending()); |
+ return true; |
+ } |
+ } |
+ return false; |
} |
void set_use_https_src(bool use_https_src_server) { |
@@ -765,7 +795,8 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
TestPrerenderContents* GetPrerenderContents() const { |
return static_cast<TestPrerenderContents*>( |
- GetPrerenderManager()->FindEntry(dest_url_)); |
+ GetPrerenderManager()->FindEntry(dest_url_, |
+ GetSessionStorageNamespace())); |
} |
void set_loader_path(const std::string& path) { |
@@ -882,9 +913,12 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
} else { |
// In the failure case, we should have removed |dest_url_| from the |
// prerender_manager. We ignore dummy PrerenderContents (as indicated |
- // by not having started). |
+ // by not having started), and PrerenderContents that are expected to |
+ // be left in the manager until the test finishes. |
EXPECT_TRUE(prerender_contents == NULL || |
- !prerender_contents->prerendering_has_started()); |
+ !prerender_contents->prerendering_has_started() || |
+ prerender_contents->expected_final_status() == |
+ FINAL_STATUS_MANAGER_SHUTDOWN); |
} |
} |
@@ -953,8 +987,11 @@ class PrerenderBrowserTest : public InProcessBrowserTest { |
string16(), |
ASCIIToUTF16(javascript_function_name)); |
- // Run message loop until the prerender contents is destroyed. |
- ui_test_utils::RunMessageLoop(); |
+ if (prerender_contents->expected_final_status() != |
+ FINAL_STATUS_APP_TERMINATING) { |
+ // Run message loop until the prerender contents is destroyed. |
+ ui_test_utils::RunMessageLoop(); |
+ } |
} |
WaitForLoadPrerenderContentsFactory* prerender_contents_factory_; |
@@ -1638,7 +1675,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderRendererCrash) { |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
DISABLED_PrerenderPageNavigateFragment) { |
PrerenderTestURL("files/prerender/prerender_fragment.html", |
- FINAL_STATUS_FRAGMENT_MISMATCH, |
+ FINAL_STATUS_APP_TERMINATING, |
1); |
NavigateToURL("files/prerender/prerender_fragment.html#fragment"); |
} |
@@ -1649,7 +1686,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
dominich
2012/06/28 00:34:32
shouldn't be disabled any more?
|
DISABLED_PrerenderFragmentNavigatePage) { |
PrerenderTestURL("files/prerender/prerender_fragment.html#fragment", |
- FINAL_STATUS_FRAGMENT_MISMATCH, |
+ FINAL_STATUS_APP_TERMINATING, |
1); |
NavigateToURL("files/prerender/prerender_fragment.html"); |
} |
@@ -1660,7 +1697,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
dominich
2012/06/28 00:34:32
shouldn't be disabled any more?
|
DISABLED_PrerenderFragmentNavigateFragment) { |
PrerenderTestURL("files/prerender/prerender_fragment.html#other_fragment", |
- FINAL_STATUS_FRAGMENT_MISMATCH, |
+ FINAL_STATUS_APP_TERMINATING, |
1); |
NavigateToURL("files/prerender/prerender_fragment.html#fragment"); |
} |
@@ -1672,7 +1709,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
DISABLED_PrerenderClientRedirectFromFragment) { |
PrerenderTestURL( |
CreateClientRedirect("files/prerender/prerender_fragment.html#fragment"), |
- FINAL_STATUS_FRAGMENT_MISMATCH, |
+ FINAL_STATUS_APP_TERMINATING, |
2); |
NavigateToURL("files/prerender/prerender_fragment.html"); |
} |
@@ -1684,7 +1721,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
DISABLED_PrerenderClientRedirectToFragment) { |
PrerenderTestURL( |
CreateClientRedirect("files/prerender/prerender_fragment.html"), |
- FINAL_STATUS_FRAGMENT_MISMATCH, |
+ FINAL_STATUS_APP_TERMINATING, |
2); |
NavigateToURL("files/prerender/prerender_fragment.html#fragment"); |
} |
@@ -1699,7 +1736,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
NavigateToURL("files/prerender/prerender_fragment_location_hash.html"); |
} |
-// Checks that prerendering a PNG works correctly. |
+// Checks that preren a PNG works correctly. |
dominich
2012/06/28 00:34:32
an accidental s/dering//g ?
|
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderImagePng) { |
DisableJavascriptCalls(); |
PrerenderTestURL("files/prerender/image.png", FINAL_STATUS_USED, 1); |
@@ -1846,7 +1883,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPrint) { |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
PrerenderSameDomainWindowOpenerWindowOpen) { |
PrerenderTestURL("files/prerender/prerender_page.html", |
- FINAL_STATUS_WINDOW_OPENER, |
+ FINAL_STATUS_APP_TERMINATING, |
dominich
2012/06/28 00:34:32
this is surprising. we still want to cancel on WIN
|
1); |
OpenDestURLViaWindowOpen(); |
} |
@@ -1856,7 +1893,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
PrerenderSameDomainWindowOpenerClickTarget) { |
PrerenderTestURL("files/prerender/prerender_page.html", |
- FINAL_STATUS_WINDOW_OPENER, |
+ FINAL_STATUS_APP_TERMINATING, |
dominich
2012/06/28 00:34:32
ditto
|
1); |
OpenDestURLViaClickTarget(); |
} |
@@ -2139,21 +2176,21 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewWindow) { |
PrerenderTestURL("files/prerender/prerender_page_with_link.html", |
- FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH, |
+ FINAL_STATUS_APP_TERMINATING, |
1); |
OpenDestURLViaClickNewWindow(); |
} |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewForegroundTab) { |
PrerenderTestURL("files/prerender/prerender_page_with_link.html", |
- FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH, |
+ FINAL_STATUS_APP_TERMINATING, |
1); |
OpenDestURLViaClickNewForegroundTab(); |
} |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewBackgroundTab) { |
PrerenderTestURL("files/prerender/prerender_page_with_link.html", |
- FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH, |
+ FINAL_STATUS_APP_TERMINATING, |
1); |
OpenDestURLViaClickNewBackgroundTab(); |
} |