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

Side by Side Diff: components/doodle/doodle_fetcher_impl_unittest.cc

Issue 2725143003: [Doodle] Pull time_to_live out of DoodleConfig (Closed)
Patch Set: mastiz review Created 3 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 | « components/doodle/doodle_fetcher_impl.cc ('k') | components/doodle/doodle_service.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "components/doodle/doodle_fetcher_impl.h" 5 #include "components/doodle/doodle_fetcher_impl.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/json/json_reader.h" 12 #include "base/json/json_reader.h"
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
15 #include "base/time/time.h"
15 #include "base/values.h" 16 #include "base/values.h"
16 #include "components/google/core/browser/google_switches.h" 17 #include "components/google/core/browser/google_switches.h"
17 #include "components/google/core/browser/google_url_tracker.h" 18 #include "components/google/core/browser/google_url_tracker.h"
18 #include "net/http/http_status_code.h" 19 #include "net/http/http_status_code.h"
19 #include "net/url_request/test_url_fetcher_factory.h" 20 #include "net/url_request/test_url_fetcher_factory.h"
20 #include "net/url_request/url_request_status.h" 21 #include "net/url_request/url_request_status.h"
21 #include "net/url_request/url_request_test_util.h" 22 #include "net/url_request/url_request_test_util.h"
22 #include "testing/gmock/include/gmock/gmock.h" 23 #include "testing/gmock/include/gmock/gmock.h"
23 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
24 25
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); 100 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher);
100 } 101 }
101 102
102 net::TestURLFetcher* GetRunningFetcher() { 103 net::TestURLFetcher* GetRunningFetcher() {
103 // All created TestURLFetchers have ID 0 by default. 104 // All created TestURLFetchers have ID 0 by default.
104 net::TestURLFetcher* url_fetcher = url_fetcher_factory_.GetFetcherByID(0); 105 net::TestURLFetcher* url_fetcher = url_fetcher_factory_.GetFetcherByID(0);
105 DCHECK(url_fetcher); 106 DCHECK(url_fetcher);
106 return url_fetcher; 107 return url_fetcher;
107 } 108 }
108 109
110 // TODO(treib): Replace with a MockCallback plus testing::SaveArgs?
109 DoodleFetcherImpl::FinishedCallback CreateResponseSavingCallback( 111 DoodleFetcherImpl::FinishedCallback CreateResponseSavingCallback(
110 DoodleState* state_out, 112 DoodleState* state_out,
113 base::TimeDelta* time_to_live_out,
111 base::Optional<DoodleConfig>* config_out) { 114 base::Optional<DoodleConfig>* config_out) {
112 return base::BindOnce( 115 return base::BindOnce(
113 [](DoodleState* state_out, base::Optional<DoodleConfig>* config_out, 116 [](DoodleState* state_out, base::TimeDelta* time_to_live_out,
114 DoodleState state, const base::Optional<DoodleConfig>& config) { 117 base::Optional<DoodleConfig>* config_out, DoodleState state,
118 base::TimeDelta time_to_live,
119 const base::Optional<DoodleConfig>& config) {
115 if (state_out) { 120 if (state_out) {
116 *state_out = state; 121 *state_out = state;
117 } 122 }
123 if (time_to_live_out) {
124 *time_to_live_out = time_to_live;
125 }
118 if (config_out) { 126 if (config_out) {
119 *config_out = config; 127 *config_out = config;
120 } 128 }
121 }, 129 },
122 state_out, config_out); 130 state_out, time_to_live_out, config_out);
123 } 131 }
124 132
125 DoodleFetcherImpl* doodle_fetcher() { return &doodle_fetcher_; } 133 DoodleFetcherImpl* doodle_fetcher() { return &doodle_fetcher_; }
126 134
127 GURL GetGoogleBaseURL() { return google_url_tracker_.google_url(); } 135 GURL GetGoogleBaseURL() { return google_url_tracker_.google_url(); }
128 136
129 private: 137 private:
130 base::MessageLoop message_loop_; 138 base::MessageLoop message_loop_;
131 GURL url_; 139 GURL url_;
132 net::TestURLFetcherFactory url_fetcher_factory_; 140 net::TestURLFetcherFactory url_fetcher_factory_;
133 GoogleURLTracker google_url_tracker_; 141 GoogleURLTracker google_url_tracker_;
134 DoodleFetcherImpl doodle_fetcher_; 142 DoodleFetcherImpl doodle_fetcher_;
135 }; 143 };
136 144
137 TEST_F(DoodleFetcherImplTest, ReturnsFromFetchWithoutError) { 145 TEST_F(DoodleFetcherImplTest, ReturnsFromFetchWithoutError) {
138 DoodleState state(DoodleState::NO_DOODLE); 146 DoodleState state(DoodleState::NO_DOODLE);
139 base::Optional<DoodleConfig> response; 147 base::Optional<DoodleConfig> response;
140 148
141 doodle_fetcher()->FetchDoodle( 149 doodle_fetcher()->FetchDoodle(
142 CreateResponseSavingCallback(&state, &response)); 150 CreateResponseSavingCallback(&state, nullptr, &response));
143 RespondWithData(R"json({"ddljson": { 151 RespondWithData(R"json({"ddljson": {
144 "time_to_live_ms":55000, 152 "time_to_live_ms":55000,
145 "large_image": {"url":"/logos/doodles/2015/some.gif"} 153 "large_image": {"url":"/logos/doodles/2015/some.gif"}
146 }})json"); 154 }})json");
147 155
148 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); 156 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE));
149 EXPECT_TRUE(response.has_value()); 157 EXPECT_TRUE(response.has_value());
150 } 158 }
151 159
152 TEST_F(DoodleFetcherImplTest, ReturnsFrom404FetchWithError) { 160 TEST_F(DoodleFetcherImplTest, ReturnsFrom404FetchWithError) {
153 DoodleState state(DoodleState::NO_DOODLE); 161 DoodleState state(DoodleState::NO_DOODLE);
154 base::Optional<DoodleConfig> response; 162 base::Optional<DoodleConfig> response;
155 163
156 doodle_fetcher()->FetchDoodle( 164 doodle_fetcher()->FetchDoodle(
157 CreateResponseSavingCallback(&state, &response)); 165 CreateResponseSavingCallback(&state, nullptr, &response));
158 RespondWithError(net::ERR_FILE_NOT_FOUND); 166 RespondWithError(net::ERR_FILE_NOT_FOUND);
159 167
160 EXPECT_THAT(state, Eq(DoodleState::DOWNLOAD_ERROR)); 168 EXPECT_THAT(state, Eq(DoodleState::DOWNLOAD_ERROR));
161 EXPECT_FALSE(response.has_value()); 169 EXPECT_FALSE(response.has_value());
162 } 170 }
163 171
164 TEST_F(DoodleFetcherImplTest, ReturnsErrorForInvalidJson) { 172 TEST_F(DoodleFetcherImplTest, ReturnsErrorForInvalidJson) {
165 DoodleState state(DoodleState::NO_DOODLE); 173 DoodleState state(DoodleState::NO_DOODLE);
166 base::Optional<DoodleConfig> response; 174 base::Optional<DoodleConfig> response;
167 175
168 doodle_fetcher()->FetchDoodle( 176 doodle_fetcher()->FetchDoodle(
169 CreateResponseSavingCallback(&state, &response)); 177 CreateResponseSavingCallback(&state, nullptr, &response));
170 RespondWithData("}"); 178 RespondWithData("}");
171 179
172 EXPECT_THAT(state, Eq(DoodleState::PARSING_ERROR)); 180 EXPECT_THAT(state, Eq(DoodleState::PARSING_ERROR));
173 EXPECT_FALSE(response.has_value()); 181 EXPECT_FALSE(response.has_value());
174 } 182 }
175 183
176 TEST_F(DoodleFetcherImplTest, ReturnsErrorForIncompleteJson) { 184 TEST_F(DoodleFetcherImplTest, ReturnsErrorForIncompleteJson) {
177 DoodleState state(DoodleState::NO_DOODLE); 185 DoodleState state(DoodleState::NO_DOODLE);
178 base::Optional<DoodleConfig> response; 186 base::Optional<DoodleConfig> response;
179 187
180 doodle_fetcher()->FetchDoodle( 188 doodle_fetcher()->FetchDoodle(
181 CreateResponseSavingCallback(&state, &response)); 189 CreateResponseSavingCallback(&state, nullptr, &response));
182 RespondWithData("{}"); 190 RespondWithData("{}");
183 191
184 EXPECT_THAT(state, Eq(DoodleState::PARSING_ERROR)); 192 EXPECT_THAT(state, Eq(DoodleState::PARSING_ERROR));
185 EXPECT_FALSE(response.has_value()); 193 EXPECT_FALSE(response.has_value());
186 } 194 }
187 195
188 TEST_F(DoodleFetcherImplTest, ResponseContainsValidBaseInformation) { 196 TEST_F(DoodleFetcherImplTest, ResponseContainsValidBaseInformation) {
189 DoodleState state(DoodleState::NO_DOODLE); 197 DoodleState state(DoodleState::NO_DOODLE);
198 base::TimeDelta time_to_live;
190 base::Optional<DoodleConfig> response; 199 base::Optional<DoodleConfig> response;
191 200
192 doodle_fetcher()->FetchDoodle( 201 doodle_fetcher()->FetchDoodle(
193 CreateResponseSavingCallback(&state, &response)); 202 CreateResponseSavingCallback(&state, &time_to_live, &response));
194 RespondWithData(R"json()]}'{ 203 RespondWithData(R"json()]}'{
195 "ddljson": { 204 "ddljson": {
196 "alt_text":"Mouseover Text", 205 "alt_text":"Mouseover Text",
197 "doodle_type":"SIMPLE", 206 "doodle_type":"SIMPLE",
198 "interactive_html":"\u003cstyle\u003e\u003c\/style\u003e", 207 "interactive_html":"\u003cstyle\u003e\u003c\/style\u003e",
199 "search_url":"/search?q\u003dtest", 208 "search_url":"/search?q\u003dtest",
200 "target_url":"/search?q\u003dtest\u0026sa\u003dX\u0026ved\u003d0ahUKEw", 209 "target_url":"/search?q\u003dtest\u0026sa\u003dX\u0026ved\u003d0ahUKEw",
201 "time_to_live_ms":55000, 210 "time_to_live_ms":55000,
202 "large_image": { 211 "large_image": {
203 "url":"/logos/doodles/2015/new-years-eve-2015-59854387958251-hp.gif" 212 "url":"/logos/doodles/2015/new-years-eve-2015-59854387958251-hp.gif"
204 } 213 }
205 }})json"); 214 }})json");
206 215
207 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); 216 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE));
208 ASSERT_TRUE(response.has_value()); 217 ASSERT_TRUE(response.has_value());
209 DoodleConfig config = response.value(); 218 DoodleConfig config = response.value();
210 219
211 EXPECT_TRUE(config.search_url.is_valid()); 220 EXPECT_TRUE(config.search_url.is_valid());
212 EXPECT_THAT(config.search_url, Eq(Resolve("/search?q\u003dtest"))); 221 EXPECT_THAT(config.search_url, Eq(Resolve("/search?q\u003dtest")));
213 EXPECT_TRUE(config.fullpage_interactive_url.is_empty()); 222 EXPECT_TRUE(config.fullpage_interactive_url.is_empty());
214 EXPECT_TRUE(config.target_url.is_valid()); 223 EXPECT_TRUE(config.target_url.is_valid());
215 EXPECT_THAT(config.target_url, 224 EXPECT_THAT(config.target_url,
216 Eq(Resolve("/search?q\u003dtest\u0026sa\u003dX\u0026ved\u003d" 225 Eq(Resolve("/search?q\u003dtest\u0026sa\u003dX\u0026ved\u003d"
217 "0ahUKEw"))); 226 "0ahUKEw")));
218 EXPECT_THAT(config.doodle_type, Eq(DoodleType::SIMPLE)); 227 EXPECT_THAT(config.doodle_type, Eq(DoodleType::SIMPLE));
219 EXPECT_THAT(config.alt_text, Eq("Mouseover Text")); 228 EXPECT_THAT(config.alt_text, Eq("Mouseover Text"));
220 EXPECT_THAT(config.interactive_html, 229 EXPECT_THAT(config.interactive_html,
221 Eq("\u003cstyle\u003e\u003c/style\u003e")); 230 Eq("\u003cstyle\u003e\u003c/style\u003e"));
222 231
223 EXPECT_THAT(config.time_to_live, 232 EXPECT_THAT(time_to_live, Eq(base::TimeDelta::FromMilliseconds(55000)));
224 Eq(base::TimeDelta::FromMilliseconds(55000)));
225 } 233 }
226 234
227 TEST_F(DoodleFetcherImplTest, DoodleExpiresWithinThirtyDaysForTooLargeTTL) { 235 TEST_F(DoodleFetcherImplTest, DoodleExpiresWithinThirtyDaysForTooLargeTTL) {
228 DoodleState state(DoodleState::NO_DOODLE); 236 DoodleState state(DoodleState::NO_DOODLE);
237 base::TimeDelta time_to_live;
229 base::Optional<DoodleConfig> response; 238 base::Optional<DoodleConfig> response;
230 239
231 doodle_fetcher()->FetchDoodle( 240 doodle_fetcher()->FetchDoodle(
232 CreateResponseSavingCallback(&state, &response)); 241 CreateResponseSavingCallback(&state, &time_to_live, &response));
233 RespondWithData(R"json({"ddljson": { 242 RespondWithData(R"json({"ddljson": {
234 "time_to_live_ms":5184000000, 243 "time_to_live_ms":5184000000,
235 "large_image": {"url":"/logos/doodles/2015/some.gif"} 244 "large_image": {"url":"/logos/doodles/2015/some.gif"}
236 }})json"); // 60 days 245 }})json"); // 60 days
237 246
238 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); 247 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE));
239 ASSERT_TRUE(response.has_value()); 248 EXPECT_TRUE(response.has_value());
240 EXPECT_THAT(response.value().time_to_live, 249 EXPECT_THAT(time_to_live,
241 Eq(base::TimeDelta::FromMilliseconds(30ul * 24 * 60 * 60 * 250 Eq(base::TimeDelta::FromMilliseconds(30ul * 24 * 60 * 60 *
242 1000))); // 30 days 251 1000))); // 30 days
243 } 252 }
244 253
245 TEST_F(DoodleFetcherImplTest, DoodleExpiresImmediatelyWithNegativeTTL) { 254 TEST_F(DoodleFetcherImplTest, DoodleExpiresImmediatelyWithNegativeTTL) {
246 DoodleState state(DoodleState::NO_DOODLE); 255 DoodleState state(DoodleState::NO_DOODLE);
256 base::TimeDelta time_to_live;
247 base::Optional<DoodleConfig> response; 257 base::Optional<DoodleConfig> response;
248 258
249 doodle_fetcher()->FetchDoodle( 259 doodle_fetcher()->FetchDoodle(
250 CreateResponseSavingCallback(&state, &response)); 260 CreateResponseSavingCallback(&state, &time_to_live, &response));
251 RespondWithData(R"json({"ddljson": { 261 RespondWithData(R"json({"ddljson": {
252 "time_to_live_ms":-1, 262 "time_to_live_ms":-1,
253 "large_image": {"url":"/logos/doodles/2015/some.gif"} 263 "large_image": {"url":"/logos/doodles/2015/some.gif"}
254 }})json"); 264 }})json");
255 265
256 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); 266 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE));
257 ASSERT_TRUE(response.has_value()); 267 EXPECT_TRUE(response.has_value());
258 EXPECT_THAT(response.value().time_to_live, 268 EXPECT_THAT(time_to_live, Eq(base::TimeDelta::FromMilliseconds(0)));
259 Eq(base::TimeDelta::FromMilliseconds(0)));
260 } 269 }
261 270
262 TEST_F(DoodleFetcherImplTest, DoodleExpiresImmediatelyWithoutValidTTL) { 271 TEST_F(DoodleFetcherImplTest, DoodleExpiresImmediatelyWithoutValidTTL) {
263 DoodleState state(DoodleState::NO_DOODLE); 272 DoodleState state(DoodleState::NO_DOODLE);
273 base::TimeDelta time_to_live;
264 base::Optional<DoodleConfig> response; 274 base::Optional<DoodleConfig> response;
265 275
266 doodle_fetcher()->FetchDoodle( 276 doodle_fetcher()->FetchDoodle(
267 CreateResponseSavingCallback(&state, &response)); 277 CreateResponseSavingCallback(&state, &time_to_live, &response));
268 RespondWithData(R"json({"ddljson": { 278 RespondWithData(R"json({"ddljson": {
269 "large_image": {"url":"/logos/doodles/2015/some.gif"} 279 "large_image": {"url":"/logos/doodles/2015/some.gif"}
270 }})json"); 280 }})json");
271 281
272 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); 282 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE));
273 ASSERT_TRUE(response.has_value()); 283 EXPECT_TRUE(response.has_value());
274 EXPECT_THAT(response.value().time_to_live, 284 EXPECT_THAT(time_to_live, Eq(base::TimeDelta::FromMilliseconds(0)));
275 Eq(base::TimeDelta::FromMilliseconds(0)));
276 } 285 }
277 286
278 TEST_F(DoodleFetcherImplTest, ReturnsNoDoodleForMissingLargeImageUrl) { 287 TEST_F(DoodleFetcherImplTest, ReturnsNoDoodleForMissingLargeImageUrl) {
279 DoodleState state(DoodleState::AVAILABLE); 288 DoodleState state(DoodleState::AVAILABLE);
280 base::Optional<DoodleConfig> response; 289 base::Optional<DoodleConfig> response;
281 290
282 doodle_fetcher()->FetchDoodle( 291 doodle_fetcher()->FetchDoodle(
283 CreateResponseSavingCallback(&state, &response)); 292 CreateResponseSavingCallback(&state, nullptr, &response));
284 RespondWithData(R"json({"ddljson": { 293 RespondWithData(R"json({"ddljson": {
285 "time_to_live_ms":55000, 294 "time_to_live_ms":55000,
286 "large_image": {} 295 "large_image": {}
287 }})json"); 296 }})json");
288 297
289 EXPECT_THAT(state, Eq(DoodleState::NO_DOODLE)); 298 EXPECT_THAT(state, Eq(DoodleState::NO_DOODLE));
290 EXPECT_FALSE(response.has_value()); 299 EXPECT_FALSE(response.has_value());
291 } 300 }
292 301
293 TEST_F(DoodleFetcherImplTest, EmptyResponsesCausesNoDoodleState) { 302 TEST_F(DoodleFetcherImplTest, EmptyResponsesCausesNoDoodleState) {
294 DoodleState state(DoodleState::AVAILABLE); 303 DoodleState state(DoodleState::AVAILABLE);
295 base::Optional<DoodleConfig> response; 304 base::Optional<DoodleConfig> response;
296 305
297 doodle_fetcher()->FetchDoodle( 306 doodle_fetcher()->FetchDoodle(
298 CreateResponseSavingCallback(&state, &response)); 307 CreateResponseSavingCallback(&state, nullptr, &response));
299 RespondWithData("{\"ddljson\":{}}"); 308 RespondWithData("{\"ddljson\":{}}");
300 309
301 EXPECT_THAT(state, Eq(DoodleState::NO_DOODLE)); 310 EXPECT_THAT(state, Eq(DoodleState::NO_DOODLE));
302 EXPECT_FALSE(response.has_value()); 311 EXPECT_FALSE(response.has_value());
303 } 312 }
304 313
305 TEST_F(DoodleFetcherImplTest, ResponseContainsExactlyTheSampleImages) { 314 TEST_F(DoodleFetcherImplTest, ResponseContainsExactlyTheSampleImages) {
306 DoodleState state(DoodleState::NO_DOODLE); 315 DoodleState state(DoodleState::NO_DOODLE);
307 base::Optional<DoodleConfig> response; 316 base::Optional<DoodleConfig> response;
308 317
309 doodle_fetcher()->FetchDoodle( 318 doodle_fetcher()->FetchDoodle(
310 CreateResponseSavingCallback(&state, &response)); 319 CreateResponseSavingCallback(&state, nullptr, &response));
311 RespondWithData(R"json()]}'{ 320 RespondWithData(R"json()]}'{
312 "ddljson": { 321 "ddljson": {
313 "time_to_live_ms":55000, 322 "time_to_live_ms":55000,
314 "large_image": { 323 "large_image": {
315 "height":225, 324 "height":225,
316 "is_animated_gif":true, 325 "is_animated_gif":true,
317 "is_cta":false, 326 "is_cta":false,
318 "url":"/logos/doodles/2015/new-years-eve-2015-59854387958251-hp.gif", 327 "url":"/logos/doodles/2015/new-years-eve-2015-59854387958251-hp.gif",
319 "width":489 328 "width":489
320 }, 329 },
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 } 376 }
368 377
369 TEST_F(DoodleFetcherImplTest, RespondsToMultipleRequestsWithSameFetcher) { 378 TEST_F(DoodleFetcherImplTest, RespondsToMultipleRequestsWithSameFetcher) {
370 DoodleState state1(DoodleState::NO_DOODLE); 379 DoodleState state1(DoodleState::NO_DOODLE);
371 DoodleState state2(DoodleState::NO_DOODLE); 380 DoodleState state2(DoodleState::NO_DOODLE);
372 base::Optional<DoodleConfig> response1; 381 base::Optional<DoodleConfig> response1;
373 base::Optional<DoodleConfig> response2; 382 base::Optional<DoodleConfig> response2;
374 383
375 // Trigger two requests. 384 // Trigger two requests.
376 doodle_fetcher()->FetchDoodle( 385 doodle_fetcher()->FetchDoodle(
377 CreateResponseSavingCallback(&state1, &response1)); 386 CreateResponseSavingCallback(&state1, nullptr, &response1));
378 net::URLFetcher* first_created_fetcher = GetRunningFetcher(); 387 net::URLFetcher* first_created_fetcher = GetRunningFetcher();
379 doodle_fetcher()->FetchDoodle( 388 doodle_fetcher()->FetchDoodle(
380 CreateResponseSavingCallback(&state2, &response2)); 389 CreateResponseSavingCallback(&state2, nullptr, &response2));
381 net::URLFetcher* second_created_fetcher = GetRunningFetcher(); 390 net::URLFetcher* second_created_fetcher = GetRunningFetcher();
382 391
383 // Expect that only one fetcher handles both requests. 392 // Expect that only one fetcher handles both requests.
384 EXPECT_THAT(first_created_fetcher, Eq(second_created_fetcher)); 393 EXPECT_THAT(first_created_fetcher, Eq(second_created_fetcher));
385 394
386 RespondWithData(R"json({"ddljson": { 395 RespondWithData(R"json({"ddljson": {
387 "time_to_live_ms":55000, 396 "time_to_live_ms":55000,
388 "large_image": {"url":"/logos/doodles/2015/some.gif"} 397 "large_image": {"url":"/logos/doodles/2015/some.gif"}
389 }})json"); 398 }})json");
390 399
391 // Ensure that both requests received a response. 400 // Ensure that both requests received a response.
392 EXPECT_THAT(state1, Eq(DoodleState::AVAILABLE)); 401 EXPECT_THAT(state1, Eq(DoodleState::AVAILABLE));
393 EXPECT_TRUE(response1.has_value()); 402 EXPECT_TRUE(response1.has_value());
394 EXPECT_THAT(state2, Eq(DoodleState::AVAILABLE)); 403 EXPECT_THAT(state2, Eq(DoodleState::AVAILABLE));
395 EXPECT_TRUE(response2.has_value()); 404 EXPECT_TRUE(response2.has_value());
396 } 405 }
397 406
398 TEST_F(DoodleFetcherImplTest, ReceivesBaseUrlFromTracker) { 407 TEST_F(DoodleFetcherImplTest, ReceivesBaseUrlFromTracker) {
399 doodle_fetcher()->FetchDoodle( 408 doodle_fetcher()->FetchDoodle(CreateResponseSavingCallback(
400 CreateResponseSavingCallback(/*state=*/nullptr, /*response=*/nullptr)); 409 /*state=*/nullptr, nullptr, /*response=*/nullptr));
401 410
402 EXPECT_THAT(GetRunningFetcher()->GetOriginalURL(), 411 EXPECT_THAT(GetRunningFetcher()->GetOriginalURL(),
403 Eq(GetGoogleBaseURL().Resolve(kDoodleConfigPath))); 412 Eq(GetGoogleBaseURL().Resolve(kDoodleConfigPath)));
404 } 413 }
405 414
406 TEST_F(DoodleFetcherImplTest, OverridesBaseUrlWithCommandLineArgument) { 415 TEST_F(DoodleFetcherImplTest, OverridesBaseUrlWithCommandLineArgument) {
407 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 416 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
408 switches::kGoogleBaseURL, "http://www.google.kz"); 417 switches::kGoogleBaseURL, "http://www.google.kz");
409 418
410 doodle_fetcher()->FetchDoodle( 419 doodle_fetcher()->FetchDoodle(CreateResponseSavingCallback(
411 CreateResponseSavingCallback(/*state=*/nullptr, /*response=*/nullptr)); 420 /*state=*/nullptr, nullptr, /*response=*/nullptr));
412 421
413 EXPECT_THAT(GetRunningFetcher()->GetOriginalURL(), 422 EXPECT_THAT(GetRunningFetcher()->GetOriginalURL(),
414 Eq(GURL("http://www.google.kz").Resolve(kDoodleConfigPath))); 423 Eq(GURL("http://www.google.kz").Resolve(kDoodleConfigPath)));
415 } 424 }
416 425
417 } // namespace doodle 426 } // namespace doodle
OLDNEW
« no previous file with comments | « components/doodle/doodle_fetcher_impl.cc ('k') | components/doodle/doodle_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698