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 |