| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |