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 : |