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

Side by Side Diff: chrome/browser/engagement/site_engagement_service.cc

Issue 1986033002: Implement an observer interface for the site engagement service. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@site-engagement-refactor
Patch Set: Address comments Created 4 years, 6 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/engagement/site_engagement_service.h" 5 #include "chrome/browser/engagement/site_engagement_service.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <utility> 10 #include <utility>
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 return score >= SiteEngagementScore::GetMediumEngagementBoundary(); 202 return score >= SiteEngagementScore::GetMediumEngagementBoundary();
203 case ENGAGEMENT_LEVEL_HIGH: 203 case ENGAGEMENT_LEVEL_HIGH:
204 return score >= SiteEngagementScore::GetHighEngagementBoundary(); 204 return score >= SiteEngagementScore::GetHighEngagementBoundary();
205 case ENGAGEMENT_LEVEL_MAX: 205 case ENGAGEMENT_LEVEL_MAX:
206 return score == SiteEngagementScore::kMaxPoints; 206 return score == SiteEngagementScore::kMaxPoints;
207 } 207 }
208 NOTREACHED(); 208 NOTREACHED();
209 return false; 209 return false;
210 } 210 }
211 211
212 void SiteEngagementService::AddObserver(SiteEngagementObserver* observer) {
213 observer_list_.AddObserver(observer);
214 }
215
216 void SiteEngagementService::RemoveObserver(SiteEngagementObserver* observer) {
217 observer_list_.RemoveObserver(observer);
218 }
219
212 void SiteEngagementService::ResetScoreForURL(const GURL& url, double score) { 220 void SiteEngagementService::ResetScoreForURL(const GURL& url, double score) {
213 ResetScoreAndAccessTimesForURL(url, score, nullptr); 221 ResetScoreAndAccessTimesForURL(url, score, nullptr);
214 } 222 }
215 223
216 void SiteEngagementService::SetLastShortcutLaunchTime(const GURL& url) { 224 void SiteEngagementService::SetLastShortcutLaunchTime(const GURL& url) {
217 HostContentSettingsMap* settings_map = 225 HostContentSettingsMap* settings_map =
218 HostContentSettingsMapFactory::GetForProfile(profile_); 226 HostContentSettingsMapFactory::GetForProfile(profile_);
219 std::unique_ptr<base::DictionaryValue> score_dict = 227 std::unique_ptr<base::DictionaryValue> score_dict =
220 GetScoreDictForOrigin(settings_map, url); 228 GetScoreDictForOrigin(settings_map, url);
221 SiteEngagementScore score(clock_.get(), *score_dict); 229 SiteEngagementScore score(clock_.get(), *score_dict);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 std::unique_ptr<base::DictionaryValue> score_dict = 283 std::unique_ptr<base::DictionaryValue> score_dict =
276 GetScoreDictForOrigin(settings_map, url); 284 GetScoreDictForOrigin(settings_map, url);
277 SiteEngagementScore score(clock_.get(), *score_dict); 285 SiteEngagementScore score(clock_.get(), *score_dict);
278 286
279 score.AddPoints(points); 287 score.AddPoints(points);
280 if (score.UpdateScoreDict(score_dict.get())) { 288 if (score.UpdateScoreDict(score_dict.get())) {
281 settings_map->SetWebsiteSettingDefaultScope( 289 settings_map->SetWebsiteSettingDefaultScope(
282 url, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(), 290 url, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(),
283 score_dict.release()); 291 score_dict.release());
284 } 292 }
293 FOR_EACH_OBSERVER(SiteEngagementObserver, observer_list_,
294 OnEngagementIncreased(this, url, score.GetScore()));
285 } 295 }
286 296
287 void SiteEngagementService::AfterStartupTask() { 297 void SiteEngagementService::AfterStartupTask() {
288 CleanupEngagementScores(); 298 CleanupEngagementScores();
289 RecordMetrics(); 299 RecordMetrics();
290 } 300 }
291 301
292 void SiteEngagementService::CleanupEngagementScores() { 302 void SiteEngagementService::CleanupEngagementScores() {
293 HostContentSettingsMap* settings_map = 303 HostContentSettingsMap* settings_map =
294 HostContentSettingsMapFactory::GetForProfile(profile_); 304 HostContentSettingsMapFactory::GetForProfile(profile_);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 // if there are an odd number of scores, or the average of the two middle 368 // if there are an odd number of scores, or the average of the two middle
359 // scores otherwise. 369 // scores otherwise.
360 std::sort(scores.begin(), scores.end()); 370 std::sort(scores.begin(), scores.end());
361 size_t mid = scores.size() / 2; 371 size_t mid = scores.size() / 2;
362 if (scores.size() % 2 == 1) 372 if (scores.size() % 2 == 1)
363 return scores[mid]; 373 return scores[mid];
364 else 374 else
365 return (scores[mid - 1] + scores[mid]) / 2; 375 return (scores[mid - 1] + scores[mid]) / 2;
366 } 376 }
367 377
378 double SiteEngagementService::GetScoreForEngagementLevel(
379 EngagementLevel level) const {
380 switch (level) {
381 case ENGAGEMENT_LEVEL_NONE:
382 return 0;
383 case ENGAGEMENT_LEVEL_LOW:
384 return SiteEngagementScore::GetMinimumEngagementIncrement();
385 case ENGAGEMENT_LEVEL_MEDIUM:
386 return SiteEngagementScore::GetMediumEngagementBoundary();
387 case ENGAGEMENT_LEVEL_HIGH:
388 return SiteEngagementScore::GetHighEngagementBoundary();
389 case ENGAGEMENT_LEVEL_MAX:
390 return SiteEngagementScore::kMaxPoints;
391 default:
392 NOTREACHED();
393 return 0;
394 }
395 }
396
368 void SiteEngagementService::HandleMediaPlaying(const GURL& url, 397 void SiteEngagementService::HandleMediaPlaying(const GURL& url,
369 bool is_hidden) { 398 bool is_hidden) {
370 SiteEngagementMetrics::RecordEngagement( 399 SiteEngagementMetrics::RecordEngagement(
371 is_hidden ? SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN 400 is_hidden ? SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN
372 : SiteEngagementMetrics::ENGAGEMENT_MEDIA_VISIBLE); 401 : SiteEngagementMetrics::ENGAGEMENT_MEDIA_VISIBLE);
373 AddPoints(url, is_hidden ? SiteEngagementScore::GetHiddenMediaPoints() 402 AddPoints(url, is_hidden ? SiteEngagementScore::GetHiddenMediaPoints()
374 : SiteEngagementScore::GetVisibleMediaPoints()); 403 : SiteEngagementScore::GetVisibleMediaPoints());
375 RecordMetrics(); 404 RecordMetrics();
376 } 405 }
377 406
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 nullptr); 551 nullptr);
523 return; 552 return;
524 } 553 }
525 554
526 if (engagement_score.UpdateScoreDict(score_dict.get())) { 555 if (engagement_score.UpdateScoreDict(score_dict.get())) {
527 settings_map->SetWebsiteSettingDefaultScope( 556 settings_map->SetWebsiteSettingDefaultScope(
528 url, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(), 557 url, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(),
529 score_dict.release()); 558 score_dict.release());
530 } 559 }
531 } 560 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698