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

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

Issue 2221143003: Formalize the restrictions of BrowsingDataRemover::RemoveWithFilter() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Explicit task count. Created 4 years, 4 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
« no previous file with comments | « no previous file | chrome/browser/browsing_data/browsing_data_remover.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/pref_service_bridge.h" 5 #include "chrome/browser/android/preferences/pref_service_bridge.h"
6 6
7 #include <jni.h> 7 #include <jni.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 static ScopedJavaLocalRef<jstring> GetLatestVersionWhenClickedUpdateMenuItem( 506 static ScopedJavaLocalRef<jstring> GetLatestVersionWhenClickedUpdateMenuItem(
507 JNIEnv* env, 507 JNIEnv* env,
508 const JavaParamRef<jobject>& obj) { 508 const JavaParamRef<jobject>& obj) {
509 return ConvertUTF8ToJavaString( 509 return ConvertUTF8ToJavaString(
510 env, GetPrefService()->GetString( 510 env, GetPrefService()->GetString(
511 prefs::kLatestVersionWhenClickedUpdateMenuItem)); 511 prefs::kLatestVersionWhenClickedUpdateMenuItem));
512 } 512 }
513 513
514 namespace { 514 namespace {
515 515
516 // Redirects a BrowsingDataRemover completion callback back into Java. 516 // Merges |task_count| BrowsingDataRemover completion callbacks and redirects
517 // them back into Java.
517 class ClearBrowsingDataObserver : public BrowsingDataRemover::Observer { 518 class ClearBrowsingDataObserver : public BrowsingDataRemover::Observer {
518 public: 519 public:
519 // |obj| is expected to be the object passed into ClearBrowsingData(); e.g. a 520 // |obj| is expected to be the object passed into ClearBrowsingData(); e.g. a
520 // ChromePreference. 521 // ChromePreference.
521 ClearBrowsingDataObserver(JNIEnv* env, 522 ClearBrowsingDataObserver(JNIEnv* env,
522 jobject obj, 523 jobject obj,
523 BrowsingDataRemover* browsing_data_remover) 524 BrowsingDataRemover* browsing_data_remover,
524 : weak_chrome_native_preferences_(env, obj), observer_(this) { 525 int task_count)
526 : task_count_(task_count),
527 weak_chrome_native_preferences_(env, obj),
528 observer_(this) {
529 DCHECK_GT(task_count, 0);
525 observer_.Add(browsing_data_remover); 530 observer_.Add(browsing_data_remover);
526 } 531 }
527 532
528 void OnBrowsingDataRemoverDone() override { 533 void OnBrowsingDataRemoverDone() override {
534 DCHECK(task_count_);
535 if (--task_count_)
536 return;
537
529 // We delete ourselves when done. 538 // We delete ourselves when done.
530 std::unique_ptr<ClearBrowsingDataObserver> auto_delete(this); 539 std::unique_ptr<ClearBrowsingDataObserver> auto_delete(this);
531 540
532 JNIEnv* env = AttachCurrentThread(); 541 JNIEnv* env = AttachCurrentThread();
533 if (weak_chrome_native_preferences_.get(env).is_null()) 542 if (weak_chrome_native_preferences_.get(env).is_null())
534 return; 543 return;
535 544
536 Java_PrefServiceBridge_browsingDataCleared( 545 Java_PrefServiceBridge_browsingDataCleared(
537 env, weak_chrome_native_preferences_.get(env).obj()); 546 env, weak_chrome_native_preferences_.get(env).obj());
538 } 547 }
539 548
540 private: 549 private:
550 int task_count_;
541 JavaObjectWeakGlobalRef weak_chrome_native_preferences_; 551 JavaObjectWeakGlobalRef weak_chrome_native_preferences_;
542 ScopedObserver<BrowsingDataRemover, BrowsingDataRemover::Observer> observer_; 552 ScopedObserver<BrowsingDataRemover, BrowsingDataRemover::Observer> observer_;
543 }; 553 };
544 554
545 } // namespace 555 } // namespace
546 556
547 static jboolean GetBrowsingDataDeletionPreference( 557 static jboolean GetBrowsingDataDeletionPreference(
548 JNIEnv* env, 558 JNIEnv* env,
549 const JavaParamRef<jobject>& obj, 559 const JavaParamRef<jobject>& obj,
550 jint data_type) { 560 jint data_type) {
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 new RegistrableDomainFilterBuilder(BrowsingDataFilterBuilder::BLACKLIST)); 653 new RegistrableDomainFilterBuilder(BrowsingDataFilterBuilder::BLACKLIST));
644 for (const std::string& domain : excluding_domains) { 654 for (const std::string& domain : excluding_domains) {
645 filter_builder->AddRegisterableDomain(domain); 655 filter_builder->AddRegisterableDomain(domain);
646 } 656 }
647 657
648 if (!excluding_domains.empty()) { 658 if (!excluding_domains.empty()) {
649 ImportantSitesUtil::RecordMetricsForBlacklistedSites(GetOriginalProfile(), 659 ImportantSitesUtil::RecordMetricsForBlacklistedSites(GetOriginalProfile(),
650 excluding_domains); 660 excluding_domains);
651 } 661 }
652 662
663 // Delete the filterable types with a filter, and the rest completely.
664 // TODO(msramek): This is only necessary until the filter is implemented in
665 // all data storage backends.
666 int filterable_mask = remove_mask & BrowsingDataRemover::FILTERABLE_DATATYPES;
667 int nonfilterable_mask =
668 remove_mask & ~BrowsingDataRemover::FILTERABLE_DATATYPES;
669
653 // ClearBrowsingDataObserver deletes itself when |browsing_data_remover| is 670 // ClearBrowsingDataObserver deletes itself when |browsing_data_remover| is
654 // done. 671 // done with both removal tasks.
655 ClearBrowsingDataObserver* observer = 672 ClearBrowsingDataObserver* observer = new ClearBrowsingDataObserver(
656 new ClearBrowsingDataObserver(env, obj, browsing_data_remover); 673 env, obj, browsing_data_remover, 2 /* tasks_count */);
Bernhard Bauer 2016/08/11 15:16:16 I was actually thinking to increase the count for
msramek 2016/08/11 15:36:31 I see. Yes, I was exactly trying to avoid that edg
657 674
658 browsing_data_remover->RemoveWithFilterAndReply( 675 if (filterable_mask) {
659 BrowsingDataRemover::Period( 676 browsing_data_remover->RemoveWithFilterAndReply(
660 static_cast<browsing_data::TimePeriod>(time_period)), 677 BrowsingDataRemover::Period(
661 remove_mask, BrowsingDataHelper::UNPROTECTED_WEB, 678 static_cast<browsing_data::TimePeriod>(time_period)),
662 std::move(filter_builder), observer); 679 filterable_mask, BrowsingDataHelper::UNPROTECTED_WEB,
680 std::move(filter_builder), observer);
681 } else {
682 // Make sure |observer| doesn't wait for the filtered task.
683 observer->OnBrowsingDataRemoverDone();
684 }
685
686 if (nonfilterable_mask) {
687 browsing_data_remover->RemoveAndReply(
688 BrowsingDataRemover::Period(
689 static_cast<browsing_data::TimePeriod>(time_period)),
690 nonfilterable_mask, BrowsingDataHelper::UNPROTECTED_WEB, observer);
691 } else {
692 // Make sure |observer| doesn't wait for the non-filtered task.
693 observer->OnBrowsingDataRemoverDone();
694 }
663 } 695 }
664 696
665 static jboolean CanDeleteBrowsingHistory(JNIEnv* env, 697 static jboolean CanDeleteBrowsingHistory(JNIEnv* env,
666 const JavaParamRef<jobject>& obj) { 698 const JavaParamRef<jobject>& obj) {
667 return GetPrefService()->GetBoolean(prefs::kAllowDeletingBrowserHistory); 699 return GetPrefService()->GetBoolean(prefs::kAllowDeletingBrowserHistory);
668 } 700 }
669 701
670 static void FetchImportantSites(JNIEnv* env, 702 static void FetchImportantSites(JNIEnv* env,
671 const JavaParamRef<jclass>& clazz, 703 const JavaParamRef<jclass>& clazz,
672 const JavaParamRef<jobject>& java_callback) { 704 const JavaParamRef<jobject>& java_callback) {
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
1167 1199
1168 return ConvertJavaStringToUTF8(android_permission); 1200 return ConvertJavaStringToUTF8(android_permission);
1169 } 1201 }
1170 1202
1171 static void SetSupervisedUserId(JNIEnv* env, 1203 static void SetSupervisedUserId(JNIEnv* env,
1172 const JavaParamRef<jobject>& obj, 1204 const JavaParamRef<jobject>& obj,
1173 const JavaParamRef<jstring>& pref) { 1205 const JavaParamRef<jstring>& pref) {
1174 GetPrefService()->SetString(prefs::kSupervisedUserId, 1206 GetPrefService()->SetString(prefs::kSupervisedUserId,
1175 ConvertJavaStringToUTF8(env, pref)); 1207 ConvertJavaStringToUTF8(env, pref));
1176 } 1208 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/browsing_data/browsing_data_remover.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698