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, |