Chromium Code Reviews| 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 e2947588881cf3f3d0c37de53272d1649c4a8cf7..905664dde7fba9dc00a2c0f1431f0548356abd98 100644 |
| --- a/chrome/browser/android/preferences/pref_service_bridge.cc |
| +++ b/chrome/browser/android/preferences/pref_service_bridge.cc |
| @@ -10,6 +10,7 @@ |
| #include "base/android/build_info.h" |
| #include "base/android/jni_android.h" |
| +#include "base/android/jni_array.h" |
| #include "base/android/jni_string.h" |
| #include "base/android/jni_weak_ref.h" |
| #include "base/files/file_path.h" |
| @@ -20,6 +21,7 @@ |
| #include "base/strings/string_util.h" |
| #include "base/values.h" |
| #include "chrome/browser/browser_process.h" |
| +#include "chrome/browser/browsing_data/browsing_data_counter_utils.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" |
| @@ -500,32 +502,79 @@ class ClearBrowsingDataObserver : public BrowsingDataRemover::Observer { |
| } // namespace |
| +static jboolean GetBrowsingDataDeletionPreference( |
| + JNIEnv* env, |
| + const JavaParamRef<jobject>& obj, |
| + jint data_type) { |
| + DCHECK_GE(data_type, 0); |
| + DCHECK_LT(data_type, BrowsingDataType::NUM_TYPES); |
| + |
| + // If there is no corresponding preference for this |data_type|, pretend |
| + // that it's set to false. |
| + // TODO(msramek): Consider defining native-side preferences for all Java UI |
| + // data types for consistency. |
| + std::string pref; |
| + if (!GetDeletionPreferenceFromDataType( |
|
msramek
2016/01/14 15:45:43
Oops! This should be negated. Fortunately caught w
|
| + static_cast<BrowsingDataType>(data_type), &pref)) { |
| + return false; |
| + } |
| + |
| + return GetOriginalProfile()->GetPrefs()->GetBoolean(pref); |
| +} |
| + |
| +static void SetBrowsingDataDeletionPreference( |
| + JNIEnv* env, |
| + const JavaParamRef<jobject>& obj, |
| + jint data_type, |
| + jboolean value) { |
| + DCHECK_GE(data_type, 0); |
| + DCHECK_LT(data_type, BrowsingDataType::NUM_TYPES); |
| + |
| + std::string pref; |
| + if (!GetDeletionPreferenceFromDataType( |
| + static_cast<BrowsingDataType>(data_type), &pref)) { |
| + return; |
| + } |
| + |
| + GetOriginalProfile()->GetPrefs()->SetBoolean(pref, value); |
| +} |
| + |
| static void ClearBrowsingData(JNIEnv* env, |
| const JavaParamRef<jobject>& obj, |
| - jboolean history, |
| - jboolean cache, |
| - jboolean cookies_and_site_data, |
| - jboolean passwords, |
| - jboolean form_data) { |
| + const JavaParamRef<jintArray>& data_types) { |
| BrowsingDataRemover* browsing_data_remover = |
| BrowsingDataRemoverFactory::GetForBrowserContext(GetOriginalProfile()); |
| - // ClearBrowsingDataObserver removes itself when |browsing_data_remover| is |
| + // ClearBrowsingDataObserver deletes itself when |browsing_data_remover| is |
| // done. |
| new ClearBrowsingDataObserver(env, obj, browsing_data_remover); |
| + std::vector<int> data_types_vector; |
| + base::android::JavaIntArrayToIntVector(env, data_types, &data_types_vector); |
| + |
| int remove_mask = 0; |
| - if (history) |
| - remove_mask |= BrowsingDataRemover::REMOVE_HISTORY; |
| - if (cache) |
| - remove_mask |= BrowsingDataRemover::REMOVE_CACHE; |
| - if (cookies_and_site_data) { |
| - remove_mask |= BrowsingDataRemover::REMOVE_COOKIES; |
| - remove_mask |= BrowsingDataRemover::REMOVE_SITE_DATA; |
| + for (const int data_type : data_types_vector) { |
| + switch (static_cast<BrowsingDataType>(data_type)) { |
| + case HISTORY: |
| + remove_mask |= BrowsingDataRemover::REMOVE_HISTORY; |
| + break; |
| + case CACHE: |
| + remove_mask |= BrowsingDataRemover::REMOVE_CACHE; |
| + break; |
| + case COOKIES: |
| + remove_mask |= BrowsingDataRemover::REMOVE_COOKIES; |
| + remove_mask |= BrowsingDataRemover::REMOVE_SITE_DATA; |
| + break; |
| + case PASSWORDS: |
| + remove_mask |= BrowsingDataRemover::REMOVE_PASSWORDS; |
| + break; |
| + case FORM_DATA: |
| + remove_mask |= BrowsingDataRemover::REMOVE_FORM_DATA; |
| + break; |
| + default: |
| + NOTREACHED(); |
| + } |
| } |
| - if (passwords) |
| - remove_mask |= BrowsingDataRemover::REMOVE_PASSWORDS; |
| - if (form_data) |
| - remove_mask |= BrowsingDataRemover::REMOVE_FORM_DATA; |
| + |
| browsing_data_remover->Remove(BrowsingDataRemover::Unbounded(), remove_mask, |
| BrowsingDataHelper::UNPROTECTED_WEB); |
| } |