OLD | NEW |
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, ¶m_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, ¶m_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 |
OLD | NEW |