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

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

Issue 9226037: Cancel prerenders from Omnibox if we navigate to a different URL than predicted (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Reorg prerender_manager.cc to match header. Add tests for cancellation. Created 8 years, 11 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
Index: chrome/browser/prerender/prerender_manager_unittest.cc
diff --git a/chrome/browser/prerender/prerender_manager_unittest.cc b/chrome/browser/prerender/prerender_manager_unittest.cc
index 9a9b6be404a99a97aeaa7309e479a71bbfb6e4a6..73cfcf5ae649b9ece661db71a862d047c70d055c 100644
--- a/chrome/browser/prerender/prerender_manager_unittest.cc
+++ b/chrome/browser/prerender/prerender_manager_unittest.cc
@@ -2,13 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/command_line.h"
#include "base/memory/scoped_vector.h"
#include "base/message_loop.h"
#include "base/time.h"
#include "chrome/browser/prerender/prerender_contents.h"
#include "chrome/browser/prerender/prerender_manager.h"
#include "chrome/browser/prerender/prerender_origin.h"
+#include "chrome/common/chrome_switches.h"
#include "chrome/test/base/testing_browser_process.h"
+#include "chrome/test/base/testing_profile.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/test/test_browser_thread.h"
#include "googleurl/src/gurl.h"
@@ -25,11 +28,11 @@ class DummyPrerenderContents : public PrerenderContents {
DummyPrerenderContents(PrerenderManager* prerender_manager,
PrerenderTracker* prerender_tracker,
const GURL& url,
+ Origin origin,
FinalStatus expected_final_status)
: PrerenderContents(prerender_manager, prerender_tracker,
NULL, url, content::Referrer(),
- ORIGIN_LINK_REL_PRERENDER,
- PrerenderManager::kNoExperiment),
+ origin, PrerenderManager::kNoExperiment),
has_started_(false),
expected_final_status_(expected_final_status) {
}
@@ -66,7 +69,7 @@ class DummyPrerenderContents : public PrerenderContents {
class TestPrerenderManager : public PrerenderManager {
public:
explicit TestPrerenderManager(PrerenderTracker* prerender_tracker)
- : PrerenderManager(NULL, prerender_tracker),
+ : PrerenderManager(&profile_, prerender_tracker),
time_(base::Time::Now()),
time_ticks_(base::TimeTicks::Now()),
next_prerender_contents_(NULL),
@@ -104,6 +107,7 @@ class TestPrerenderManager : public PrerenderManager {
FinalStatus expected_final_status) {
DummyPrerenderContents* prerender_contents =
new DummyPrerenderContents(this, prerender_tracker_, url,
+ ORIGIN_LINK_REL_PRERENDER,
expected_final_status);
SetNextPrerenderContents(prerender_contents);
return prerender_contents;
@@ -111,10 +115,22 @@ class TestPrerenderManager : public PrerenderManager {
DummyPrerenderContents* CreateNextPrerenderContents(
const GURL& url,
+ Origin origin,
+ FinalStatus expected_final_status) {
+ DummyPrerenderContents* prerender_contents =
+ new DummyPrerenderContents(this, prerender_tracker_, url,
+ origin, expected_final_status);
+ SetNextPrerenderContents(prerender_contents);
+ return prerender_contents;
+ }
+
+ DummyPrerenderContents* CreateNextPrerenderContents(
+ const GURL& url,
const std::vector<GURL>& alias_urls,
FinalStatus expected_final_status) {
DummyPrerenderContents* prerender_contents =
new DummyPrerenderContents(this, prerender_tracker_, url,
+ ORIGIN_LINK_REL_PRERENDER,
expected_final_status);
for (std::vector<GURL>::const_iterator it = alias_urls.begin();
it != alias_urls.end();
@@ -162,6 +178,8 @@ class TestPrerenderManager : public PrerenderManager {
Origin origin,
uint8 experiment_id) OVERRIDE {
DCHECK(next_prerender_contents_.get());
+ DCHECK_EQ(next_prerender_contents_->prerender_url(), url);
+ DCHECK_EQ(next_prerender_contents_->origin(), origin);
return next_prerender_contents_.release();
}
@@ -173,6 +191,8 @@ class TestPrerenderManager : public PrerenderManager {
ScopedVector<PrerenderContents> used_prerender_contents_;
PrerenderTracker* prerender_tracker_;
+
+ TestingProfile profile_;
};
class RestorePrerenderMode {
@@ -192,6 +212,10 @@ class PrerenderManagerTest : public testing::Test {
PrerenderManagerTest() : ui_thread_(BrowserThread::UI, &message_loop_),
prerender_manager_(
new TestPrerenderManager(prerender_tracker())) {
+ // Enable omnibox prerendering.
+ CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+ switches::kPrerenderFromOmnibox,
+ switches::kPrerenderFromOmniboxSwitchValueEnabled);
}
TestPrerenderManager* prerender_manager() {
@@ -529,4 +553,46 @@ TEST_F(PrerenderManagerTest, ClearTest) {
EXPECT_EQ(null, prerender_manager()->GetEntry(url));
}
+// Make sure canceling works as expected.
+TEST_F(PrerenderManagerTest, CancelAllTest) {
+ const DummyPrerenderContents* null = NULL;
+ GURL url("http://www.google.com/");
+ DummyPrerenderContents* prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url, FINAL_STATUS_CANCELLED);
+ EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(prerender_contents->has_started());
+ prerender_manager()->CancelAllPrerenders();
+ EXPECT_EQ(null, prerender_manager()->GetEntry(url));
+}
+
+// Make sure canceling for omnibox works as expected.
+TEST_F(PrerenderManagerTest, CancelOmniboxTest) {
+ const DummyPrerenderContents* null = NULL;
+ // Check canceling removes the Omnibox url.
+ {
+ GURL url("http://www.google.com/");
+ DummyPrerenderContents* prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url, ORIGIN_OMNIBOX, FINAL_STATUS_CANCELLED);
+ EXPECT_TRUE(prerender_manager()->AddPrerenderFromOmnibox(url, NULL));
+ EXPECT_TRUE(prerender_contents->has_started());
+ prerender_manager()->CancelOmniboxPrerenders();
+ EXPECT_EQ(null, prerender_manager()->GetEntry(url));
+ }
+
+ // Check canceling does not remove a Link url.
+ {
+ GURL url("http://www.google.com/");
+ DummyPrerenderContents* prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url, ORIGIN_LINK_REL_PRERENDER, FINAL_STATUS_CANCELLED);
+ EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(prerender_contents->has_started());
+ prerender_manager()->CancelOmniboxPrerenders();
+ EXPECT_NE(null, prerender_manager()->GetEntry(url));
+ }
+
+}
+
} // namespace prerender

Powered by Google App Engine
This is Rietveld 408576698