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

Unified Diff: ios/chrome/browser/ui/ntp/google_landing_controller.mm

Issue 2619993002: ntp_tiles: Migrate to multi-observer model
Patch Set: Fixed build. Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/ui/ntp/google_landing_controller.mm
diff --git a/ios/chrome/browser/ui/ntp/google_landing_controller.mm b/ios/chrome/browser/ui/ntp/google_landing_controller.mm
index edec1eab443e8cca6876fc08e4ae54c5f2e64378..aa8dd450e2a2baba5890965ec236e57a8287c2d8 100644
--- a/ios/chrome/browser/ui/ntp/google_landing_controller.mm
+++ b/ios/chrome/browser/ui/ntp/google_landing_controller.mm
@@ -121,7 +121,9 @@ namespace google_landing {
class MostVisitedSitesObserverBridge
: public ntp_tiles::MostVisitedSites::Observer {
public:
- MostVisitedSitesObserverBridge(GoogleLandingController* owner);
+ MostVisitedSitesObserverBridge(
+ GoogleLandingController* owner,
+ ntp_tiles::MostVisitedSites* most_visited_sites);
~MostVisitedSitesObserverBridge() override;
// MostVisitedSites::Observer implementation.
@@ -131,13 +133,19 @@ class MostVisitedSitesObserverBridge
private:
GoogleLandingController* _owner;
+ ntp_tiles::MostVisitedSites* _most_visited_sites; // weak
};
MostVisitedSitesObserverBridge::MostVisitedSitesObserverBridge(
- GoogleLandingController* owner)
- : _owner(owner) {}
+ GoogleLandingController* owner,
+ ntp_tiles::MostVisitedSites* most_visited_sites)
+ : _owner(owner), _most_visited_sites(most_visited_sites) {
+ _most_visited_sites->AddObserver(this);
+}
-MostVisitedSitesObserverBridge::~MostVisitedSitesObserverBridge() {}
+MostVisitedSitesObserverBridge::~MostVisitedSitesObserverBridge() {
+ _most_visited_sites->RemoveObserver(this);
+}
void MostVisitedSitesObserverBridge::OnMostVisitedURLsAvailable(
const ntp_tiles::NTPTilesVector& tiles) {
@@ -266,13 +274,13 @@ void SearchEngineObserver::OnTemplateURLServiceChanged() {
// What's new promo.
std::unique_ptr<NotificationPromoWhatsNew> _notification_promo;
+ std::unique_ptr<ntp_tiles::MostVisitedSites> _most_visited_sites;
+
// A MostVisitedSites::Observer bridge object to get notified of most visited
// sites changes.
std::unique_ptr<google_landing::MostVisitedSitesObserverBridge>
_most_visited_observer_bridge;
- std::unique_ptr<ntp_tiles::MostVisitedSites> _most_visited_sites;
-
// URL of the last deleted most viewed entry. If present the UI to restore it
// is shown.
base::scoped_nsobject<NSURL> _deletedUrl;
@@ -931,9 +939,9 @@ void SearchEngineObserver::OnTemplateURLServiceChanged() {
_most_visited_sites =
IOSMostVisitedSitesFactory::NewForBrowserState(_browserState);
_most_visited_observer_bridge.reset(
- new google_landing::MostVisitedSitesObserverBridge(self));
- _most_visited_sites->SetMostVisitedURLsObserver(
- _most_visited_observer_bridge.get(), kMaxNumMostVisitedFavicons);
+ new google_landing::MostVisitedSitesObserverBridge(
+ self, _most_visited_sites.get()));
+ _most_visited_sites->Refresh();
}
- (void)updateSearchField {
@@ -1099,12 +1107,15 @@ void SearchEngineObserver::OnTemplateURLServiceChanged() {
- (void)onMostVisitedURLsAvailable:(const ntp_tiles::NTPTilesVector&)data {
_mostVisitedData = data;
+ if (_mostVisitedData.size() > kMaxNumMostVisitedFavicons)
sfiera 2017/01/18 09:58:33 We're resizing to save memory, but it's not relate
+ _mostVisitedData.resize(kMaxNumMostVisitedFavicons);
+
[self reloadData];
- if (data.size() && !_recordedPageImpression) {
+ if (_mostVisitedData.size() && !_recordedPageImpression) {
_recordedPageImpression = YES;
std::vector<ntp_tiles::metrics::TileImpression> tiles;
- for (const ntp_tiles::NTPTile& ntpTile : data) {
+ for (const ntp_tiles::NTPTile& ntpTile : _mostVisitedData) {
tiles.emplace_back(ntpTile.source, ntp_tiles::metrics::UNKNOWN_TILE_TYPE,
ntpTile.url);
}

Powered by Google App Engine
This is Rietveld 408576698