Chromium Code Reviews| 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/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 Loading... | |
| 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 } | |
| OLD | NEW |