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 6675341cd65bf26a19c256161904bce2b5f6cbed..7eba312fe35a38d93c899c818c6b791ccc15d8ae 100644 |
| --- a/chrome/browser/android/preferences/pref_service_bridge.cc |
| +++ b/chrome/browser/android/preferences/pref_service_bridge.cc |
| @@ -24,6 +24,7 @@ |
| #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/origin_filter_builder.h" |
| #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
| #include "chrome/browser/net/prediction_options.h" |
| #include "chrome/browser/prefs/incognito_mode_prefs.h" |
| @@ -49,6 +50,7 @@ |
| #include "content/public/browser/user_metrics.h" |
| #include "jni/PrefServiceBridge_jni.h" |
| #include "ui/base/l10n/l10n_util.h" |
| +#include "url/origin.h" |
| using base::android::AttachCurrentThread; |
| using base::android::CheckException; |
| @@ -496,6 +498,36 @@ class ClearBrowsingDataObserver : public BrowsingDataRemover::Observer { |
| ScopedObserver<BrowsingDataRemover, BrowsingDataRemover::Observer> observer_; |
| }; |
| +// Redirects a BrowsingDataRemover completion callback back into the java |
| +// callback. |
| +class ClearBrowsingDataObserverWithCallback |
|
newt (away)
2016/03/09 05:40:02
There's no reason to add this new class; just modi
|
| + : public BrowsingDataRemover::Observer { |
| + public: |
| + ClearBrowsingDataObserverWithCallback( |
| + JNIEnv* env, |
| + jobject java_callback, |
| + BrowsingDataRemover* browsing_data_remover) |
| + : weak_java_callback_(env, java_callback), observer_(this) { |
| + observer_.Add(browsing_data_remover); |
| + } |
| + |
| + void OnBrowsingDataRemoverDone() override { |
| + // We delete ourselves when done. |
| + scoped_ptr<ClearBrowsingDataObserverWithCallback> auto_delete(this); |
| + |
| + JNIEnv* env = AttachCurrentThread(); |
| + if (weak_java_callback_.get(env).is_null()) |
|
newt (away)
2016/03/09 05:40:02
Incidentally, this use of the weak pointer is brok
|
| + return; |
| + |
| + Java_OnClearBrowsingDataListener_onBrowsingDataCleared( |
| + env, weak_java_callback_.get(env).obj()); |
| + } |
| + |
| + private: |
| + JavaObjectWeakGlobalRef weak_java_callback_; |
|
newt (away)
2016/03/09 05:40:02
This shouldn't be weak; it should just be a regula
|
| + ScopedObserver<BrowsingDataRemover, BrowsingDataRemover::Observer> observer_; |
| +}; |
| + |
| } // namespace |
| static jboolean GetBrowsingDataDeletionPreference( |
| @@ -557,7 +589,7 @@ static void ClearBrowsingData(JNIEnv* env, |
| BrowsingDataRemoverFactory::GetForBrowserContext(GetOriginalProfile()); |
| // ClearBrowsingDataObserver deletes itself when |browsing_data_remover| is |
| // done. |
| - new ClearBrowsingDataObserver(env, obj, browsing_data_remover); |
| + new ClearBrowsingDataObserverWithCallback(env, obj, browsing_data_remover); |
| std::vector<int> data_types_vector; |
| base::android::JavaIntArrayToIntVector(env, data_types, &data_types_vector); |
| @@ -597,6 +629,68 @@ static void ClearBrowsingData(JNIEnv* env, |
| remove_mask, BrowsingDataHelper::UNPROTECTED_WEB); |
| } |
| +static void ClearBrowsingDataExcludingOrigins( |
|
newt (away)
2016/03/09 05:40:02
As Martin mentioned, please combine this method wi
|
| + JNIEnv* env, |
| + const JavaParamRef<jclass>& clazz, |
| + const JavaParamRef<jobject>& java_callback, |
| + const JavaParamRef<jintArray>& data_types, |
| + const JavaParamRef<jobjectArray>& excluding_origins) { |
|
newt (away)
2016/03/09 05:40:02
call this "excluded_origins" or just "origins"
|
| + BrowsingDataRemover* browsing_data_remover = |
| + BrowsingDataRemoverFactory::GetForBrowserContext(GetOriginalProfile()); |
| + // ClearBrowsingDataObserver deletes itself when |browsing_data_remover| is |
| + // done. |
| + new ClearBrowsingDataObserver(env, java_callback.obj(), |
| + browsing_data_remover); |
| + |
| + 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<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; |
| + case BOOKMARKS: |
| + // Bookmarks are deleted separately on the Java side. |
| + NOTREACHED(); |
| + break; |
| + case NUM_TYPES: |
| + NOTREACHED(); |
| + } |
| + } |
| + |
| + OriginFilterBuilder filter_builder(OriginFilterBuilder::BLACKLIST); |
| + jsize origin_count = env->GetArrayLength(excluding_origins.obj()); |
| + for (jsize i = 0; i < origin_count; ++i) { |
| + jstring url = |
| + (jstring)env->GetObjectArrayElement(excluding_origins.obj(), i); |
| + filter_builder.AddOrigin(url::Origin(ConvertJavaStringToUTF8(env, url))) |
| + } |
| + |
| + /* Commented out, as we don't have the filterbuilder hookup yet. |
| + int period_selected = |
| + GetPrefService()->GetInteger(prefs::kDeleteTimePeriod); |
| + browsing_data_remover->Remove( |
| + BrowsingDataRemover::Period( |
| + static_cast<BrowsingDataRemover::TimePeriod>(period_selected)), |
| + remove_mask, filter_builder, BrowsingDataHelper::UNPROTECTED_WEB); |
| + */ |
| +} |
| + |
| static jboolean CanDeleteBrowsingHistory(JNIEnv* env, |
| const JavaParamRef<jobject>& obj) { |
| return GetPrefService()->GetBoolean(prefs::kAllowDeletingBrowserHistory); |