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

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: Fix leak 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
« no previous file with comments | « chrome/browser/prerender/prerender_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 bdedb0ff47ee0a44cf5c5a934df7aa9fe24370ec..d28c1d4428901be6d0c6d2c6dfabb25fb592d59b 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() {
@@ -526,7 +550,46 @@ TEST_F(PrerenderManagerTest, ClearTest) {
EXPECT_TRUE(prerender_contents->has_started());
prerender_manager()->ClearData(PrerenderManager::CLEAR_PRERENDER_CONTENTS);
DummyPrerenderContents* null = NULL;
- EXPECT_EQ(null, prerender_manager()->GetEntry(url));
+ EXPECT_EQ(null, prerender_manager()->FindEntry(url));
+}
+
+// Make sure canceling works as expected.
+TEST_F(PrerenderManagerTest, CancelAllTest) {
+ 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();
+ const DummyPrerenderContents* null = NULL;
+ EXPECT_EQ(null, prerender_manager()->FindEntry(url));
+}
+
+// Make sure canceling for omnibox works as expected.
+TEST_F(PrerenderManagerTest, CancelOmniboxRemovesOmniboxTest) {
+ // 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();
+ const DummyPrerenderContents* null = NULL;
+ EXPECT_EQ(null, prerender_manager()->FindEntry(url));
+}
+
+TEST_F(PrerenderManagerTest, CancelOmniboxDoesNotRemoveLinkTest) {
+ GURL url("http://www.google.com/");
+ DummyPrerenderContents* prerender_contents =
+ prerender_manager()->CreateNextPrerenderContents(
+ url, ORIGIN_LINK_REL_PRERENDER, FINAL_STATUS_MANAGER_SHUTDOWN);
+ EXPECT_TRUE(prerender_manager()->AddSimplePrerender(url));
+ EXPECT_TRUE(prerender_contents->has_started());
+ prerender_manager()->CancelOmniboxPrerenders();
+ const DummyPrerenderContents* null = NULL;
+ EXPECT_NE(null, prerender_manager()->FindEntry(url));
}
} // namespace prerender
« no previous file with comments | « chrome/browser/prerender/prerender_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698