Chromium Code Reviews| 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); |
| } |