Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/passwords/manage_passwords_bubble_view.h" | 5 #include "chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h" |
| 6 | 6 |
| 7 #include "chrome/browser/chrome_notification_types.h" | 7 #include "chrome/browser/chrome_notification_types.h" |
| 8 #include "chrome/browser/ui/browser.h" | 8 #include "chrome/browser/ui/browser.h" |
| 9 #include "chrome/browser/ui/browser_finder.h" | 9 #include "chrome/browser/ui/browser_finder.h" |
| 10 #include "chrome/browser/ui/fullscreen/fullscreen_controller.h" | 10 #include "chrome/browser/ui/fullscreen/fullscreen_controller.h" |
| 11 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" | 11 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" |
| 12 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" | 12 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" |
| 13 #include "chrome/browser/ui/passwords/save_password_refusal_combobox_model.h" | 13 #include "chrome/browser/ui/passwords/save_password_refusal_combobox_model.h" |
| 14 #include "chrome/browser/ui/views/frame/browser_view.h" | 14 #include "chrome/browser/ui/views/frame/browser_view.h" |
| 15 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" | 15 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" |
| 16 #include "chrome/browser/ui/views/passwords/credentials_item_view.h" | 16 #include "chrome/browser/ui/views/passwords/credentials_item_view.h" |
| 17 #include "chrome/browser/ui/views/passwords/manage_password_item_view.h" | 17 #include "chrome/browser/ui/views/passwords/manage_password_item_view.h" |
| 18 #include "chrome/browser/ui/views/passwords/manage_passwords_icon_view.h" | 18 #include "chrome/browser/ui/views/passwords/manage_passwords_icon_view.h" |
| 19 #include "chrome/grit/generated_resources.h" | 19 #include "chrome/grit/generated_resources.h" |
| 20 #include "content/public/browser/notification_source.h" | 20 #include "content/public/browser/notification_source.h" |
| 21 #include "content/public/browser/render_view_host.h" | 21 #include "content/public/browser/render_view_host.h" |
| 22 #include "content/public/browser/web_contents.h" | 22 #include "content/public/browser/web_contents.h" |
| 23 #include "ui/aura/window.h" | |
| 24 #include "ui/base/l10n/l10n_util.h" | 23 #include "ui/base/l10n/l10n_util.h" |
| 25 #include "ui/base/resource/resource_bundle.h" | 24 #include "ui/base/resource/resource_bundle.h" |
| 26 #include "ui/views/controls/button/blue_button.h" | 25 #include "ui/views/controls/button/blue_button.h" |
| 27 #include "ui/views/controls/button/label_button.h" | 26 #include "ui/views/controls/button/label_button.h" |
| 28 #include "ui/views/controls/combobox/combobox.h" | 27 #include "ui/views/controls/combobox/combobox.h" |
| 29 #include "ui/views/controls/combobox/combobox_listener.h" | 28 #include "ui/views/controls/combobox/combobox_listener.h" |
| 30 #include "ui/views/controls/link.h" | 29 #include "ui/views/controls/link.h" |
| 31 #include "ui/views/controls/link_listener.h" | 30 #include "ui/views/controls/link_listener.h" |
| 32 #include "ui/views/controls/styled_label.h" | 31 #include "ui/views/controls/styled_label.h" |
| 33 #include "ui/views/controls/styled_label_listener.h" | 32 #include "ui/views/controls/styled_label_listener.h" |
| 33 #include "ui/views/event_monitor.h" | |
| 34 #include "ui/views/layout/fill_layout.h" | 34 #include "ui/views/layout/fill_layout.h" |
| 35 #include "ui/views/layout/grid_layout.h" | 35 #include "ui/views/layout/grid_layout.h" |
| 36 #include "ui/views/layout/layout_constants.h" | 36 #include "ui/views/layout/layout_constants.h" |
| 37 #include "ui/views/widget/widget.h" | 37 #include "ui/views/widget/widget.h" |
| 38 | 38 |
| 39 | 39 |
| 40 // Helpers -------------------------------------------------------------------- | 40 // Helpers -------------------------------------------------------------------- |
| 41 | 41 |
| 42 namespace { | 42 namespace { |
| 43 | 43 |
| (...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 707 } | 707 } |
| 708 | 708 |
| 709 // ManagePasswordsBubbleView::WebContentMouseHandler -------------------------- | 709 // ManagePasswordsBubbleView::WebContentMouseHandler -------------------------- |
| 710 | 710 |
| 711 // The class listens for WebContentsView events and notifies the bubble if the | 711 // The class listens for WebContentsView events and notifies the bubble if the |
| 712 // view was clicked on or received keystrokes. | 712 // view was clicked on or received keystrokes. |
| 713 class ManagePasswordsBubbleView::WebContentMouseHandler | 713 class ManagePasswordsBubbleView::WebContentMouseHandler |
| 714 : public ui::EventHandler { | 714 : public ui::EventHandler { |
| 715 public: | 715 public: |
| 716 explicit WebContentMouseHandler(ManagePasswordsBubbleView* bubble); | 716 explicit WebContentMouseHandler(ManagePasswordsBubbleView* bubble); |
| 717 ~WebContentMouseHandler() override; | |
| 718 | 717 |
| 719 void OnKeyEvent(ui::KeyEvent* event) override; | 718 void OnKeyEvent(ui::KeyEvent* event) override; |
| 720 void OnMouseEvent(ui::MouseEvent* event) override; | 719 void OnMouseEvent(ui::MouseEvent* event) override; |
| 721 | 720 |
| 722 private: | 721 private: |
| 723 aura::Window* GetWebContentsWindow(); | |
| 724 | |
| 725 ManagePasswordsBubbleView* bubble_; | 722 ManagePasswordsBubbleView* bubble_; |
| 723 scoped_ptr<views::EventMonitor> event_monitor_; | |
| 726 | 724 |
| 727 DISALLOW_COPY_AND_ASSIGN(WebContentMouseHandler); | 725 DISALLOW_COPY_AND_ASSIGN(WebContentMouseHandler); |
| 728 }; | 726 }; |
| 729 | 727 |
| 730 ManagePasswordsBubbleView::WebContentMouseHandler::WebContentMouseHandler( | 728 ManagePasswordsBubbleView::WebContentMouseHandler::WebContentMouseHandler( |
| 731 ManagePasswordsBubbleView* bubble) | 729 ManagePasswordsBubbleView* bubble) |
| 732 : bubble_(bubble) { | 730 : bubble_(bubble) { |
| 733 GetWebContentsWindow()->AddPreTargetHandler(this); | 731 content::WebContents* web_contents = bubble_->web_contents(); |
| 734 } | 732 if (web_contents) { |
| 735 | 733 gfx::NativeWindow target_window = web_contents->GetTopLevelNativeWindow(); |
| 736 ManagePasswordsBubbleView::WebContentMouseHandler::~WebContentMouseHandler() { | 734 event_monitor_.reset(views::EventMonitor::Create(this, target_window)); |
|
tapted
2014/11/21 00:57:34
can you make the views::EventMonitor::Create* retu
Andre
2014/12/10 00:18:13
Done.
| |
| 737 if (aura::Window* window = GetWebContentsWindow()) | 735 } |
| 738 window->RemovePreTargetHandler(this); | |
| 739 } | 736 } |
| 740 | 737 |
| 741 void ManagePasswordsBubbleView::WebContentMouseHandler::OnKeyEvent( | 738 void ManagePasswordsBubbleView::WebContentMouseHandler::OnKeyEvent( |
| 742 ui::KeyEvent* event) { | 739 ui::KeyEvent* event) { |
| 743 content::WebContents* web_contents = bubble_->model()->web_contents(); | 740 content::WebContents* web_contents = bubble_->web_contents(); |
| 744 content::RenderViewHost* rvh = web_contents->GetRenderViewHost(); | 741 content::RenderViewHost* rvh = web_contents->GetRenderViewHost(); |
| 745 if (rvh->IsFocusedElementEditable() && | 742 if (rvh->IsFocusedElementEditable() && |
| 746 event->type() == ui::ET_KEY_PRESSED) | 743 event->type() == ui::ET_KEY_PRESSED) |
| 747 bubble_->Close(); | 744 bubble_->Close(); |
| 748 } | 745 } |
| 749 | 746 |
| 750 void ManagePasswordsBubbleView::WebContentMouseHandler::OnMouseEvent( | 747 void ManagePasswordsBubbleView::WebContentMouseHandler::OnMouseEvent( |
| 751 ui::MouseEvent* event) { | 748 ui::MouseEvent* event) { |
| 752 if (event->type() == ui::ET_MOUSE_PRESSED) | 749 if (event->type() == ui::ET_MOUSE_PRESSED) |
| 753 bubble_->Close(); | 750 bubble_->Close(); |
| 754 } | 751 } |
| 755 | 752 |
| 756 aura::Window* | |
| 757 ManagePasswordsBubbleView::WebContentMouseHandler::GetWebContentsWindow() { | |
| 758 content::WebContents* web_contents = bubble_->model()->web_contents(); | |
| 759 return web_contents ? web_contents->GetNativeView() : NULL; | |
| 760 } | |
| 761 | |
| 762 // ManagePasswordsBubbleView -------------------------------------------------- | 753 // ManagePasswordsBubbleView -------------------------------------------------- |
| 763 | 754 |
| 764 // static | 755 // static |
| 765 ManagePasswordsBubbleView* ManagePasswordsBubbleView::manage_passwords_bubble_ = | 756 ManagePasswordsBubbleView* ManagePasswordsBubbleView::manage_passwords_bubble_ = |
| 766 NULL; | 757 NULL; |
| 767 | 758 |
| 768 // static | 759 // static |
| 769 void ManagePasswordsBubbleView::ShowBubble(content::WebContents* web_contents, | 760 void ManagePasswordsBubbleView::ShowBubble(content::WebContents* web_contents, |
| 770 DisplayReason reason) { | 761 DisplayReason reason) { |
| 771 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); | 762 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); |
| 772 DCHECK(browser); | 763 DCHECK(browser); |
| 773 DCHECK(browser->window()); | 764 DCHECK(browser->window()); |
| 774 DCHECK(browser->fullscreen_controller()); | 765 DCHECK(browser->fullscreen_controller()); |
| 775 | 766 |
| 776 if (IsShowing()) | 767 if (IsShowing()) |
| 777 return; | 768 return; |
| 778 | 769 |
| 779 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser); | 770 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser); |
| 780 bool is_fullscreen = browser_view->IsFullscreen(); | 771 bool is_fullscreen = browser_view->IsFullscreen(); |
| 781 ManagePasswordsIconView* anchor_view = | 772 ManagePasswordsIconView* anchor_view = |
| 782 is_fullscreen | 773 is_fullscreen |
| 783 ? NULL | 774 ? NULL |
| 784 : browser_view->GetLocationBarView()->manage_passwords_icon_view(); | 775 : browser_view->GetLocationBarView()->manage_passwords_icon_view(); |
| 785 manage_passwords_bubble_ = new ManagePasswordsBubbleView( | 776 manage_passwords_bubble_ = new ManagePasswordsBubbleView( |
| 786 web_contents, anchor_view, reason); | 777 web_contents, anchor_view, reason); |
| 787 | 778 |
| 788 if (is_fullscreen) { | 779 if (is_fullscreen) { |
|
tapted
2014/11/20 22:39:02
nit: no curlies
Andre
2014/12/10 00:18:13
Done.
| |
| 789 manage_passwords_bubble_->set_parent_window( | 780 manage_passwords_bubble_->set_parent_window(web_contents->GetNativeView()); |
| 790 web_contents->GetTopLevelNativeWindow()); | |
| 791 } | 781 } |
| 792 | 782 |
| 793 views::BubbleDelegateView::CreateBubble(manage_passwords_bubble_); | 783 views::BubbleDelegateView::CreateBubble(manage_passwords_bubble_); |
| 794 | 784 |
| 795 // Adjust for fullscreen after creation as it relies on the content size. | 785 // Adjust for fullscreen after creation as it relies on the content size. |
| 796 if (is_fullscreen) { | 786 if (is_fullscreen) { |
| 797 manage_passwords_bubble_->AdjustForFullscreen( | 787 manage_passwords_bubble_->AdjustForFullscreen( |
| 798 browser_view->GetBoundsInScreen()); | 788 browser_view->GetBoundsInScreen()); |
| 799 } | 789 } |
| 800 if (reason == AUTOMATIC) | 790 if (reason == AUTOMATIC) |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 933 } | 923 } |
| 934 | 924 |
| 935 void ManagePasswordsBubbleView::Observe( | 925 void ManagePasswordsBubbleView::Observe( |
| 936 int type, | 926 int type, |
| 937 const content::NotificationSource& source, | 927 const content::NotificationSource& source, |
| 938 const content::NotificationDetails& details) { | 928 const content::NotificationDetails& details) { |
| 939 DCHECK_EQ(type, chrome::NOTIFICATION_FULLSCREEN_CHANGED); | 929 DCHECK_EQ(type, chrome::NOTIFICATION_FULLSCREEN_CHANGED); |
| 940 GetWidget()->SetVisibilityAnimationTransition(views::Widget::ANIMATE_NONE); | 930 GetWidget()->SetVisibilityAnimationTransition(views::Widget::ANIMATE_NONE); |
| 941 CloseBubble(); | 931 CloseBubble(); |
| 942 } | 932 } |
| OLD | NEW |