diff options
4 files changed, 24 insertions, 0 deletions
diff --git a/chrome/browser/chromeos/login/screen_locker_browsertest.cc b/chrome/browser/chromeos/login/screen_locker_browsertest.cc index b8e1985..5706e4d 100644 --- a/chrome/browser/chromeos/login/screen_locker_browsertest.cc +++ b/chrome/browser/chromeos/login/screen_locker_browsertest.cc @@ -172,6 +172,14 @@ IN_PROC_BROWSER_TEST_F(ScreenLockerTest, TestBasic) { ui_test_utils::WaitForNotification( NotificationType::SCREEN_LOCK_STATE_CHANGED); + // Test to make sure that the widget is actually appearing and is of + // reasonable size, preventing a regression of + // http://code.google.com/p/chromium-os/issues/detail?id=5987 + gfx::Rect lock_bounds; + tester->GetChildWidget()->GetBounds(&lock_bounds, true); + EXPECT_GT(lock_bounds.width(), 10); + EXPECT_GT(lock_bounds.height(), 10); + tester->InjectMockAuthenticator("user", "pass"); EXPECT_TRUE(tester->IsLocked()); tester->EnterPassword("fail"); diff --git a/chrome/browser/chromeos/login/screen_locker_tester.cc b/chrome/browser/chromeos/login/screen_locker_tester.cc index f49a246..f2c844b 100644 --- a/chrome/browser/chromeos/login/screen_locker_tester.cc +++ b/chrome/browser/chromeos/login/screen_locker_tester.cc @@ -65,6 +65,11 @@ views::Widget* ScreenLockerTester::GetWidget() { return ScreenLocker::screen_locker_->lock_window_; } +views::Widget* ScreenLockerTester::GetChildWidget() { + DCHECK(ScreenLocker::screen_locker_); + return ScreenLocker::screen_locker_->lock_widget_; +} + } // namespace test } // namespace chromeos diff --git a/chrome/browser/chromeos/login/screen_locker_tester.h b/chrome/browser/chromeos/login/screen_locker_tester.h index 9dd1bf9..bc8800e 100644 --- a/chrome/browser/chromeos/login/screen_locker_tester.h +++ b/chrome/browser/chromeos/login/screen_locker_tester.h @@ -39,6 +39,8 @@ class ScreenLockerTester { // Returns the widget for screen locker window. views::Widget* GetWidget(); + views::Widget* GetChildWidget(); + private: friend class chromeos::ScreenLocker; diff --git a/views/widget/widget_gtk.cc b/views/widget/widget_gtk.cc index f74eef13..0a129f6 100644 --- a/views/widget/widget_gtk.cc +++ b/views/widget/widget_gtk.cc @@ -1413,6 +1413,15 @@ void WidgetGtk::CreateGtkWidget(GtkWidget* parent, const gfx::Rect& bounds) { DCHECK(GTK_WIDGET_REALIZED(widget_)); gdk_window_set_composited(widget_->window, true); } + if (!bounds.size().IsEmpty()) { + // Make sure that an widget is given it's initial size before + // we're done initializing, to take care of some potential + // corner cases when programmatically arranging hierarchies as + // seen in + // http://code.google.com/p/chromium-os/issues/detail?id=5987 + GtkAllocation alloc = { 0, 0, bounds.width(), bounds.height() }; + gtk_widget_size_allocate(widget_, &alloc); + } } else { // Use our own window class to override GtkWindow's move_focus method. widget_ = gtk_views_window_new( |