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

Side by Side Diff: chrome/renderer/prerender/prerender_dispatcher_unittest.cc

Issue 10918189: Add PrerenderStatusEvent on Prerenders (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 8 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/renderer/prerender/prerender_dispatcher.h" 5 #include "chrome/renderer/prerender/prerender_dispatcher.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "googleurl/src/gurl.h" 9 #include "googleurl/src/gurl.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 11
12 namespace prerender { 12 namespace prerender {
13 13
14 namespace {
15
16 int s_next_prerender_id = 0;
17
18 } // namespace
19
20 using WebKit::WebPrerender;
21
22 // Since we can't mock out WebKit::WebPrerender in chrome, this test can't test
23 // signalling to or from the WebKit side. Instead, it checks only that the
24 // messages received from the browser generate consistant state in the
25 // PrerenderDispatcher. Since prerenders couldn't even start or stop without the
26 // WebKit signalling, we can expect PrerenderBrowserTest to provide adequate
27 // coverage of this.
14 class PrerenderDispatcherTest : public testing::Test { 28 class PrerenderDispatcherTest : public testing::Test {
15 public: 29 public:
16 PrerenderDispatcherTest() {} 30 PrerenderDispatcherTest() {}
17 31
18 bool is_prerender_url(const GURL& url) const { 32 bool is_prerender_url(const GURL& url) const {
19 return prerender_dispatcher_.IsPrerenderURL(url); 33 // We cannot call PrerenderDispatcher::IsPrerenderURL, since it dereferences
34 // WebPrerender to call WebPrerender::url().
35 for (std::multimap<int, GURL>::const_iterator
36 it = prerender_dispatcher_.prerender_aliases_.begin();
37 it != prerender_dispatcher_.prerender_aliases_.end(); ++it) {
38 if (it->second == url)
39 return true;
40 }
41 return false;
20 } 42 }
21 43
22 const PrerenderDispatcher::PrerenderMap& urls() const { 44 const std::map<int, WebPrerender*>& prerenders() const {
23 return prerender_dispatcher_.prerender_urls_; 45 return prerender_dispatcher_.prerenders_;
24 } 46 }
25 47
26 void AddURL(const GURL& url) { prerender_dispatcher_.OnAddPrerenderURL(url); } 48 int StartPrerender() {
27 void RemoveURL(const GURL& url) { 49 prerender_dispatcher_.OnStartedPrerender(s_next_prerender_id);
28 prerender_dispatcher_.OnRemovePrerenderURL(url); 50 return s_next_prerender_id++;
51 }
52
53 void AddAliasToPrerender(int prerender_id, const GURL& url) {
54 prerender_dispatcher_.OnAddAliasToPrerender(prerender_id, url);
55 }
56
57 void StopPrerender(int prerender_id) {
58 prerender_dispatcher_.OnStoppedPrerender(prerender_id);
29 } 59 }
30 60
31 int GetCountForURL(const GURL& url) const { 61 int GetCountForURL(const GURL& url) const {
32 PrerenderDispatcher::PrerenderMap::const_iterator entry = urls().find(url); 62 int count = 0;
33 if (entry == urls().end()) 63 for (std::multimap<int, GURL>::const_iterator
34 return 0; 64 it = prerender_dispatcher_.prerender_aliases_.begin();
35 EXPECT_GT(entry->second, 0); 65 it != prerender_dispatcher_.prerender_aliases_.end(); ++it) {
36 return entry->second; 66 if (it->second == url)
67 count++;
68 }
69 return count;
37 } 70 }
38 71
39 private: 72 private:
40 PrerenderDispatcher prerender_dispatcher_; 73 PrerenderDispatcher prerender_dispatcher_;
41 DISALLOW_COPY_AND_ASSIGN(PrerenderDispatcherTest); 74 DISALLOW_COPY_AND_ASSIGN(PrerenderDispatcherTest);
42 }; 75 };
43 76
44 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherEmpty) { 77 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherEmpty) {
45 EXPECT_EQ(0U, urls().size()); 78 EXPECT_EQ(0U, prerenders().size());
46 } 79 }
47 80
48 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherSingleAdd) { 81 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherSingleAdd) {
49 GURL foo_url = GURL("http://foo.com"); 82 GURL foo_url = GURL("http://foo.com");
50 EXPECT_FALSE(is_prerender_url(foo_url)); 83 EXPECT_FALSE(is_prerender_url(foo_url));
51 AddURL(foo_url); 84 int foo_id = StartPrerender();
85 AddAliasToPrerender(foo_id, foo_url);
52 EXPECT_TRUE(is_prerender_url(foo_url)); 86 EXPECT_TRUE(is_prerender_url(foo_url));
53 EXPECT_EQ(1, GetCountForURL(foo_url)); 87 EXPECT_EQ(1, GetCountForURL(foo_url));
54 } 88 }
55 89
56 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherMultipleAdd) { 90 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherMultipleAdd) {
57 GURL foo_url = GURL("http://foo.com"); 91 GURL foo_url = GURL("http://foo.com");
58 GURL bar_url = GURL("http://bar.com"); 92 GURL bar_url = GURL("http://bar.com");
59 93
60 EXPECT_FALSE(is_prerender_url(foo_url)); 94 EXPECT_FALSE(is_prerender_url(foo_url));
61 EXPECT_FALSE(is_prerender_url(bar_url)); 95 EXPECT_FALSE(is_prerender_url(bar_url));
62 AddURL(foo_url); 96 int foo_id = StartPrerender();
97 AddAliasToPrerender(foo_id, foo_url);
63 EXPECT_TRUE(is_prerender_url(foo_url)); 98 EXPECT_TRUE(is_prerender_url(foo_url));
64 EXPECT_FALSE(is_prerender_url(bar_url)); 99 EXPECT_FALSE(is_prerender_url(bar_url));
65 100
66 AddURL(foo_url); 101 AddAliasToPrerender(foo_id, foo_url);
67 EXPECT_TRUE(is_prerender_url(foo_url)); 102 EXPECT_TRUE(is_prerender_url(foo_url));
68 EXPECT_FALSE(is_prerender_url(bar_url)); 103 EXPECT_FALSE(is_prerender_url(bar_url));
69 EXPECT_EQ(2, GetCountForURL(foo_url)); 104 EXPECT_EQ(2, GetCountForURL(foo_url));
70 105
71 AddURL(bar_url); 106 int bar_id = StartPrerender();
107 AddAliasToPrerender(bar_id, bar_url);
72 EXPECT_TRUE(is_prerender_url(foo_url)); 108 EXPECT_TRUE(is_prerender_url(foo_url));
73 EXPECT_TRUE(is_prerender_url(bar_url)); 109 EXPECT_TRUE(is_prerender_url(bar_url));
74 EXPECT_EQ(2, GetCountForURL(foo_url)); 110 EXPECT_EQ(2, GetCountForURL(foo_url));
75 EXPECT_EQ(1, GetCountForURL(bar_url)); 111 EXPECT_EQ(1, GetCountForURL(bar_url));
76 } 112 }
77 113
78 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherSingleRemove) { 114 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherSingleRemove) {
79 GURL foo_url = GURL("http://foo.com"); 115 GURL foo_url = GURL("http://foo.com");
80 EXPECT_FALSE(is_prerender_url(foo_url)); 116 EXPECT_FALSE(is_prerender_url(foo_url));
81 AddURL(foo_url); 117 int foo_id = StartPrerender();
118 AddAliasToPrerender(foo_id, foo_url);
82 EXPECT_TRUE(is_prerender_url(foo_url)); 119 EXPECT_TRUE(is_prerender_url(foo_url));
83 RemoveURL(foo_url); 120 StopPrerender(foo_id);
84 EXPECT_FALSE(is_prerender_url(foo_url)); 121 EXPECT_FALSE(is_prerender_url(foo_url));
85 EXPECT_EQ(0, GetCountForURL(foo_url)); 122 EXPECT_EQ(0, GetCountForURL(foo_url));
86 } 123 }
87 124
88 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherMultipleRemove) { 125 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherMultipleRemove) {
89 GURL foo_url = GURL("http://foo.com"); 126 GURL foo_url = GURL("http://foo.com");
90 EXPECT_FALSE(is_prerender_url(foo_url)); 127 EXPECT_FALSE(is_prerender_url(foo_url));
91 AddURL(foo_url); 128 int foo_id = StartPrerender();
129 AddAliasToPrerender(foo_id, foo_url);
92 EXPECT_TRUE(is_prerender_url(foo_url)); 130 EXPECT_TRUE(is_prerender_url(foo_url));
93 AddURL(foo_url); 131 AddAliasToPrerender(foo_id, foo_url);
94 EXPECT_TRUE(is_prerender_url(foo_url)); 132 EXPECT_TRUE(is_prerender_url(foo_url));
95 EXPECT_EQ(2, GetCountForURL(foo_url)); 133 EXPECT_EQ(2, GetCountForURL(foo_url));
96 134
97 RemoveURL(foo_url); 135 StopPrerender(foo_id);
98 EXPECT_TRUE(is_prerender_url(foo_url));
99 EXPECT_EQ(1, GetCountForURL(foo_url));
100
101 RemoveURL(foo_url);
102 EXPECT_FALSE(is_prerender_url(foo_url)); 136 EXPECT_FALSE(is_prerender_url(foo_url));
103 EXPECT_EQ(0, GetCountForURL(foo_url)); 137 EXPECT_EQ(0, GetCountForURL(foo_url));
104 } 138 }
105 139
106 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherRemoveWithoutAdd) { 140 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherRemoveWithoutAdd) {
107 GURL foo_url = GURL("http://foo.com"); 141 GURL foo_url = GURL("http://foo.com");
108 EXPECT_FALSE(is_prerender_url(foo_url)); 142 EXPECT_FALSE(is_prerender_url(foo_url));
109 RemoveURL(foo_url); 143 int crazy_prerender_id = 13;
144 StopPrerender(crazy_prerender_id);
110 EXPECT_FALSE(is_prerender_url(foo_url)); 145 EXPECT_FALSE(is_prerender_url(foo_url));
111 EXPECT_EQ(0, GetCountForURL(foo_url)); 146 EXPECT_EQ(0, GetCountForURL(foo_url));
112 } 147 }
113 148
114 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherRemoveTooMany) { 149 TEST_F(PrerenderDispatcherTest, PrerenderDispatcherRemoveTooMany) {
115 GURL foo_url = GURL("http://foo.com"); 150 GURL foo_url = GURL("http://foo.com");
116 EXPECT_FALSE(is_prerender_url(foo_url)); 151 EXPECT_FALSE(is_prerender_url(foo_url));
117 AddURL(foo_url); 152 int foo_id = StartPrerender();
153 AddAliasToPrerender(foo_id, foo_url);
118 EXPECT_TRUE(is_prerender_url(foo_url)); 154 EXPECT_TRUE(is_prerender_url(foo_url));
119 RemoveURL(foo_url); 155 StopPrerender(foo_id);
120 EXPECT_FALSE(is_prerender_url(foo_url)); 156 EXPECT_FALSE(is_prerender_url(foo_url));
121 RemoveURL(foo_url); 157 StopPrerender(foo_id);
122 EXPECT_FALSE(is_prerender_url(foo_url)); 158 EXPECT_FALSE(is_prerender_url(foo_url));
123 EXPECT_EQ(0, GetCountForURL(foo_url)); 159 EXPECT_EQ(0, GetCountForURL(foo_url));
124 } 160 }
125 161
126 } // end namespace prerender 162 } // end namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698