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

Side by Side Diff: chrome/browser/chromeos/login/screen_locker_views.cc

Issue 8557005: Rebase the MessageBubble on the new views bubble. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments. Created 9 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/chromeos/login/screen_locker_views.h" 5 #include "chrome/browser/chromeos/login/screen_locker_views.h"
6 6
7 #include <X11/extensions/XTest.h> 7 #include <X11/extensions/XTest.h>
8 #include <X11/keysym.h> 8 #include <X11/keysym.h>
9 #include <gdk/gdkkeysyms.h> 9 #include <gdk/gdkkeysyms.h>
10 #include <gdk/gdkx.h> 10 #include <gdk/gdkx.h>
11 11
12 // Evil hack to undo X11 evil #define. 12 // Evil hack to undo X11 evil #define.
13 #undef None 13 #undef None
14 #undef Status 14 #undef Status
15 15
16 #include "base/command_line.h" 16 #include "base/command_line.h"
17 #include "base/utf_string_conversions.h" 17 #include "base/utf_string_conversions.h"
18 #include "chrome/browser/chromeos/login/background_view.h" 18 #include "chrome/browser/chromeos/login/background_view.h"
19 #include "chrome/browser/chromeos/login/login_performer.h" 19 #include "chrome/browser/chromeos/login/login_performer.h"
20 #include "chrome/browser/chromeos/login/message_bubble.h" 20 #include "chrome/browser/chromeos/login/message_bubble.h"
21 #include "chrome/browser/chromeos/login/screen_lock_view.h" 21 #include "chrome/browser/chromeos/login/screen_lock_view.h"
22 #include "chrome/browser/chromeos/login/screen_locker.h" 22 #include "chrome/browser/chromeos/login/screen_locker.h"
23 #include "chrome/browser/chromeos/login/shutdown_button.h" 23 #include "chrome/browser/chromeos/login/shutdown_button.h"
24 #include "chrome/browser/chromeos/status/status_area_view_chromeos.h" 24 #include "chrome/browser/chromeos/status/status_area_view_chromeos.h"
25 #include "chrome/browser/chromeos/view_ids.h" 25 #include "chrome/browser/chromeos/view_ids.h"
26 #include "chrome/browser/prefs/pref_service.h" 26 #include "chrome/browser/prefs/pref_service.h"
27 #include "chrome/browser/ui/views/window.h"
27 #include "chrome/common/chrome_switches.h" 28 #include "chrome/common/chrome_switches.h"
28 #include "chrome/common/pref_names.h" 29 #include "chrome/common/pref_names.h"
29 #include "content/browser/user_metrics.h" 30 #include "content/browser/user_metrics.h"
30 #include "grit/theme_resources.h" 31 #include "grit/theme_resources.h"
31 #include "ui/base/resource/resource_bundle.h" 32 #include "ui/base/resource/resource_bundle.h"
32 #include "ui/base/x/x11_util.h" 33 #include "ui/base/x/x11_util.h"
33 #include "ui/gfx/screen.h" 34 #include "ui/gfx/screen.h"
35 #include "ui/views/controls/textfield/textfield.h"
34 36
35 #if defined(TOOLKIT_USES_GTK) 37 #if defined(TOOLKIT_USES_GTK)
36 #include "chrome/browser/chromeos/legacy_window_manager/wm_ipc.h" 38 #include "chrome/browser/chromeos/legacy_window_manager/wm_ipc.h"
39 #include "ui/views/widget/native_widget_gtk.h"
37 #endif 40 #endif
38 41
39 namespace { 42 namespace {
40 43
41 // The active ScreenLockerDelegate. 44 // The active ScreenLockerDelegate.
42 chromeos::ScreenLockerViews* screen_locker_view_ = NULL; 45 chromeos::ScreenLockerViews* screen_locker_view_ = NULL;
43 46
44 // The maximum duration for which locker should try to grab the keyboard and 47 // The maximum duration for which locker should try to grab the keyboard and
45 // mouse and its interval for regrabbing on failure. 48 // mouse and its interval for regrabbing on failure.
46 const int kMaxGrabFailureSec = 30; 49 const int kMaxGrabFailureSec = 30;
(...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 screen_lock_view_->SetVisible(false); 809 screen_lock_view_->SetVisible(false);
807 grab_container_->SetScreenLockView(captcha_view_); 810 grab_container_->SetScreenLockView(captcha_view_);
808 background_container_->SetScreenLockView(captcha_view_); 811 background_container_->SetScreenLockView(captcha_view_);
809 captcha_view_->SetVisible(true); 812 captcha_view_->SetVisible(true);
810 // Take ScreenLockView ownership now that it's removed from grab_container_. 813 // Take ScreenLockView ownership now that it's removed from grab_container_.
811 secondary_view_.reset(screen_lock_view_); 814 secondary_view_.reset(screen_lock_view_);
812 } 815 }
813 816
814 void ScreenLockerViews::ClearErrors() { 817 void ScreenLockerViews::ClearErrors() {
815 if (error_info_) { 818 if (error_info_) {
816 error_info_->Close(); 819 error_info_->GetWidget()->Close();
817 error_info_ = NULL; 820 error_info_ = NULL;
818 } 821 }
819 } 822 }
820 823
821 void ScreenLockerViews::BubbleClosing(Bubble* bubble, bool closed_by_escape) { 824 void ScreenLockerViews::OnWidgetClosing(views::Widget* widget) {
825 if (!error_info_ || error_info_->GetWidget() != widget)
826 return;
827
822 error_info_ = NULL; 828 error_info_ = NULL;
823 SetSignoutEnabled(true); 829 SetSignoutEnabled(true);
824 if (mouse_event_relay_.get()) { 830 if (mouse_event_relay_.get()) {
825 MessageLoopForUI::current()->RemoveObserver(mouse_event_relay_.get()); 831 MessageLoopForUI::current()->RemoveObserver(mouse_event_relay_.get());
826 mouse_event_relay_.reset(); 832 mouse_event_relay_.reset();
827 } 833 }
828 } 834 }
829 835
830 bool ScreenLockerViews::CloseOnEscape() {
831 return true;
832 }
833
834 bool ScreenLockerViews::FadeInOnShow() {
835 return false;
836 }
837
838 void ScreenLockerViews::OnLinkActivated(size_t index) {
839 }
840
841 void ScreenLockerViews::OnCaptchaEntered(const std::string& captcha) { 836 void ScreenLockerViews::OnCaptchaEntered(const std::string& captcha) {
842 // Captcha dialog is only shown when LoginPerformer instance exists, 837 // Captcha dialog is only shown when LoginPerformer instance exists,
843 // i.e. blocking UI after password change is in place. 838 // i.e. blocking UI after password change is in place.
844 DCHECK(LoginPerformer::default_performer()); 839 DCHECK(LoginPerformer::default_performer());
845 LoginPerformer::default_performer()->set_captcha(captcha); 840 LoginPerformer::default_performer()->set_captcha(captcha);
846 841
847 // ScreenLockView ownership is passed to grab_container_. 842 // ScreenLockView ownership is passed to grab_container_.
848 // Need to save return value here so that compile 843 // Need to save return value here so that compile
849 // doesn't fail with "unused result" warning. 844 // doesn't fail with "unused result" warning.
850 ignore_result(secondary_view_.release()); 845 ignore_result(secondary_view_.release());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 void ScreenLockerViews::OnWindowManagerReady() { 878 void ScreenLockerViews::OnWindowManagerReady() {
884 DVLOG(1) << "OnClientEvent: drawn for lock"; 879 DVLOG(1) << "OnClientEvent: drawn for lock";
885 drawn_ = true; 880 drawn_ = true;
886 if (input_grabbed_) 881 if (input_grabbed_)
887 ScreenLockReady(); 882 ScreenLockReady();
888 } 883 }
889 884
890 void ScreenLockerViews::ShowErrorBubble( 885 void ScreenLockerViews::ShowErrorBubble(
891 const string16& message, 886 const string16& message,
892 views::BubbleBorder::ArrowLocation arrow_location) { 887 views::BubbleBorder::ArrowLocation arrow_location) {
893 if (error_info_) 888 ClearErrors();
894 error_info_->Close();
895 889
896 gfx::Rect rect = screen_lock_view_->GetPasswordBoundsRelativeTo( 890 // TODO(nkostylev): Add help link.
897 lock_widget_->GetRootView()); 891 std::vector<string16> help_links;
898 gfx::Rect lock_widget_bounds = lock_widget_->GetClientAreaScreenBounds(); 892 error_info_ = new MessageBubble(
899 rect.Offset(lock_widget_bounds.x(), lock_widget_bounds.y()); 893 screen_lock_view_->password_field(),
900 error_info_ = MessageBubble::ShowNoGrab(
901 lock_window_,
902 rect,
903 arrow_location, 894 arrow_location,
904 ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_WARNING), 895 ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_WARNING),
905 UTF16ToWide(message), 896 message,
906 UTF16ToWide(string16()), // TODO(nkostylev): Add help link. 897 help_links);
907 this); 898 browser::CreateViewsBubbleAboveLockScreen(error_info_);
899 error_info_->Show();
900 error_info_->GetWidget()->AddObserver(this);
908 901
909 #if !defined(TOUCH_UI) 902 #if !defined(TOUCH_UI)
910 if (mouse_event_relay_.get()) 903 if (mouse_event_relay_.get())
911 MessageLoopForUI::current()->RemoveObserver(mouse_event_relay_.get()); 904 MessageLoopForUI::current()->RemoveObserver(mouse_event_relay_.get());
905 // TODO(oshima|msw): Investigate MouseEventRelay problems: crosbug.com/23324.
912 mouse_event_relay_.reset( 906 mouse_event_relay_.reset(
913 new MouseEventRelay(lock_widget_->GetNativeView()->window, 907 new MouseEventRelay(lock_widget_->GetNativeView()->window,
914 error_info_->GetNativeView()->window)); 908 error_info_->GetWidget()->GetNativeView()->window));
915 MessageLoopForUI::current()->AddObserver(mouse_event_relay_.get()); 909 MessageLoopForUI::current()->AddObserver(mouse_event_relay_.get());
916 #endif 910 #endif
917 } 911 }
918 912
919 bool ScreenLockerViews::AcceleratorPressed( 913 bool ScreenLockerViews::AcceleratorPressed(
920 const ui::Accelerator& accelerator) { 914 const ui::Accelerator& accelerator) {
921 if (!background_view_->IsScreenSaverVisible()) { 915 if (!background_view_->IsScreenSaverVisible()) {
922 screen_locker_view_->StartScreenSaver(); 916 screen_locker_view_->StartScreenSaver();
923 return true; 917 return true;
924 } 918 }
925 return false; 919 return false;
926 } 920 }
927 921
928 void ScreenLockerViews::OnClientEvent(GtkWidget* widge, GdkEventClient* event) { 922 void ScreenLockerViews::OnClientEvent(GtkWidget* widge, GdkEventClient* event) {
929 #if defined(TOOLKIT_USES_GTK) 923 #if defined(TOOLKIT_USES_GTK)
930 WmIpc::Message msg; 924 WmIpc::Message msg;
931 WmIpc::instance()->DecodeMessage(*event, &msg); 925 WmIpc::instance()->DecodeMessage(*event, &msg);
932 if (msg.type() == WM_IPC_MESSAGE_CHROME_NOTIFY_SCREEN_REDRAWN_FOR_LOCK) { 926 if (msg.type() == WM_IPC_MESSAGE_CHROME_NOTIFY_SCREEN_REDRAWN_FOR_LOCK) {
933 OnWindowManagerReady(); 927 OnWindowManagerReady();
934 } 928 }
935 #endif 929 #endif
936 } 930 }
937 931
938 } // namespace chromeos 932 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698