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/views/exclusive_access_bubble_views.h" | 11 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h" |
| 12 #include "chrome/browser/ui/views/frame/browser_view.h" | 12 #include "chrome/browser/ui/views/frame/browser_view.h" |
| 13 #include "chrome/browser/ui/views/frame/top_container_view.h" | 13 #include "chrome/browser/ui/views/frame/top_container_view.h" |
| 14 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" | 14 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" |
| 15 #include "chrome/browser/ui/views/location_bar/location_icon_view.h" | 15 #include "chrome/browser/ui/views/location_bar/location_icon_view.h" |
| 16 #include "chrome/browser/ui/views/website_settings/permission_selector_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_obse rver.h" | 17 #include "chrome/browser/ui/views/website_settings/permission_selector_view_obse rver.h" |
| 18 #include "chrome/browser/ui/website_settings/permission_bubble_delegate.h" | |
| 18 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" | 19 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" |
| 19 #include "chrome/common/pref_names.h" | 20 #include "chrome/common/pref_names.h" |
| 20 #include "chrome/grit/generated_resources.h" | 21 #include "chrome/grit/generated_resources.h" |
| 21 #include "components/url_formatter/url_formatter.h" | 22 #include "components/url_formatter/url_formatter.h" |
| 22 #include "ui/accessibility/ax_view_state.h" | 23 #include "ui/accessibility/ax_view_state.h" |
| 23 #include "ui/base/l10n/l10n_util.h" | 24 #include "ui/base/l10n/l10n_util.h" |
| 24 #include "ui/base/models/combobox_model.h" | 25 #include "ui/base/models/combobox_model.h" |
| 25 #include "ui/base/resource/resource_bundle.h" | 26 #include "ui/base/resource/resource_bundle.h" |
| 26 #include "ui/gfx/paint_vector_icon.h" | 27 #include "ui/gfx/paint_vector_icon.h" |
| 27 #include "ui/gfx/text_constants.h" | 28 #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>( | 400 frame->SetBubbleBorder(scoped_ptr<views::BubbleBorder>( |
| 400 new views::BubbleBorder(adjusted_arrow, shadow(), color()))); | 401 new views::BubbleBorder(adjusted_arrow, shadow(), color()))); |
| 401 | 402 |
| 402 // Reposition the bubble based on the updated arrow and view. | 403 // Reposition the bubble based on the updated arrow and view. |
| 403 SetAnchorView(anchor_view); | 404 SetAnchorView(anchor_view); |
| 404 } | 405 } |
| 405 | 406 |
| 406 ////////////////////////////////////////////////////////////////////////////// | 407 ////////////////////////////////////////////////////////////////////////////// |
| 407 // PermissionBubbleViewViews | 408 // PermissionBubbleViewViews |
| 408 | 409 |
| 409 PermissionBubbleViewViews::PermissionBubbleViewViews(Browser* browser) | 410 PermissionBubbleViewViews::PermissionBubbleViewViews( |
| 410 : browser_(browser), | 411 PermissionBubbleDelegate* delegate, Browser* browser) |
| 411 delegate_(nullptr), | 412 : delegate_(delegate), |
| 413 browser_(browser), | |
| 412 bubble_delegate_(nullptr) { | 414 bubble_delegate_(nullptr) { |
| 413 DCHECK(browser); | 415 DCHECK(delegate); |
|
please use gerrit instead
2015/08/07 23:02:26
let's not remove dcheck of browser.
hcarmona
2015/08/11 02:35:45
Acknowledged.
| |
| 414 } | 416 } |
| 415 | 417 |
| 416 PermissionBubbleViewViews::~PermissionBubbleViewViews() { | 418 PermissionBubbleViewViews::~PermissionBubbleViewViews() { |
| 417 } | 419 } |
| 418 | 420 |
| 419 // static | 421 // static |
| 420 scoped_ptr<PermissionBubbleView> PermissionBubbleView::Create( | 422 scoped_ptr<BubbleUI> PermissionBubbleView::Create( |
| 423 PermissionBubbleDelegate* delegate, | |
| 421 Browser* browser) { | 424 Browser* browser) { |
| 422 return make_scoped_ptr(new PermissionBubbleViewViews(browser)); | 425 return make_scoped_ptr(new PermissionBubbleViewViews(delegate, browser)); |
| 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( |
| 456 browser_->profile()->GetPrefs()->GetString(prefs::kAcceptLanguages), | 435 prefs::kAcceptLanguages), |
| 457 requests, values); | 436 delegate_->GetRequests(), delegate_->GetAcceptStates()); |
| 458 | 437 |
| 459 // Set |parent_window| because some valid anchors can become hidden. | 438 // Set |parent_window| because some valid anchors can become hidden. |
| 460 views::Widget* widget = views::Widget::GetWidgetForNativeWindow( | 439 views::Widget* widget = views::Widget::GetWidgetForNativeWindow( |
| 461 browser_->window()->GetNativeWindow()); | 440 browser_->window()->GetNativeWindow()); |
| 462 bubble_delegate_->set_parent_window(widget->GetNativeView()); | 441 bubble_delegate_->set_parent_window(widget->GetNativeView()); |
| 463 | 442 |
| 464 views::BubbleDelegateView::CreateBubble(bubble_delegate_)->Show(); | 443 views::BubbleDelegateView::CreateBubble(bubble_delegate_)->Show(); |
| 465 bubble_delegate_->SizeToContents(); | 444 bubble_delegate_->SizeToContents(); |
| 466 } | 445 } |
| 467 | 446 |
| 468 bool PermissionBubbleViewViews::CanAcceptRequestUpdate() { | |
| 469 return !(bubble_delegate_ && bubble_delegate_->IsMouseHovered()); | |
| 470 } | |
| 471 | |
| 472 void PermissionBubbleViewViews::Hide() { | 447 void PermissionBubbleViewViews::Hide() { |
| 473 if (bubble_delegate_) { | 448 if (bubble_delegate_) { |
| 474 bubble_delegate_->Close(); | 449 bubble_delegate_->Close(); |
| 475 bubble_delegate_ = nullptr; | 450 bubble_delegate_ = nullptr; |
| 476 } | 451 } |
| 477 } | 452 } |
| 478 | 453 |
| 479 bool PermissionBubbleViewViews::IsVisible() { | |
| 480 return bubble_delegate_ != nullptr; | |
| 481 } | |
| 482 | |
| 483 void PermissionBubbleViewViews::UpdateAnchorPosition() { | 454 void PermissionBubbleViewViews::UpdateAnchorPosition() { |
| 484 if (IsVisible()) | 455 if (bubble_delegate_) |
| 485 bubble_delegate_->UpdateAnchor(GetAnchorView(), GetAnchorArrow()); | 456 bubble_delegate_->UpdateAnchor(GetAnchorView(), GetAnchorArrow()); |
| 486 } | 457 } |
| 487 | 458 |
| 488 gfx::NativeWindow PermissionBubbleViewViews::GetNativeWindow() { | 459 bool PermissionBubbleViewViews::CanAcceptRequestUpdate() { |
| 489 if (bubble_delegate_ && bubble_delegate_->GetWidget()) | 460 return !(bubble_delegate_ && bubble_delegate_->IsMouseHovered()); |
| 490 return bubble_delegate_->GetWidget()->GetNativeWindow(); | |
| 491 return nullptr; | |
| 492 } | 461 } |
| 493 | 462 |
| 494 void PermissionBubbleViewViews::Closing() { | 463 void PermissionBubbleViewViews::Closing() { |
| 495 if (bubble_delegate_) | 464 if (bubble_delegate_) |
| 496 bubble_delegate_ = nullptr; | 465 bubble_delegate_ = nullptr; |
| 497 if (delegate_) | 466 if (delegate_) |
| 498 delegate_->Closing(); | 467 delegate_->Closing(); |
| 499 } | 468 } |
| 500 | 469 |
| 501 void PermissionBubbleViewViews::Toggle(int index, bool value) { | 470 void PermissionBubbleViewViews::Toggle(int index, bool value) { |
| 502 if (delegate_) | 471 if (delegate_) |
| 503 delegate_->ToggleAccept(index, value); | 472 delegate_->ToggleAccept(index, value); |
| 504 } | 473 } |
| 505 | 474 |
| 506 void PermissionBubbleViewViews::Accept() { | 475 void PermissionBubbleViewViews::Accept() { |
| 507 if (delegate_) | 476 if (delegate_) |
| 508 delegate_->Accept(); | 477 delegate_->Accept(); |
| 509 } | 478 } |
| 510 | 479 |
| 511 void PermissionBubbleViewViews::Deny() { | 480 void PermissionBubbleViewViews::Deny() { |
| 512 if (delegate_) | 481 if (delegate_) |
| 513 delegate_->Deny(); | 482 delegate_->Deny(); |
| 514 } | 483 } |
| 484 | |
| 485 views::View* PermissionBubbleViewViews::GetAnchorView() { | |
| 486 BrowserView* browser_view = | |
| 487 BrowserView::GetBrowserViewForBrowser(browser_); | |
| 488 | |
| 489 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) | |
| 490 return browser_view->GetLocationBarView()->location_icon_view(); | |
| 491 | |
| 492 if (browser_view->IsFullscreenBubbleVisible()) | |
| 493 return browser_view->exclusive_access_bubble()->GetView(); | |
| 494 | |
| 495 return browser_view->top_container(); | |
| 496 } | |
| 497 | |
| 498 views::BubbleBorder::Arrow PermissionBubbleViewViews::GetAnchorArrow() { | |
| 499 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) | |
| 500 return views::BubbleBorder::TOP_LEFT; | |
| 501 return views::BubbleBorder::NONE; | |
| 502 } | |
| OLD | NEW |