| Index: chrome/browser/android/signin/signin_manager_android.cc
|
| diff --git a/chrome/browser/android/signin/signin_manager_android.cc b/chrome/browser/android/signin/signin_manager_android.cc
|
| index 5fd3e001cc51c289baf8c77a7497469d1bb1f1e7..8aeed73009b17985bb2c755435108620d274f9a5 100644
|
| --- a/chrome/browser/android/signin/signin_manager_android.cc
|
| +++ b/chrome/browser/android/signin/signin_manager_android.cc
|
| @@ -19,7 +19,6 @@
|
| #include "chrome/browser/bookmarks/bookmark_model_factory.h"
|
| #include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/browsing_data/browsing_data_helper.h"
|
| -
|
| #include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h"
|
| #include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h"
|
| #include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h"
|
| @@ -31,6 +30,7 @@
|
| #include "chrome/browser/signin/signin_manager_factory.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "components/bookmarks/browser/bookmark_model.h"
|
| +#include "components/google/core/browser/google_util.h"
|
| #include "components/policy/core/browser/browser_policy_connector.h"
|
| #include "components/policy/core/common/cloud/cloud_policy_core.h"
|
| #include "components/policy/core/common/cloud/cloud_policy_store.h"
|
| @@ -42,6 +42,7 @@
|
| #include "components/signin/core/browser/signin_metrics.h"
|
| #include "components/signin/core/common/profile_management_switches.h"
|
| #include "components/signin/core/common/signin_pref_names.h"
|
| +#include "content/public/browser/browsing_data_filter_builder.h"
|
| #include "content/public/browser/browsing_data_remover.h"
|
| #include "google_apis/gaia/gaia_auth_util.h"
|
| #include "google_apis/gaia/gaia_constants.h"
|
| @@ -53,19 +54,43 @@ using bookmarks::BookmarkModel;
|
|
|
| namespace {
|
|
|
| -// A BrowsingDataRemover::Observer that clears all Profile data and then
|
| -// invokes a callback and deletes itself.
|
| +// A BrowsingDataRemover::Observer that clears Profile data and then invokes
|
| +// a callback and deletes itself. It can be configured to delete all data
|
| +// (for enterprise users) or only Google's service workers (for all users).
|
| class ProfileDataRemover : public content::BrowsingDataRemover::Observer {
|
| public:
|
| - ProfileDataRemover(Profile* profile, const base::Closure& callback)
|
| + ProfileDataRemover(Profile* profile,
|
| + bool all_data,
|
| + const base::Closure& callback)
|
| : callback_(callback),
|
| origin_runner_(base::ThreadTaskRunnerHandle::Get()),
|
| remover_(content::BrowserContext::GetBrowsingDataRemover(profile)) {
|
| remover_->AddObserver(this);
|
| - remover_->RemoveAndReply(
|
| - base::Time(), base::Time::Max(),
|
| - ChromeBrowsingDataRemoverDelegate::ALL_DATA_TYPES,
|
| - ChromeBrowsingDataRemoverDelegate::ALL_ORIGIN_TYPES, this);
|
| +
|
| + if (all_data) {
|
| + remover_->RemoveAndReply(
|
| + base::Time(), base::Time::Max(),
|
| + ChromeBrowsingDataRemoverDelegate::ALL_DATA_TYPES,
|
| + ChromeBrowsingDataRemoverDelegate::ALL_ORIGIN_TYPES, this);
|
| + } else {
|
| + std::unique_ptr<content::BrowsingDataFilterBuilder> google_tld_filter =
|
| + content::BrowsingDataFilterBuilder::Create(
|
| + content::BrowsingDataFilterBuilder::WHITELIST);
|
| +
|
| + // TODO(msramek): BrowsingDataFilterBuilder was not designed for
|
| + // large filters. Optimize it.
|
| + for (const std::string& domain :
|
| + google_util::GetGoogleRegisterableDomains()) {
|
| + google_tld_filter->AddRegisterableDomain(domain);
|
| + }
|
| +
|
| + remover_->RemoveWithFilterAndReply(
|
| + base::Time(), base::Time::Max(),
|
| + content::BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS |
|
| + content::BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE,
|
| + ChromeBrowsingDataRemoverDelegate::ALL_ORIGIN_TYPES,
|
| + std::move(google_tld_filter), this);
|
| + }
|
| }
|
|
|
| ~ProfileDataRemover() override {}
|
| @@ -199,10 +224,21 @@ void SigninManagerAndroid::WipeProfileData(
|
| base::android::ScopedJavaGlobalRef<jobject> java_callback;
|
| java_callback.Reset(env, callback);
|
|
|
| - // The ProfileDataRemover deletes itself once done.
|
| - new ProfileDataRemover(
|
| - profile_, base::Bind(&SigninManagerAndroid::OnBrowsingDataRemoverDone,
|
| - weak_factory_.GetWeakPtr(), java_callback));
|
| + WipeData(profile_, true /* all data */,
|
| + base::Bind(&SigninManagerAndroid::OnBrowsingDataRemoverDone,
|
| + weak_factory_.GetWeakPtr(), java_callback));
|
| +}
|
| +
|
| +void SigninManagerAndroid::WipeGoogleServiceWorkers(
|
| + JNIEnv* env,
|
| + const JavaParamRef<jobject>& obj,
|
| + const JavaParamRef<jobject>& callback) {
|
| + base::android::ScopedJavaGlobalRef<jobject> java_callback;
|
| + java_callback.Reset(env, callback);
|
| +
|
| + WipeData(profile_, false /* only service workers */,
|
| + base::Bind(&SigninManagerAndroid::OnBrowsingDataRemoverDone,
|
| + weak_factory_.GetWeakPtr(), java_callback));
|
| }
|
|
|
| void SigninManagerAndroid::OnPolicyRegisterDone(
|
| @@ -315,6 +351,14 @@ void SigninManagerAndroid::OnSigninAllowedPrefChanged() {
|
| SigninManagerFactory::GetForProfile(profile_)->IsSigninAllowed());
|
| }
|
|
|
| +// static
|
| +void SigninManagerAndroid::WipeData(Profile* profile,
|
| + bool all_data,
|
| + const base::Closure& callback) {
|
| + // The ProfileDataRemover deletes itself once done.
|
| + new ProfileDataRemover(profile, all_data, callback);
|
| +}
|
| +
|
| static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
|
| SigninManagerAndroid* signin_manager_android =
|
| new SigninManagerAndroid(env, obj);
|
|
|