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 de24e21565488da8ba022794657a1ff4c09c58db..dbf8e8f24a6171006690f449d41d7b855f0d4974 100644 |
--- a/chrome/browser/android/preferences/website_preference_bridge.cc |
+++ b/chrome/browser/android/preferences/website_preference_bridge.cc |
@@ -4,6 +4,10 @@ |
#include "chrome/browser/android/preferences/website_preference_bridge.h" |
+#include <algorithm> |
+#include <string> |
+#include <vector> |
+ |
#include "base/android/callback_android.h" |
#include "base/android/jni_android.h" |
#include "base/android/jni_string.h" |
@@ -12,6 +16,7 @@ |
#include "base/bind_helpers.h" |
#include "base/logging.h" |
#include "base/macros.h" |
+#include "chrome/browser/android/preferences/important_sites_util.h" |
#include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" |
#include "chrome/browser/browsing_data/browsing_data_quota_helper.h" |
#include "chrome/browser/browsing_data/cookies_tree_model.h" |
@@ -30,6 +35,7 @@ |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/storage_partition.h" |
#include "jni/WebsitePreferenceBridge_jni.h" |
+#include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
#include "storage/browser/quota/quota_manager.h" |
#include "storage/common/quota/quota_status_code.h" |
#include "url/url_constants.h" |
@@ -42,6 +48,11 @@ using base::android::ScopedJavaLocalRef; |
using content::BrowserThread; |
namespace { |
+// We need to limit our size due to the algorithm in ImportantSiteUtil, but we |
+// want to be more on the liberal side here as we're not exposing these sites |
+// to the user, we're just using them for our 'clear unimportant' feature in |
+// ManageSpaceActivity.java. |
+const int kMaxImportantSites = 10; |
Profile* GetActiveUserProfile(bool is_incognito) { |
Profile* profile = ProfileManager::GetActiveUserProfile(); |
@@ -580,25 +591,44 @@ class LocalStorageInfoReadyCallback { |
} |
void OnLocalStorageModelInfoLoaded( |
+ Profile* profile, |
const std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo>& |
local_storage_info) { |
ScopedJavaLocalRef<jobject> map = |
Java_WebsitePreferenceBridge_createLocalStorageInfoMap(env_); |
+ std::vector<std::string> important_domains = |
+ ImportantSitesUtil::GetImportantRegisterableDomains( |
+ profile, kMaxImportantSites, nullptr); |
+ |
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(); |
+ bool important = false; |
+ std::string registerable_domain; |
+ if (i->origin_url.HostIsIPAddress()) { |
+ registerable_domain = i->origin_url.host(); |
+ } else { |
+ registerable_domain = |
+ net::registry_controlled_domains::GetDomainAndRegistry( |
+ i->origin_url, |
+ net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); |
+ } |
+ if (std::find(important_domains.begin(), important_domains.end(), |
+ registerable_domain) != important_domains.end()) { |
+ important = true; |
+ } |
// 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, important); |
} |
base::android::RunCallbackAndroid(java_callback_, map); |
@@ -633,7 +663,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, |