OLD | NEW |
---|---|
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 Loading... | |
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 two BrowsingDataRemover completion callbacks and redirects them back |
517 // 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 : task_count_(2), |
Bernhard Bauer
2016/08/11 13:25:43
I think I would slightly prefer passing the initia
msramek
2016/08/11 14:17:14
Done.
| |
526 weak_chrome_native_preferences_(env, obj), | |
527 observer_(this) { | |
525 observer_.Add(browsing_data_remover); | 528 observer_.Add(browsing_data_remover); |
526 } | 529 } |
527 | 530 |
528 void OnBrowsingDataRemoverDone() override { | 531 void OnBrowsingDataRemoverDone() override { |
532 DCHECK(task_count_); | |
533 if (--task_count_) | |
534 return; | |
535 | |
529 // We delete ourselves when done. | 536 // We delete ourselves when done. |
530 std::unique_ptr<ClearBrowsingDataObserver> auto_delete(this); | 537 std::unique_ptr<ClearBrowsingDataObserver> auto_delete(this); |
531 | 538 |
532 JNIEnv* env = AttachCurrentThread(); | 539 JNIEnv* env = AttachCurrentThread(); |
533 if (weak_chrome_native_preferences_.get(env).is_null()) | 540 if (weak_chrome_native_preferences_.get(env).is_null()) |
534 return; | 541 return; |
535 | 542 |
536 Java_PrefServiceBridge_browsingDataCleared( | 543 Java_PrefServiceBridge_browsingDataCleared( |
537 env, weak_chrome_native_preferences_.get(env).obj()); | 544 env, weak_chrome_native_preferences_.get(env).obj()); |
538 } | 545 } |
539 | 546 |
540 private: | 547 private: |
548 int task_count_; | |
541 JavaObjectWeakGlobalRef weak_chrome_native_preferences_; | 549 JavaObjectWeakGlobalRef weak_chrome_native_preferences_; |
542 ScopedObserver<BrowsingDataRemover, BrowsingDataRemover::Observer> observer_; | 550 ScopedObserver<BrowsingDataRemover, BrowsingDataRemover::Observer> observer_; |
543 }; | 551 }; |
544 | 552 |
545 } // namespace | 553 } // namespace |
546 | 554 |
547 static jboolean GetBrowsingDataDeletionPreference( | 555 static jboolean GetBrowsingDataDeletionPreference( |
548 JNIEnv* env, | 556 JNIEnv* env, |
549 const JavaParamRef<jobject>& obj, | 557 const JavaParamRef<jobject>& obj, |
550 jint data_type) { | 558 jint data_type) { |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
643 new RegistrableDomainFilterBuilder(BrowsingDataFilterBuilder::BLACKLIST)); | 651 new RegistrableDomainFilterBuilder(BrowsingDataFilterBuilder::BLACKLIST)); |
644 for (const std::string& domain : excluding_domains) { | 652 for (const std::string& domain : excluding_domains) { |
645 filter_builder->AddRegisterableDomain(domain); | 653 filter_builder->AddRegisterableDomain(domain); |
646 } | 654 } |
647 | 655 |
648 if (!excluding_domains.empty()) { | 656 if (!excluding_domains.empty()) { |
649 ImportantSitesUtil::RecordMetricsForBlacklistedSites(GetOriginalProfile(), | 657 ImportantSitesUtil::RecordMetricsForBlacklistedSites(GetOriginalProfile(), |
650 excluding_domains); | 658 excluding_domains); |
651 } | 659 } |
652 | 660 |
661 // Delete the filterable types with a filter, and the rest completely. | |
662 // TODO(msramek): This is only necessary until the filter is implemented in | |
663 // all data storage backends. | |
664 int filterable_mask = remove_mask & BrowsingDataRemover::FILTERABLE_DATATYPES; | |
665 int nonfilterable_mask = | |
666 remove_mask & ~BrowsingDataRemover::FILTERABLE_DATATYPES; | |
667 | |
653 // ClearBrowsingDataObserver deletes itself when |browsing_data_remover| is | 668 // ClearBrowsingDataObserver deletes itself when |browsing_data_remover| is |
654 // done. | 669 // done with both removal tasks. |
655 ClearBrowsingDataObserver* observer = | 670 ClearBrowsingDataObserver* observer = |
656 new ClearBrowsingDataObserver(env, obj, browsing_data_remover); | 671 new ClearBrowsingDataObserver(env, obj, browsing_data_remover); |
657 | 672 |
658 browsing_data_remover->RemoveWithFilterAndReply( | 673 if (filterable_mask) { |
659 BrowsingDataRemover::Period( | 674 browsing_data_remover->RemoveWithFilterAndReply( |
660 static_cast<browsing_data::TimePeriod>(time_period)), | 675 BrowsingDataRemover::Period( |
661 remove_mask, BrowsingDataHelper::UNPROTECTED_WEB, | 676 static_cast<browsing_data::TimePeriod>(time_period)), |
662 std::move(filter_builder), observer); | 677 filterable_mask, BrowsingDataHelper::UNPROTECTED_WEB, |
678 std::move(filter_builder), observer); | |
679 } else { | |
680 // Make sure |observer| doesn't wait for the filtered task. | |
681 observer->OnBrowsingDataRemoverDone(); | |
682 } | |
683 | |
684 if (nonfilterable_mask) { | |
685 browsing_data_remover->RemoveAndReply( | |
686 BrowsingDataRemover::Period( | |
687 static_cast<browsing_data::TimePeriod>(time_period)), | |
688 nonfilterable_mask, BrowsingDataHelper::UNPROTECTED_WEB, observer); | |
689 } else { | |
690 // Make sure |observer| doesn't wait for the non-filtered task. | |
691 observer->OnBrowsingDataRemoverDone(); | |
692 } | |
663 } | 693 } |
664 | 694 |
665 static jboolean CanDeleteBrowsingHistory(JNIEnv* env, | 695 static jboolean CanDeleteBrowsingHistory(JNIEnv* env, |
666 const JavaParamRef<jobject>& obj) { | 696 const JavaParamRef<jobject>& obj) { |
667 return GetPrefService()->GetBoolean(prefs::kAllowDeletingBrowserHistory); | 697 return GetPrefService()->GetBoolean(prefs::kAllowDeletingBrowserHistory); |
668 } | 698 } |
669 | 699 |
670 static void FetchImportantSites(JNIEnv* env, | 700 static void FetchImportantSites(JNIEnv* env, |
671 const JavaParamRef<jclass>& clazz, | 701 const JavaParamRef<jclass>& clazz, |
672 const JavaParamRef<jobject>& java_callback) { | 702 const JavaParamRef<jobject>& java_callback) { |
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1167 | 1197 |
1168 return ConvertJavaStringToUTF8(android_permission); | 1198 return ConvertJavaStringToUTF8(android_permission); |
1169 } | 1199 } |
1170 | 1200 |
1171 static void SetSupervisedUserId(JNIEnv* env, | 1201 static void SetSupervisedUserId(JNIEnv* env, |
1172 const JavaParamRef<jobject>& obj, | 1202 const JavaParamRef<jobject>& obj, |
1173 const JavaParamRef<jstring>& pref) { | 1203 const JavaParamRef<jstring>& pref) { |
1174 GetPrefService()->SetString(prefs::kSupervisedUserId, | 1204 GetPrefService()->SetString(prefs::kSupervisedUserId, |
1175 ConvertJavaStringToUTF8(env, pref)); | 1205 ConvertJavaStringToUTF8(env, pref)); |
1176 } | 1206 } |
OLD | NEW |