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

Side by Side Diff: chrome/browser/android/preferences/website_preference_bridge.cc

Issue 863503002: Delete cookies for site when deleting locally stored data. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync'ed Created 5 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/preferences/website_preference_bridge.h" 5 #include "chrome/browser/android/preferences/website_preference_bridge.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h" 8 #include "base/android/jni_string.h"
9 #include "base/android/scoped_java_ref.h" 9 #include "base/android/scoped_java_ref.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "base/files/file_path.h" 12 #include "base/files/file_path.h"
13 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/browser_process.h"
14 #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" 14 #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h"
15 #include "chrome/browser/browsing_data/cookies_tree_model.h"
16 #include "chrome/browser/browsing_data/local_data_container.h"
15 #include "chrome/browser/content_settings/cookie_settings.h" 17 #include "chrome/browser/content_settings/cookie_settings.h"
16 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/profiles/profile_manager.h" 19 #include "chrome/browser/profiles/profile_manager.h"
18 #include "components/content_settings/core/browser/host_content_settings_map.h" 20 #include "components/content_settings/core/browser/host_content_settings_map.h"
19 #include "content/public/browser/browser_thread.h" 21 #include "content/public/browser/browser_thread.h"
20 #include "content/public/browser/storage_partition.h" 22 #include "content/public/browser/storage_partition.h"
21 #include "jni/WebsitePreferenceBridge_jni.h" 23 #include "jni/WebsitePreferenceBridge_jni.h"
22 #include "storage/browser/quota/quota_client.h" 24 #include "storage/browser/quota/quota_client.h"
23 #include "storage/browser/quota/quota_manager.h" 25 #include "storage/browser/quota/quota_manager.h"
24 26
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 if (value == -1) { 280 if (value == -1) {
279 GetCookieSettings()->ResetCookieSetting(primary_pattern, secondary_pattern); 281 GetCookieSettings()->ResetCookieSetting(primary_pattern, secondary_pattern);
280 } else { 282 } else {
281 GetCookieSettings()->SetCookieSetting(primary_pattern, secondary_pattern, 283 GetCookieSettings()->SetCookieSetting(primary_pattern, secondary_pattern,
282 value ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK); 284 value ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK);
283 } 285 }
284 } 286 }
285 287
286 namespace { 288 namespace {
287 289
290 class SiteDataDeleteHelper :
291 public base::RefCountedThreadSafe<SiteDataDeleteHelper>,
292 public CookiesTreeModel::Observer {
293 public:
294 SiteDataDeleteHelper(Profile* profile, const GURL& domain)
295 : profile_(profile), domain_(domain), ending_batch_processing_(false) {
296 }
297
298 void Run() {
299 AddRef(); // Balanced in TreeModelEndBatch.
300
301 content::StoragePartition* storage_partition =
302 content::BrowserContext::GetDefaultStoragePartition(profile_);
303 content::IndexedDBContext* indexed_db_context =
304 storage_partition->GetIndexedDBContext();
305 content::ServiceWorkerContext* service_worker_context =
306 storage_partition->GetServiceWorkerContext();
307 storage::FileSystemContext* file_system_context =
308 storage_partition->GetFileSystemContext();
309 LocalDataContainer* container = new LocalDataContainer(
310 new BrowsingDataCookieHelper(profile_->GetRequestContext()),
311 new BrowsingDataDatabaseHelper(profile_),
312 new BrowsingDataLocalStorageHelper(profile_),
313 NULL,
314 new BrowsingDataAppCacheHelper(profile_),
315 new BrowsingDataIndexedDBHelper(indexed_db_context),
316 BrowsingDataFileSystemHelper::Create(file_system_context),
317 BrowsingDataQuotaHelper::Create(profile_),
318 BrowsingDataChannelIDHelper::Create(profile_->GetRequestContext()),
319 new BrowsingDataServiceWorkerHelper(service_worker_context),
320 NULL);
321
322 cookies_tree_model_.reset(new CookiesTreeModel(
323 container, profile_->GetExtensionSpecialStoragePolicy(), false));
324 cookies_tree_model_->AddCookiesTreeObserver(this);
325 }
326
327 // TreeModelObserver:
328 void TreeNodesAdded(ui::TreeModel* model,
329 ui::TreeModelNode* parent,
330 int start,
331 int count) override {}
332 void TreeNodesRemoved(ui::TreeModel* model,
333 ui::TreeModelNode* parent,
334 int start,
335 int count) override {}
336
337 // CookiesTreeModel::Observer:
338 void TreeNodeChanged(ui::TreeModel* model, ui::TreeModelNode* node) override {
339 }
340
341 void TreeModelBeginBatch(CookiesTreeModel* model) override {
342 DCHECK(!ending_batch_processing_); // Extra batch-start sent.
343 }
344
345 void TreeModelEndBatch(CookiesTreeModel* model) override {
346 DCHECK(!ending_batch_processing_); // Already in end-stage.
347 ending_batch_processing_ = true;
348
349 RecursivelyFindSiteAndDelete(cookies_tree_model_->GetRoot());
350
351 // This will result in this class getting deleted.
352 Release();
353 }
354
355 void RecursivelyFindSiteAndDelete(CookieTreeNode* node) {
356 CookieTreeNode::DetailedInfo info = node->GetDetailedInfo();
357 for (int i = node->child_count(); i > 0; --i)
358 RecursivelyFindSiteAndDelete(node->GetChild(i - 1));
359
360 if (info.node_type == CookieTreeNode::DetailedInfo::TYPE_COOKIE &&
361 info.cookie &&
362 domain_.DomainIs(info.cookie->Domain().c_str()))
363 cookies_tree_model_->DeleteCookieNode(node);
364 }
365
366 private:
367 friend class base::RefCountedThreadSafe<SiteDataDeleteHelper>;
368
369 virtual ~SiteDataDeleteHelper() {}
370
371 Profile* profile_;
372
373 // The domain we want to delete data for.
374 GURL domain_;
375
376 // Keeps track of when we're ready to close batch processing.
377 bool ending_batch_processing_;
378
379 scoped_ptr<CookiesTreeModel> cookies_tree_model_;
380
381 DISALLOW_COPY_AND_ASSIGN(SiteDataDeleteHelper);
382 };
383
288 class StorageInfoFetcher : 384 class StorageInfoFetcher :
289 public base::RefCountedThreadSafe<StorageInfoFetcher> { 385 public base::RefCountedThreadSafe<StorageInfoFetcher> {
290 public: 386 public:
291 StorageInfoFetcher(storage::QuotaManager* quota_manager, 387 StorageInfoFetcher(storage::QuotaManager* quota_manager,
292 const JavaRef<jobject>& java_callback) 388 const JavaRef<jobject>& java_callback)
293 : env_(base::android::AttachCurrentThread()), 389 : env_(base::android::AttachCurrentThread()),
294 quota_manager_(quota_manager), 390 quota_manager_(quota_manager),
295 java_callback_(java_callback) { 391 java_callback_(java_callback) {
296 } 392 }
297 393
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 std::string host = ConvertJavaStringToUTF8(env, jhost); 589 std::string host = ConvertJavaStringToUTF8(env, jhost);
494 scoped_refptr<StorageDataDeleter> storage_data_deleter(new StorageDataDeleter( 590 scoped_refptr<StorageDataDeleter> storage_data_deleter(new StorageDataDeleter(
495 content::BrowserContext::GetDefaultStoragePartition( 591 content::BrowserContext::GetDefaultStoragePartition(
496 profile)->GetQuotaManager(), 592 profile)->GetQuotaManager(),
497 host, 593 host,
498 static_cast<storage::StorageType>(type), 594 static_cast<storage::StorageType>(type),
499 ScopedJavaLocalRef<jobject>(env, java_callback))); 595 ScopedJavaLocalRef<jobject>(env, java_callback)));
500 storage_data_deleter->Run(); 596 storage_data_deleter->Run();
501 } 597 }
502 598
599 static void ClearCookieData(JNIEnv* env, jclass clazz, jstring jorigin) {
600 Profile* profile = ProfileManager::GetActiveUserProfile();
601 GURL url(ConvertJavaStringToUTF8(env, jorigin));
602 scoped_refptr<SiteDataDeleteHelper> site_data_deleter(
603 new SiteDataDeleteHelper(profile, url));
604 site_data_deleter->Run();
605 }
606
503 // Register native methods 607 // Register native methods
504 bool RegisterWebsitePreferenceBridge(JNIEnv* env) { 608 bool RegisterWebsitePreferenceBridge(JNIEnv* env) {
505 return RegisterNativesImpl(env); 609 return RegisterNativesImpl(env);
506 } 610 }
OLDNEW
« no previous file with comments | « chrome/android/java/strings/android_chrome_strings.grd ('k') | chrome/browser/browsing_data/cookies_tree_model.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698