Commit 07dfab40 authored by Bret Sepulveda's avatar Bret Sepulveda Committed by Chromium LUCI CQ

Refactor PermissionPromptBubbleView to remove visible_requests_.

The API comment for PermissionPrompt::Delegate::Requests forbids clients
from storing the pointers to PermissionRequest objects, which is
violated by PermissionPromptBubbleView::visible_requests_. This patch
removes that field and recalculates the visible requests in the two
places it's required.

This also happens to be convenient for further refactoring plans.

Bug: 1110905
Change-Id: I018b7d9fc00445b05268db9e005377a64bfe138e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2577497
Commit-Queue: Balazs Engedy <engedy@chromium.org>
Reviewed-by: default avatarOlesia Marukhno <olesiamarukhno@google.com>
Reviewed-by: default avatarBalazs Engedy <engedy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#846068}
parent 9318244f
...@@ -51,7 +51,6 @@ PermissionPromptBubbleView::PermissionPromptBubbleView( ...@@ -51,7 +51,6 @@ PermissionPromptBubbleView::PermissionPromptBubbleView(
PermissionPromptStyle prompt_style) PermissionPromptStyle prompt_style)
: browser_(browser), : browser_(browser),
delegate_(delegate), delegate_(delegate),
visible_requests_(GetVisibleRequests()),
name_or_origin_(GetDisplayNameOrOrigin()), name_or_origin_(GetDisplayNameOrOrigin()),
permission_requested_time_(permission_requested_time) { permission_requested_time_(permission_requested_time) {
// Note that browser_ may be null in unit tests. // Note that browser_ may be null in unit tests.
...@@ -133,8 +132,8 @@ PermissionPromptBubbleView::PermissionPromptBubbleView( ...@@ -133,8 +132,8 @@ PermissionPromptBubbleView::PermissionPromptBubbleView(
set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric(
views::DISTANCE_BUBBLE_PREFERRED_WIDTH)); views::DISTANCE_BUBBLE_PREFERRED_WIDTH));
for (permissions::PermissionRequest* request : visible_requests_) for (permissions::PermissionRequest* request : GetVisibleRequests())
AddPermissionRequestLine(request); AddRequestLine(request);
base::Optional<base::string16> extra_text = GetExtraText(); base::Optional<base::string16> extra_text = GetExtraText();
if (extra_text.has_value()) { if (extra_text.has_value()) {
...@@ -167,34 +166,30 @@ void PermissionPromptBubbleView::Show() { ...@@ -167,34 +166,30 @@ void PermissionPromptBubbleView::Show() {
chrome::RecordDialogCreation(chrome::DialogIdentifier::PERMISSIONS); chrome::RecordDialogCreation(chrome::DialogIdentifier::PERMISSIONS);
} }
bool PermissionPromptBubbleView::ShouldShowRequest(
permissions::RequestType type) const {
if (type == permissions::RequestType::kCameraStream) {
// Hide camera request if camera PTZ request is present as well.
auto requests = delegate_->Requests();
return std::find_if(requests.begin(), requests.end(), [](auto* request) {
return request->GetRequestType() ==
permissions::RequestType::kCameraPanTiltZoom;
}) == requests.end();
}
return true;
}
std::vector<permissions::PermissionRequest*> std::vector<permissions::PermissionRequest*>
PermissionPromptBubbleView::GetVisibleRequests() { PermissionPromptBubbleView::GetVisibleRequests() const {
std::vector<permissions::PermissionRequest*> visible_requests; std::vector<permissions::PermissionRequest*> visible_requests;
for (permissions::PermissionRequest* request : delegate_->Requests()) { for (permissions::PermissionRequest* request : delegate_->Requests()) {
if (ShouldShowPermissionRequest(request)) if (ShouldShowRequest(request->GetRequestType()))
visible_requests.push_back(request); visible_requests.push_back(request);
} }
return visible_requests; return visible_requests;
} }
bool PermissionPromptBubbleView::ShouldShowPermissionRequest( void PermissionPromptBubbleView::AddRequestLine(
permissions::PermissionRequest* request) {
if (request->GetRequestType() != permissions::RequestType::kCameraStream)
return true;
// Hide camera request only if camera PTZ request is present as well.
for (permissions::PermissionRequest* request : delegate_->Requests()) {
if (request->GetRequestType() ==
permissions::RequestType::kCameraPanTiltZoom) {
return false;
}
}
return true;
}
void PermissionPromptBubbleView::AddPermissionRequestLine(
permissions::PermissionRequest* request) { permissions::PermissionRequest* request) {
ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
...@@ -287,28 +282,29 @@ base::string16 PermissionPromptBubbleView::GetAccessibleWindowTitle() const { ...@@ -287,28 +282,29 @@ base::string16 PermissionPromptBubbleView::GetAccessibleWindowTitle() const {
// There are three separate internationalized messages used, one for each // There are three separate internationalized messages used, one for each
// format of title, to provide for accurate i18n. See https://crbug.com/434574 // format of title, to provide for accurate i18n. See https://crbug.com/434574
// for more details. // for more details.
DCHECK(!visible_requests_.empty()); auto visible_requests = GetVisibleRequests();
DCHECK(!visible_requests.empty());
if (visible_requests_.size() == 1) { if (visible_requests.size() == 1) {
return l10n_util::GetStringFUTF16( return l10n_util::GetStringFUTF16(
IDS_PERMISSIONS_BUBBLE_PROMPT_ACCESSIBLE_TITLE_ONE_PERM, IDS_PERMISSIONS_BUBBLE_PROMPT_ACCESSIBLE_TITLE_ONE_PERM,
name_or_origin_.name_or_origin, name_or_origin_.name_or_origin,
visible_requests_[0]->GetMessageTextFragment()); visible_requests[0]->GetMessageTextFragment());
} }
int template_id = int template_id =
visible_requests_.size() == 2 visible_requests.size() == 2
? IDS_PERMISSIONS_BUBBLE_PROMPT_ACCESSIBLE_TITLE_TWO_PERMS ? IDS_PERMISSIONS_BUBBLE_PROMPT_ACCESSIBLE_TITLE_TWO_PERMS
: IDS_PERMISSIONS_BUBBLE_PROMPT_ACCESSIBLE_TITLE_TWO_PERMS_MORE; : IDS_PERMISSIONS_BUBBLE_PROMPT_ACCESSIBLE_TITLE_TWO_PERMS_MORE;
return l10n_util::GetStringFUTF16( return l10n_util::GetStringFUTF16(
template_id, name_or_origin_.name_or_origin, template_id, name_or_origin_.name_or_origin,
visible_requests_[0]->GetMessageTextFragment(), visible_requests[0]->GetMessageTextFragment(),
visible_requests_[1]->GetMessageTextFragment()); visible_requests[1]->GetMessageTextFragment());
} }
PermissionPromptBubbleView::DisplayNameOrOrigin PermissionPromptBubbleView::DisplayNameOrOrigin
PermissionPromptBubbleView::GetDisplayNameOrOrigin() const { PermissionPromptBubbleView::GetDisplayNameOrOrigin() const {
DCHECK(!visible_requests_.empty()); DCHECK(!delegate_->Requests().empty());
GURL origin_url = delegate_->GetRequestingOrigin(); GURL origin_url = delegate_->GetRequestingOrigin();
if (origin_url.SchemeIs(extensions::kExtensionScheme)) { if (origin_url.SchemeIs(extensions::kExtensionScheme)) {
...@@ -333,7 +329,7 @@ PermissionPromptBubbleView::GetDisplayNameOrOrigin() const { ...@@ -333,7 +329,7 @@ PermissionPromptBubbleView::GetDisplayNameOrOrigin() const {
base::Optional<base::string16> PermissionPromptBubbleView::GetExtraText() base::Optional<base::string16> PermissionPromptBubbleView::GetExtraText()
const { const {
switch (visible_requests_[0]->GetRequestType()) { switch (delegate_->Requests()[0]->GetRequestType()) {
case permissions::RequestType::kStorageAccess: case permissions::RequestType::kStorageAccess:
return l10n_util::GetStringFUTF16( return l10n_util::GetStringFUTF16(
IDS_STORAGE_ACCESS_PERMISSION_EXPLANATION, IDS_STORAGE_ACCESS_PERMISSION_EXPLANATION,
......
...@@ -11,6 +11,10 @@ ...@@ -11,6 +11,10 @@
#include "components/permissions/permission_prompt.h" #include "components/permissions/permission_prompt.h"
#include "ui/views/bubble/bubble_dialog_delegate_view.h" #include "ui/views/bubble/bubble_dialog_delegate_view.h"
namespace permissions {
enum class RequestType;
}
class Browser; class Browser;
// Bubble that prompts the user to grant or deny a permission request from a // Bubble that prompts the user to grant or deny a permission request from a
...@@ -50,9 +54,9 @@ class PermissionPromptBubbleView : public views::BubbleDialogDelegateView { ...@@ -50,9 +54,9 @@ class PermissionPromptBubbleView : public views::BubbleDialogDelegateView {
bool is_origin; bool is_origin;
}; };
std::vector<permissions::PermissionRequest*> GetVisibleRequests(); bool ShouldShowRequest(permissions::RequestType type) const;
bool ShouldShowPermissionRequest(permissions::PermissionRequest* request); std::vector<permissions::PermissionRequest*> GetVisibleRequests() const;
void AddPermissionRequestLine(permissions::PermissionRequest* request); void AddRequestLine(permissions::PermissionRequest* request);
// Returns the origin to be displayed in the permission prompt. May return // Returns the origin to be displayed in the permission prompt. May return
// a non-origin, e.g. extension URLs use the name of the extension. // a non-origin, e.g. extension URLs use the name of the extension.
...@@ -72,9 +76,6 @@ class PermissionPromptBubbleView : public views::BubbleDialogDelegateView { ...@@ -72,9 +76,6 @@ class PermissionPromptBubbleView : public views::BubbleDialogDelegateView {
Browser* const browser_; Browser* const browser_;
permissions::PermissionPrompt::Delegate* const delegate_; permissions::PermissionPrompt::Delegate* const delegate_;
// List of permission requests that should be visible in the bubble.
std::vector<permissions::PermissionRequest*> visible_requests_;
// The requesting domain's name or origin. // The requesting domain's name or origin.
const DisplayNameOrOrigin name_or_origin_; const DisplayNameOrOrigin name_or_origin_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment