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

Side by Side Diff: chrome/browser/ui/views/website_settings/permissions_bubble_view.cc

Issue 1251633002: Add BubbleManager to manage bubbles and ChromeBubbleManager for events. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Apply Feedback Created 5 years, 4 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/prefs/pref_service.h" 7 #include "base/prefs/pref_service.h"
8 #include "base/strings/string16.h" 8 #include "base/strings/string16.h"
9 #include "chrome/browser/profiles/profile.h" 9 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/browser.h"
11 #include "chrome/browser/ui/browser_finder.h"
11 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h" 12 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h"
12 #include "chrome/browser/ui/views/frame/browser_view.h" 13 #include "chrome/browser/ui/views/frame/browser_view.h"
13 #include "chrome/browser/ui/views/frame/top_container_view.h" 14 #include "chrome/browser/ui/views/frame/top_container_view.h"
14 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" 15 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
15 #include "chrome/browser/ui/views/location_bar/location_icon_view.h" 16 #include "chrome/browser/ui/views/location_bar/location_icon_view.h"
16 #include "chrome/browser/ui/views/website_settings/permission_selector_view.h" 17 #include "chrome/browser/ui/views/website_settings/permission_selector_view.h"
17 #include "chrome/browser/ui/views/website_settings/permission_selector_view_obse rver.h" 18 #include "chrome/browser/ui/views/website_settings/permission_selector_view_obse rver.h"
19 #include "chrome/browser/ui/website_settings/permission_bubble_delegate.h"
20 #include "chrome/browser/ui/website_settings/permission_bubble_manager.h"
18 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" 21 #include "chrome/browser/ui/website_settings/permission_bubble_request.h"
19 #include "chrome/common/pref_names.h" 22 #include "chrome/common/pref_names.h"
20 #include "chrome/grit/generated_resources.h" 23 #include "chrome/grit/generated_resources.h"
21 #include "components/url_formatter/url_formatter.h" 24 #include "components/url_formatter/url_formatter.h"
22 #include "ui/accessibility/ax_view_state.h" 25 #include "ui/accessibility/ax_view_state.h"
23 #include "ui/base/l10n/l10n_util.h" 26 #include "ui/base/l10n/l10n_util.h"
24 #include "ui/base/models/combobox_model.h" 27 #include "ui/base/models/combobox_model.h"
25 #include "ui/base/resource/resource_bundle.h" 28 #include "ui/base/resource/resource_bundle.h"
26 #include "ui/gfx/paint_vector_icon.h" 29 #include "ui/gfx/paint_vector_icon.h"
27 #include "ui/gfx/text_constants.h" 30 #include "ui/gfx/text_constants.h"
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 frame->SetBubbleBorder(scoped_ptr<views::BubbleBorder>( 402 frame->SetBubbleBorder(scoped_ptr<views::BubbleBorder>(
400 new views::BubbleBorder(adjusted_arrow, shadow(), color()))); 403 new views::BubbleBorder(adjusted_arrow, shadow(), color())));
401 404
402 // Reposition the bubble based on the updated arrow and view. 405 // Reposition the bubble based on the updated arrow and view.
403 SetAnchorView(anchor_view); 406 SetAnchorView(anchor_view);
404 } 407 }
405 408
406 ////////////////////////////////////////////////////////////////////////////// 409 //////////////////////////////////////////////////////////////////////////////
407 // PermissionBubbleViewViews 410 // PermissionBubbleViewViews
408 411
409 PermissionBubbleViewViews::PermissionBubbleViewViews(Browser* browser) 412 PermissionBubbleViewViews::PermissionBubbleViewViews(
410 : browser_(browser), 413 PermissionBubbleManager* manager)
411 delegate_(nullptr), 414 : manager_(manager), bubble_delegate_(nullptr) {
412 bubble_delegate_(nullptr) { 415 DCHECK(manager_);
413 DCHECK(browser); 416 browser_ = chrome::FindBrowserWithWebContents(manager_->web_contents());
414 } 417 }
415 418
416 PermissionBubbleViewViews::~PermissionBubbleViewViews() { 419 PermissionBubbleViewViews::~PermissionBubbleViewViews() {
417 } 420 }
418 421
419 // static 422 // static
420 scoped_ptr<PermissionBubbleView> PermissionBubbleView::Create( 423 scoped_ptr<BubbleUI> PermissionBubbleDelegate::CreateBubble(
421 Browser* browser) { 424 PermissionBubbleManager* manager) {
422 return make_scoped_ptr(new PermissionBubbleViewViews(browser)); 425 return make_scoped_ptr(new PermissionBubbleViewViews(manager));
423 } 426 }
424 427
425 views::View* PermissionBubbleViewViews::GetAnchorView() { 428 void PermissionBubbleViewViews::Show() {
426 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_);
427
428 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
429 return browser_view->GetLocationBarView()->location_icon_view();
430
431 if (browser_view->IsFullscreenBubbleVisible())
432 return browser_view->exclusive_access_bubble()->GetView();
433
434 return browser_view->top_container();
435 }
436
437 views::BubbleBorder::Arrow PermissionBubbleViewViews::GetAnchorArrow() {
438 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
439 return views::BubbleBorder::TOP_LEFT;
440 return views::BubbleBorder::NONE;
441 }
442
443 void PermissionBubbleViewViews::SetDelegate(Delegate* delegate) {
444 delegate_ = delegate;
445 }
446
447 void PermissionBubbleViewViews::Show(
448 const std::vector<PermissionBubbleRequest*>& requests,
449 const std::vector<bool>& values) {
450 if (bubble_delegate_) 429 if (bubble_delegate_)
451 bubble_delegate_->Close(); 430 bubble_delegate_->Close();
452 431
453 bubble_delegate_ = 432 bubble_delegate_ = new PermissionsBubbleDelegateView(
454 new PermissionsBubbleDelegateView( 433 GetAnchorView(), GetAnchorArrow(), this,
455 GetAnchorView(), GetAnchorArrow(), this, 434 browser_->profile()->GetPrefs()->GetString(prefs::kAcceptLanguages),
456 browser_->profile()->GetPrefs()->GetString(prefs::kAcceptLanguages), 435 manager_->requests(), manager_->accept_states());
457 requests, values);
458 436
459 // Set |parent_window| because some valid anchors can become hidden. 437 // Set |parent_window| because some valid anchors can become hidden.
460 views::Widget* widget = views::Widget::GetWidgetForNativeWindow( 438 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(
461 browser_->window()->GetNativeWindow()); 439 browser_->window()->GetNativeWindow());
462 bubble_delegate_->set_parent_window(widget->GetNativeView()); 440 bubble_delegate_->set_parent_window(widget->GetNativeView());
463 441
464 views::BubbleDelegateView::CreateBubble(bubble_delegate_)->Show(); 442 views::BubbleDelegateView::CreateBubble(bubble_delegate_)->Show();
465 bubble_delegate_->SizeToContents(); 443 bubble_delegate_->SizeToContents();
466 } 444 }
467 445
468 bool PermissionBubbleViewViews::CanAcceptRequestUpdate() {
469 return !(bubble_delegate_ && bubble_delegate_->IsMouseHovered());
470 }
471
472 void PermissionBubbleViewViews::Hide() { 446 void PermissionBubbleViewViews::Hide() {
473 if (bubble_delegate_) { 447 if (bubble_delegate_) {
474 bubble_delegate_->Close(); 448 bubble_delegate_->Close();
475 bubble_delegate_ = nullptr; 449 bubble_delegate_ = nullptr;
476 } 450 }
477 } 451 }
478 452
479 bool PermissionBubbleViewViews::IsVisible() {
480 return bubble_delegate_ != nullptr;
481 }
482
483 void PermissionBubbleViewViews::UpdateAnchorPosition() { 453 void PermissionBubbleViewViews::UpdateAnchorPosition() {
484 if (IsVisible()) 454 if (bubble_delegate_)
485 bubble_delegate_->UpdateAnchor(GetAnchorView(), GetAnchorArrow()); 455 bubble_delegate_->UpdateAnchor(GetAnchorView(), GetAnchorArrow());
486 } 456 }
487 457
488 gfx::NativeWindow PermissionBubbleViewViews::GetNativeWindow() { 458 bool PermissionBubbleViewViews::CanAcceptUpdate() const {
489 if (bubble_delegate_ && bubble_delegate_->GetWidget()) 459 return !(bubble_delegate_ && bubble_delegate_->IsMouseHovered());
msw 2015/08/13 03:37:21 It seems odd that the mouse hovering might prevent
groby-ooo-7-16 2015/08/13 18:44:38 That was always the case for permission bubbles, t
msw 2015/08/13 19:18:58 Okay, I hope we have tests that adding a permissio
490 return bubble_delegate_->GetWidget()->GetNativeWindow();
491 return nullptr;
492 } 460 }
493 461
494 void PermissionBubbleViewViews::Closing() { 462 void PermissionBubbleViewViews::Closing() {
495 if (bubble_delegate_) 463 if (bubble_delegate_)
496 bubble_delegate_ = nullptr; 464 bubble_delegate_ = nullptr;
497 if (delegate_) 465 manager_->Closing();
498 delegate_->Closing();
499 } 466 }
500 467
501 void PermissionBubbleViewViews::Toggle(int index, bool value) { 468 void PermissionBubbleViewViews::Toggle(int index, bool value) {
502 if (delegate_) 469 manager_->ToggleAccept(index, value);
503 delegate_->ToggleAccept(index, value);
504 } 470 }
505 471
506 void PermissionBubbleViewViews::Accept() { 472 void PermissionBubbleViewViews::Accept() {
507 if (delegate_) 473 manager_->Accept();
508 delegate_->Accept();
509 } 474 }
510 475
511 void PermissionBubbleViewViews::Deny() { 476 void PermissionBubbleViewViews::Deny() {
512 if (delegate_) 477 manager_->Deny();
513 delegate_->Deny();
514 } 478 }
479
480 views::View* PermissionBubbleViewViews::GetAnchorView() {
481 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_);
482
483 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
484 return browser_view->GetLocationBarView()->location_icon_view();
485
486 if (browser_view->IsFullscreenBubbleVisible())
487 return browser_view->exclusive_access_bubble()->GetView();
488
489 return browser_view->top_container();
490 }
491
492 views::BubbleBorder::Arrow PermissionBubbleViewViews::GetAnchorArrow() {
493 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
494 return views::BubbleBorder::TOP_LEFT;
495 return views::BubbleBorder::NONE;
496 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698