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

Unified Diff: chrome/browser/ui/views/website_settings/permissions_bubble_view.cc

Issue 962453002: Update permission bubble anchor when omnibar is hidden (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move anchor logic to PermissionBubbleViewViews Created 5 years, 9 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/ui/views/website_settings/permissions_bubble_view.cc
diff --git a/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc b/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
index 1bf465a5a919e62c962bdd7ecf46be4c7c8225bb..a25282ae0177aa0acc3f5d6a35a054a7a94a93b0 100644
--- a/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
+++ b/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
@@ -4,10 +4,17 @@
#include "chrome/browser/ui/views/website_settings/permissions_bubble_view.h"
+#include "base/prefs/pref_service.h"
#include "base/strings/string16.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/views/exclusive_access_bubble_views.h"
+#include "chrome/browser/ui/views/frame/top_container_view.h"
+#include "chrome/browser/ui/views/location_bar/location_bar_view.h"
+#include "chrome/browser/ui/views/location_bar/location_icon_view.h"
#include "chrome/browser/ui/views/website_settings/permission_selector_view.h"
#include "chrome/browser/ui/views/website_settings/permission_selector_view_observer.h"
#include "chrome/browser/ui/website_settings/permission_bubble_request.h"
+#include "chrome/common/pref_names.h"
#include "chrome/grit/generated_resources.h"
#include "net/base/net_util.h"
#include "ui/accessibility/ax_view_state.h"
@@ -16,6 +23,7 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/text_constants.h"
#include "ui/views/bubble/bubble_delegate.h"
+#include "ui/views/bubble/bubble_frame_view.h"
#include "ui/views/controls/button/checkbox.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/controls/button/label_button_border.h"
@@ -140,7 +148,8 @@ class PermissionsBubbleDelegateView : public views::BubbleDelegateView,
public PermissionCombobox::Listener {
public:
PermissionsBubbleDelegateView(
- views::View* anchor,
+ views::View* anchor_view,
+ views::BubbleBorder::Arrow anchor_arrow,
PermissionBubbleViewViews* owner,
const std::string& languages,
const std::vector<PermissionBubbleRequest*>& requests,
@@ -163,6 +172,11 @@ class PermissionsBubbleDelegateView : public views::BubbleDelegateView,
// PermissionCombobox::Listener:
void PermissionSelectionChanged(int index, bool allowed) override;
+ // Updates the anchor's arrow and view. Also repositions the bubble so it's
+ // displayed in the correct location.
+ void UpdateAnchor(views::View* anchor_view,
+ views::BubbleBorder::Arrow anchor_arrow);
+
private:
PermissionBubbleViewViews* owner_;
views::Button* allow_;
@@ -176,12 +190,13 @@ class PermissionsBubbleDelegateView : public views::BubbleDelegateView,
};
PermissionsBubbleDelegateView::PermissionsBubbleDelegateView(
- views::View* anchor,
+ views::View* anchor_view,
+ views::BubbleBorder::Arrow anchor_arrow,
PermissionBubbleViewViews* owner,
const std::string& languages,
const std::vector<PermissionBubbleRequest*>& requests,
const std::vector<bool>& accept_state)
- : views::BubbleDelegateView(anchor, views::BubbleBorder::TOP_LEFT),
+ : views::BubbleDelegateView(anchor_view, anchor_arrow),
owner_(owner),
allow_(NULL),
deny_(NULL),
@@ -349,22 +364,62 @@ void PermissionsBubbleDelegateView::PermissionSelectionChanged(
owner_->Toggle(index, allowed);
}
+void PermissionsBubbleDelegateView::UpdateAnchor(
+ views::View* anchor_view,
+ views::BubbleBorder::Arrow anchor_arrow) {
+ set_arrow(anchor_arrow);
+
+ // Update the border in the bubble: will either add or remove the arrow.
+ views::BubbleFrameView* frame =
+ views::BubbleDelegateView::GetBubbleFrameView();
+ views::BubbleBorder::Arrow adjusted_arrow = anchor_arrow;
+ if (base::i18n::IsRTL())
+ adjusted_arrow = views::BubbleBorder::horizontal_mirror(adjusted_arrow);
+ frame->SetBubbleBorder(scoped_ptr<views::BubbleBorder>(
+ new views::BubbleBorder(adjusted_arrow, shadow(), color())));
+
+ // Reposition the bubble based on the updated arrow and view.
+ SetAnchorView(anchor_view);
+}
+
//////////////////////////////////////////////////////////////////////////////
// PermissionBubbleViewViews
-PermissionBubbleViewViews::PermissionBubbleViewViews(
- views::View* anchor_view,
- const std::string& languages)
- : anchor_view_(anchor_view),
+PermissionBubbleViewViews::PermissionBubbleViewViews(Browser* browser,
+ BrowserView* browser_view)
+ : browser_(browser),
+ browser_view_(browser_view),
delegate_(NULL),
bubble_delegate_(NULL),
- languages_(languages) {}
+ languages_(browser->profile()->GetPrefs()->GetString(
msw 2015/03/17 21:13:15 Inline this in PermissionBubbleViewViews::Show and
hcarmona 2015/03/18 18:00:05 Done.
+ prefs::kAcceptLanguages)) {}
PermissionBubbleViewViews::~PermissionBubbleViewViews() {
if (delegate_)
delegate_->SetView(NULL);
}
+views::View* PermissionBubbleViewViews::GetAnchorView() {
+ if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
+ return browser_view_->GetLocationBarView()->location_icon_view();
msw 2015/03/17 21:13:15 Use BrowserView::GetBrowserViewForBrowser in this
hcarmona 2015/03/18 18:00:05 Done.
+ else if (browser_view_->IsFullscreenBubbleVisible())
+ return browser_view_->exclusive_access_bubble()->GetView();
msw 2015/03/17 21:13:15 nit: no else after return.
hcarmona 2015/03/18 18:00:05 Done.
+ else
+ return browser_view_->top_container();
msw 2015/03/17 21:13:15 nit: no else after return.
hcarmona 2015/03/18 18:00:05 Done.
+}
+
+views::BubbleBorder::Arrow PermissionBubbleViewViews::GetAnchorArrow() {
+ if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
+ return views::BubbleBorder::TOP_LEFT;
+ else
msw 2015/03/17 21:13:15 nit: no else after return.
hcarmona 2015/03/18 18:00:05 Done.
+ return views::BubbleBorder::NONE;
+}
+
+void PermissionBubbleViewViews::UpdateAnchorPosition() {
+ if (IsVisible())
+ bubble_delegate_->UpdateAnchor(GetAnchorView(), GetAnchorArrow());
+}
+
void PermissionBubbleViewViews::SetDelegate(Delegate* delegate) {
delegate_ = delegate;
}
@@ -376,8 +431,8 @@ void PermissionBubbleViewViews::Show(
bubble_delegate_->Close();
bubble_delegate_ =
- new PermissionsBubbleDelegateView(anchor_view_, this, languages_,
- requests, values);
+ new PermissionsBubbleDelegateView(GetAnchorView(), GetAnchorArrow(), this,
+ languages_, requests, values);
views::BubbleDelegateView::CreateBubble(bubble_delegate_)->Show();
bubble_delegate_->SizeToContents();
}

Powered by Google App Engine
This is Rietveld 408576698