Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "chrome/browser/android/ntp/content_suggestions_notifier_service.h" | 5 #include "chrome/browser/android/ntp/content_suggestions_notifier_service.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "chrome/browser/android/ntp/content_suggestions_notification_helper.h" | 10 #include "chrome/browser/android/ntp/content_suggestions_notification_helper.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 46 | 46 |
| 47 class ContentSuggestionsNotifierService::NotifyingObserver | 47 class ContentSuggestionsNotifierService::NotifyingObserver |
| 48 : public ContentSuggestionsService::Observer { | 48 : public ContentSuggestionsService::Observer { |
| 49 public: | 49 public: |
| 50 NotifyingObserver(ContentSuggestionsService* service, | 50 NotifyingObserver(ContentSuggestionsService* service, |
| 51 Profile* profile, | 51 Profile* profile, |
| 52 PrefService* prefs) | 52 PrefService* prefs) |
| 53 : service_(service), prefs_(prefs), weak_ptr_factory_(this) {} | 53 : service_(service), prefs_(prefs), weak_ptr_factory_(this) {} |
| 54 | 54 |
| 55 void OnNewSuggestions(Category category) override { | 55 void OnNewSuggestions(Category category) override { |
| 56 if (!category.IsKnownCategory(KnownCategories::ARTICLES)) { | 56 const ContentSuggestion* suggestion = GetSuggestionToNotifyAbout(category); |
| 57 if (!suggestion) { | |
| 57 return; | 58 return; |
| 58 } | 59 } |
| 59 const auto& suggestions = service_->GetSuggestionsForCategory(category); | 60 service_->FetchSuggestionImage( |
| 60 if (!suggestions.empty()) { | 61 suggestion->id(), |
| 61 const auto& suggestion = suggestions[0]; | 62 base::Bind(&NotifyingObserver::ImageFetched, |
| 62 service_->FetchSuggestionImage( | 63 weak_ptr_factory_.GetWeakPtr(), suggestion->id(), |
| 63 suggestions[0].id(), | 64 suggestion->url(), suggestion->title(), |
| 64 base::Bind(&NotifyingObserver::ImageFetched, | 65 suggestion->publisher_name())); |
| 65 weak_ptr_factory_.GetWeakPtr(), suggestion.id(), | |
| 66 suggestion.url(), suggestion.title(), | |
| 67 suggestion.publisher_name())); | |
| 68 } | |
| 69 } | 66 } |
| 70 | 67 |
| 71 void OnCategoryStatusChanged(Category category, | 68 void OnCategoryStatusChanged(Category category, |
| 72 CategoryStatus new_status) override { | 69 CategoryStatus new_status) override { |
| 73 if (!category.IsKnownCategory(KnownCategories::ARTICLES)) { | 70 if (!category.IsKnownCategory(KnownCategories::ARTICLES)) { |
| 74 return; | 71 return; |
| 75 } | 72 } |
| 76 switch (new_status) { | 73 switch (new_status) { |
| 77 case CategoryStatus::AVAILABLE: | 74 case CategoryStatus::AVAILABLE: |
| 78 case CategoryStatus::AVAILABLE_LOADING: | 75 case CategoryStatus::AVAILABLE_LOADING: |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 99 | 96 |
| 100 void OnFullRefreshRequired() override { | 97 void OnFullRefreshRequired() override { |
| 101 ContentSuggestionsNotificationHelper::HideNotification(); | 98 ContentSuggestionsNotificationHelper::HideNotification(); |
| 102 } | 99 } |
| 103 | 100 |
| 104 void ContentSuggestionsServiceShutdown() override { | 101 void ContentSuggestionsServiceShutdown() override { |
| 105 ContentSuggestionsNotificationHelper::HideNotification(); | 102 ContentSuggestionsNotificationHelper::HideNotification(); |
| 106 } | 103 } |
| 107 | 104 |
| 108 private: | 105 private: |
| 106 const ContentSuggestion* GetSuggestionToNotifyAbout(Category category) { | |
| 107 const auto& suggestions = service_->GetSuggestionsForCategory(category); | |
| 108 if (false /* DO_NOT_SUBMIT: always_notify after crrev.com/2613863003 */) { | |
|
Bernhard Bauer
2017/01/05 17:31:17
So, if the feature is enabled, we will always noti
sfiera
2017/01/05 19:14:37
This condition will use AlwaysNotifyAboutContentSu
Bernhard Bauer
2017/01/06 13:26:59
Yes, but my point was, in the third case (if the a
sfiera
2017/01/06 15:39:52
Oh, I see. Yes, this is the intended behavior. The
| |
| 109 if (category.IsKnownCategory(KnownCategories::ARTICLES) && | |
| 110 suggestions.size()) { | |
|
Bernhard Bauer
2017/01/05 17:31:17
Maybe use !suggestions.empty()?
sfiera
2017/01/05 19:14:37
Done.
| |
| 111 return &suggestions[0]; | |
| 112 } | |
| 113 return nullptr; | |
| 114 } | |
| 115 | |
| 116 for (const ContentSuggestion& suggestion : suggestions) { | |
| 117 if (suggestion.notification_extra()) { | |
| 118 return &suggestion; | |
| 119 } | |
| 120 } | |
| 121 return nullptr; | |
| 122 } | |
| 123 | |
| 109 void ImageFetched(const ContentSuggestion::ID& id, | 124 void ImageFetched(const ContentSuggestion::ID& id, |
| 110 const GURL& url, | 125 const GURL& url, |
| 111 const base::string16& title, | 126 const base::string16& title, |
| 112 const base::string16& publisher, | 127 const base::string16& publisher, |
| 113 const gfx::Image& image) { | 128 const gfx::Image& image) { |
| 114 // check if suggestion is still valid. | 129 // check if suggestion is still valid. |
| 115 DVLOG(1) << "Fetched " << image.Size().width() << "x" | 130 DVLOG(1) << "Fetched " << image.Size().width() << "x" |
| 116 << image.Size().height() << " image for " << url.spec(); | 131 << image.Size().height() << " image for " << url.spec(); |
| 117 prefs_->SetString(kNotificationIDWithinCategory, id.id_within_category()); | 132 prefs_->SetString(kNotificationIDWithinCategory, id.id_within_category()); |
| 118 ContentSuggestionsNotificationHelper::SendNotification( | 133 ContentSuggestionsNotificationHelper::SendNotification( |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 137 suggestions->AddObserver(observer_.get()); | 152 suggestions->AddObserver(observer_.get()); |
| 138 } | 153 } |
| 139 | 154 |
| 140 ContentSuggestionsNotifierService::~ContentSuggestionsNotifierService() = | 155 ContentSuggestionsNotifierService::~ContentSuggestionsNotifierService() = |
| 141 default; | 156 default; |
| 142 | 157 |
| 143 void ContentSuggestionsNotifierService::RegisterProfilePrefs( | 158 void ContentSuggestionsNotifierService::RegisterProfilePrefs( |
| 144 user_prefs::PrefRegistrySyncable* registry) { | 159 user_prefs::PrefRegistrySyncable* registry) { |
| 145 registry->RegisterStringPref(kNotificationIDWithinCategory, std::string()); | 160 registry->RegisterStringPref(kNotificationIDWithinCategory, std::string()); |
| 146 } | 161 } |
| OLD | NEW |