Chromium Code Reviews| Index: chrome/browser/android/preferences/website_preference_bridge.cc |
| diff --git a/chrome/browser/android/preferences/website_preference_bridge.cc b/chrome/browser/android/preferences/website_preference_bridge.cc |
| index c6b5d7de6cc9002537b54dda360d5a1d8dec9519..20cf4c4dc1ed3efaf950b2ef98f148ae1096ff10 100644 |
| --- a/chrome/browser/android/preferences/website_preference_bridge.cc |
| +++ b/chrome/browser/android/preferences/website_preference_bridge.cc |
| @@ -14,6 +14,8 @@ |
| #include "base/android/scoped_java_ref.h" |
| #include "base/bind.h" |
| #include "base/bind_helpers.h" |
| +#include "base/json/json_reader.h" |
| +#include "base/json/json_string_value_serializer.h" |
| #include "base/logging.h" |
| #include "base/macros.h" |
| #include "chrome/browser/android/preferences/important_sites_util.h" |
| @@ -30,6 +32,8 @@ |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/profiles/profile_manager.h" |
| #include "chrome/browser/storage/storage_info_fetcher.h" |
| +#include "chrome/browser/usb/usb_chooser_context.h" |
| +#include "chrome/browser/usb/usb_chooser_context_factory.h" |
| #include "components/content_settings/core/browser/cookie_settings.h" |
| #include "components/content_settings/core/browser/host_content_settings_map.h" |
| #include "content/public/browser/browser_thread.h" |
| @@ -433,6 +437,59 @@ static jboolean UrlMatchesContentSettingsPattern( |
| return pattern.Matches(GURL(ConvertJavaStringToUTF8(env, jurl))); |
| } |
| +static void GetUsbOrigins(JNIEnv* env, |
| + const JavaParamRef<jclass>& clazz, |
| + const JavaParamRef<jobject>& list) { |
| + Profile* profile = ProfileManager::GetActiveUserProfile(); |
| + UsbChooserContext* context = UsbChooserContextFactory::GetForProfile(profile); |
| + 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.
|
| + // 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.
|
| + // SingleWebsitePreferences.mergePermissionInfoForTopLevelOrigin. |
| + std::string origin = object->requesting_origin.spec(); |
| + 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.
|
| + origin = origin.substr(0, origin.size() - 1); |
| + ScopedJavaLocalRef<jstring> jorigin = ConvertUTF8ToJavaString(env, origin); |
| + |
| + std::string embedder = object->requesting_origin.spec(); |
| + DCHECK(embedder[embedder.size() - 1] == '/'); |
| + 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
|
| + ScopedJavaLocalRef<jstring> jembedder = |
| + ConvertUTF8ToJavaString(env, embedder); |
| + |
| + std::string name; |
| + bool found = object->object.GetString("name", &name); |
| + DCHECK(found); |
| + ScopedJavaLocalRef<jstring> jname = ConvertUTF8ToJavaString(env, name); |
| + |
| + std::string serialized; |
| + 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.
|
| + serializer.Serialize(object->object); |
| + ScopedJavaLocalRef<jstring> jserialized = |
| + ConvertUTF8ToJavaString(env, serialized); |
| + |
| + Java_WebsitePreferenceBridge_insertUsbInfoIntoList( |
| + env, list, jorigin.obj(), jembedder.obj(), object->incognito, |
| + jname.obj(), jserialized.obj()); |
| + } |
| +} |
| + |
| +static void RevokeUsbPermission(JNIEnv* env, |
| + const JavaParamRef<jclass>& clazz, |
| + const JavaParamRef<jstring>& jorigin, |
| + const JavaParamRef<jstring>& jembedder, |
| + const JavaParamRef<jstring>& jobject) { |
| + Profile* profile = ProfileManager::GetActiveUserProfile(); |
| + UsbChooserContext* context = UsbChooserContextFactory::GetForProfile(profile); |
| + GURL origin(ConvertJavaStringToUTF8(env, jorigin)); |
| + DCHECK(origin.is_valid()); |
| + GURL embedder(ConvertJavaStringToUTF8(env, jembedder)); |
| + DCHECK(embedder.is_valid()); |
| + std::unique_ptr<base::DictionaryValue> object = base::DictionaryValue::From( |
| + base::JSONReader::Read(ConvertJavaStringToUTF8(env, jobject))); |
| + DCHECK(object); |
| + context->RevokeObjectPermission(origin, embedder, *object); |
| +} |
| + |
| namespace { |
| class SiteDataDeleteHelper : |