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

Side by Side Diff: chrome/renderer/searchbox/searchbox_unittest.cc

Issue 1010783002: [Icons NTP] Working prototype to fetch, store, and display big icons. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tweaks and unit test fix. Created 5 years, 9 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
« no previous file with comments | « chrome/renderer/searchbox/searchbox_extension.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/searchbox/searchbox.h"
6
7 #include <map>
8 #include <string>
9
5 #include "base/basictypes.h" 10 #include "base/basictypes.h"
6 #include "chrome/common/instant_types.h" 11 #include "chrome/common/instant_types.h"
7 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
8 #include "url/gurl.h" 13 #include "url/gurl.h"
9 14
15 namespace {
16
17 const auto FAVICON = SearchBox::FAVICON;
18 const auto LARGE_ICON = SearchBox::LARGE_ICON;
19 const auto FALLBACK_ICON = SearchBox::FALLBACK_ICON;
20 const auto THUMB = SearchBox::THUMB;
21
22 const char* kUrlString1 = "http://www.google.com";
23 const char* kUrlString2 = "http://www.chromium.org/path/q=3#r=4";
24 const char* kUrlString3 = "http://www.youtube.com:8080/hosps";
25
26 // Mock helper to test internal::TranslateIconRestrictedUrl().
27 class MockIconURLHelper: public SearchBox::IconURLHelper {
28 public:
29 MockIconURLHelper();
30 ~MockIconURLHelper() override;
31 int GetViewID() const override;
32 std::string GetURLStringFromRestrictedID(InstantRestrictedID rid) const
33 override;
34
35 private:
36 std::map<InstantRestrictedID, std::string> rid_to_url_string_;
37 };
38
39 MockIconURLHelper::MockIconURLHelper() {
40 rid_to_url_string_[1] = kUrlString1;
41 rid_to_url_string_[2] = kUrlString2;
42 rid_to_url_string_[3] = kUrlString3;
43 }
44
45 MockIconURLHelper::~MockIconURLHelper() {
46 }
47
48 int MockIconURLHelper::GetViewID() const {
49 return 137;
50 }
51
52 std::string MockIconURLHelper::GetURLStringFromRestrictedID(
53 InstantRestrictedID rid) const {
54 auto it = rid_to_url_string_.find(rid);
55 return it == rid_to_url_string_.end() ? std::string() : it->second;
56 }
57
58 } // namespace
59
10 namespace internal { 60 namespace internal {
11 61
12 // Defined in searchbox.cc 62 // Defined in searchbox.cc
13 bool GetRestrictedIDFromThumbnailUrl(int render_view_id, 63 bool ParseViewIdAndRestrictedId(const std::string id_part,
14 const GURL& url, 64 int* view_id_out,
15 InstantRestrictedID* id); 65 InstantRestrictedID* rid_out);
16 66
17 // Defined in searchbox.cc 67 // Defined in searchbox.cc
18 bool GetRestrictedIDFromFaviconUrl(int render_view_id, 68 bool ParseIconRestrictedUrl(const GURL& url,
19 const GURL& url, 69 SearchBox::ImageSourceType type,
20 std::string* favicon_params, 70 std::string* param_part,
21 InstantRestrictedID* rid); 71 int* view_id,
22 72 InstantRestrictedID* rid);
23 TEST(SearchBoxUtilTest, GetInstantRestrictedIDFromTransientURL) { 73
24 const int kInvalidRenderViewID = 920; 74 // Defined in searchbox.cc
25 const int kValidRenderViewID = 1; 75 bool TranslateIconRestrictedUrl(const GURL& transient_url,
26 76 SearchBox::ImageSourceType type,
27 const struct { 77 const SearchBox::IconURLHelper& helper,
28 int render_view_id; 78 GURL* url);
29 GURL transient_url; 79
80 TEST(SearchBoxUtilTest, ParseViewIdAndRestrictedIdSuccess) {
81 int view_id = -1;
82 InstantRestrictedID rid = -1;
83
84 EXPECT_TRUE(ParseViewIdAndRestrictedId("2/3", &view_id, &rid));
85 EXPECT_EQ(2, view_id);
86 EXPECT_EQ(3, rid);
87
88 EXPECT_TRUE(ParseViewIdAndRestrictedId("0/0", &view_id, &rid));
89 EXPECT_EQ(0, view_id);
90 EXPECT_EQ(0, rid);
91
92 EXPECT_TRUE(ParseViewIdAndRestrictedId("1048576/314", &view_id, &rid));
93 EXPECT_EQ(1048576, view_id);
94 EXPECT_EQ(314, rid);
95
96 // Odd but not fatal.
97 EXPECT_TRUE(ParseViewIdAndRestrictedId("00/09", &view_id, &rid));
98 EXPECT_EQ(0, view_id);
99 EXPECT_EQ(9, rid);
100
101 // Tolerates multiple, leading, and trailing "/".
102 EXPECT_TRUE(ParseViewIdAndRestrictedId("2////3", &view_id, &rid));
103 EXPECT_EQ(2, view_id);
104 EXPECT_EQ(3, rid);
105
106 EXPECT_TRUE(ParseViewIdAndRestrictedId("5/6/", &view_id, &rid));
107 EXPECT_EQ(5, view_id);
108 EXPECT_EQ(6, rid);
109
110 EXPECT_TRUE(ParseViewIdAndRestrictedId("/7/8", &view_id, &rid));
111 EXPECT_EQ(7, view_id);
112 EXPECT_EQ(8, rid);
113 }
114
115 TEST(SearchBoxUtilTest, ParseViewIdAndRestrictedIdFailure) {
116 const char* test_cases[] = {
117 "",
118 " ",
119 "/",
120 "2/",
121 "/3",
122 "2a/3",
123 "2/3a",
124 " 2/3",
125 "2/ 3",
126 "2 /3 ",
127 "23",
128 "2,3",
129 "-2/3",
130 "2/-3",
131 "2/3/1",
132 "blahblah",
133 "0xA/0x10",
134 };
135 for (size_t i = 0; i < arraysize(test_cases); ++i) {
136 int view_id = -1;
137 InstantRestrictedID rid = -1;
138 EXPECT_FALSE(ParseViewIdAndRestrictedId(test_cases[i], &view_id, &rid))
139 << " for test_cases[" << i << "]";
140 EXPECT_EQ(-1, view_id);
141 EXPECT_EQ(-1, rid);
142 }
143 }
144
145 TEST(SearchBoxUtilTest, ParseIconRestrictedUrlFaviconSuccess) {
146 struct {
147 SearchBox::ImageSourceType type;
148 const char* transient_url_str;
149 const char* expected_param_part;
150 int expected_view_id;
30 InstantRestrictedID expected_rid; 151 InstantRestrictedID expected_rid;
31 bool expected_return_val;
32 } test_cases[] = { 152 } test_cases[] = {
33 // RenderView ID matches the view id specified in the transient url. 153 {FAVICON, "chrome-search://favicon/1/2", "", 1, 2},
34 {kValidRenderViewID, GURL("chrome-search://favicon/1/2"), 2, true}, 154 {FAVICON, "chrome-search://favicon/size/16@2x/3/4", "size/16@2x/", 3, 4},
35 {kValidRenderViewID, GURL("chrome-search://thumb/1/2"), 2, true}, 155 {FAVICON, "chrome-search://favicon/largest/5/6", "largest/", 5, 6},
36 156 {FAVICON, "chrome-search://favicon/origin/7/8", "origin/", 7, 8},
37 // RenderView ID does not match the view id specified in the transient url. 157 {FAVICON, "chrome-search://favicon/iconurl/9/10", "iconurl/", 9, 10},
38 {kInvalidRenderViewID, GURL("chrome-search://favicon/1/2"), 0, false}, 158 {LARGE_ICON, "chrome-search://large-icon/96/1/2", "96/", 1, 2},
39 {kInvalidRenderViewID, GURL("chrome-search://thumb/1/2"), 0, false}, 159 {LARGE_ICON, "chrome-search://large-icon/1/3/4", "1/", 3, 4},
40 160 // Size restriction is *not* enforced during parsing, but later.
41 // Invalid transient urls. 161 {LARGE_ICON, "chrome-search://large-icon/1000000/5/6", "1000000/", 5, 6},
42 {kValidRenderViewID, GURL("chrome-search://thumb"), 0, false}, 162 {FALLBACK_ICON, "chrome-search://fallback-icon/,,,,/1/2", ",,,,/", 1, 2},
43 {kValidRenderViewID, GURL("chrome-search://thumb/"), 0, false}, 163 {FALLBACK_ICON, "chrome-search://fallback-icon/1,,,,/3/4", "1,,,,/", 3, 4},
44 {kValidRenderViewID, GURL("chrome-search://thumb/123"), 0, false}, 164 {FALLBACK_ICON, "chrome-search://fallback-icon/64,fff,black,0.4,0.6/5/6",
45 {kValidRenderViewID, GURL("chrome-search://thumb/xyz"), 0, false}, 165 "64,fff,black,0.4,0.6/", 5, 6},
46 {kValidRenderViewID, GURL("chrome-search://thumb/123/"), 0, false}, 166 {THUMB, "chrome-search://thumb/1/2", "", 1, 2},
47 {kValidRenderViewID, GURL("chrome-search://thumb/123/xyz"), 0, false}, 167 };
48 {kValidRenderViewID, GURL("chrome-search://favicon"), 0, false}, 168 for (size_t i = 0; i < arraysize(test_cases); ++i) {
49 {kValidRenderViewID, GURL("chrome-search://favicon/"), 0, false}, 169 std::string param_part = "(unwritten)";
50 {kValidRenderViewID, GURL("chrome-search://favicon/123"), 0, false}, 170 int view_id = -1;
51 {kValidRenderViewID, GURL("chrome-search://favicon/xyz"), 0, false}, 171 InstantRestrictedID rid = -1;
52 {kValidRenderViewID, GURL("chrome-search://favicon/123/"), 0, false}, 172 EXPECT_TRUE(ParseIconRestrictedUrl(GURL(test_cases[i].transient_url_str),
53 {kValidRenderViewID, GURL("chrome-search://favicon/123/xyz"), 0, false} 173 test_cases[i].type, &param_part, &view_id, &rid))
54 }; 174 << " for test_cases[" << i << "]";
55 175 EXPECT_EQ(test_cases[i].expected_param_part, param_part)
56 InstantRestrictedID rid = 0; 176 << " for test_cases[" << i << "]";
57 for (size_t i = 0; i < arraysize(test_cases); ++i) { 177 EXPECT_EQ(test_cases[i].expected_view_id, view_id)
58 bool return_val = GetRestrictedIDFromThumbnailUrl( 178 << " for test_cases[" << i << "]";
59 test_cases[i].render_view_id, test_cases[i].transient_url, &rid); 179 EXPECT_EQ(test_cases[i].expected_rid, rid)
60 EXPECT_EQ(test_cases[i].expected_return_val, return_val); 180 << " for test_cases[" << i << "]";
61 EXPECT_EQ(test_cases[i].expected_rid, rid); 181 }
62 rid = 0; 182 }
63 } 183
64 } 184 TEST(SearchBoxUtilTest, ParseIconRestrictedUrlFailure) {
65 185 struct {
66 TEST(SearchBoxUtilTest, ParseRestrictedFaviconTransientUrl) { 186 SearchBox::ImageSourceType type;
67 const int kInvalidRenderViewID = 920; 187 const char* transient_url_str;
68 const int kValidRenderViewID = 1;
69
70 const struct {
71 int render_view_id;
72 GURL transient_url;
73 std::string expected_favicon_params;
74 InstantRestrictedID expected_rid;
75 bool expected_return_val;
76 } test_cases[] = { 188 } test_cases[] = {
77 // RenderView ID matches the view id specified in the transient url. 189 {FAVICON, "chrome-search://favicon/"},
78 { 190 {FAVICON, "chrome-search://favicon/3/"},
79 kValidRenderViewID, 191 {FAVICON, "chrome-search://favicon/size/3/4"},
80 GURL("chrome-search://favicon/1/2"), 192 {FAVICON, "chrome-search://favicon/largest/http://www.google.com"},
81 "", 193 {FAVICON, "chrome-search://favicon/size/16@2x/-1/10"},
82 2, 194 {LARGE_ICON, "chrome-search://large-icon/"},
83 true 195 {LARGE_ICON, "chrome-search://large-icon/3"},
84 }, 196 {LARGE_ICON, "chrome-search://large-icon/3/4"},
85 { 197 {LARGE_ICON, "chrome-search://large-icon/-1/3/4"},
86 kValidRenderViewID, 198 {LARGE_ICON, "chrome-search://large-icon/0/3/4"},
87 GURL("chrome-search://favicon/size/16@2x/1/2"), 199 {LARGE_ICON, "chrome-search://large-icon/64/http://www.google.com"},
88 "size/16@2x/", 200 {LARGE_ICON, "chrome-search://large-icon/bad-size/3/4"},
89 2, 201 {FALLBACK_ICON, "chrome-search://fallback-icon/"},
90 true 202 {FALLBACK_ICON, "chrome-search://fallback-icon/3"},
91 }, 203 {FALLBACK_ICON, "chrome-search://fallback-icon/3/4"},
92 { 204 {FALLBACK_ICON, "chrome-search://fallback-icon//3/4"},
93 kValidRenderViewID, 205 {FALLBACK_ICON, "chrome-search://fallback-icon/,,/3/4"},
94 GURL("chrome-search://favicon/largest/1/2"), 206 {FALLBACK_ICON, "chrome-search://fallback-icon/bad-spec/3/4"},
95 "largest/", 207 {FALLBACK_ICON, "chrome-search://fallback-icon/-1,,,,/3/4"},
96 2, 208 {FALLBACK_ICON, "chrome-search://fallback-icon/,junk,,,/3/4"},
97 true 209 // This case is a bit stringent. Since we always render fallback icons,
98 }, 210 // search privider can't use this to probe user history. We'll consider
99 { 211 // relaxing the check if the need arises.
100 kValidRenderViewID, 212 {FALLBACK_ICON, "chrome-search://fallback-icon/,,,,/http://www.google.com"},
101 GURL("chrome-search://favicon/origin/1/2"), 213 {THUMB, "chrome-search://thumb"},
102 "origin/", 214 {THUMB, "chrome-search://thumb/"},
103 2, 215 {THUMB, "chrome-search://thumb/123"},
104 true 216 {THUMB, "chrome-search://thumb/xyz"},
105 }, 217 {THUMB, "chrome-search://thumb/123/"},
106 { 218 {THUMB, "chrome-search://thumb/123/xyz"},
107 kValidRenderViewID, 219 {THUMB, "chrome-search://thumb/http://www.google.com"},
108 GURL("chrome-search://favicon/iconurl/1/2"), 220 };
109 "iconurl/", 221 for (size_t i = 0; i < arraysize(test_cases); ++i) {
110 2, 222 std::string param_part = "(unwritten)";
111 true 223 int view_id = -1;
112 }, 224 InstantRestrictedID rid = -1;
113 225 EXPECT_FALSE(ParseIconRestrictedUrl(GURL(test_cases[i].transient_url_str),
114 // RenderView ID does not match the view id specified in the transient url. 226 test_cases[i].type, &param_part, &view_id, &rid))
115 { 227 << " for test_cases[" << i << "]";
116 kInvalidRenderViewID, 228 EXPECT_EQ("(unwritten)", param_part);
117 GURL("chrome-search://favicon/1/2"), 229 EXPECT_EQ(-1, view_id);
118 "", 230 EXPECT_EQ(-1, rid);
119 0, 231 }
120 true 232 }
121 }, 233
122 { 234 TEST(SearchBoxUtilTest, TranslateIconRestrictedUrlSuccess) {
123 kInvalidRenderViewID, 235 struct {
124 GURL("chrome-search://favicon/size/16@2x/1/2"), 236 SearchBox::ImageSourceType type;
125 "size/16@2x/", 237 const char* transient_url_str;
126 0, 238 std::string expected_url_str;
127 true 239 } test_cases[] = {
128 }, 240 {FAVICON, "chrome-search://favicon/137/1",
129 { 241 std::string("chrome-search://favicon/") + kUrlString1},
130 kInvalidRenderViewID, 242 // FAVICON is permission: invalid input just yields default endpoint.
131 GURL("chrome-search://favicon/largest/1/2"), 243 {FAVICON, "chrome-search://favicon/", "chrome-search://favicon/"},
132 "largest/", 244 {FAVICON, "chrome-search://favicon/314", "chrome-search://favicon/"},
133 0, 245 {FAVICON, "chrome-search://favicon/314/1", "chrome-search://favicon/"},
134 true 246 {FAVICON, "chrome-search://favicon/137/255", "chrome-search://favicon/"},
135 }, 247 {FAVICON, "chrome-search://favicon/-3/-1", "chrome-search://favicon/"},
136 { 248 {FAVICON, "chrome-search://favicon/invalidstuff",
137 kInvalidRenderViewID, 249 "chrome-search://favicon/"},
138 GURL("chrome-search://favicon/origin/1/2"), 250 {FAVICON, "chrome-search://favicon/size/16@2x/http://www.google.com",
139 "origin/", 251 "chrome-search://favicon/"},
140 0, 252 // Other types of icons.
141 true 253 {LARGE_ICON, "chrome-search://large-icon/64/137/2",
142 }, 254 std::string("chrome-search://large-icon/64/") + kUrlString2},
143 { 255 {LARGE_ICON, "chrome-search://large-icon/1/137/1",
144 kInvalidRenderViewID, 256 std::string("chrome-search://large-icon/1/") + kUrlString1},
145 GURL("chrome-search://favicon/iconurl/1/2"), 257 {FALLBACK_ICON, "chrome-search://fallback-icon/,,,,/137/3",
146 "iconurl/", 258 std::string("chrome-search://fallback-icon/,,,,/") + kUrlString3},
147 0, 259 {FALLBACK_ICON, "chrome-search://fallback-icon/64,fff,,,1/137/1",
148 true 260 std::string("chrome-search://fallback-icon/64,fff,,,1/") + kUrlString1},
149 }, 261 {THUMB, "chrome-search://thumb/137/3",
150 262 std::string("chrome-search://thumb/") + kUrlString3},
151 // Invalid transient urls. 263 };
152 { 264
153 kValidRenderViewID, 265 MockIconURLHelper helper;
154 GURL("chrome-search://favicon"), 266 for (size_t i = 0; i < arraysize(test_cases); ++i) {
155 "", 267 GURL url;
156 0, 268 GURL transient_url(test_cases[i].transient_url_str);
157 false 269 EXPECT_TRUE(TranslateIconRestrictedUrl(transient_url, test_cases[i].type,
158 }, 270 helper, &url))
159 { 271 << " for test_cases[" << i << "]";
160 kValidRenderViewID, 272 EXPECT_EQ(GURL(test_cases[i].expected_url_str), url)
161 GURL("chrome-search://favicon/"), 273 << " for test_cases[" << i << "]";
162 "", 274 }
163 0, 275 }
164 false 276
165 }, 277 // For Non-FAVICON only.
166 { 278 TEST(SearchBoxUtilTest, TranslateIconRestrictedUrlFailure) {
167 kValidRenderViewID, 279 struct {
168 GURL("chrome-search://favicon/size/16@2x"), 280 SearchBox::ImageSourceType type;
169 "", 281 const char* transient_url_str;
170 0, 282 } test_cases[] = {
171 false 283 // Empty.
172 }, 284 {LARGE_ICON, "chrome-search://large-icon/"},
173 { 285 {FALLBACK_ICON, "chrome-search://fallback-icon/"},
174 kValidRenderViewID, 286 {THUMB, "chrome-search://thumb/"},
175 GURL("chrome-search://favicon/size"), 287 // Bad view_id.
176 "", 288 {LARGE_ICON, "chrome-search://large-icon/64/314/2"},
177 0, 289 {LARGE_ICON, "chrome-search://large-icon/1/314/1"},
178 true 290 {FALLBACK_ICON, "chrome-search://fallback-icon/,,,,/314/3"},
179 }, 291 {FALLBACK_ICON, "chrome-search://fallback-icon/64,fff,,,1/314/1"},
180 { 292 {THUMB, "chrome-search://thumb/314/1"},
181 kValidRenderViewID, 293 // Missing rid.
182 GURL("chrome-search://favicon/size/16@2x/123"), 294 {LARGE_ICON, "chrome-search://large-icon/64/137/"},
183 "size/16@2x/", 295 {LARGE_ICON, "chrome-search://large-icon/64/137/blah"},
184 0, 296 {FALLBACK_ICON, "chrome-search://fallback-icon/,,,,/137/"},
185 true 297 {THUMB, "chrome-search://thumb/314/"},
186 }, 298 // Bad params.
187 { 299 {LARGE_ICON, "chrome-search://large-icon/137/2"},
188 kValidRenderViewID, 300 {LARGE_ICON, "chrome-search://large-icon//137/2"},
189 GURL("chrome-search://favicon/size/16@2x/xyz"), 301 {LARGE_ICON, "chrome-search://large-icon/96"},
190 "size/16@2x/", 302 {LARGE_ICON, "chrome-search://large-icon/-1/137/2"},
191 0, 303 {LARGE_ICON, "chrome-search://large-icon/blah/137/2"},
192 true 304 {FALLBACK_ICON, "chrome-search://fallback-icon/137/3"},
193 }, 305 {FALLBACK_ICON, "chrome-search://fallback-icon//137/3"},
194 { 306 {FALLBACK_ICON, "chrome-search://fallback-icon/-64,fff,,,1/137/3"},
195 kValidRenderViewID, 307 {FALLBACK_ICON, "chrome-search://fallback-icon/springfront/137/3"},
196 GURL("chrome-search://favicon/size/16@2x/123/"), 308 // Use Page URL.
197 "size/16@2x/", 309 {LARGE_ICON, "chrome-search://large-icon/96/http://www.google.com"},
198 0, 310 {FALLBACK_ICON, "chrome-search://fallback-icon/,,,,/http://www.google.com"},
199 true 311 {THUMB, "chrome-search://thumb/http://www.google.com"},
200 }, 312 };
201 { 313
202 kValidRenderViewID, 314 MockIconURLHelper helper;
203 GURL("chrome-search://favicon/size/16@2x/123/xyz"), 315 for (size_t i = 0; i < arraysize(test_cases); ++i) {
204 "size/16@2x/", 316 GURL url;
205 0, 317 GURL transient_url(test_cases[i].transient_url_str);
206 true 318 EXPECT_FALSE(TranslateIconRestrictedUrl(transient_url, test_cases[i].type,
207 }, 319 helper, &url))
208 { 320 << " for test_cases[" << i << "]";
209 kValidRenderViewID, 321 EXPECT_TRUE(url.is_empty()) << " for test_cases[" << i << "]";
210 GURL("chrome-search://favicon/invalidparameter/16@2x/1/2"), 322 }
211 "", 323 }
212 0, 324
213 true
214 }
215 };
216
217 std::string favicon_params = "";
218 InstantRestrictedID rid = 0;
219 for (size_t i = 0; i < arraysize(test_cases); ++i) {
220 bool return_val = GetRestrictedIDFromFaviconUrl(
221 test_cases[i].render_view_id,
222 test_cases[i].transient_url,
223 &favicon_params,
224 &rid);
225 EXPECT_EQ(test_cases[i].expected_return_val, return_val);
226 EXPECT_EQ(test_cases[i].expected_favicon_params, favicon_params);
227 EXPECT_EQ(test_cases[i].expected_rid, rid);
228 favicon_params = "";
229 rid = 0;
230 }
231 }
232
233 } // namespace internal 325 } // namespace internal
OLDNEW
« no previous file with comments | « chrome/renderer/searchbox/searchbox_extension.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698