summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/login/screen_locker_browsertest.cc8
-rw-r--r--chrome/browser/chromeos/login/screen_locker_tester.cc5
-rw-r--r--chrome/browser/chromeos/login/screen_locker_tester.h2
-rw-r--r--views/widget/widget_gtk.cc9
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(