Chromium Code Reviews| Index: chrome/browser/android/preferences/website_preference_bridge.cc |
| diff --git a/chrome/browser/android/preferences/website_preference_bridge.cc b/chrome/browser/android/preferences/website_preference_bridge.cc |
| index 070514a98cd9249014f6ded70a41d745b7c55377..b3ac845e4ef348e375c8658763e6c804abe3fd70 100644 |
| --- a/chrome/browser/android/preferences/website_preference_bridge.cc |
| +++ b/chrome/browser/android/preferences/website_preference_bridge.cc |
| @@ -4,6 +4,8 @@ |
| #include "chrome/browser/android/preferences/website_preference_bridge.h" |
| +#include <algorithm> |
| + |
| #include "base/android/jni_android.h" |
| #include "base/android/jni_string.h" |
| #include "base/android/scoped_java_ref.h" |
| @@ -18,6 +20,7 @@ |
| #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
| #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
| #include "chrome/browser/content_settings/web_site_settings_uma_util.h" |
| +#include "chrome/browser/engagement/site_engagement_service.h" |
| #include "chrome/browser/notifications/desktop_notification_profile_util.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/profiles/profile_manager.h" |
| @@ -656,25 +659,34 @@ class LocalStorageInfoReadyCallback { |
| } |
| void OnLocalStorageModelInfoLoaded( |
| + Profile* profile, |
| const std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>& |
| local_storage_info) { |
| ScopedJavaLocalRef<jobject> map = |
| Java_WebsitePreferenceBridge_createLocalStorageInfoMap(env_); |
| + SiteEngagementService* service = SiteEngagementService::Get(profile); |
| + std::map<GURL, double> score_map = service->GetScoreMap(); |
| std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>::const_iterator |
| i; |
| for (i = local_storage_info.begin(); i != local_storage_info.end(); ++i) { |
| ScopedJavaLocalRef<jstring> full_origin = |
| ConvertUTF8ToJavaString(env_, i->origin_url.spec()); |
| + std::string origin_str = i->origin_url.GetOrigin().spec(); |
| + double engagement_score = 0; |
| + auto engagement_score_it = score_map.find(i->origin_url.GetOrigin()); |
| + if (engagement_score_it != score_map.end()) { |
| + engagement_score = engagement_score_it->second; |
| + } |
| // Remove the trailing backslash so the origin is matched correctly in |
| // SingleWebsitePreferences.mergePermissionInfoForTopLevelOrigin. |
| - std::string origin_str = i->origin_url.GetOrigin().spec(); |
| DCHECK(origin_str[origin_str.size() - 1] == '/'); |
| origin_str = origin_str.substr(0, origin_str.size() - 1); |
| ScopedJavaLocalRef<jstring> origin = |
| ConvertUTF8ToJavaString(env_, origin_str); |
| Java_WebsitePreferenceBridge_insertLocalStorageInfoIntoMap( |
| - env_, map.obj(), origin.obj(), full_origin.obj(), i->size); |
| + env_, map.obj(), origin.obj(), full_origin.obj(), i->size, |
| + engagement_score); |
| } |
| Java_LocalStorageInfoReadyCallback_onLocalStorageInfoReady( |
| @@ -699,6 +711,54 @@ class LocalStorageInfoReadyCallback { |
| // helpers keep a reference to themselves for the duration of their tasks, |
| // which includes callback invocation. |
| +static void FetchImportantOriginInfo( |
| + JNIEnv* env, |
| + const JavaParamRef<jclass>& clazz, |
| + const JavaParamRef<jobject>& java_callback) { |
| + Profile* profile = ProfileManager::GetActiveUserProfile(); |
| + ScopedJavaLocalRef<jobject> map = |
| + Java_WebsitePreferenceBridge_createImportantOriginInfoMap(env); |
| + ScopedJavaLocalRef<jobject> list = |
| + Java_WebsitePreferenceBridge_createImportantOriginList(env); |
| + SiteEngagementService* service = SiteEngagementService::Get(profile); |
| + std::map<GURL, double> score_map = service->GetScoreMap(); |
| + std::vector<std::pair<GURL, double>> ranked_origins; |
|
Finnur
2016/03/03 14:15:44
Shouldn't this be named top_ranking_origins, or so
dmurph
2016/04/26 21:43:13
chagned.
|
| + |
| + for (const auto& url_engagement_pair : score_map) { |
| + if (!service->IsEngagementAtLeast( |
| + url_engagement_pair.first, |
| + SiteEngagementService::ENGAGEMENT_LEVEL_MEDIUM)) { |
| + continue; |
| + } |
| + ranked_origins.push_back(url_engagement_pair); |
| + } |
| + |
| + std::sort( |
| + ranked_origins.begin(), ranked_origins.end(), |
| + [](const std::pair<GURL, double>& a, const std::pair<GURL, double>& b) { |
| + return a.second > b.second; |
| + }); |
| + ranked_origins.resize(std::min(ranked_origins.size(), 5u)); |
|
Finnur
2016/03/03 14:15:44
Um... this is non-obvious. Can you add a comment o
dmurph
2016/04/26 21:43:13
Moved to a separate class in previous patch.
|
| + |
| + for (const auto& url_engagement_pair : ranked_origins) { |
| + // Remove the trailing backslash so the origin is matched correctly in |
| + // SingleWebsitePreferences.mergePermissionInfoForTopLevelOrigin, and with |
| + // maps returned in FetchLocalStorageInfo. |
| + std::string origin_str = url_engagement_pair.first.GetOrigin().spec(); |
| + DCHECK(origin_str[origin_str.size() - 1] == '/'); |
| + origin_str = origin_str.substr(0, origin_str.size() - 1); |
| + ScopedJavaLocalRef<jstring> origin = |
| + ConvertUTF8ToJavaString(env, origin_str); |
| + Java_WebsitePreferenceBridge_insertImportantOriginInfoIntoMap( |
| + env, map.obj(), origin.obj(), 0, url_engagement_pair.second); |
| + Java_WebsitePreferenceBridge_insertImportantOriginIntoList(env, list.obj(), |
| + origin.obj()); |
| + } |
| + |
| + Java_ImportantOriginsReadyCallback_onImportantOriginsReady( |
| + env, java_callback.obj(), list.obj(), map.obj()); |
| +} |
| + |
| static void FetchLocalStorageInfo(JNIEnv* env, |
| const JavaParamRef<jclass>& clazz, |
| const JavaParamRef<jobject>& java_callback) { |
| @@ -710,7 +770,7 @@ static void FetchLocalStorageInfo(JNIEnv* env, |
| new LocalStorageInfoReadyCallback(java_callback); |
| local_storage_helper->StartFetching( |
| base::Bind(&LocalStorageInfoReadyCallback::OnLocalStorageModelInfoLoaded, |
| - base::Unretained(local_storage_callback))); |
| + base::Unretained(local_storage_callback), profile)); |
| } |
| static void FetchStorageInfo(JNIEnv* env, |