Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Unified Diff: chrome/browser/permissions/permission_dialog_delegate.cc

Issue 2808003002: Start wiring up modal dialog experiment in PermissionRequestManager codepath (Closed)
Patch Set: upd comment Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/permissions/permission_dialog_delegate.cc
diff --git a/chrome/browser/permissions/permission_dialog_delegate.cc b/chrome/browser/permissions/permission_dialog_delegate.cc
index f7c006e165790571305814fcc33bcc4f51b21b02..c9619a080ca517dc05748f8eabcbe829eb64fc7e 100644
--- a/chrome/browser/permissions/permission_dialog_delegate.cc
+++ b/chrome/browser/permissions/permission_dialog_delegate.cc
@@ -21,11 +21,13 @@
#include "chrome/browser/notifications/notification_permission_infobar_delegate.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/chrome_features.h"
+#include "chrome/grit/generated_resources.h"
#include "components/variations/variations_associated_data.h"
#include "content/public/browser/web_contents.h"
#include "jni/PermissionDialogController_jni.h"
#include "jni/PermissionDialogDelegate_jni.h"
#include "ui/android/window_android.h"
+#include "ui/base/l10n/l10n_util.h"
#include "ui/base/window_open_disposition.h"
using base::android::ConvertUTF16ToJavaString;
@@ -40,11 +42,27 @@ const char kModalParamsUserGestureKey[] = "require_gesture";
// static
void PermissionDialogDelegate::Create(
content::WebContents* web_contents,
- ContentSettingsType type,
- const GURL& requesting_frame,
- bool user_gesture,
- Profile* profile,
- const PermissionSetCallback& callback) {
+ PermissionPromptAndroid* permission_prompt) {
raymes 2017/04/11 02:50:35 Is it worth DCHECKing that the PermissionRequestMa
Timothy Loh 2017/05/24 03:30:22 I'd prefer to not add the dependency.
+ DCHECK(web_contents);
+
+ // If we don't have a tab, just act as though the prompt was dismissed.
+ TabAndroid* tab = TabAndroid::FromWebContents(web_contents);
+ if (!tab) {
+ permission_prompt->Closing();
+ return;
+ }
+
+ // Dispatch the dialog to Java, which manages the lifetime of this object.
+ new PermissionDialogDelegate(tab, permission_prompt);
+}
+
+// static
+void PermissionDialogDelegate::Create(content::WebContents* web_contents,
+ ContentSettingsType type,
+ const GURL& requesting_frame,
+ bool user_gesture,
+ Profile* profile,
+ const PermissionSetCallback& callback) {
DCHECK(web_contents);
// If we don't have a tab, just act as though the prompt was dismissed.
@@ -106,43 +124,80 @@ bool PermissionDialogDelegate::RegisterPermissionDialogDelegate(JNIEnv* env) {
ScopedJavaLocalRef<jobject> PermissionDialogDelegate::CreateJavaDelegate(
JNIEnv* env) {
+ ScopedJavaLocalRef<jstring> primaryButtonText = ConvertUTF16ToJavaString(
+ env, l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW));
+ ScopedJavaLocalRef<jstring> secondaryButtonText = ConvertUTF16ToJavaString(
+ env, l10n_util::GetStringUTF16(IDS_PERMISSION_DENY));
+
+ if (infobar_delegate_) {
+ std::vector<int> content_settings_types{
+ infobar_delegate_->content_settings_types()};
+
+ return Java_PermissionDialogDelegate_create(
+ env, reinterpret_cast<uintptr_t>(this), tab_->GetJavaObject(),
+ base::android::ToJavaIntArray(env, content_settings_types).obj(),
+ ResourceMapper::MapFromChromiumId(infobar_delegate_->GetIconId()),
+ ConvertUTF16ToJavaString(env, infobar_delegate_->GetMessageText()),
+ ConvertUTF16ToJavaString(env, infobar_delegate_->GetLinkText()),
+ primaryButtonText, secondaryButtonText,
raymes 2017/04/11 02:50:35 Does this change the button labels for the old cod
Timothy Loh 2017/05/24 03:30:22 I just inlined the logic of GetButtonLabel so the
+ infobar_delegate_->ShouldShowPersistenceToggle());
+ }
+
+ // TODO(timloh): Handle grouped media permissions (camera + microphone).
+ DCHECK_EQ(1u, permission_prompt_->permission_count());
+
std::vector<int> content_settings_types{
- infobar_delegate_->content_settings_types()};
+ permission_prompt_->GetContentSettingType(0)};
return Java_PermissionDialogDelegate_create(
- env, reinterpret_cast<uintptr_t>(this),
- tab_->GetJavaObject(),
+ env, reinterpret_cast<uintptr_t>(this), tab_->GetJavaObject(),
base::android::ToJavaIntArray(env, content_settings_types).obj(),
- ResourceMapper::MapFromChromiumId(infobar_delegate_->GetIconId()),
- ConvertUTF16ToJavaString(env, infobar_delegate_->GetMessageText()),
- ConvertUTF16ToJavaString(env, infobar_delegate_->GetLinkText()),
- ConvertUTF16ToJavaString(env, infobar_delegate_->GetButtonLabel(
- PermissionInfoBarDelegate::BUTTON_OK)),
+ ResourceMapper::MapFromChromiumId(
+ permission_prompt_->GetIconIdForPermission(0)),
+ // TODO(timloh): This is the wrong string.
ConvertUTF16ToJavaString(env,
- infobar_delegate_->GetButtonLabel(
- PermissionInfoBarDelegate::BUTTON_CANCEL)),
- infobar_delegate_->ShouldShowPersistenceToggle());
+ permission_prompt_->GetMessageTextFragment(0)),
+ // TODO(timloh): Pass the actual link text for EME.
+ ConvertUTF16ToJavaString(env, base::string16()), primaryButtonText,
+ secondaryButtonText,
+ // TODO(timloh): Hook up the persistence toggle.
+ false);
}
void PermissionDialogDelegate::Accept(JNIEnv* env,
const JavaParamRef<jobject>& obj,
jboolean persist) {
- if (infobar_delegate_->ShouldShowPersistenceToggle())
- infobar_delegate_->set_persist(persist);
- infobar_delegate_->Accept();
+ if (infobar_delegate_) {
+ if (infobar_delegate_->ShouldShowPersistenceToggle())
+ infobar_delegate_->set_persist(persist);
+ infobar_delegate_->Accept();
+ return;
+ }
+
+ permission_prompt_->Accept();
raymes 2017/04/11 02:50:35 nit: Should we add TODOs here and below to hook up
Timothy Loh 2017/05/24 03:30:22 Don't think it's needed.
}
void PermissionDialogDelegate::Cancel(JNIEnv* env,
const JavaParamRef<jobject>& obj,
jboolean persist) {
- if (infobar_delegate_->ShouldShowPersistenceToggle())
- infobar_delegate_->set_persist(persist);
- infobar_delegate_->Cancel();
+ if (infobar_delegate_) {
+ if (infobar_delegate_->ShouldShowPersistenceToggle())
+ infobar_delegate_->set_persist(persist);
+ infobar_delegate_->Cancel();
+ return;
+ }
+
+ permission_prompt_->Deny();
}
void PermissionDialogDelegate::Dismissed(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
- infobar_delegate_->InfoBarDismissed();
+ if (infobar_delegate_) {
+ infobar_delegate_->InfoBarDismissed();
+ return;
+ }
+
+ permission_prompt_->Closing();
}
void PermissionDialogDelegate::LinkClicked(JNIEnv* env,
@@ -151,10 +206,14 @@ void PermissionDialogDelegate::LinkClicked(JNIEnv* env,
// InfoBarService as an owner() to open the link. That will fail since the
// wrapped delegate has no owner (it hasn't been added as an infobar).
if (tab_->web_contents()) {
- tab_->web_contents()->OpenURL(content::OpenURLParams(
- infobar_delegate_->GetLinkURL(), content::Referrer(),
- WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK,
- false));
+ if (infobar_delegate_) {
+ tab_->web_contents()->OpenURL(content::OpenURLParams(
+ infobar_delegate_->GetLinkURL(), content::Referrer(),
+ WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK,
+ false));
+ }
+ // TODO(timloh): Show a 'learn more' link in the PermissionRequestManager
+ // codepath for EME.
}
}
@@ -165,11 +224,29 @@ void PermissionDialogDelegate::Destroy(JNIEnv* env,
PermissionDialogDelegate::PermissionDialogDelegate(
TabAndroid* tab,
+ PermissionPromptAndroid* permission_prompt)
+ : tab_(tab),
+ infobar_delegate_(nullptr),
+ permission_prompt_(permission_prompt) {
+ DCHECK(tab_);
+ DCHECK(permission_prompt_);
+ Init();
+}
+
+PermissionDialogDelegate::PermissionDialogDelegate(
+ TabAndroid* tab,
std::unique_ptr<PermissionInfoBarDelegate> infobar_delegate)
- : tab_(tab), infobar_delegate_(std::move(infobar_delegate)) {
+ : tab_(tab),
+ infobar_delegate_(std::move(infobar_delegate)),
+ permission_prompt_(nullptr) {
DCHECK(tab_);
DCHECK(infobar_delegate_);
+ Init();
+}
raymes 2017/04/11 02:50:35 nit: should we just merge these 2 constructors tog
Timothy Loh 2017/05/24 03:30:22 Sure, done.
+PermissionDialogDelegate::~PermissionDialogDelegate() {}
+
+void PermissionDialogDelegate::Init() {
// Create our Java counterpart, which manages our lifetime.
JNIEnv* env = base::android::AttachCurrentThread();
base::android::ScopedJavaLocalRef<jobject> j_delegate =
@@ -180,5 +257,3 @@ PermissionDialogDelegate::PermissionDialogDelegate(
// longer needed it will in turn free the native delegate.
Java_PermissionDialogController_createDialog(env, j_delegate.obj());
}
-
-PermissionDialogDelegate::~PermissionDialogDelegate() {}

Powered by Google App Engine
This is Rietveld 408576698