OLD | NEW |
---|---|
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/prefs/pref_service.h" | |
7 #include "base/strings/string16.h" | 8 #include "base/strings/string16.h" |
9 #include "chrome/browser/profiles/profile.h" | |
10 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h" | |
11 #include "chrome/browser/ui/views/frame/top_container_view.h" | |
12 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" | |
13 #include "chrome/browser/ui/views/location_bar/location_icon_view.h" | |
8 #include "chrome/browser/ui/views/website_settings/permission_selector_view.h" | 14 #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" | 15 #include "chrome/browser/ui/views/website_settings/permission_selector_view_obse rver.h" |
10 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" | 16 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" |
17 #include "chrome/common/pref_names.h" | |
11 #include "chrome/grit/generated_resources.h" | 18 #include "chrome/grit/generated_resources.h" |
12 #include "net/base/net_util.h" | 19 #include "net/base/net_util.h" |
13 #include "ui/accessibility/ax_view_state.h" | 20 #include "ui/accessibility/ax_view_state.h" |
14 #include "ui/base/l10n/l10n_util.h" | 21 #include "ui/base/l10n/l10n_util.h" |
15 #include "ui/base/models/combobox_model.h" | 22 #include "ui/base/models/combobox_model.h" |
16 #include "ui/base/resource/resource_bundle.h" | 23 #include "ui/base/resource/resource_bundle.h" |
17 #include "ui/gfx/text_constants.h" | 24 #include "ui/gfx/text_constants.h" |
18 #include "ui/views/bubble/bubble_delegate.h" | 25 #include "ui/views/bubble/bubble_delegate.h" |
26 #include "ui/views/bubble/bubble_frame_view.h" | |
19 #include "ui/views/controls/button/checkbox.h" | 27 #include "ui/views/controls/button/checkbox.h" |
20 #include "ui/views/controls/button/label_button.h" | 28 #include "ui/views/controls/button/label_button.h" |
21 #include "ui/views/controls/button/label_button_border.h" | 29 #include "ui/views/controls/button/label_button_border.h" |
22 #include "ui/views/controls/button/menu_button.h" | 30 #include "ui/views/controls/button/menu_button.h" |
23 #include "ui/views/controls/button/menu_button_listener.h" | 31 #include "ui/views/controls/button/menu_button_listener.h" |
24 #include "ui/views/controls/combobox/combobox.h" | 32 #include "ui/views/controls/combobox/combobox.h" |
25 #include "ui/views/controls/combobox/combobox_listener.h" | 33 #include "ui/views/controls/combobox/combobox_listener.h" |
26 #include "ui/views/controls/label.h" | 34 #include "ui/views/controls/label.h" |
27 #include "ui/views/controls/menu/menu_runner.h" | 35 #include "ui/views/controls/menu/menu_runner.h" |
28 #include "ui/views/layout/box_layout.h" | 36 #include "ui/views/layout/box_layout.h" |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
133 index_, permission.setting == CONTENT_SETTING_ALLOW); | 141 index_, permission.setting == CONTENT_SETTING_ALLOW); |
134 } | 142 } |
135 | 143 |
136 /////////////////////////////////////////////////////////////////////////////// | 144 /////////////////////////////////////////////////////////////////////////////// |
137 // View implementation for the permissions bubble. | 145 // View implementation for the permissions bubble. |
138 class PermissionsBubbleDelegateView : public views::BubbleDelegateView, | 146 class PermissionsBubbleDelegateView : public views::BubbleDelegateView, |
139 public views::ButtonListener, | 147 public views::ButtonListener, |
140 public PermissionCombobox::Listener { | 148 public PermissionCombobox::Listener { |
141 public: | 149 public: |
142 PermissionsBubbleDelegateView( | 150 PermissionsBubbleDelegateView( |
143 views::View* anchor, | 151 views::View* anchor_view, |
152 views::BubbleBorder::Arrow anchor_arrow, | |
144 PermissionBubbleViewViews* owner, | 153 PermissionBubbleViewViews* owner, |
145 const std::string& languages, | 154 const std::string& languages, |
146 const std::vector<PermissionBubbleRequest*>& requests, | 155 const std::vector<PermissionBubbleRequest*>& requests, |
147 const std::vector<bool>& accept_state); | 156 const std::vector<bool>& accept_state); |
148 ~PermissionsBubbleDelegateView() override; | 157 ~PermissionsBubbleDelegateView() override; |
149 | 158 |
150 void Close(); | 159 void Close(); |
151 void SizeToContents(); | 160 void SizeToContents(); |
152 | 161 |
153 // BubbleDelegateView: | 162 // BubbleDelegateView: |
154 bool ShouldShowCloseButton() const override; | 163 bool ShouldShowCloseButton() const override; |
155 bool ShouldShowWindowTitle() const override; | 164 bool ShouldShowWindowTitle() const override; |
156 const gfx::FontList& GetTitleFontList() const override; | 165 const gfx::FontList& GetTitleFontList() const override; |
157 base::string16 GetWindowTitle() const override; | 166 base::string16 GetWindowTitle() const override; |
158 void OnWidgetDestroying(views::Widget* widget) override; | 167 void OnWidgetDestroying(views::Widget* widget) override; |
159 | 168 |
160 // ButtonListener: | 169 // ButtonListener: |
161 void ButtonPressed(views::Button* button, const ui::Event& event) override; | 170 void ButtonPressed(views::Button* button, const ui::Event& event) override; |
162 | 171 |
163 // PermissionCombobox::Listener: | 172 // PermissionCombobox::Listener: |
164 void PermissionSelectionChanged(int index, bool allowed) override; | 173 void PermissionSelectionChanged(int index, bool allowed) override; |
165 | 174 |
175 // Updates the anchor's arrow and view. Also repositions the bubble so it's | |
176 // displayed in the correct location. | |
177 void UpdateAnchor(views::View* anchor_view, | |
178 views::BubbleBorder::Arrow anchor_arrow); | |
179 | |
166 private: | 180 private: |
167 PermissionBubbleViewViews* owner_; | 181 PermissionBubbleViewViews* owner_; |
168 views::Button* allow_; | 182 views::Button* allow_; |
169 views::Button* deny_; | 183 views::Button* deny_; |
170 views::Combobox* allow_combobox_; | 184 views::Combobox* allow_combobox_; |
171 base::string16 hostname_; | 185 base::string16 hostname_; |
172 scoped_ptr<PermissionMenuModel> menu_button_model_; | 186 scoped_ptr<PermissionMenuModel> menu_button_model_; |
173 std::vector<PermissionCombobox*> customize_comboboxes_; | 187 std::vector<PermissionCombobox*> customize_comboboxes_; |
174 | 188 |
175 DISALLOW_COPY_AND_ASSIGN(PermissionsBubbleDelegateView); | 189 DISALLOW_COPY_AND_ASSIGN(PermissionsBubbleDelegateView); |
176 }; | 190 }; |
177 | 191 |
178 PermissionsBubbleDelegateView::PermissionsBubbleDelegateView( | 192 PermissionsBubbleDelegateView::PermissionsBubbleDelegateView( |
179 views::View* anchor, | 193 views::View* anchor_view, |
194 views::BubbleBorder::Arrow anchor_arrow, | |
180 PermissionBubbleViewViews* owner, | 195 PermissionBubbleViewViews* owner, |
181 const std::string& languages, | 196 const std::string& languages, |
182 const std::vector<PermissionBubbleRequest*>& requests, | 197 const std::vector<PermissionBubbleRequest*>& requests, |
183 const std::vector<bool>& accept_state) | 198 const std::vector<bool>& accept_state) |
184 : views::BubbleDelegateView(anchor, views::BubbleBorder::TOP_LEFT), | 199 : views::BubbleDelegateView(anchor_view, anchor_arrow), |
185 owner_(owner), | 200 owner_(owner), |
186 allow_(NULL), | 201 allow_(NULL), |
187 deny_(NULL), | 202 deny_(NULL), |
188 allow_combobox_(NULL) { | 203 allow_combobox_(NULL) { |
189 DCHECK(!requests.empty()); | 204 DCHECK(!requests.empty()); |
190 | 205 |
191 RemoveAllChildViews(true); | 206 RemoveAllChildViews(true); |
192 customize_comboboxes_.clear(); | 207 customize_comboboxes_.clear(); |
193 set_close_on_esc(true); | 208 set_close_on_esc(true); |
194 set_close_on_deactivate(false); | 209 set_close_on_deactivate(false); |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
342 owner_->Accept(); | 357 owner_->Accept(); |
343 else if (button == deny_) | 358 else if (button == deny_) |
344 owner_->Deny(); | 359 owner_->Deny(); |
345 } | 360 } |
346 | 361 |
347 void PermissionsBubbleDelegateView::PermissionSelectionChanged( | 362 void PermissionsBubbleDelegateView::PermissionSelectionChanged( |
348 int index, bool allowed) { | 363 int index, bool allowed) { |
349 owner_->Toggle(index, allowed); | 364 owner_->Toggle(index, allowed); |
350 } | 365 } |
351 | 366 |
367 void PermissionsBubbleDelegateView::UpdateAnchor( | |
368 views::View* anchor_view, | |
369 views::BubbleBorder::Arrow anchor_arrow) { | |
370 set_arrow(anchor_arrow); | |
371 | |
372 // Update the border in the bubble: will either add or remove the arrow. | |
373 views::BubbleFrameView* frame = | |
374 views::BubbleDelegateView::GetBubbleFrameView(); | |
375 views::BubbleBorder::Arrow adjusted_arrow = anchor_arrow; | |
376 if (base::i18n::IsRTL()) | |
377 adjusted_arrow = views::BubbleBorder::horizontal_mirror(adjusted_arrow); | |
378 frame->SetBubbleBorder(scoped_ptr<views::BubbleBorder>( | |
379 new views::BubbleBorder(adjusted_arrow, shadow(), color()))); | |
380 | |
381 // Reposition the bubble based on the updated arrow and view. | |
382 SetAnchorView(anchor_view); | |
383 } | |
384 | |
352 ////////////////////////////////////////////////////////////////////////////// | 385 ////////////////////////////////////////////////////////////////////////////// |
353 // PermissionBubbleViewViews | 386 // PermissionBubbleViewViews |
354 | 387 |
355 PermissionBubbleViewViews::PermissionBubbleViewViews( | 388 PermissionBubbleViewViews::PermissionBubbleViewViews(Browser* browser, |
356 views::View* anchor_view, | 389 BrowserView* browser_view) |
357 const std::string& languages) | 390 : browser_(browser), |
358 : anchor_view_(anchor_view), | 391 browser_view_(browser_view), |
359 delegate_(NULL), | 392 delegate_(NULL), |
360 bubble_delegate_(NULL), | 393 bubble_delegate_(NULL), |
361 languages_(languages) {} | 394 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.
| |
395 prefs::kAcceptLanguages)) {} | |
362 | 396 |
363 PermissionBubbleViewViews::~PermissionBubbleViewViews() { | 397 PermissionBubbleViewViews::~PermissionBubbleViewViews() { |
364 if (delegate_) | 398 if (delegate_) |
365 delegate_->SetView(NULL); | 399 delegate_->SetView(NULL); |
366 } | 400 } |
367 | 401 |
402 views::View* PermissionBubbleViewViews::GetAnchorView() { | |
403 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) | |
404 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.
| |
405 else if (browser_view_->IsFullscreenBubbleVisible()) | |
406 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.
| |
407 else | |
408 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.
| |
409 } | |
410 | |
411 views::BubbleBorder::Arrow PermissionBubbleViewViews::GetAnchorArrow() { | |
412 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) | |
413 return views::BubbleBorder::TOP_LEFT; | |
414 else | |
msw
2015/03/17 21:13:15
nit: no else after return.
hcarmona
2015/03/18 18:00:05
Done.
| |
415 return views::BubbleBorder::NONE; | |
416 } | |
417 | |
418 void PermissionBubbleViewViews::UpdateAnchorPosition() { | |
419 if (IsVisible()) | |
420 bubble_delegate_->UpdateAnchor(GetAnchorView(), GetAnchorArrow()); | |
421 } | |
422 | |
368 void PermissionBubbleViewViews::SetDelegate(Delegate* delegate) { | 423 void PermissionBubbleViewViews::SetDelegate(Delegate* delegate) { |
369 delegate_ = delegate; | 424 delegate_ = delegate; |
370 } | 425 } |
371 | 426 |
372 void PermissionBubbleViewViews::Show( | 427 void PermissionBubbleViewViews::Show( |
373 const std::vector<PermissionBubbleRequest*>& requests, | 428 const std::vector<PermissionBubbleRequest*>& requests, |
374 const std::vector<bool>& values) { | 429 const std::vector<bool>& values) { |
375 if (bubble_delegate_ != NULL) | 430 if (bubble_delegate_ != NULL) |
376 bubble_delegate_->Close(); | 431 bubble_delegate_->Close(); |
377 | 432 |
378 bubble_delegate_ = | 433 bubble_delegate_ = |
379 new PermissionsBubbleDelegateView(anchor_view_, this, languages_, | 434 new PermissionsBubbleDelegateView(GetAnchorView(), GetAnchorArrow(), this, |
380 requests, values); | 435 languages_, requests, values); |
381 views::BubbleDelegateView::CreateBubble(bubble_delegate_)->Show(); | 436 views::BubbleDelegateView::CreateBubble(bubble_delegate_)->Show(); |
382 bubble_delegate_->SizeToContents(); | 437 bubble_delegate_->SizeToContents(); |
383 } | 438 } |
384 | 439 |
385 bool PermissionBubbleViewViews::CanAcceptRequestUpdate() { | 440 bool PermissionBubbleViewViews::CanAcceptRequestUpdate() { |
386 return !(bubble_delegate_ && bubble_delegate_->IsMouseHovered()); | 441 return !(bubble_delegate_ && bubble_delegate_->IsMouseHovered()); |
387 } | 442 } |
388 | 443 |
389 void PermissionBubbleViewViews::Hide() { | 444 void PermissionBubbleViewViews::Hide() { |
390 if (bubble_delegate_) { | 445 if (bubble_delegate_) { |
(...skipping 20 matching lines...) Expand all Loading... | |
411 | 466 |
412 void PermissionBubbleViewViews::Accept() { | 467 void PermissionBubbleViewViews::Accept() { |
413 if (delegate_) | 468 if (delegate_) |
414 delegate_->Accept(); | 469 delegate_->Accept(); |
415 } | 470 } |
416 | 471 |
417 void PermissionBubbleViewViews::Deny() { | 472 void PermissionBubbleViewViews::Deny() { |
418 if (delegate_) | 473 if (delegate_) |
419 delegate_->Deny(); | 474 delegate_->Deny(); |
420 } | 475 } |
OLD | NEW |