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

Side by Side Diff: components/ntp_snippets/content_suggestions_service_unittest.cc

Issue 2259873002: Add ContentSuggestionsService tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 4 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 | « no previous file | 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 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/ntp_snippets/content_suggestions_service.h" 5 #include "components/ntp_snippets/content_suggestions_service.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 27 matching lines...) Expand all
38 38
39 namespace { 39 namespace {
40 40
41 // Returns a suggestion instance for testing. 41 // Returns a suggestion instance for testing.
42 ContentSuggestion CreateSuggestion(int number) { 42 ContentSuggestion CreateSuggestion(int number) {
43 return ContentSuggestion( 43 return ContentSuggestion(
44 base::IntToString(number), 44 base::IntToString(number),
45 GURL("http://testsuggestion/" + base::IntToString(number))); 45 GURL("http://testsuggestion/" + base::IntToString(number)));
46 } 46 }
47 47
48 std::vector<ContentSuggestion> CreateSuggestions(std::vector<int> numbers) { 48 std::vector<ContentSuggestion> CreateSuggestions(
49 const std::vector<int>& numbers) {
49 std::vector<ContentSuggestion> result; 50 std::vector<ContentSuggestion> result;
50 for (int number : numbers) { 51 for (int number : numbers) {
51 result.emplace_back(CreateSuggestion(number)); 52 result.emplace_back(CreateSuggestion(number));
52 } 53 }
53 return result; 54 return result;
54 } 55 }
55 56
56 class MockProvider : public ContentSuggestionsProvider { 57 class MockProvider : public ContentSuggestionsProvider {
57 public: 58 public:
58 MockProvider(Observer* observer, 59 MockProvider(Observer* observer,
59 CategoryFactory* category_factory, 60 CategoryFactory* category_factory,
60 std::vector<Category> provided_categories) 61 const std::vector<Category>& provided_categories)
61 : ContentSuggestionsProvider(observer, category_factory), 62 : ContentSuggestionsProvider(observer, category_factory) {
62 provided_categories_(provided_categories) { 63 SetProvidedCategories(provided_categories);
64 }
65
66 void SetProvidedCategories(const std::vector<Category>& provided_categories) {
67 statuses_.clear();
68 provided_categories_ = provided_categories;
63 for (Category category : provided_categories) { 69 for (Category category : provided_categories) {
64 statuses_[category.id()] = CategoryStatus::AVAILABLE; 70 statuses_[category.id()] = CategoryStatus::AVAILABLE;
65 } 71 }
66 } 72 }
67 73
68 std::vector<Category> GetProvidedCategories() override { 74 std::vector<Category> GetProvidedCategories() override {
69 return provided_categories_; 75 return provided_categories_;
70 } 76 }
71 77
72 CategoryStatus GetCategoryStatus(Category category) { 78 CategoryStatus GetCategoryStatus(Category category) {
73 return statuses_[category.id()]; 79 return statuses_[category.id()];
74 } 80 }
75 81
76 CategoryInfo GetCategoryInfo(Category category) { 82 CategoryInfo GetCategoryInfo(Category category) {
77 return CategoryInfo(base::ASCIIToUTF16("Section title"), 83 return CategoryInfo(base::ASCIIToUTF16("Section title"),
78 ContentSuggestionsCardLayout::FULL_CARD, true); 84 ContentSuggestionsCardLayout::FULL_CARD, true);
79 } 85 }
80 86
81 void FireSuggestionsChanged(Category category, std::vector<int> numbers) { 87 void FireSuggestionsChanged(Category category,
88 const std::vector<int>& numbers) {
82 observer()->OnNewSuggestions(this, category, CreateSuggestions(numbers)); 89 observer()->OnNewSuggestions(this, category, CreateSuggestions(numbers));
83 } 90 }
84 91
85 void FireCategoryStatusChanged(Category category, CategoryStatus new_status) { 92 void FireCategoryStatusChanged(Category category, CategoryStatus new_status) {
86 statuses_[category.id()] = new_status; 93 statuses_[category.id()] = new_status;
87 observer()->OnCategoryStatusChanged(this, category, new_status); 94 observer()->OnCategoryStatusChanged(this, category, new_status);
88 } 95 }
89 96
90 void FireSuggestionInvalidated(Category category, 97 void FireSuggestionInvalidated(Category category,
91 const std::string& suggestion_id) { 98 const std::string& suggestion_id) {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 providers() { 169 providers() {
163 return service()->providers_by_category_; 170 return service()->providers_by_category_;
164 } 171 }
165 172
166 CategoryFactory* category_factory() { return service()->category_factory(); } 173 CategoryFactory* category_factory() { return service()->category_factory(); }
167 174
168 Category FromKnownCategory(KnownCategories known_category) { 175 Category FromKnownCategory(KnownCategories known_category) {
169 return service()->category_factory()->FromKnownCategory(known_category); 176 return service()->category_factory()->FromKnownCategory(known_category);
170 } 177 }
171 178
172 MockProvider* MakeProvider(Category provided_category) { 179 MockProvider* RegisterProvider(Category provided_category) {
173 return MakeProvider(std::vector<Category>({provided_category})); 180 return RegisterProvider(std::vector<Category>({provided_category}));
174 } 181 }
175 182
176 MockProvider* MakeProvider(std::vector<Category> provided_categories) { 183 MockProvider* RegisterProvider(
184 const std::vector<Category>& provided_categories) {
177 std::unique_ptr<MockProvider> provider = base::MakeUnique<MockProvider>( 185 std::unique_ptr<MockProvider> provider = base::MakeUnique<MockProvider>(
178 service(), category_factory(), provided_categories); 186 service(), category_factory(), provided_categories);
179 MockProvider* result = provider.get(); 187 MockProvider* result = provider.get();
180 service()->RegisterProvider(std::move(provider)); 188 service()->RegisterProvider(std::move(provider));
181 return result; 189 return result;
182 } 190 }
183 191
184 MOCK_METHOD2(OnImageFetched, 192 MOCK_METHOD2(OnImageFetched,
185 void(const std::string& suggestion_id, const gfx::Image&)); 193 void(const std::string& suggestion_id, const gfx::Image&));
186 194
(...skipping 26 matching lines...) Expand all
213 Category articles_category = FromKnownCategory(KnownCategories::ARTICLES); 221 Category articles_category = FromKnownCategory(KnownCategories::ARTICLES);
214 Category offline_pages_category = 222 Category offline_pages_category =
215 FromKnownCategory(KnownCategories::BOOKMARKS); 223 FromKnownCategory(KnownCategories::BOOKMARKS);
216 ASSERT_THAT(providers(), IsEmpty()); 224 ASSERT_THAT(providers(), IsEmpty());
217 EXPECT_THAT(service()->GetCategories(), IsEmpty()); 225 EXPECT_THAT(service()->GetCategories(), IsEmpty());
218 EXPECT_THAT(service()->GetCategoryStatus(articles_category), 226 EXPECT_THAT(service()->GetCategoryStatus(articles_category),
219 Eq(CategoryStatus::NOT_PROVIDED)); 227 Eq(CategoryStatus::NOT_PROVIDED));
220 EXPECT_THAT(service()->GetCategoryStatus(offline_pages_category), 228 EXPECT_THAT(service()->GetCategoryStatus(offline_pages_category),
221 Eq(CategoryStatus::NOT_PROVIDED)); 229 Eq(CategoryStatus::NOT_PROVIDED));
222 230
223 MockProvider* provider1 = MakeProvider(articles_category); 231 MockProvider* provider1 = RegisterProvider(articles_category);
224 EXPECT_THAT(providers().count(offline_pages_category), Eq(0ul)); 232 EXPECT_THAT(providers().count(offline_pages_category), Eq(0ul));
225 EXPECT_THAT(providers().at(articles_category), Eq(provider1)); 233 EXPECT_THAT(providers().at(articles_category), Eq(provider1));
226 EXPECT_THAT(providers().size(), Eq(1ul)); 234 EXPECT_THAT(providers().size(), Eq(1ul));
227 EXPECT_THAT(service()->GetCategories(), ElementsAre(articles_category)); 235 EXPECT_THAT(service()->GetCategories(), ElementsAre(articles_category));
228 EXPECT_THAT(service()->GetCategoryStatus(articles_category), 236 EXPECT_THAT(service()->GetCategoryStatus(articles_category),
229 Eq(CategoryStatus::AVAILABLE)); 237 Eq(CategoryStatus::AVAILABLE));
230 EXPECT_THAT(service()->GetCategoryStatus(offline_pages_category), 238 EXPECT_THAT(service()->GetCategoryStatus(offline_pages_category),
231 Eq(CategoryStatus::NOT_PROVIDED)); 239 Eq(CategoryStatus::NOT_PROVIDED));
232 240
233 MockProvider* provider2 = MakeProvider(offline_pages_category); 241 MockProvider* provider2 = RegisterProvider(offline_pages_category);
234 EXPECT_THAT(providers().at(articles_category), Eq(provider1)); 242 EXPECT_THAT(providers().at(articles_category), Eq(provider1));
235 EXPECT_THAT(providers().at(offline_pages_category), Eq(provider2)); 243 EXPECT_THAT(providers().at(offline_pages_category), Eq(provider2));
236 EXPECT_THAT(providers().size(), Eq(2ul)); 244 EXPECT_THAT(providers().size(), Eq(2ul));
237 EXPECT_THAT(service()->GetCategories(), 245 EXPECT_THAT(service()->GetCategories(),
238 ElementsAre(offline_pages_category, articles_category)); 246 ElementsAre(offline_pages_category, articles_category));
239 EXPECT_THAT(service()->GetCategoryStatus(articles_category), 247 EXPECT_THAT(service()->GetCategoryStatus(articles_category),
240 Eq(CategoryStatus::AVAILABLE)); 248 Eq(CategoryStatus::AVAILABLE));
241 EXPECT_THAT(service()->GetCategoryStatus(offline_pages_category), 249 EXPECT_THAT(service()->GetCategoryStatus(offline_pages_category),
242 Eq(CategoryStatus::AVAILABLE)); 250 Eq(CategoryStatus::AVAILABLE));
243 } 251 }
(...skipping 11 matching lines...) Expand all
255 Eq(CategoryStatus::ALL_SUGGESTIONS_EXPLICITLY_DISABLED)); 263 Eq(CategoryStatus::ALL_SUGGESTIONS_EXPLICITLY_DISABLED));
256 EXPECT_THAT(service()->GetCategories(), IsEmpty()); 264 EXPECT_THAT(service()->GetCategories(), IsEmpty());
257 EXPECT_THAT(service()->GetSuggestionsForCategory(articles_category), 265 EXPECT_THAT(service()->GetSuggestionsForCategory(articles_category),
258 IsEmpty()); 266 IsEmpty());
259 } 267 }
260 268
261 TEST_F(ContentSuggestionsServiceTest, ShouldRedirectFetchSuggestionImage) { 269 TEST_F(ContentSuggestionsServiceTest, ShouldRedirectFetchSuggestionImage) {
262 Category articles_category = FromKnownCategory(KnownCategories::ARTICLES); 270 Category articles_category = FromKnownCategory(KnownCategories::ARTICLES);
263 Category offline_pages_category = 271 Category offline_pages_category =
264 FromKnownCategory(KnownCategories::BOOKMARKS); 272 FromKnownCategory(KnownCategories::BOOKMARKS);
265 MockProvider* provider1 = MakeProvider(articles_category); 273 MockProvider* provider1 = RegisterProvider(articles_category);
266 MockProvider* provider2 = MakeProvider(offline_pages_category); 274 MockProvider* provider2 = RegisterProvider(offline_pages_category);
267 275
268 provider1->FireSuggestionsChanged(articles_category, {1}); 276 provider1->FireSuggestionsChanged(articles_category, {1});
269 std::string suggestion_id = CreateSuggestion(1).id(); 277 std::string suggestion_id = CreateSuggestion(1).id();
270 278
271 EXPECT_CALL(*provider1, FetchSuggestionImage(suggestion_id, _)); 279 EXPECT_CALL(*provider1, FetchSuggestionImage(suggestion_id, _));
272 EXPECT_CALL(*provider2, FetchSuggestionImage(_, _)).Times(0); 280 EXPECT_CALL(*provider2, FetchSuggestionImage(_, _)).Times(0);
273 service()->FetchSuggestionImage( 281 service()->FetchSuggestionImage(
274 suggestion_id, base::Bind(&ContentSuggestionsServiceTest::OnImageFetched, 282 suggestion_id, base::Bind(&ContentSuggestionsServiceTest::OnImageFetched,
275 base::Unretained(this))); 283 base::Unretained(this)));
276 } 284 }
(...skipping 11 matching lines...) Expand all
288 service()->FetchSuggestionImage( 296 service()->FetchSuggestionImage(
289 suggestion_id, base::Bind(&ContentSuggestionsServiceTest::OnImageFetched, 297 suggestion_id, base::Bind(&ContentSuggestionsServiceTest::OnImageFetched,
290 base::Unretained(this))); 298 base::Unretained(this)));
291 run_loop.Run(); 299 run_loop.Run();
292 } 300 }
293 301
294 TEST_F(ContentSuggestionsServiceTest, ShouldRedirectDismissSuggestion) { 302 TEST_F(ContentSuggestionsServiceTest, ShouldRedirectDismissSuggestion) {
295 Category articles_category = FromKnownCategory(KnownCategories::ARTICLES); 303 Category articles_category = FromKnownCategory(KnownCategories::ARTICLES);
296 Category offline_pages_category = 304 Category offline_pages_category =
297 FromKnownCategory(KnownCategories::BOOKMARKS); 305 FromKnownCategory(KnownCategories::BOOKMARKS);
298 MockProvider* provider1 = MakeProvider(articles_category); 306 MockProvider* provider1 = RegisterProvider(articles_category);
299 MockProvider* provider2 = MakeProvider(offline_pages_category); 307 MockProvider* provider2 = RegisterProvider(offline_pages_category);
300 308
301 provider2->FireSuggestionsChanged(offline_pages_category, {11}); 309 provider2->FireSuggestionsChanged(offline_pages_category, {11});
302 std::string suggestion_id = CreateSuggestion(11).id(); 310 std::string suggestion_id = CreateSuggestion(11).id();
303 311
304 EXPECT_CALL(*provider1, DismissSuggestion(_)).Times(0); 312 EXPECT_CALL(*provider1, DismissSuggestion(_)).Times(0);
305 EXPECT_CALL(*provider2, DismissSuggestion(suggestion_id)); 313 EXPECT_CALL(*provider2, DismissSuggestion(suggestion_id));
306 service()->DismissSuggestion(suggestion_id); 314 service()->DismissSuggestion(suggestion_id);
307 } 315 }
308 316
309 TEST_F(ContentSuggestionsServiceTest, ShouldRedirectSuggestionInvalidated) { 317 TEST_F(ContentSuggestionsServiceTest, ShouldRedirectSuggestionInvalidated) {
310 Category articles_category = FromKnownCategory(KnownCategories::ARTICLES); 318 Category articles_category = FromKnownCategory(KnownCategories::ARTICLES);
311 319
312 MockProvider* provider = MakeProvider(articles_category); 320 MockProvider* provider = RegisterProvider(articles_category);
313 MockServiceObserver observer; 321 MockServiceObserver observer;
314 service()->AddObserver(&observer); 322 service()->AddObserver(&observer);
315 323
316 provider->FireSuggestionsChanged(articles_category, {11, 12, 13}); 324 provider->FireSuggestionsChanged(articles_category, {11, 12, 13});
317 ExpectThatSuggestionsAre(articles_category, {11, 12, 13}); 325 ExpectThatSuggestionsAre(articles_category, {11, 12, 13});
318 326
319 std::string suggestion_id = CreateSuggestion(12).id(); 327 std::string suggestion_id = CreateSuggestion(12).id();
320 EXPECT_CALL(observer, 328 EXPECT_CALL(observer,
321 OnSuggestionInvalidated(articles_category, suggestion_id)); 329 OnSuggestionInvalidated(articles_category, suggestion_id));
322 provider->FireSuggestionInvalidated(articles_category, suggestion_id); 330 provider->FireSuggestionInvalidated(articles_category, suggestion_id);
(...skipping 11 matching lines...) Expand all
334 342
335 service()->RemoveObserver(&observer); 343 service()->RemoveObserver(&observer);
336 } 344 }
337 345
338 TEST_F(ContentSuggestionsServiceTest, ShouldForwardSuggestions) { 346 TEST_F(ContentSuggestionsServiceTest, ShouldForwardSuggestions) {
339 Category articles_category = FromKnownCategory(KnownCategories::ARTICLES); 347 Category articles_category = FromKnownCategory(KnownCategories::ARTICLES);
340 Category offline_pages_category = 348 Category offline_pages_category =
341 FromKnownCategory(KnownCategories::BOOKMARKS); 349 FromKnownCategory(KnownCategories::BOOKMARKS);
342 350
343 // Create and register providers 351 // Create and register providers
344 MockProvider* provider1 = MakeProvider(articles_category); 352 MockProvider* provider1 = RegisterProvider(articles_category);
345 MockProvider* provider2 = MakeProvider(offline_pages_category); 353 MockProvider* provider2 = RegisterProvider(offline_pages_category);
346 EXPECT_THAT(providers().at(articles_category), Eq(provider1)); 354 EXPECT_THAT(providers().at(articles_category), Eq(provider1));
347 EXPECT_THAT(providers().at(offline_pages_category), Eq(provider2)); 355 EXPECT_THAT(providers().at(offline_pages_category), Eq(provider2));
348 356
349 // Create and register observer 357 // Create and register observer
350 MockServiceObserver observer; 358 MockServiceObserver observer;
351 service()->AddObserver(&observer); 359 service()->AddObserver(&observer);
352 360
353 // Send suggestions 1 and 2 361 // Send suggestions 1 and 2
354 EXPECT_CALL(observer, OnNewSuggestions(articles_category)); 362 EXPECT_CALL(observer, OnNewSuggestions(articles_category));
355 provider1->FireSuggestionsChanged(articles_category, {1, 2}); 363 provider1->FireSuggestionsChanged(articles_category, {1, 2});
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 ExpectThatSuggestionsAre(offline_pages_category, std::vector<int>()); 399 ExpectThatSuggestionsAre(offline_pages_category, std::vector<int>());
392 Mock::VerifyAndClearExpectations(&observer); 400 Mock::VerifyAndClearExpectations(&observer);
393 401
394 // Shutdown the service 402 // Shutdown the service
395 EXPECT_CALL(observer, ContentSuggestionsServiceShutdown()); 403 EXPECT_CALL(observer, ContentSuggestionsServiceShutdown());
396 service()->Shutdown(); 404 service()->Shutdown();
397 service()->RemoveObserver(&observer); 405 service()->RemoveObserver(&observer);
398 // The service will receive two Shutdown() calls. 406 // The service will receive two Shutdown() calls.
399 } 407 }
400 408
409 TEST_F(ContentSuggestionsServiceTest,
410 ShouldNotReturnCategoryInfoForNonexistentCategory) {
411 Category category = FromKnownCategory(KnownCategories::BOOKMARKS);
412 base::Optional<CategoryInfo> result = service()->GetCategoryInfo(category);
413 EXPECT_FALSE(result.has_value());
414 }
415
416 TEST_F(ContentSuggestionsServiceTest, ShouldReturnCategoryInfo) {
417 Category category = FromKnownCategory(KnownCategories::BOOKMARKS);
418 MockProvider* provider = RegisterProvider(category);
419 base::Optional<CategoryInfo> result = service()->GetCategoryInfo(category);
420 ASSERT_TRUE(result.has_value());
421 CategoryInfo expected = provider->GetCategoryInfo(category);
422 const CategoryInfo& actual = result.value();
423 EXPECT_THAT(expected.title(), Eq(actual.title()));
424 EXPECT_THAT(expected.card_layout(), Eq(actual.card_layout()));
425 EXPECT_THAT(expected.has_more_button(), Eq(actual.has_more_button()));
426 }
427
428 TEST_F(ContentSuggestionsServiceTest,
429 ShouldRegisterNewCategoryOnNewSuggestions) {
430 Category category = FromKnownCategory(KnownCategories::BOOKMARKS);
431 MockProvider* provider = RegisterProvider(category);
432 MockServiceObserver observer;
433 service()->AddObserver(&observer);
434
435 // Provider starts providing |new_category| without calling
436 // |OnCategoryStatusChanged|. This is supported for now until further
437 // reconsideration.
438 Category new_category = FromKnownCategory(KnownCategories::ARTICLES);
439 provider->SetProvidedCategories(
440 std::vector<Category>({category, new_category}));
441
442 EXPECT_CALL(observer, OnNewSuggestions(new_category));
443 EXPECT_CALL(observer,
444 OnCategoryStatusChanged(new_category, CategoryStatus::AVAILABLE));
445 provider->FireSuggestionsChanged(new_category, {1, 2});
446
447 ExpectThatSuggestionsAre(new_category, {1, 2});
448 EXPECT_THAT(providers().at(category), Eq(provider));
449 EXPECT_THAT(service()->GetCategoryStatus(category),
450 Eq(CategoryStatus::AVAILABLE));
451 EXPECT_THAT(providers().at(new_category), Eq(provider));
452 EXPECT_THAT(service()->GetCategoryStatus(new_category),
453 Eq(CategoryStatus::AVAILABLE));
454
455 service()->RemoveObserver(&observer);
456 }
457
458 TEST_F(ContentSuggestionsServiceTest,
459 ShouldRegisterNewCategoryOnCategoryStatusChanged) {
460 Category category = FromKnownCategory(KnownCategories::BOOKMARKS);
461 MockProvider* provider = RegisterProvider(category);
462 MockServiceObserver observer;
463 service()->AddObserver(&observer);
464
465 // Provider starts providing |new_category| and calls
466 // |OnCategoryStatusChanged|, but the category is not yet available.
467 Category new_category = FromKnownCategory(KnownCategories::ARTICLES);
468 provider->SetProvidedCategories(
469 std::vector<Category>({category, new_category}));
470 EXPECT_CALL(observer, OnCategoryStatusChanged(new_category,
471 CategoryStatus::INITIALIZING));
472 provider->FireCategoryStatusChanged(new_category,
473 CategoryStatus::INITIALIZING);
474
475 EXPECT_THAT(providers().at(new_category), Eq(provider));
476 ExpectThatSuggestionsAre(new_category, std::vector<int>());
477 EXPECT_THAT(service()->GetCategoryStatus(new_category),
478 Eq(CategoryStatus::INITIALIZING));
479 EXPECT_THAT(service()->GetCategories(),
480 Eq(std::vector<Category>({category, new_category})));
481
482 service()->RemoveObserver(&observer);
483 }
484
485 TEST_F(ContentSuggestionsServiceTest, ShouldRemoveCategoryWhenNotProvided) {
486 Category category = FromKnownCategory(KnownCategories::BOOKMARKS);
487 MockProvider* provider = RegisterProvider(category);
488 MockServiceObserver observer;
489 service()->AddObserver(&observer);
490
491 provider->FireSuggestionsChanged(category, {1, 2});
492 ExpectThatSuggestionsAre(category, {1, 2});
493
494 EXPECT_CALL(observer,
495 OnCategoryStatusChanged(category, CategoryStatus::NOT_PROVIDED));
496 provider->FireCategoryStatusChanged(category, CategoryStatus::NOT_PROVIDED);
497
498 EXPECT_THAT(service()->GetCategoryStatus(category),
499 Eq(CategoryStatus::NOT_PROVIDED));
500 EXPECT_TRUE(service()->GetCategories().empty());
501 ExpectThatSuggestionsAre(category, std::vector<int>());
502
503 service()->RemoveObserver(&observer);
504 }
505
401 } // namespace ntp_snippets 506 } // namespace ntp_snippets
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698