OLD | NEW |
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 <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/android/callback_android.h" | 11 #include "base/android/callback_android.h" |
12 #include "base/android/jni_android.h" | 12 #include "base/android/jni_android.h" |
13 #include "base/android/jni_string.h" | 13 #include "base/android/jni_string.h" |
14 #include "base/android/scoped_java_ref.h" | 14 #include "base/android/scoped_java_ref.h" |
15 #include "base/bind.h" | 15 #include "base/bind.h" |
16 #include "base/bind_helpers.h" | 16 #include "base/bind_helpers.h" |
| 17 #include "base/json/json_reader.h" |
| 18 #include "base/json/json_writer.h" |
17 #include "base/logging.h" | 19 #include "base/logging.h" |
18 #include "base/macros.h" | 20 #include "base/macros.h" |
19 #include "chrome/browser/android/preferences/important_sites_util.h" | 21 #include "chrome/browser/android/preferences/important_sites_util.h" |
20 #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" | 22 #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" |
21 #include "chrome/browser/browsing_data/browsing_data_quota_helper.h" | 23 #include "chrome/browser/browsing_data/browsing_data_quota_helper.h" |
22 #include "chrome/browser/browsing_data/cookies_tree_model.h" | 24 #include "chrome/browser/browsing_data/cookies_tree_model.h" |
23 #include "chrome/browser/browsing_data/local_data_container.h" | 25 #include "chrome/browser/browsing_data/local_data_container.h" |
24 #include "chrome/browser/content_settings/cookie_settings_factory.h" | 26 #include "chrome/browser/content_settings/cookie_settings_factory.h" |
25 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" | 27 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
26 #include "chrome/browser/content_settings/tab_specific_content_settings.h" | 28 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
27 #include "chrome/browser/content_settings/web_site_settings_uma_util.h" | 29 #include "chrome/browser/content_settings/web_site_settings_uma_util.h" |
28 #include "chrome/browser/notifications/desktop_notification_profile_util.h" | 30 #include "chrome/browser/notifications/desktop_notification_profile_util.h" |
29 #include "chrome/browser/permissions/permission_util.h" | 31 #include "chrome/browser/permissions/permission_util.h" |
30 #include "chrome/browser/profiles/profile.h" | 32 #include "chrome/browser/profiles/profile.h" |
31 #include "chrome/browser/profiles/profile_manager.h" | 33 #include "chrome/browser/profiles/profile_manager.h" |
32 #include "chrome/browser/storage/storage_info_fetcher.h" | 34 #include "chrome/browser/storage/storage_info_fetcher.h" |
| 35 #include "chrome/browser/usb/usb_chooser_context.h" |
| 36 #include "chrome/browser/usb/usb_chooser_context_factory.h" |
33 #include "components/content_settings/core/browser/cookie_settings.h" | 37 #include "components/content_settings/core/browser/cookie_settings.h" |
34 #include "components/content_settings/core/browser/host_content_settings_map.h" | 38 #include "components/content_settings/core/browser/host_content_settings_map.h" |
35 #include "content/public/browser/browser_thread.h" | 39 #include "content/public/browser/browser_thread.h" |
36 #include "content/public/browser/storage_partition.h" | 40 #include "content/public/browser/storage_partition.h" |
37 #include "jni/WebsitePreferenceBridge_jni.h" | 41 #include "jni/WebsitePreferenceBridge_jni.h" |
38 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" | 42 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
39 #include "storage/browser/quota/quota_manager.h" | 43 #include "storage/browser/quota/quota_manager.h" |
40 #include "storage/common/quota/quota_status_code.h" | 44 #include "storage/common/quota/quota_status_code.h" |
41 #include "url/url_constants.h" | 45 #include "url/url_constants.h" |
42 | 46 |
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 static jboolean UrlMatchesContentSettingsPattern( | 430 static jboolean UrlMatchesContentSettingsPattern( |
427 JNIEnv* env, | 431 JNIEnv* env, |
428 const JavaParamRef<jclass>& clazz, | 432 const JavaParamRef<jclass>& clazz, |
429 const JavaParamRef<jstring>& jurl, | 433 const JavaParamRef<jstring>& jurl, |
430 const JavaParamRef<jstring>& jpattern) { | 434 const JavaParamRef<jstring>& jpattern) { |
431 ContentSettingsPattern pattern = ContentSettingsPattern::FromString( | 435 ContentSettingsPattern pattern = ContentSettingsPattern::FromString( |
432 ConvertJavaStringToUTF8(env, jpattern)); | 436 ConvertJavaStringToUTF8(env, jpattern)); |
433 return pattern.Matches(GURL(ConvertJavaStringToUTF8(env, jurl))); | 437 return pattern.Matches(GURL(ConvertJavaStringToUTF8(env, jurl))); |
434 } | 438 } |
435 | 439 |
| 440 static void GetUsbOrigins(JNIEnv* env, |
| 441 const JavaParamRef<jclass>& clazz, |
| 442 const JavaParamRef<jobject>& list) { |
| 443 Profile* profile = ProfileManager::GetActiveUserProfile(); |
| 444 UsbChooserContext* context = UsbChooserContextFactory::GetForProfile(profile); |
| 445 for (const auto& object : context->GetAllGrantedObjects()) { |
| 446 // Remove the trailing slash so that origins are matched correctly in |
| 447 // SingleWebsitePreferences.mergePermissionInfoForTopLevelOrigin. |
| 448 std::string origin = object->requesting_origin.spec(); |
| 449 DCHECK_EQ('/', origin.back()); |
| 450 origin.pop_back(); |
| 451 ScopedJavaLocalRef<jstring> jorigin = ConvertUTF8ToJavaString(env, origin); |
| 452 |
| 453 std::string embedder = object->requesting_origin.spec(); |
| 454 DCHECK_EQ('/', embedder.back()); |
| 455 embedder.pop_back(); |
| 456 ScopedJavaLocalRef<jstring> jembedder = |
| 457 ConvertUTF8ToJavaString(env, embedder); |
| 458 |
| 459 std::string name; |
| 460 bool found = object->object.GetString("name", &name); |
| 461 DCHECK(found); |
| 462 ScopedJavaLocalRef<jstring> jname = ConvertUTF8ToJavaString(env, name); |
| 463 |
| 464 std::string serialized; |
| 465 bool written = base::JSONWriter::Write(object->object, &serialized); |
| 466 DCHECK(written); |
| 467 ScopedJavaLocalRef<jstring> jserialized = |
| 468 ConvertUTF8ToJavaString(env, serialized); |
| 469 |
| 470 Java_WebsitePreferenceBridge_insertUsbInfoIntoList( |
| 471 env, list, jorigin.obj(), jembedder.obj(), jname.obj(), |
| 472 jserialized.obj()); |
| 473 } |
| 474 } |
| 475 |
| 476 static void RevokeUsbPermission(JNIEnv* env, |
| 477 const JavaParamRef<jclass>& clazz, |
| 478 const JavaParamRef<jstring>& jorigin, |
| 479 const JavaParamRef<jstring>& jembedder, |
| 480 const JavaParamRef<jstring>& jobject) { |
| 481 Profile* profile = ProfileManager::GetActiveUserProfile(); |
| 482 UsbChooserContext* context = UsbChooserContextFactory::GetForProfile(profile); |
| 483 GURL origin(ConvertJavaStringToUTF8(env, jorigin)); |
| 484 DCHECK(origin.is_valid()); |
| 485 GURL embedder(ConvertJavaStringToUTF8(env, jembedder)); |
| 486 DCHECK(embedder.is_valid()); |
| 487 std::unique_ptr<base::DictionaryValue> object = base::DictionaryValue::From( |
| 488 base::JSONReader::Read(ConvertJavaStringToUTF8(env, jobject))); |
| 489 DCHECK(object); |
| 490 context->RevokeObjectPermission(origin, embedder, *object); |
| 491 } |
| 492 |
436 namespace { | 493 namespace { |
437 | 494 |
438 class SiteDataDeleteHelper : | 495 class SiteDataDeleteHelper : |
439 public base::RefCountedThreadSafe<SiteDataDeleteHelper>, | 496 public base::RefCountedThreadSafe<SiteDataDeleteHelper>, |
440 public CookiesTreeModel::Observer { | 497 public CookiesTreeModel::Observer { |
441 public: | 498 public: |
442 SiteDataDeleteHelper(Profile* profile, const GURL& domain) | 499 SiteDataDeleteHelper(Profile* profile, const GURL& domain) |
443 : profile_(profile), domain_(domain), ending_batch_processing_(false) { | 500 : profile_(profile), domain_(domain), ending_batch_processing_(false) { |
444 } | 501 } |
445 | 502 |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
614 } else { | 671 } else { |
615 registerable_domain = | 672 registerable_domain = |
616 net::registry_controlled_domains::GetDomainAndRegistry( | 673 net::registry_controlled_domains::GetDomainAndRegistry( |
617 i->origin_url, | 674 i->origin_url, |
618 net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); | 675 net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES); |
619 } | 676 } |
620 if (std::find(important_domains.begin(), important_domains.end(), | 677 if (std::find(important_domains.begin(), important_domains.end(), |
621 registerable_domain) != important_domains.end()) { | 678 registerable_domain) != important_domains.end()) { |
622 important = true; | 679 important = true; |
623 } | 680 } |
624 // Remove the trailing backslash so the origin is matched correctly in | 681 // Remove the trailing slash so the origin is matched correctly in |
625 // SingleWebsitePreferences.mergePermissionInfoForTopLevelOrigin. | 682 // SingleWebsitePreferences.mergePermissionInfoForTopLevelOrigin. |
626 DCHECK_EQ('/', origin_str.back()); | 683 DCHECK_EQ('/', origin_str.back()); |
627 origin_str.pop_back(); | 684 origin_str.pop_back(); |
628 ScopedJavaLocalRef<jstring> origin = | 685 ScopedJavaLocalRef<jstring> origin = |
629 ConvertUTF8ToJavaString(env_, origin_str); | 686 ConvertUTF8ToJavaString(env_, origin_str); |
630 Java_WebsitePreferenceBridge_insertLocalStorageInfoIntoMap( | 687 Java_WebsitePreferenceBridge_insertLocalStorageInfoIntoMap( |
631 env_, map.obj(), origin.obj(), full_origin.obj(), i->size, important); | 688 env_, map.obj(), origin.obj(), full_origin.obj(), i->size, important); |
632 } | 689 } |
633 | 690 |
634 base::android::RunCallbackAndroid(java_callback_, map); | 691 base::android::RunCallbackAndroid(java_callback_, map); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
718 GURL url(ConvertJavaStringToUTF8(env, jorigin)); | 775 GURL url(ConvertJavaStringToUTF8(env, jorigin)); |
719 scoped_refptr<SiteDataDeleteHelper> site_data_deleter( | 776 scoped_refptr<SiteDataDeleteHelper> site_data_deleter( |
720 new SiteDataDeleteHelper(profile, url)); | 777 new SiteDataDeleteHelper(profile, url)); |
721 site_data_deleter->Run(); | 778 site_data_deleter->Run(); |
722 } | 779 } |
723 | 780 |
724 // Register native methods | 781 // Register native methods |
725 bool RegisterWebsitePreferenceBridge(JNIEnv* env) { | 782 bool RegisterWebsitePreferenceBridge(JNIEnv* env) { |
726 return RegisterNativesImpl(env); | 783 return RegisterNativesImpl(env); |
727 } | 784 } |
OLD | NEW |