| 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) {
 | 
| 
 |