Index: chrome/browser/ui/android/infobars/permission_group_infobar_android.cc |
diff --git a/chrome/browser/ui/android/infobars/permission_group_infobar_android.cc b/chrome/browser/ui/android/infobars/permission_group_infobar_android.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2422e7b2b3f26e12ee23e35ddaff1ae837654d78 |
--- /dev/null |
+++ b/chrome/browser/ui/android/infobars/permission_group_infobar_android.cc |
@@ -0,0 +1,118 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/ui/android/infobars/permission_group_infobar_android.h" |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/jni_array.h" |
+#include "base/android/jni_string.h" |
+#include "base/android/scoped_java_ref.h" |
+#include "chrome/browser/android/permissions/permission_group_infobar_delegate_android.h" |
+#include "chrome/browser/infobars/infobar_service.h" |
+#include "chrome/grit/generated_resources.h" |
+#include "content/public/browser/android/content_view_core.h" |
+#include "content/public/browser/web_contents.h" |
+#include "jni/PermissionGroupInfoBarAndroid_jni.h" |
+#include "ui/android/window_android.h" |
+#include "ui/base/l10n/l10n_util.h" |
+ |
+namespace { |
+ |
+std::string GetPermissionMessage(ContentSettingsType type) { |
+ int message_id; |
+ switch (type) { |
+ case ContentSettingsType::CONTENT_SETTINGS_TYPE_GEOLOCATION: |
+ message_id = IDS_GEOLOCATION_INFOBAR_PERMISSION_FRAGMENT; |
+ break; |
+ case ContentSettingsType::CONTENT_SETTINGS_TYPE_NOTIFICATIONS: |
+ message_id = IDS_NOTIFICATION_PERMISSIONS_FRAGMENT; |
+ break; |
+ case ContentSettingsType::CONTENT_SETTINGS_TYPE_MIDI_SYSEX: |
+ message_id = IDS_MIDI_SYSEX_PERMISSION_FRAGMENT; |
+ break; |
+ default: |
Lalit Maganti
2015/09/28 12:41:25
Added the cases back in as discussed.
|
+ NOTREACHED(); |
+ message_id = IDS_GEOLOCATION_INFOBAR_PERMISSION_FRAGMENT; |
+ break; |
+ } |
+ return l10n_util::GetStringUTF8(message_id); |
+} |
+ |
+} // anonymous namespace |
+ |
+PermissionGroupInfoBarAndroid::PermissionGroupInfoBarAndroid( |
+ scoped_ptr<PermissionGroupInfoBarDelegateAndroid> delegate, |
+ std::vector<int> permission_types) |
+ : ConfirmInfoBar(delegate.Pass()), |
+ permission_types_(permission_types) { |
+} |
+ |
+PermissionGroupInfoBarAndroid::~PermissionGroupInfoBarAndroid() { |
+ if (java_infobar_.is_null()) |
+ return; |
+ |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_PermissionGroupInfoBarAndroid_onNativeDestroyed( |
+ env, java_infobar_.obj()); |
+ java_infobar_.Reset(); |
+} |
+ |
+PermissionGroupInfoBarDelegateAndroid* |
+PermissionGroupInfoBarAndroid::GetDelegate() { |
+ return static_cast<PermissionGroupInfoBarDelegateAndroid*>(delegate()); |
+} |
+ |
+void PermissionGroupInfoBarAndroid::OnCheckedStateUpdate( |
+ JNIEnv* env, |
+ jobject obj, |
+ jbooleanArray raw_checked_states) { |
+ jint array_size = env->GetArrayLength(raw_checked_states); |
+ jboolean* states_ptr = env->GetBooleanArrayElements( |
+ raw_checked_states, NULL); |
+ |
+ GetDelegate()->OnCheckedStateUpdate(states_ptr, array_size); |
+} |
+ |
+base::android::ScopedJavaLocalRef<jobject> |
+PermissionGroupInfoBarAndroid::CreateRenderInfoBar(JNIEnv* env) { |
+ content::WebContents* web_contents = |
+ InfoBarService::WebContentsFromInfoBar(this); |
+ DCHECK(web_contents); |
+ content::ContentViewCore* cvc = |
+ content::ContentViewCore::FromWebContents(web_contents); |
+ DCHECK(cvc); |
+ |
+ // Convert the types to their string representations. |
+ std::vector<std::string> permission_messages; |
+ for (int permission : permission_types_) { |
+ permission_messages.push_back( |
+ GetPermissionMessage(static_cast<ContentSettingsType>(permission))); |
+ } |
+ |
+ base::android::ScopedJavaLocalRef<jobject> jwindow_android = |
+ cvc->GetWindowAndroid()->GetJavaObject(); |
+ base::android::ScopedJavaLocalRef<jstring> jtitle_message = |
+ base::android::ConvertUTF16ToJavaString( |
+ env, GetDelegate()->GetMessageText()); |
+ base::android::ScopedJavaLocalRef<jobjectArray> jpermission_messages = |
+ base::android::ToJavaArrayOfStrings(env, permission_messages); |
+ base::android::ScopedJavaLocalRef<jintArray> jtypes = |
+ base::android::ToJavaIntArray(env, permission_types_); |
+ |
+ base::android::ScopedJavaLocalRef<jobject> infobar; |
+ infobar.Reset(Java_PermissionGroupInfoBarAndroid_createInfoBar(env, |
+ reinterpret_cast<intptr_t>(this), |
+ jwindow_android.obj(), |
+ jtitle_message.obj(), |
+ jpermission_messages.obj(), |
+ jtypes.obj())); |
+ java_infobar_.Reset(env, infobar.obj()); |
+ return infobar; |
+} |
+ |
+// Native JNI methods --------------------------------------------------------- |
+ |
+bool RegisterPermissionGroupInfoBarAndroid(JNIEnv* env) { |
+ return RegisterNativesImpl(env); |
+} |