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

Side by Side 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: Update Fullscreen Parent 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/website_settings/permissions_bubble_view.h" 5 #include "chrome/browser/ui/views/website_settings/permissions_bubble_view.h"
6 6
7 #include "base/strings/string16.h" 7 #include "base/strings/string16.h"
8 #include "chrome/browser/ui/views/website_settings/permission_selector_view.h" 8 #include "chrome/browser/ui/views/website_settings/permission_selector_view.h"
9 #include "chrome/browser/ui/views/website_settings/permission_selector_view_obse rver.h" 9 #include "chrome/browser/ui/views/website_settings/permission_selector_view_obse rver.h"
10 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" 10 #include "chrome/browser/ui/website_settings/permission_bubble_request.h"
11 #include "chrome/grit/generated_resources.h" 11 #include "chrome/grit/generated_resources.h"
12 #include "net/base/net_util.h" 12 #include "net/base/net_util.h"
13 #include "ui/accessibility/ax_view_state.h" 13 #include "ui/accessibility/ax_view_state.h"
14 #include "ui/base/l10n/l10n_util.h" 14 #include "ui/base/l10n/l10n_util.h"
15 #include "ui/base/models/combobox_model.h" 15 #include "ui/base/models/combobox_model.h"
16 #include "ui/base/resource/resource_bundle.h" 16 #include "ui/base/resource/resource_bundle.h"
17 #include "ui/gfx/text_constants.h" 17 #include "ui/gfx/text_constants.h"
18 #include "ui/views/bubble/bubble_delegate.h" 18 #include "ui/views/bubble/bubble_delegate.h"
19 #include "ui/views/bubble/bubble_frame_view.h"
19 #include "ui/views/controls/button/checkbox.h" 20 #include "ui/views/controls/button/checkbox.h"
20 #include "ui/views/controls/button/label_button.h" 21 #include "ui/views/controls/button/label_button.h"
21 #include "ui/views/controls/button/label_button_border.h" 22 #include "ui/views/controls/button/label_button_border.h"
22 #include "ui/views/controls/button/menu_button.h" 23 #include "ui/views/controls/button/menu_button.h"
23 #include "ui/views/controls/button/menu_button_listener.h" 24 #include "ui/views/controls/button/menu_button_listener.h"
24 #include "ui/views/controls/combobox/combobox.h" 25 #include "ui/views/controls/combobox/combobox.h"
25 #include "ui/views/controls/combobox/combobox_listener.h" 26 #include "ui/views/controls/combobox/combobox_listener.h"
26 #include "ui/views/controls/label.h" 27 #include "ui/views/controls/label.h"
27 #include "ui/views/controls/menu/menu_runner.h" 28 #include "ui/views/controls/menu/menu_runner.h"
28 #include "ui/views/layout/box_layout.h" 29 #include "ui/views/layout/box_layout.h"
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 index_, permission.setting == CONTENT_SETTING_ALLOW); 134 index_, permission.setting == CONTENT_SETTING_ALLOW);
134 } 135 }
135 136
136 /////////////////////////////////////////////////////////////////////////////// 137 ///////////////////////////////////////////////////////////////////////////////
137 // View implementation for the permissions bubble. 138 // View implementation for the permissions bubble.
138 class PermissionsBubbleDelegateView : public views::BubbleDelegateView, 139 class PermissionsBubbleDelegateView : public views::BubbleDelegateView,
139 public views::ButtonListener, 140 public views::ButtonListener,
140 public PermissionCombobox::Listener { 141 public PermissionCombobox::Listener {
141 public: 142 public:
142 PermissionsBubbleDelegateView( 143 PermissionsBubbleDelegateView(
143 views::View* anchor, 144 views::View* anchor_view,
145 views::BubbleBorder::Arrow anchor_arrow,
144 PermissionBubbleViewViews* owner, 146 PermissionBubbleViewViews* owner,
145 const std::string& languages, 147 const std::string& languages,
146 const std::vector<PermissionBubbleRequest*>& requests, 148 const std::vector<PermissionBubbleRequest*>& requests,
147 const std::vector<bool>& accept_state); 149 const std::vector<bool>& accept_state);
148 ~PermissionsBubbleDelegateView() override; 150 ~PermissionsBubbleDelegateView() override;
149 151
150 void Close(); 152 void Close();
151 void SizeToContents(); 153 void SizeToContents();
152 154
153 // BubbleDelegateView: 155 // BubbleDelegateView:
154 bool ShouldShowCloseButton() const override; 156 bool ShouldShowCloseButton() const override;
155 bool ShouldShowWindowTitle() const override; 157 bool ShouldShowWindowTitle() const override;
156 const gfx::FontList& GetTitleFontList() const override; 158 const gfx::FontList& GetTitleFontList() const override;
157 base::string16 GetWindowTitle() const override; 159 base::string16 GetWindowTitle() const override;
158 void OnWidgetDestroying(views::Widget* widget) override; 160 void OnWidgetDestroying(views::Widget* widget) override;
159 161
160 // ButtonListener: 162 // ButtonListener:
161 void ButtonPressed(views::Button* button, const ui::Event& event) override; 163 void ButtonPressed(views::Button* button, const ui::Event& event) override;
162 164
163 // PermissionCombobox::Listener: 165 // PermissionCombobox::Listener:
164 void PermissionSelectionChanged(int index, bool allowed) override; 166 void PermissionSelectionChanged(int index, bool allowed) override;
165 167
168 // Updates the anchor's arrow and view. Also repositions the bubble so it's
169 // displayed in the correct location.
170 void UpdateAnchor(views::View* anchor_view,
171 views::BubbleBorder::Arrow anchor_arrow);
172
166 private: 173 private:
167 PermissionBubbleViewViews* owner_; 174 PermissionBubbleViewViews* owner_;
168 views::Button* allow_; 175 views::Button* allow_;
169 views::Button* deny_; 176 views::Button* deny_;
170 views::Combobox* allow_combobox_; 177 views::Combobox* allow_combobox_;
171 base::string16 hostname_; 178 base::string16 hostname_;
172 scoped_ptr<PermissionMenuModel> menu_button_model_; 179 scoped_ptr<PermissionMenuModel> menu_button_model_;
173 std::vector<PermissionCombobox*> customize_comboboxes_; 180 std::vector<PermissionCombobox*> customize_comboboxes_;
174 181
175 DISALLOW_COPY_AND_ASSIGN(PermissionsBubbleDelegateView); 182 DISALLOW_COPY_AND_ASSIGN(PermissionsBubbleDelegateView);
176 }; 183 };
177 184
178 PermissionsBubbleDelegateView::PermissionsBubbleDelegateView( 185 PermissionsBubbleDelegateView::PermissionsBubbleDelegateView(
179 views::View* anchor, 186 views::View* anchor_view,
187 views::BubbleBorder::Arrow anchor_arrow,
180 PermissionBubbleViewViews* owner, 188 PermissionBubbleViewViews* owner,
181 const std::string& languages, 189 const std::string& languages,
182 const std::vector<PermissionBubbleRequest*>& requests, 190 const std::vector<PermissionBubbleRequest*>& requests,
183 const std::vector<bool>& accept_state) 191 const std::vector<bool>& accept_state)
184 : views::BubbleDelegateView(anchor, views::BubbleBorder::TOP_LEFT), 192 : views::BubbleDelegateView(anchor_view, anchor_arrow),
185 owner_(owner), 193 owner_(owner),
186 allow_(NULL), 194 allow_(NULL),
187 deny_(NULL), 195 deny_(NULL),
188 allow_combobox_(NULL) { 196 allow_combobox_(NULL) {
189 DCHECK(!requests.empty()); 197 DCHECK(!requests.empty());
190 198
191 RemoveAllChildViews(true); 199 RemoveAllChildViews(true);
192 customize_comboboxes_.clear(); 200 customize_comboboxes_.clear();
193 set_close_on_esc(true); 201 set_close_on_esc(true);
194 set_close_on_deactivate(false); 202 set_close_on_deactivate(false);
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 owner_->Accept(); 350 owner_->Accept();
343 else if (button == deny_) 351 else if (button == deny_)
344 owner_->Deny(); 352 owner_->Deny();
345 } 353 }
346 354
347 void PermissionsBubbleDelegateView::PermissionSelectionChanged( 355 void PermissionsBubbleDelegateView::PermissionSelectionChanged(
348 int index, bool allowed) { 356 int index, bool allowed) {
349 owner_->Toggle(index, allowed); 357 owner_->Toggle(index, allowed);
350 } 358 }
351 359
360 void PermissionsBubbleDelegateView::UpdateAnchor(
361 views::View* anchor_view,
362 views::BubbleBorder::Arrow anchor_arrow) {
363 set_arrow(anchor_arrow);
364
365 // Update the border in the bubble: will either add or remove the arrow.
366 views::BubbleFrameView* frame = static_cast<views::BubbleFrameView*>(
msw 2015/03/11 22:25:30 nit: use BubbleDelegateView::GetBubbleFrameView()
hcarmona 2015/03/12 18:43:33 Done.
367 GetWidget()->non_client_view()->frame_view());
368 views::BubbleBorder::Arrow adjusted_arrow = anchor_arrow;
369 if (base::i18n::IsRTL())
370 adjusted_arrow = views::BubbleBorder::horizontal_mirror(adjusted_arrow);
371 frame->SetBubbleBorder(scoped_ptr<views::BubbleBorder>(
372 new views::BubbleBorder(adjusted_arrow, shadow(), color())));
msw 2015/03/11 22:25:31 nit: outdent 2 spaces.
hcarmona 2015/03/12 18:43:33 Done.
373
374 // Reposition the bubble based on the updated arrow and view.
375 SetAnchorView(anchor_view);
376 }
377
378
msw 2015/03/11 22:25:31 nit: remove extra blank line.
hcarmona 2015/03/12 18:43:33 Done.
352 ////////////////////////////////////////////////////////////////////////////// 379 //////////////////////////////////////////////////////////////////////////////
353 // PermissionBubbleViewViews 380 // PermissionBubbleViewViews
354 381
355 PermissionBubbleViewViews::PermissionBubbleViewViews( 382 PermissionBubbleViewViews::PermissionBubbleViewViews(
356 views::View* anchor_view,
357 const std::string& languages) 383 const std::string& languages)
358 : anchor_view_(anchor_view), 384 : anchor_view_(NULL),
msw 2015/03/11 22:25:30 nit: nullptr here and elsewhere.
hcarmona 2015/03/12 18:43:33 Done.
385 anchor_arrow_(views::BubbleBorder::NONE),
359 delegate_(NULL), 386 delegate_(NULL),
360 bubble_delegate_(NULL), 387 bubble_delegate_(NULL),
361 languages_(languages) {} 388 languages_(languages) {}
362 389
363 PermissionBubbleViewViews::~PermissionBubbleViewViews() { 390 PermissionBubbleViewViews::~PermissionBubbleViewViews() {
364 if (delegate_) 391 if (delegate_)
365 delegate_->SetView(NULL); 392 delegate_->SetView(NULL);
366 } 393 }
367 394
395 void PermissionBubbleViewViews::SetAnchor(
396 views::View* view,
397 views::BubbleBorder::Arrow arrow) {
398 // These values will be used to create any new bubble.
399 anchor_view_ = view;
400 anchor_arrow_ = arrow;
401
402 // If there is a bubble visible, it should be updated.
403 if (IsVisible())
404 bubble_delegate_->UpdateAnchor(view, arrow);
405 }
406
368 void PermissionBubbleViewViews::SetDelegate(Delegate* delegate) { 407 void PermissionBubbleViewViews::SetDelegate(Delegate* delegate) {
369 delegate_ = delegate; 408 delegate_ = delegate;
370 } 409 }
371 410
372 void PermissionBubbleViewViews::Show( 411 void PermissionBubbleViewViews::Show(
373 const std::vector<PermissionBubbleRequest*>& requests, 412 const std::vector<PermissionBubbleRequest*>& requests,
374 const std::vector<bool>& values) { 413 const std::vector<bool>& values) {
375 if (bubble_delegate_ != NULL) 414 if (bubble_delegate_ != NULL)
376 bubble_delegate_->Close(); 415 bubble_delegate_->Close();
377 416
378 bubble_delegate_ = 417 bubble_delegate_ =
379 new PermissionsBubbleDelegateView(anchor_view_, this, languages_, 418 new PermissionsBubbleDelegateView(anchor_view_, anchor_arrow_, this,
380 requests, values); 419 languages_, requests, values);
381 views::BubbleDelegateView::CreateBubble(bubble_delegate_)->Show(); 420 views::BubbleDelegateView::CreateBubble(bubble_delegate_)->Show();
382 bubble_delegate_->SizeToContents(); 421 bubble_delegate_->SizeToContents();
383 } 422 }
384 423
385 bool PermissionBubbleViewViews::CanAcceptRequestUpdate() { 424 bool PermissionBubbleViewViews::CanAcceptRequestUpdate() {
386 return !(bubble_delegate_ && bubble_delegate_->IsMouseHovered()); 425 return !(bubble_delegate_ && bubble_delegate_->IsMouseHovered());
387 } 426 }
388 427
389 void PermissionBubbleViewViews::Hide() { 428 void PermissionBubbleViewViews::Hide() {
390 if (bubble_delegate_) { 429 if (bubble_delegate_) {
(...skipping 20 matching lines...) Expand all
411 450
412 void PermissionBubbleViewViews::Accept() { 451 void PermissionBubbleViewViews::Accept() {
413 if (delegate_) 452 if (delegate_)
414 delegate_->Accept(); 453 delegate_->Accept();
415 } 454 }
416 455
417 void PermissionBubbleViewViews::Deny() { 456 void PermissionBubbleViewViews::Deny() {
418 if (delegate_) 457 if (delegate_)
419 delegate_->Deny(); 458 delegate_->Deny();
420 } 459 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698