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

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

Issue 2808003002: Start wiring up modal dialog experiment in PermissionRequestManager codepath (Closed)
Patch Set: fix bad rebase Created 3 years, 7 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 d6082290ed37c02b285430e51d1eff0275ce24fe..a71d49dcf4bf608fb82976167546e663cadf7015 100644
--- a/chrome/browser/permissions/permission_dialog_delegate.cc
+++ b/chrome/browser/permissions/permission_dialog_delegate.cc
@@ -20,12 +20,14 @@
#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/navigation_handle.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,28 @@ 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) {
+ 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, /*infobar_delegate=*/nullptr,
+ 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.
@@ -56,8 +75,10 @@ void PermissionDialogDelegate::Create(
// Dispatch the dialog to Java, which manages the lifetime of this object.
new PermissionDialogDelegate(
- tab, PermissionInfoBarDelegate::CreateDelegate(
- type, requesting_frame, user_gesture, profile, callback));
+ tab,
+ PermissionInfoBarDelegate::CreateDelegate(
+ type, requesting_frame, user_gesture, profile, callback),
+ /*permission_prompt=*/nullptr);
}
// static
@@ -81,7 +102,8 @@ void PermissionDialogDelegate::CreateMediaStreamDialog(
user_gesture, std::move(request)));
// Dispatch the dialog to Java, which manages the lifetime of this object.
- new PermissionDialogDelegate(tab, std::move(infobar_delegate));
+ new PermissionDialogDelegate(tab, std::move(infobar_delegate),
+ /*permission_prompt=*/nullptr);
}
// static
@@ -104,42 +126,83 @@ bool PermissionDialogDelegate::RegisterPermissionDialogDelegate(JNIEnv* env) {
}
void PermissionDialogDelegate::CreateJavaDelegate(JNIEnv* env) {
+ base::android::ScopedJavaLocalRef<jstring> primaryButtonText =
+ ConvertUTF16ToJavaString(env,
+ l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW));
+ base::android::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()};
+
+ j_delegate_.Reset(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,
+ infobar_delegate_->ShouldShowPersistenceToggle()));
+ return;
+ }
+
+ // TODO(timloh): Handle grouped media permissions (camera + microphone).
+ DCHECK_EQ(1u, permission_prompt_->PermissionCount());
+
std::vector<int> content_settings_types{
- infobar_delegate_->content_settings_types()};
+ permission_prompt_->GetContentSettingType(0)};
j_delegate_.Reset(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()),
- 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();
}
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,
@@ -148,10 +211,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.
}
}
@@ -162,12 +229,16 @@ void PermissionDialogDelegate::Destroy(JNIEnv* env,
PermissionDialogDelegate::PermissionDialogDelegate(
TabAndroid* tab,
- std::unique_ptr<PermissionInfoBarDelegate> infobar_delegate)
+ std::unique_ptr<PermissionInfoBarDelegate> infobar_delegate,
+ PermissionPromptAndroid* permission_prompt)
: content::WebContentsObserver(tab->web_contents()),
tab_(tab),
- infobar_delegate_(std::move(infobar_delegate)) {
+ infobar_delegate_(std::move(infobar_delegate)),
+ permission_prompt_(permission_prompt) {
DCHECK(tab_);
- DCHECK(infobar_delegate_);
+ // Only one of the PermissionPromptAndroid and PermissionInfoBarDelegate is
+ // used, depending on whether the PermissionRequestManager is enabled or not.
+ DCHECK(!!permission_prompt_ ^ !!infobar_delegate_);
// Create our Java counterpart, which manages our lifetime.
JNIEnv* env = base::android::AttachCurrentThread();
« no previous file with comments | « chrome/browser/permissions/permission_dialog_delegate.h ('k') | chrome/browser/permissions/permission_prompt_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698