Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Unified Diff: chrome/browser/prerender/prerender_browsertest.cc

Issue 15041004: Replace PruneAllButActive with PruneAllButVisible. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Change to CHECK. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prerender/prerender_browsertest.cc
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc
index 80199b50107ce2c2abdd60a37d4125ab72b3adec..3d5c933d2a5b85cfb2b0c5e4077a0c58fb849874 100644
--- a/chrome/browser/prerender/prerender_browsertest.cc
+++ b/chrome/browser/prerender/prerender_browsertest.cc
@@ -59,6 +59,8 @@
#include "net/dns/mock_host_resolver.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_getter.h"
+#include "net/url_request/url_request_filter.h"
+#include "net/url_request/url_request_job.h"
#include "ui/base/l10n/l10n_util.h"
using content::BrowserThread;
@@ -579,6 +581,41 @@ class RestorePrerenderMode {
PrerenderManager::PrerenderManagerMode prev_mode_;
};
+// URLRequestJob (and associated handler) which never starts.
+class NeverStartURLRequestJob : public net::URLRequestJob {
+ public:
+ NeverStartURLRequestJob(net::URLRequest* request,
+ net::NetworkDelegate* network_delegate)
+ : net::URLRequestJob(request, network_delegate) {
+ }
+
+ virtual void Start() OVERRIDE {}
+
+ private:
+ virtual ~NeverStartURLRequestJob() {}
+};
+
+class NeverStartProtocolHandler
+ : public net::URLRequestJobFactory::ProtocolHandler {
+ public:
+ NeverStartProtocolHandler() {}
+ virtual ~NeverStartProtocolHandler() {}
+
+ virtual net::URLRequestJob* MaybeCreateJob(
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate) const OVERRIDE {
+ return new NeverStartURLRequestJob(request, network_delegate);
+ }
+};
+
+void CreateNeverStartProtocolHandlerOnIO(const GURL& url) {
+ CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> never_respond_handler(
+ new NeverStartProtocolHandler());
+ net::URLRequestFilter::GetInstance()->AddUrlProtocolHandler(
+ url, never_respond_handler.Pass());
+}
+
} // namespace
class PrerenderBrowserTest : virtual public InProcessBrowserTest {
@@ -701,13 +738,14 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest {
}
void NavigateToDestURL() const {
- NavigateToDestURLWithDisposition(CURRENT_TAB);
+ NavigateToDestURLWithDisposition(CURRENT_TAB, true);
}
// Opens the url in a new tab, with no opener.
void NavigateToDestURLWithDisposition(
- WindowOpenDisposition disposition) const {
- NavigateToURLImpl(dest_url_, disposition);
+ WindowOpenDisposition disposition,
+ bool expect_swap_to_succeed) const {
+ NavigateToURLImpl(dest_url_, disposition, expect_swap_to_succeed);
}
void OpenDestURLViaClick() const {
@@ -818,7 +856,7 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest {
void NavigateToURL(const std::string& dest_html_file) const {
GURL dest_url = test_server()->GetURL(dest_html_file);
- NavigateToURLImpl(dest_url, CURRENT_TAB);
+ NavigateToURLImpl(dest_url, CURRENT_TAB, true);
}
bool UrlIsInPrerenderManager(const std::string& html_file) const {
@@ -1085,7 +1123,8 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest {
}
void NavigateToURLImpl(const GURL& dest_url,
- WindowOpenDisposition disposition) const {
+ WindowOpenDisposition disposition,
+ bool expect_swap_to_succeed) const {
ASSERT_NE(static_cast<PrerenderManager*>(NULL), GetPrerenderManager());
// Make sure in navigating we have a URL to use in the PrerenderManager.
ASSERT_NE(static_cast<PrerenderContents*>(NULL), GetPrerenderContents());
@@ -1118,10 +1157,11 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest {
current_browser(), dest_url, disposition,
ui_test_utils::BROWSER_TEST_NONE);
- // Make sure the PrerenderContents found earlier was used or removed.
- EXPECT_EQ(static_cast<PrerenderContents*>(NULL), GetPrerenderContents());
+ // Make sure the PrerenderContents found earlier was used or removed,
+ // unless we expect the swap in to fail.
+ EXPECT_EQ(expect_swap_to_succeed, !GetPrerenderContents());
- if (call_javascript_ && web_contents) {
+ if (call_javascript_ && web_contents && expect_swap_to_succeed) {
if (page_load_observer.get())
page_load_observer->Wait();
@@ -1365,12 +1405,29 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibility) {
NavigateToDestURL();
}
-// Checks that the visibility API works when the prerender is quickly opened
-// in a new tab before it stops loading.
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityQuickSwitch) {
- PrerenderTestURL("files/prerender/prerender_visibility_quick.html",
- FINAL_STATUS_USED, 0);
- NavigateToDestURL();
+// Checks that the prerendering of a page is canceled correctly if we try to
+// swap it in before it commits.
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNoCommitNoSwap) {
+ // Navigate to a page that triggers a prerender for a URL that never commits.
+ const GURL kNoCommitUrl("http://never-respond.example.com");
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&CreateNeverStartProtocolHandlerOnIO, kNoCommitUrl));
+ PrerenderTestURL(kNoCommitUrl,
+ FINAL_STATUS_CANCELLED,
+ 0);
+
+ // Navigate to the URL, but assume the contents won't be swapped in.
+ NavigateToDestURLWithDisposition(CURRENT_TAB, false);
+
+ // Confirm that the prerendered version of the URL is not swapped in,
+ // since it never committed.
+ EXPECT_TRUE(UrlIsInPrerenderManager(kNoCommitUrl));
+
+ // Post a task to cancel all the prerenders, so that we don't wait further.
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(&CancelAllPrerenders, GetPrerenderManager()));
+ content::RunMessageLoop();
}
// Checks that the prerendering of a page is canceled correctly when a
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698