Chromium Code Reviews| 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_string_value_serializer.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()) { | |
|
Bernhard Bauer
2016/07/13 08:54:45
Can you use the actual type here instead of auto?
Reilly Grant (use Gerrit)
2016/07/13 21:20:16
It's rather long. We use auto above in GetOrigins.
| |
| 446 // Remove the trailing backslashes so that origins are matched correctly in | |
|
Bernhard Bauer
2016/07/13 08:54:45
That's a (forward) slash.
Reilly Grant (use Gerrit)
2016/07/13 21:20:16
Fixed.
| |
| 447 // SingleWebsitePreferences.mergePermissionInfoForTopLevelOrigin. | |
| 448 std::string origin = object->requesting_origin.spec(); | |
| 449 DCHECK(origin[origin.size() - 1] == '/'); | |
|
Bernhard Bauer
2016/07/13 08:54:45
DCHECK_EQ?
Reilly Grant (use Gerrit)
2016/07/13 21:20:16
Done.
| |
| 450 origin = origin.substr(0, origin.size() - 1); | |
| 451 ScopedJavaLocalRef<jstring> jorigin = ConvertUTF8ToJavaString(env, origin); | |
| 452 | |
| 453 std::string embedder = object->requesting_origin.spec(); | |
| 454 DCHECK(embedder[embedder.size() - 1] == '/'); | |
| 455 embedder = embedder.substr(0, embedder.size() - 1); | |
|
Bernhard Bauer
2016/07/13 08:54:45
You could use embedder.resize().
Reilly Grant (use Gerrit)
2016/07/13 21:20:16
Someone came by and switched all the other instanc
| |
| 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 JSONStringValueSerializer serializer(&serialized); | |
|
Bernhard Bauer
2016/07/13 08:54:45
You could use JSONWriter::Write (which is what thi
Reilly Grant (use Gerrit)
2016/07/13 21:20:16
Done.
| |
| 466 serializer.Serialize(object->object); | |
| 467 ScopedJavaLocalRef<jstring> jserialized = | |
| 468 ConvertUTF8ToJavaString(env, serialized); | |
| 469 | |
| 470 Java_WebsitePreferenceBridge_insertUsbInfoIntoList( | |
| 471 env, list, jorigin.obj(), jembedder.obj(), object->incognito, | |
| 472 jname.obj(), 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 272 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 |