Index: chrome/browser/android/preferences/pref_service_bridge.cc |
diff --git a/chrome/browser/android/preferences/pref_service_bridge.cc b/chrome/browser/android/preferences/pref_service_bridge.cc |
index 194474d8728ebda1cca88be61210298a250e3cd8..ea8b02f8299c0108cdcca023e62d1d30eb473af8 100644 |
--- a/chrome/browser/android/preferences/pref_service_bridge.cc |
+++ b/chrome/browser/android/preferences/pref_service_bridge.cc |
@@ -20,32 +20,21 @@ |
#include "base/feature_list.h" |
#include "base/files/file_path.h" |
#include "base/files/file_util.h" |
-#include "base/metrics/histogram_macros.h" |
#include "base/scoped_observer.h" |
#include "base/strings/string_split.h" |
#include "base/strings/string_util.h" |
#include "base/values.h" |
#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/browsing_data/browsing_data_helper.h" |
-#include "chrome/browser/browsing_data/browsing_data_remover.h" |
-#include "chrome/browser/browsing_data/browsing_data_remover_factory.h" |
-#include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" |
#include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
-#include "chrome/browser/engagement/important_sites_util.h" |
-#include "chrome/browser/history/web_history_service_factory.h" |
#include "chrome/browser/net/prediction_options.h" |
#include "chrome/browser/prefs/incognito_mode_prefs.h" |
#include "chrome/browser/profiles/profile_manager.h" |
-#include "chrome/browser/sync/profile_sync_service_factory.h" |
#include "chrome/browser/translate/chrome_translate_client.h" |
#include "chrome/browser/ui/android/android_about_app_info.h" |
-#include "chrome/common/channel_info.h" |
#include "chrome/common/chrome_features.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/grit/locale_settings.h" |
-#include "components/browser_sync/profile_sync_service.h" |
#include "components/browsing_data/core/browsing_data_utils.h" |
-#include "components/browsing_data/core/history_notice_utils.h" |
#include "components/browsing_data/core/pref_names.h" |
#include "components/content_settings/core/browser/host_content_settings_map.h" |
#include "components/content_settings/core/common/content_settings.h" |
@@ -62,25 +51,18 @@ |
#include "components/version_info/version_info.h" |
#include "components/web_resource/web_resource_pref_names.h" |
#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/browsing_data_filter_builder.h" |
#include "jni/PrefServiceBridge_jni.h" |
#include "third_party/icu/source/common/unicode/uloc.h" |
#include "ui/base/l10n/l10n_util.h" |
using base::android::AttachCurrentThread; |
-using base::android::CheckException; |
using base::android::ConvertJavaStringToUTF8; |
using base::android::ConvertUTF8ToJavaString; |
using base::android::JavaParamRef; |
-using base::android::JavaRef; |
using base::android::ScopedJavaLocalRef; |
-using base::android::ScopedJavaGlobalRef; |
-using content::BrowserThread; |
namespace { |
-const size_t kMaxImportantSites = 5; |
- |
Profile* GetOriginalProfile() { |
return ProfileManager::GetActiveUserProfile()->GetOriginalProfile(); |
} |
@@ -510,49 +492,6 @@ static ScopedJavaLocalRef<jstring> GetLatestVersionWhenClickedUpdateMenuItem( |
prefs::kLatestVersionWhenClickedUpdateMenuItem)); |
} |
-namespace { |
- |
-// Merges |task_count| BrowsingDataRemover completion callbacks and redirects |
-// them back into Java. |
-class ClearBrowsingDataObserver : public BrowsingDataRemover::Observer { |
- public: |
- // |obj| is expected to be the object passed into ClearBrowsingData(); e.g. a |
- // ChromePreference. |
- ClearBrowsingDataObserver(JNIEnv* env, |
- jobject obj, |
- BrowsingDataRemover* browsing_data_remover, |
- int task_count) |
- : task_count_(task_count), |
- weak_chrome_native_preferences_(env, obj), |
- observer_(this) { |
- DCHECK_GT(task_count, 0); |
- observer_.Add(browsing_data_remover); |
- } |
- |
- void OnBrowsingDataRemoverDone() override { |
- DCHECK(task_count_); |
- if (--task_count_) |
- return; |
- |
- // We delete ourselves when done. |
- std::unique_ptr<ClearBrowsingDataObserver> auto_delete(this); |
- |
- JNIEnv* env = AttachCurrentThread(); |
- if (weak_chrome_native_preferences_.get(env).is_null()) |
- return; |
- |
- Java_PrefServiceBridge_browsingDataCleared( |
- env, weak_chrome_native_preferences_.get(env)); |
- } |
- |
- private: |
- int task_count_; |
- JavaObjectWeakGlobalRef weak_chrome_native_preferences_; |
- ScopedObserver<BrowsingDataRemover, BrowsingDataRemover::Observer> observer_; |
-}; |
- |
-} // namespace |
- |
static jboolean GetBrowsingDataDeletionPreference( |
JNIEnv* env, |
const JavaParamRef<jobject>& obj, |
@@ -635,206 +574,11 @@ static void MigrateBrowsingDataPreferences(JNIEnv* env, |
browsing_data::MigratePreferencesToBasic(GetOriginalProfile()->GetPrefs()); |
} |
-static void ClearBrowsingData( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- const JavaParamRef<jintArray>& data_types, |
- jint time_period, |
- const JavaParamRef<jobjectArray>& jexcluding_domains, |
- const JavaParamRef<jintArray>& jexcluding_domain_reasons, |
- const JavaParamRef<jobjectArray>& jignoring_domains, |
- const JavaParamRef<jintArray>& jignoring_domain_reasons) { |
- BrowsingDataRemover* browsing_data_remover = |
- BrowsingDataRemoverFactory::GetForBrowserContext(GetOriginalProfile()); |
- |
- std::vector<int> data_types_vector; |
- base::android::JavaIntArrayToIntVector(env, data_types, &data_types_vector); |
- |
- int remove_mask = 0; |
- for (const int data_type : data_types_vector) { |
- switch (static_cast<browsing_data::BrowsingDataType>(data_type)) { |
- case browsing_data::BrowsingDataType::HISTORY: |
- remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HISTORY; |
- break; |
- case browsing_data::BrowsingDataType::CACHE: |
- remove_mask |= BrowsingDataRemover::DATA_TYPE_CACHE; |
- break; |
- case browsing_data::BrowsingDataType::COOKIES: |
- remove_mask |= BrowsingDataRemover::DATA_TYPE_COOKIES; |
- remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_SITE_DATA; |
- break; |
- case browsing_data::BrowsingDataType::PASSWORDS: |
- remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS; |
- break; |
- case browsing_data::BrowsingDataType::FORM_DATA: |
- remove_mask |= ChromeBrowsingDataRemoverDelegate::DATA_TYPE_FORM_DATA; |
- break; |
- case browsing_data::BrowsingDataType::BOOKMARKS: |
- // Bookmarks are deleted separately on the Java side. |
- NOTREACHED(); |
- break; |
- case browsing_data::BrowsingDataType::NUM_TYPES: |
- NOTREACHED(); |
- } |
- } |
- std::vector<std::string> excluding_domains; |
- std::vector<int32_t> excluding_domain_reasons; |
- std::vector<std::string> ignoring_domains; |
- std::vector<int32_t> ignoring_domain_reasons; |
- base::android::AppendJavaStringArrayToStringVector( |
- env, jexcluding_domains.obj(), &excluding_domains); |
- base::android::JavaIntArrayToIntVector(env, jexcluding_domain_reasons.obj(), |
- &excluding_domain_reasons); |
- base::android::AppendJavaStringArrayToStringVector( |
- env, jignoring_domains.obj(), &ignoring_domains); |
- base::android::JavaIntArrayToIntVector(env, jignoring_domain_reasons.obj(), |
- &ignoring_domain_reasons); |
- std::unique_ptr<content::BrowsingDataFilterBuilder> filter_builder( |
- content::BrowsingDataFilterBuilder::Create( |
- content::BrowsingDataFilterBuilder::BLACKLIST)); |
- for (const std::string& domain : excluding_domains) { |
- filter_builder->AddRegisterableDomain(domain); |
- } |
- |
- if (!excluding_domains.empty() || !ignoring_domains.empty()) { |
- ImportantSitesUtil::RecordBlacklistedAndIgnoredImportantSites( |
- GetOriginalProfile(), excluding_domains, excluding_domain_reasons, |
- ignoring_domains, ignoring_domain_reasons); |
- } |
- |
- // Delete the types protected by Important Sites with a filter, |
- // and the rest completely. |
- int filterable_mask = |
- remove_mask & |
- ChromeBrowsingDataRemoverDelegate::IMPORTANT_SITES_DATA_TYPES; |
- int nonfilterable_mask = |
- remove_mask & |
- ~ChromeBrowsingDataRemoverDelegate::IMPORTANT_SITES_DATA_TYPES; |
- |
- // ClearBrowsingDataObserver deletes itself when |browsing_data_remover| is |
- // done with both removal tasks. |
- ClearBrowsingDataObserver* observer = new ClearBrowsingDataObserver( |
- env, obj, browsing_data_remover, 2 /* tasks_count */); |
- |
- browsing_data::TimePeriod period = |
- static_cast<browsing_data::TimePeriod>(time_period); |
- browsing_data::RecordDeletionForPeriod(period); |
- |
- if (filterable_mask) { |
- browsing_data_remover->RemoveWithFilterAndReply( |
- browsing_data::CalculateBeginDeleteTime(period), |
- browsing_data::CalculateEndDeleteTime(period), filterable_mask, |
- BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, |
- std::move(filter_builder), observer); |
- } else { |
- // Make sure |observer| doesn't wait for the filtered task. |
- observer->OnBrowsingDataRemoverDone(); |
- } |
- |
- if (nonfilterable_mask) { |
- browsing_data_remover->RemoveAndReply( |
- browsing_data::CalculateBeginDeleteTime(period), |
- browsing_data::CalculateEndDeleteTime(period), nonfilterable_mask, |
- BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB, observer); |
- } else { |
- // Make sure |observer| doesn't wait for the non-filtered task. |
- observer->OnBrowsingDataRemoverDone(); |
- } |
-} |
- |
static jboolean CanDeleteBrowsingHistory(JNIEnv* env, |
const JavaParamRef<jobject>& obj) { |
return GetPrefService()->GetBoolean(prefs::kAllowDeletingBrowserHistory); |
} |
-static void FetchImportantSites(JNIEnv* env, |
- const JavaParamRef<jclass>& clazz, |
- const JavaParamRef<jobject>& java_callback) { |
- Profile* profile = GetOriginalProfile(); |
- std::vector<ImportantSitesUtil::ImportantDomainInfo> important_sites = |
- ImportantSitesUtil::GetImportantRegisterableDomains(profile, |
- kMaxImportantSites); |
- bool dialog_disabled = ImportantSitesUtil::IsDialogDisabled(profile); |
- |
- std::vector<std::string> important_domains; |
- std::vector<int32_t> important_domain_reasons; |
- std::vector<std::string> important_domain_examples; |
- for (const ImportantSitesUtil::ImportantDomainInfo& info : important_sites) { |
- important_domains.push_back(info.registerable_domain); |
- important_domain_reasons.push_back(info.reason_bitfield); |
- important_domain_examples.push_back(info.example_origin.spec()); |
- } |
- |
- ScopedJavaLocalRef<jobjectArray> java_domains = |
- base::android::ToJavaArrayOfStrings(env, important_domains); |
- ScopedJavaLocalRef<jintArray> java_reasons = |
- base::android::ToJavaIntArray(env, important_domain_reasons); |
- ScopedJavaLocalRef<jobjectArray> java_origins = |
- base::android::ToJavaArrayOfStrings(env, important_domain_examples); |
- |
- Java_ImportantSitesCallback_onImportantRegisterableDomainsReady( |
- env, java_callback.obj(), java_domains.obj(), java_origins.obj(), |
- java_reasons.obj(), dialog_disabled); |
-} |
- |
-// This value should not change during a sessions, as it's used for UMA metrics. |
-static jint GetMaxImportantSites(JNIEnv* env, |
- const JavaParamRef<jclass>& clazz) { |
- return kMaxImportantSites; |
-} |
- |
-static void MarkOriginAsImportantForTesting( |
- JNIEnv* env, |
- const JavaParamRef<jclass>& clazz, |
- const JavaParamRef<jstring>& jorigin) { |
- GURL origin(base::android::ConvertJavaStringToUTF8(jorigin)); |
- CHECK(origin.is_valid()); |
- ImportantSitesUtil::MarkOriginAsImportantForTesting(GetOriginalProfile(), |
- origin); |
-} |
- |
-static void ShowNoticeAboutOtherFormsOfBrowsingHistory( |
- const JavaRef<jobject>& listener, |
- bool show) { |
- JNIEnv* env = AttachCurrentThread(); |
- UMA_HISTOGRAM_BOOLEAN( |
- "History.ClearBrowsingData.HistoryNoticeShownInFooterWhenUpdated", show); |
- if (!show) |
- return; |
- Java_OtherFormsOfBrowsingHistoryListener_showNoticeAboutOtherFormsOfBrowsingHistory( |
- env, listener); |
-} |
- |
-static void EnableDialogAboutOtherFormsOfBrowsingHistory( |
- const JavaRef<jobject>& listener, |
- bool enabled) { |
- JNIEnv* env = AttachCurrentThread(); |
- if (!enabled) |
- return; |
- Java_OtherFormsOfBrowsingHistoryListener_enableDialogAboutOtherFormsOfBrowsingHistory( |
- env, listener); |
-} |
- |
-static void RequestInfoAboutOtherFormsOfBrowsingHistory( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- const JavaParamRef<jobject>& listener) { |
- // The permanent notice in the footer. |
- browsing_data::ShouldShowNoticeAboutOtherFormsOfBrowsingHistory( |
- ProfileSyncServiceFactory::GetForProfile(GetOriginalProfile()), |
- WebHistoryServiceFactory::GetForProfile(GetOriginalProfile()), |
- base::Bind(&ShowNoticeAboutOtherFormsOfBrowsingHistory, |
- ScopedJavaGlobalRef<jobject>(env, listener))); |
- |
- // The one-time notice in the dialog. |
- browsing_data::ShouldPopupDialogAboutOtherFormsOfBrowsingHistory( |
- ProfileSyncServiceFactory::GetForProfile(GetOriginalProfile()), |
- WebHistoryServiceFactory::GetForProfile(GetOriginalProfile()), |
- chrome::GetChannel(), |
- base::Bind(&EnableDialogAboutOtherFormsOfBrowsingHistory, |
- ScopedJavaGlobalRef<jobject>(env, listener))); |
-} |
- |
static void SetAutoplayEnabled(JNIEnv* env, |
const JavaParamRef<jobject>& obj, |
jboolean allow) { |