Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4103)

Unified Diff: chrome/browser/android/signin/signin_manager_android.cc

Issue 2966763003: [Prototype] Delete Google service worker caches on Android signout (Closed)
Patch Set: Addressed nits. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..29e9ad8b0b68fbb93db5e06d721ee2bc496fb234 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,42 @@ 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::GetGoogleRegistrableDomains()) {
+ google_tld_filter->AddRegisterableDomain(domain);
+ }
+
+ remover_->RemoveWithFilterAndReply(
+ base::Time(), base::Time::Max(),
+ content::BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE,
+ ChromeBrowsingDataRemoverDelegate::ALL_ORIGIN_TYPES,
+ std::move(google_tld_filter), this);
+ }
}
~ProfileDataRemover() override {}
@@ -199,10 +223,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::WipeGoogleServiceWorkerCaches(
+ 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 Google service worker caches */,
+ base::Bind(&SigninManagerAndroid::OnBrowsingDataRemoverDone,
+ weak_factory_.GetWeakPtr(), java_callback));
}
void SigninManagerAndroid::OnPolicyRegisterDone(
@@ -315,6 +350,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);

Powered by Google App Engine
This is Rietveld 408576698