Continue threading context through unit tests.
- views_unittest now passes with the assert that checks that we have context.
- ash_unittest...is making progress towards that and this patch is already big.
BUG=161882
Review URL: https://codereview.chromium.org/11795004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@175389 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/ash/display/shared_display_edge_indicator.cc b/ash/display/shared_display_edge_indicator.cc
index 1abbbf5a..2ad597e 100644
--- a/ash/display/shared_display_edge_indicator.cc
+++ b/ash/display/shared_display_edge_indicator.cc
@@ -9,6 +9,7 @@
#include "ash/wm/coordinate_conversion.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/aura/client/screen_position_client.h"
+#include "ui/aura/root_window.h"
#include "ui/base/animation/throb_animation.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/display.h"
@@ -51,6 +52,9 @@
params.transparent = true;
params.can_activate = false;
params.keep_on_top = true;
+ // We set the context to the primary root window; this is OK because the ash
+ // stacking controller will still place us in the correct RootWindow.
+ params.context = Shell::GetPrimaryRootWindow();
widget->set_focus_on_creation(false);
widget->Init(params);
widget->SetVisibilityChangedAnimationsEnabled(false);
diff --git a/ash/extended_desktop_unittest.cc b/ash/extended_desktop_unittest.cc
index 29f8b88..5517f3c 100644
--- a/ash/extended_desktop_unittest.cc
+++ b/ash/extended_desktop_unittest.cc
@@ -33,24 +33,6 @@
namespace ash {
namespace {
-views::Widget* CreateTestWidgetWithParent(views::Widget* parent,
- const gfx::Rect& bounds,
- bool child) {
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
- if (parent)
- params.parent = parent->GetNativeView();
- params.bounds = bounds;
- params.child = child;
- views::Widget* widget = new views::Widget;
- widget->Init(params);
- widget->Show();
- return widget;
-}
-
-views::Widget* CreateTestWidget(const gfx::Rect& bounds) {
- return CreateTestWidgetWithParent(NULL, bounds, false);
-}
-
void SetSecondaryDisplayLayout(DisplayLayout::Position position) {
DisplayController* display_controller =
Shell::GetInstance()->display_controller();
@@ -104,7 +86,36 @@
} // namespace
-typedef test::AshTestBase ExtendedDesktopTest;
+class ExtendedDesktopTest : public test::AshTestBase {
+ public:
+ views::Widget* CreateTestWidget(const gfx::Rect& bounds) {
+ return CreateTestWidgetWithParentAndContext(
+ NULL, CurrentContext(), bounds, false);
+ }
+
+ views::Widget* CreateTestWidgetWithParent(views::Widget* parent,
+ const gfx::Rect& bounds,
+ bool child) {
+ CHECK(parent);
+ return CreateTestWidgetWithParentAndContext(parent, NULL, bounds, child);
+ }
+
+ views::Widget* CreateTestWidgetWithParentAndContext(views::Widget* parent,
+ gfx::NativeView context,
+ const gfx::Rect& bounds,
+ bool child) {
+ views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
+ if (parent)
+ params.parent = parent->GetNativeView();
+ params.context = context;
+ params.bounds = bounds;
+ params.child = child;
+ views::Widget* widget = new views::Widget;
+ widget->Init(params);
+ widget->Show();
+ return widget;
+ }
+};
// Test conditions that root windows in extended desktop mode
// must satisfy.
@@ -170,8 +181,10 @@
EXPECT_EQ(root_windows[0], Shell::GetActiveRootWindow());
// Open system modal. Make sure it's on 2nd root window and active.
- views::Widget* modal_widget = views::Widget::CreateWindowWithBounds(
- new ModalWidgetDelegate(), gfx::Rect(1200, 100, 100, 100));
+ views::Widget* modal_widget = views::Widget::CreateWindowWithContextAndBounds(
+ new ModalWidgetDelegate(),
+ CurrentContext(),
+ gfx::Rect(1200, 100, 100, 100));
modal_widget->Show();
EXPECT_TRUE(wm::IsActiveWindow(modal_widget->GetNativeView()));
EXPECT_EQ(root_windows[1], modal_widget->GetNativeView()->GetRootWindow());
@@ -608,8 +621,7 @@
TEST_F(ExtendedDesktopTest, StayInSameRootWindow) {
UpdateDisplay("100x100,200x200");
Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
- views::Widget* w1 = CreateTestWidgetWithParent(
- NULL, gfx::Rect(10, 10, 50, 50), false);
+ views::Widget* w1 = CreateTestWidget(gfx::Rect(10, 10, 50, 50));
EXPECT_EQ(root_windows[0], w1->GetNativeView()->GetRootWindow());
w1->SetBounds(gfx::Rect(150, 10, 50, 50));
EXPECT_EQ(root_windows[1], w1->GetNativeView()->GetRootWindow());
diff --git a/ash/root_window_controller_unittest.cc b/ash/root_window_controller_unittest.cc
index 793e03c2..8dac9d3 100644
--- a/ash/root_window_controller_unittest.cc
+++ b/ash/root_window_controller_unittest.cc
@@ -76,41 +76,42 @@
DISALLOW_COPY_AND_ASSIGN(DeleteOnBlurDelegate);
};
-views::Widget* CreateTestWidget(const gfx::Rect& bounds) {
- views::Widget* widget =
- views::Widget::CreateWindowWithBounds(NULL, bounds);
- widget->Show();
- return widget;
-}
-
-views::Widget* CreateModalWidget(const gfx::Rect& bounds) {
- views::Widget* widget =
- views::Widget::CreateWindowWithBounds(new TestDelegate(true), bounds);
- widget->Show();
- return widget;
-}
-
-views::Widget* CreateModalWidgetWithParent(const gfx::Rect& bounds,
- gfx::NativeWindow parent) {
- views::Widget* widget =
- views::Widget::CreateWindowWithParentAndBounds(new TestDelegate(true),
- parent,
- bounds);
- widget->Show();
- return widget;
-}
-
-aura::Window* GetModalContainer(aura::RootWindow* root_window) {
- return Shell::GetContainer(
- root_window,
- ash::internal::kShellWindowId_SystemModalContainer);
-}
-
} // namespace
namespace test {
-typedef test::AshTestBase RootWindowControllerTest;
+class RootWindowControllerTest : public test::AshTestBase {
+ public:
+ views::Widget* CreateTestWidget(const gfx::Rect& bounds) {
+ views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds(
+ NULL, CurrentContext(), bounds);
+ widget->Show();
+ return widget;
+ }
+
+ views::Widget* CreateModalWidget(const gfx::Rect& bounds) {
+ views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds(
+ new TestDelegate(true), CurrentContext(), bounds);
+ widget->Show();
+ return widget;
+ }
+
+ views::Widget* CreateModalWidgetWithParent(const gfx::Rect& bounds,
+ gfx::NativeWindow parent) {
+ views::Widget* widget =
+ views::Widget::CreateWindowWithParentAndBounds(new TestDelegate(true),
+ parent,
+ bounds);
+ widget->Show();
+ return widget;
+ }
+
+ aura::Window* GetModalContainer(aura::RootWindow* root_window) {
+ return Shell::GetContainer(
+ root_window,
+ ash::internal::kShellWindowId_SystemModalContainer);
+ }
+};
TEST_F(RootWindowControllerTest, MoveWindows_Basic) {
UpdateDisplay("600x600,500x500");
diff --git a/ash/screen_ash_unittest.cc b/ash/screen_ash_unittest.cc
index 79e5627..2320877 100644
--- a/ash/screen_ash_unittest.cc
+++ b/ash/screen_ash_unittest.cc
@@ -25,11 +25,11 @@
Shell::GetPrimaryRootWindowController()->SetShelfAutoHideBehavior(
ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS);
- views::Widget* primary =
- views::Widget::CreateWindowWithBounds(NULL, gfx::Rect(10, 10, 100, 100));
+ views::Widget* primary = views::Widget::CreateWindowWithContextAndBounds(
+ NULL, CurrentContext(), gfx::Rect(10, 10, 100, 100));
primary->Show();
- views::Widget* secondary =
- views::Widget::CreateWindowWithBounds(NULL, gfx::Rect(610, 10, 100, 100));
+ views::Widget* secondary = views::Widget::CreateWindowWithContextAndBounds(
+ NULL, CurrentContext(), gfx::Rect(610, 10, 100, 100));
secondary->Show();
// Maximized bounds
@@ -60,11 +60,11 @@
TEST_F(ScreenAshTest, ConvertRect) {
UpdateDisplay("600x600,500x500");
- views::Widget* primary =
- views::Widget::CreateWindowWithBounds(NULL, gfx::Rect(10, 10, 100, 100));
+ views::Widget* primary = views::Widget::CreateWindowWithContextAndBounds(
+ NULL, CurrentContext(), gfx::Rect(10, 10, 100, 100));
primary->Show();
- views::Widget* secondary =
- views::Widget::CreateWindowWithBounds(NULL, gfx::Rect(610, 10, 100, 100));
+ views::Widget* secondary = views::Widget::CreateWindowWithContextAndBounds(
+ NULL, CurrentContext(), gfx::Rect(610, 10, 100, 100));
secondary->Show();
EXPECT_EQ(
diff --git a/ash/shell/toplevel_window.cc b/ash/shell/toplevel_window.cc
index cb5f301..2a104bb 100644
--- a/ash/shell/toplevel_window.cc
+++ b/ash/shell/toplevel_window.cc
@@ -4,8 +4,12 @@
#include "ash/shell/toplevel_window.h"
+#include "ash/display/display_controller.h"
+#include "ash/display/display_manager.h"
+#include "ash/shell.h"
#include "ash/wm/property_util.h"
#include "base/utf_string_conversions.h"
+#include "ui/aura/root_window.h"
#include "ui/aura/window.h"
#include "ui/gfx/canvas.h"
#include "ui/views/widget/widget.h"
@@ -24,9 +28,14 @@
static int count = 0;
int x = count == 0 ? 150 : 750;
count = (count + 1) % 2;
- views::Widget* widget =
- views::Widget::CreateWindowWithBounds(new ToplevelWindow(params),
- gfx::Rect(x, 150, 300, 300));
+
+ gfx::Rect bounds(x, 150, 300, 300);
+ gfx::Display display =
+ ash::Shell::GetInstance()->display_manager()->GetDisplayMatching(bounds);
+ aura::RootWindow* root = ash::Shell::GetInstance()->display_controller()->
+ GetRootWindowForDisplayId(display.id());
+ views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds(
+ new ToplevelWindow(params), root, bounds);
widget->GetNativeView()->SetName("Examples:ToplevelWindow");
if (params.persist_across_all_workspaces) {
SetPersistsAcrossAllWorkspaces(
diff --git a/ash/shell/window_type_launcher.cc b/ash/shell/window_type_launcher.cc
index c8d34dd5..448a3d1 100644
--- a/ash/shell/window_type_launcher.cc
+++ b/ash/shell/window_type_launcher.cc
@@ -322,7 +322,8 @@
ModalWindow::OpenModalWindow(GetWidget()->GetNativeView(),
ui::MODAL_TYPE_WINDOW);
} else if (sender == child_modal_button_) {
- views::test::CreateChildModalParent();
+ views::test::CreateChildModalParent(
+ GetWidget()->GetNativeView()->GetRootWindow());
} else if (sender == transient_button_) {
NonModalTransient::OpenNonModalTransient(GetWidget()->GetNativeView());
} else if (sender == show_hide_window_button_) {
diff --git a/ash/shell_unittest.cc b/ash/shell_unittest.cc
index ec3c01d..a1851ff6 100644
--- a/ash/shell_unittest.cc
+++ b/ash/shell_unittest.cc
@@ -31,12 +31,6 @@
namespace {
-views::Widget* CreateTestWindow(const views::Widget::InitParams& params) {
- views::Widget* widget = new views::Widget;
- widget->Init(params);
- return widget;
-}
-
aura::Window* GetDefaultContainer() {
return Shell::GetContainer(
Shell::GetPrimaryRootWindow(),
@@ -82,22 +76,6 @@
root_window, internal::kShellWindowId_OverlayContainer));
}
-void TestCreateWindow(views::Widget::InitParams::Type type,
- bool always_on_top,
- aura::Window* expected_container) {
- views::Widget::InitParams widget_params(type);
- widget_params.keep_on_top = always_on_top;
-
- views::Widget* widget = CreateTestWindow(widget_params);
- widget->Show();
-
- EXPECT_TRUE(expected_container->Contains(
- widget->GetNativeWindow()->parent())) <<
- "TestCreateWindow: type=" << type << ", always_on_top=" << always_on_top;
-
- widget->Close();
-}
-
class ModalWindow : public views::WidgetDelegateView {
public:
ModalWindow() {}
@@ -123,7 +101,33 @@
} // namespace
-typedef test::AshTestBase ShellTest;
+class ShellTest : public test::AshTestBase {
+ public:
+ views::Widget* CreateTestWindow(views::Widget::InitParams params) {
+ views::Widget* widget = new views::Widget;
+ params.context = CurrentContext();
+ widget->Init(params);
+ return widget;
+ }
+
+ void TestCreateWindow(views::Widget::InitParams::Type type,
+ bool always_on_top,
+ aura::Window* expected_container) {
+ views::Widget::InitParams widget_params(type);
+ widget_params.keep_on_top = always_on_top;
+
+ views::Widget* widget = CreateTestWindow(widget_params);
+ widget->Show();
+
+ EXPECT_TRUE(
+ expected_container->Contains(widget->GetNativeWindow()->parent())) <<
+ "TestCreateWindow: type=" << type << ", always_on_top=" <<
+ always_on_top;
+
+ widget->Close();
+}
+
+};
TEST_F(ShellTest, CreateWindow) {
// Normal window should be created in default container.
diff --git a/ash/test/ash_test_base.cc b/ash/test/ash_test_base.cc
index 2f486755..cedb895 100644
--- a/ash/test/ash_test_base.cc
+++ b/ash/test/ash_test_base.cc
@@ -98,6 +98,14 @@
display_manager_test_api.UpdateDisplay(display_specs);
}
+aura::RootWindow* AshTestBase::CurrentContext() {
+ aura::RootWindow* root_window = Shell::GetActiveRootWindow();
+ if (!root_window)
+ root_window = Shell::GetPrimaryRootWindow();
+ DCHECK(root_window);
+ return root_window;
+}
+
aura::Window* AshTestBase::CreateTestWindowInShellWithId(int id) {
return CreateTestWindowInShellWithDelegate(NULL, id, gfx::Rect());
}
diff --git a/ash/test/ash_test_base.h b/ash/test/ash_test_base.h
index 7a1c23b..40ae938 100644
--- a/ash/test/ash_test_base.h
+++ b/ash/test/ash_test_base.h
@@ -56,6 +56,11 @@
// See ash::test::DisplayManagerTestApi::UpdateDisplay for more details.
void UpdateDisplay(const std::string& display_specs);
+ // Returns a RootWindow. Usually this is the active RootWindow, but that
+ // method can return NULL sometimes, and in those cases, we fall back on the
+ // primary RootWindow.
+ aura::RootWindow* CurrentContext();
+
// Versions of the functions in aura::test:: that go through our shell
// StackingController instead of taking a parent.
aura::Window* CreateTestWindowInShellWithId(int id);
diff --git a/ash/wm/custom_frame_view_ash_unittest.cc b/ash/wm/custom_frame_view_ash_unittest.cc
index f81d299..eb05df8 100644
--- a/ash/wm/custom_frame_view_ash_unittest.cc
+++ b/ash/wm/custom_frame_view_ash_unittest.cc
@@ -79,6 +79,7 @@
views::Widget* CreateWidget() {
views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
views::Widget* widget = new views::Widget;
+ params.context = CurrentContext();
params.delegate = new TestWidgetDelegate;
widget->Init(params);
widget->Show();
diff --git a/ash/wm/frame_painter_unittest.cc b/ash/wm/frame_painter_unittest.cc
index 6ff1b5d8..9839d5e3 100644
--- a/ash/wm/frame_painter_unittest.cc
+++ b/ash/wm/frame_painter_unittest.cc
@@ -78,40 +78,44 @@
DISALLOW_COPY_AND_ASSIGN(WindowRepaintChecker);
};
-// Creates a test widget that owns its native widget.
-Widget* CreateTestWidget() {
- Widget* widget = new Widget;
- Widget::InitParams params;
- params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
- widget->Init(params);
- return widget;
-}
-
-Widget* CreateAlwaysOnTopWidget() {
- Widget* widget = new Widget;
- Widget::InitParams params;
- params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
- params.keep_on_top = true;
- widget->Init(params);
- return widget;
-}
-
-Widget* CreateResizableWidget() {
- Widget* widget = new Widget;
- Widget::InitParams params;
- params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
- params.keep_on_top = true;
- params.delegate = new ResizableWidgetDelegate(widget);
- params.type = Widget::InitParams::TYPE_WINDOW;
- widget->Init(params);
- return widget;
-}
-
} // namespace
namespace ash {
-typedef ash::test::AshTestBase FramePainterTest;
+class FramePainterTest : public ash::test::AshTestBase {
+ public:
+ // Creates a test widget that owns its native widget.
+ Widget* CreateTestWidget() {
+ Widget* widget = new Widget;
+ Widget::InitParams params;
+ params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.context = CurrentContext();
+ widget->Init(params);
+ return widget;
+ }
+
+ Widget* CreateAlwaysOnTopWidget() {
+ Widget* widget = new Widget;
+ Widget::InitParams params;
+ params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.context = CurrentContext();
+ params.keep_on_top = true;
+ widget->Init(params);
+ return widget;
+ }
+
+ Widget* CreateResizableWidget() {
+ Widget* widget = new Widget;
+ Widget::InitParams params;
+ params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.context = CurrentContext();
+ params.keep_on_top = true;
+ params.delegate = new ResizableWidgetDelegate(widget);
+ params.type = Widget::InitParams::TYPE_WINDOW;
+ widget->Init(params);
+ return widget;
+ }
+};
TEST_F(FramePainterTest, Basics) {
// Other tests might have created a FramePainter, so we cannot assert that
diff --git a/ash/wm/gestures/long_press_affordance_handler.cc b/ash/wm/gestures/long_press_affordance_handler.cc
index c66dbd3..723e392 100644
--- a/ash/wm/gestures/long_press_affordance_handler.cc
+++ b/ash/wm/gestures/long_press_affordance_handler.cc
@@ -65,6 +65,7 @@
params.keep_on_top = true;
params.accept_events = false;
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.context = root_window;
params.transparent = true;
widget->Init(params);
widget->SetOpacity(0xFF);
diff --git a/ash/wm/shelf_layout_manager_unittest.cc b/ash/wm/shelf_layout_manager_unittest.cc
index 382a477..7b071450 100644
--- a/ash/wm/shelf_layout_manager_unittest.cc
+++ b/ash/wm/shelf_layout_manager_unittest.cc
@@ -299,6 +299,7 @@
views::Widget* widget = new views::Widget;
views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
params.bounds = gfx::Rect(0, 0, 200, 200);
+ params.context = CurrentContext();
// Widget is now owned by the parent window.
widget->Init(params);
widget->SetFullscreen(true);
@@ -315,6 +316,7 @@
views::Widget* widget = new views::Widget;
views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
params.bounds = gfx::Rect(0, 0, 200, 200);
+ params.context = CurrentContext();
// Widget is now owned by the parent window.
widget->Init(params);
widget->Maximize();
@@ -381,6 +383,7 @@
views::Widget* widget = new views::Widget;
views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
params.bounds = gfx::Rect(0, 0, 200, 200);
+ params.context = CurrentContext();
// Widget is now owned by the parent window.
widget->Init(params);
widget->Maximize();
@@ -403,6 +406,7 @@
views::Widget::InitParams lock_params(
views::Widget::InitParams::TYPE_WINDOW);
lock_params.bounds = gfx::Rect(0, 0, 200, 200);
+ params.context = CurrentContext();
lock_params.parent = lock_container;
// Widget is now owned by the parent window.
lock_widget->Init(lock_params);
@@ -432,6 +436,7 @@
views::Widget* widget = new views::Widget;
views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
params.bounds = gfx::Rect(0, 0, 200, 200);
+ params.context = CurrentContext();
// Widget is now owned by the parent window.
widget->Init(params);
widget->Show();
@@ -476,6 +481,7 @@
views::Widget* widget = new views::Widget;
views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
params.bounds = gfx::Rect(0, 0, 200, 200);
+ params.context = CurrentContext();
// Widget is now owned by the parent window.
widget->Init(params);
widget->Show();
@@ -676,6 +682,7 @@
views::Widget* widget = new views::Widget;
views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
params.bounds = gfx::Rect(0, 0, 200, 200);
+ params.context = CurrentContext();
widget->Init(params);
widget->Show();
widget->Maximize();
@@ -850,6 +857,7 @@
views::Widget* widget_one = new views::Widget;
views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
params.bounds = gfx::Rect(0, 0, 200, 200);
+ params.context = CurrentContext();
widget_one->Init(params);
widget_one->Show();
widget_one->Maximize();
diff --git a/ash/wm/system_gesture_event_filter_unittest.cc b/ash/wm/system_gesture_event_filter_unittest.cc
index abde0e6d..97d7e91 100644
--- a/ash/wm/system_gesture_event_filter_unittest.cc
+++ b/ash/wm/system_gesture_event_filter_unittest.cc
@@ -591,8 +591,8 @@
TEST_F(SystemGestureEventFilterTest, MultiFingerSwipeGestures) {
aura::RootWindow* root_window = Shell::GetPrimaryRootWindow();
- views::Widget* toplevel = views::Widget::CreateWindowWithBounds(
- new ResizableWidgetDelegate, gfx::Rect(0, 0, 100, 100));
+ views::Widget* toplevel = views::Widget::CreateWindowWithContextAndBounds(
+ new ResizableWidgetDelegate, root_window, gfx::Rect(0, 0, 100, 100));
toplevel->Show();
const int kSteps = 15;
@@ -647,8 +647,8 @@
TEST_F(SystemGestureEventFilterTest, TwoFingerDrag) {
gfx::Rect bounds(0, 0, 100, 100);
aura::RootWindow* root_window = Shell::GetPrimaryRootWindow();
- views::Widget* toplevel = views::Widget::CreateWindowWithBounds(
- new ResizableWidgetDelegate, bounds);
+ views::Widget* toplevel = views::Widget::CreateWindowWithContextAndBounds(
+ new ResizableWidgetDelegate, root_window, bounds);
toplevel->Show();
const int kSteps = 15;
@@ -703,8 +703,8 @@
TEST_F(SystemGestureEventFilterTest, WindowsWithMaxSizeDontSnap) {
gfx::Rect bounds(150, 150, 100, 100);
aura::RootWindow* root_window = Shell::GetPrimaryRootWindow();
- views::Widget* toplevel = views::Widget::CreateWindowWithBounds(
- new MaxSizeWidgetDelegate, bounds);
+ views::Widget* toplevel = views::Widget::CreateWindowWithContextAndBounds(
+ new MaxSizeWidgetDelegate, root_window, bounds);
toplevel->Show();
const int kSteps = 15;
@@ -760,8 +760,8 @@
TEST_F(SystemGestureEventFilterTest, TwoFingerDragEdge) {
gfx::Rect bounds(0, 0, 100, 100);
aura::RootWindow* root_window = Shell::GetPrimaryRootWindow();
- views::Widget* toplevel = views::Widget::CreateWindowWithBounds(
- new ResizableWidgetDelegate, bounds);
+ views::Widget* toplevel = views::Widget::CreateWindowWithContextAndBounds(
+ new ResizableWidgetDelegate, root_window, bounds);
toplevel->Show();
const int kSteps = 15;
diff --git a/ash/wm/system_modal_container_layout_manager_unittest.cc b/ash/wm/system_modal_container_layout_manager_unittest.cc
index ce8c21c..2e1ab67 100644
--- a/ash/wm/system_modal_container_layout_manager_unittest.cc
+++ b/ash/wm/system_modal_container_layout_manager_unittest.cc
@@ -58,13 +58,6 @@
explicit TestWindow(bool modal) : modal_(modal) {}
virtual ~TestWindow() {}
- static aura::Window* OpenTestWindow(aura::Window* parent, bool modal) {
- views::Widget* widget =
- views::Widget::CreateWindowWithParent(new TestWindow(modal), parent);
- widget->Show();
- return widget->GetNativeView();
- }
-
// The window needs be closed from widget in order for
// aura::client::kModalKey property to be reset.
static void CloseTestWindow(aura::Window* window) {
@@ -96,7 +89,15 @@
mouse_presses_(0) {}
virtual ~EventTestWindow() {}
- aura::Window* OpenTestWindow(aura::Window* parent) {
+ aura::Window* OpenTestWindowWithContext(aura::RootWindow* context) {
+ views::Widget* widget =
+ views::Widget::CreateWindowWithContext(this, context);
+ widget->Show();
+ return widget->GetNativeView();
+ }
+
+ aura::Window* OpenTestWindowWithParent(aura::Window* parent) {
+ DCHECK(parent);
views::Widget* widget =
views::Widget::CreateWindowWithParent(this, parent);
widget->Show();
@@ -136,11 +137,26 @@
} // namespace
-typedef AshTestBase SystemModalContainerLayoutManagerTest;
+class SystemModalContainerLayoutManagerTest : public AshTestBase {
+ public:
+ aura::Window* OpenToplevelTestWindow(bool modal) {
+ views::Widget* widget = views::Widget::CreateWindowWithContext(
+ new TestWindow(modal), CurrentContext());
+ widget->Show();
+ return widget->GetNativeView();
+ }
+
+ aura::Window* OpenTestWindowWithParent(aura::Window* parent, bool modal) {
+ views::Widget* widget =
+ views::Widget::CreateWindowWithParent(new TestWindow(modal), parent);
+ widget->Show();
+ return widget->GetNativeView();
+ }
+};
TEST_F(SystemModalContainerLayoutManagerTest, NonModalTransient) {
- scoped_ptr<aura::Window> parent(TestWindow::OpenTestWindow(NULL, false));
- aura::Window* transient = TestWindow::OpenTestWindow(parent.get(), false);
+ scoped_ptr<aura::Window> parent(OpenToplevelTestWindow(false));
+ aura::Window* transient = OpenTestWindowWithParent(parent.get(), false);
TransientWindowObserver destruction_observer;
transient->AddObserver(&destruction_observer);
@@ -153,10 +169,10 @@
}
TEST_F(SystemModalContainerLayoutManagerTest, ModalTransient) {
- scoped_ptr<aura::Window> parent(TestWindow::OpenTestWindow(NULL, false));
+ scoped_ptr<aura::Window> parent(OpenToplevelTestWindow(false));
// parent should be active.
EXPECT_TRUE(wm::IsActiveWindow(parent.get()));
- aura::Window* t1 = TestWindow::OpenTestWindow(parent.get(), true);
+ aura::Window* t1 = OpenTestWindowWithParent(parent.get(), true);
TransientWindowObserver do1;
t1->AddObserver(&do1);
@@ -173,7 +189,7 @@
EXPECT_TRUE(wm::IsActiveWindow(t1));
// Now open another modal transient parented to the original modal transient.
- aura::Window* t2 = TestWindow::OpenTestWindow(t1, true);
+ aura::Window* t2 = OpenTestWindowWithParent(t1, true);
TransientWindowObserver do2;
t2->AddObserver(&do2);
@@ -194,7 +210,7 @@
}
TEST_F(SystemModalContainerLayoutManagerTest, ModalNonTransient) {
- scoped_ptr<aura::Window> t1(TestWindow::OpenTestWindow(NULL, true));
+ scoped_ptr<aura::Window> t1(OpenToplevelTestWindow(true));
// parent should be active.
EXPECT_TRUE(wm::IsActiveWindow(t1.get()));
TransientWindowObserver do1;
@@ -213,7 +229,7 @@
EXPECT_TRUE(wm::IsActiveWindow(t1.get()));
// Now open another modal transient parented to the original modal transient.
- aura::Window* t2 = TestWindow::OpenTestWindow(t1.get(), true);
+ aura::Window* t2 = OpenTestWindowWithParent(t1.get(), true);
TransientWindowObserver do2;
t2->AddObserver(&do2);
@@ -244,14 +260,14 @@
// for a window.
TEST_F(SystemModalContainerLayoutManagerTest,
MAYBE_CanActivateAfterEndModalSession) {
- scoped_ptr<aura::Window> unrelated(TestWindow::OpenTestWindow(NULL, false));
+ scoped_ptr<aura::Window> unrelated(OpenToplevelTestWindow(false));
unrelated->SetBounds(gfx::Rect(100, 100, 50, 50));
- scoped_ptr<aura::Window> parent(TestWindow::OpenTestWindow(NULL, false));
+ scoped_ptr<aura::Window> parent(OpenToplevelTestWindow(false));
// parent should be active.
EXPECT_TRUE(wm::IsActiveWindow(parent.get()));
scoped_ptr<aura::Window> transient(
- TestWindow::OpenTestWindow(parent.get(), true));
+ OpenTestWindowWithParent(parent.get(), true));
// t1 should now be active.
EXPECT_TRUE(wm::IsActiveWindow(transient.get()));
@@ -278,7 +294,8 @@
TEST_F(SystemModalContainerLayoutManagerTest, EventFocusContainers) {
// Create a normal window and attempt to receive a click event.
EventTestWindow* main_delegate = new EventTestWindow(false);
- scoped_ptr<aura::Window> main(main_delegate->OpenTestWindow(NULL));
+ scoped_ptr<aura::Window> main(
+ main_delegate->OpenTestWindowWithContext(CurrentContext()));
EXPECT_TRUE(wm::IsActiveWindow(main.get()));
aura::test::EventGenerator e1(Shell::GetPrimaryRootWindow(), main.get());
e1.ClickLeftButton();
@@ -287,7 +304,8 @@
// Create a modal window for the main window and verify that the main window
// no longer receives mouse events.
EventTestWindow* transient_delegate = new EventTestWindow(true);
- aura::Window* transient = transient_delegate->OpenTestWindow(main.get());
+ aura::Window* transient =
+ transient_delegate->OpenTestWindowWithParent(main.get());
EXPECT_TRUE(wm::IsActiveWindow(transient));
e1.ClickLeftButton();
EXPECT_EQ(1, transient_delegate->mouse_presses());
@@ -296,7 +314,7 @@
// the mouse event instead of the modal window (crbug.com/110920).
Shell::GetInstance()->delegate()->LockScreen();
EventTestWindow* lock_delegate = new EventTestWindow(false);
- scoped_ptr<aura::Window> lock(lock_delegate->OpenTestWindow(
+ scoped_ptr<aura::Window> lock(lock_delegate->OpenTestWindowWithParent(
Shell::GetPrimaryRootWindowController()->GetContainer(
ash::internal::kShellWindowId_LockScreenContainer)));
EXPECT_TRUE(wm::IsActiveWindow(lock.get()));
@@ -306,7 +324,8 @@
// Make sure that a modal container created by the lock screen can still
// receive mouse events.
EventTestWindow* lock_modal_delegate = new EventTestWindow(true);
- aura::Window* lock_modal = lock_modal_delegate->OpenTestWindow(lock.get());
+ aura::Window* lock_modal =
+ lock_modal_delegate->OpenTestWindowWithParent(lock.get());
EXPECT_TRUE(wm::IsActiveWindow(lock_modal));
e1.ClickLeftButton();
EXPECT_EQ(1, lock_modal_delegate->mouse_presses());
@@ -328,17 +347,17 @@
internal::kShellWindowId_SystemModalContainer)->layer()->SetOpacity(0);
// Create a modal window.
- scoped_ptr<aura::Window> parent(TestWindow::OpenTestWindow(NULL, false));
+ scoped_ptr<aura::Window> parent(OpenToplevelTestWindow(false));
scoped_ptr<aura::Window> modal_window(
- TestWindow::OpenTestWindow(parent.get(), true));
+ OpenTestWindowWithParent(parent.get(), true));
parent->Show();
modal_window->Show();
}
// Verifies we generate a capture lost when showing a modal window.
TEST_F(SystemModalContainerLayoutManagerTest, ChangeCapture) {
- views::Widget* widget =
- views::Widget::CreateWindowWithParent(new TestWindow(false), NULL);
+ views::Widget* widget = views::Widget::CreateWindowWithContext(
+ new TestWindow(false), CurrentContext());
scoped_ptr<aura::Window> widget_window(widget->GetNativeView());
views::test::CaptureTrackingView* view = new views::test::CaptureTrackingView;
widget->GetContentsView()->AddChildView(view);
@@ -351,7 +370,7 @@
generator.PressLeftButton();
EXPECT_TRUE(view->got_press());
scoped_ptr<aura::Window> modal_window(
- TestWindow::OpenTestWindow(widget->GetNativeView(), true));
+ OpenTestWindowWithParent(widget->GetNativeView(), true));
modal_window->Show();
EXPECT_TRUE(view->got_capture_lost());
}
@@ -360,8 +379,8 @@
// resize.
TEST_F(SystemModalContainerLayoutManagerTest, KeepVisible) {
GetModalContainer()->SetBounds(gfx::Rect(0, 0, 1024, 768));
- scoped_ptr<aura::Window> main(TestWindow::OpenTestWindow(GetModalContainer(),
- true));
+ scoped_ptr<aura::Window> main(OpenTestWindowWithParent(GetModalContainer(),
+ true));
main->SetBounds(gfx::Rect(924, 668, 100, 100));
// We set now the bounds of the root window to something new which will
// Then trigger the repos operation.
@@ -372,9 +391,9 @@
}
TEST_F(SystemModalContainerLayoutManagerTest, ShowNormalBackgroundOrLocked) {
- scoped_ptr<aura::Window> parent(TestWindow::OpenTestWindow(NULL, false));
+ scoped_ptr<aura::Window> parent(OpenToplevelTestWindow(false));
scoped_ptr<aura::Window> modal_window(
- TestWindow::OpenTestWindow(parent.get(), true));
+ OpenTestWindowWithParent(parent.get(), true));
parent->Show();
modal_window->Show();
@@ -390,11 +409,11 @@
// Normal system modal window while locked. Shows locked system modal
// background.
Shell::GetInstance()->delegate()->LockScreen();
- scoped_ptr<aura::Window> lock_parent(TestWindow::OpenTestWindow(
+ scoped_ptr<aura::Window> lock_parent(OpenTestWindowWithParent(
Shell::GetPrimaryRootWindowController()->GetContainer(
ash::internal::kShellWindowId_LockScreenContainer),
false));
- scoped_ptr<aura::Window> lock_modal_window(TestWindow::OpenTestWindow(
+ scoped_ptr<aura::Window> lock_modal_window(OpenTestWindowWithParent(
lock_parent.get(), true));
lock_parent->Show();
lock_modal_window->Show();
@@ -405,7 +424,7 @@
// Normal system modal window while locked, but it belongs to the normal
// window. Shouldn't show locked system modal background, but normal.
scoped_ptr<aura::Window> modal_window2(
- TestWindow::OpenTestWindow(parent.get(), true));
+ OpenTestWindowWithParent(parent.get(), true));
modal_window2->Show();
EXPECT_TRUE(AllRootWindowsHaveModalBackgrounds());
EXPECT_FALSE(AllRootWindowsHaveLockedModalBackgrounds());
@@ -420,7 +439,7 @@
TEST_F(SystemModalContainerLayoutManagerTest, MultiDisplays) {
UpdateDisplay("500x500,500x500");
- scoped_ptr<aura::Window> normal(TestWindow::OpenTestWindow(NULL, false));
+ scoped_ptr<aura::Window> normal(OpenToplevelTestWindow(false));
normal->SetBounds(gfx::Rect(100, 100, 50, 50));
Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
@@ -431,16 +450,16 @@
root_windows[1], ash::internal::kShellWindowId_SystemModalContainer);
scoped_ptr<aura::Window> modal1(
- TestWindow::OpenTestWindow(container1, true));
+ OpenTestWindowWithParent(container1, true));
EXPECT_TRUE(AllRootWindowsHaveModalBackgrounds());
EXPECT_TRUE(wm::IsActiveWindow(modal1.get()));
scoped_ptr<aura::Window> modal11(
- TestWindow::OpenTestWindow(container1, true));
+ OpenTestWindowWithParent(container1, true));
EXPECT_TRUE(wm::IsActiveWindow(modal11.get()));
scoped_ptr<aura::Window> modal2(
- TestWindow::OpenTestWindow(container2, true));
+ OpenTestWindowWithParent(container2, true));
EXPECT_TRUE(wm::IsActiveWindow(modal2.get()));
// Sanity check if they're on the correct containers.
diff --git a/ash/wm/window_modality_controller_unittest.cc b/ash/wm/window_modality_controller_unittest.cc
index 65927af..d7def40 100644
--- a/ash/wm/window_modality_controller_unittest.cc
+++ b/ash/wm/window_modality_controller_unittest.cc
@@ -362,9 +362,10 @@
// |child| window.
// - Focus should follow the active window.
TEST_F(WindowModalityControllerTest, ChildModal) {
- views::test::ChildModalParent* delegate = new views::test::ChildModalParent;
- views::Widget* widget = views::Widget::CreateWindowWithBounds(
- delegate, gfx::Rect(0, 0, 400, 400));
+ views::test::ChildModalParent* delegate =
+ new views::test::ChildModalParent(CurrentContext());
+ views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds(
+ delegate, CurrentContext(), gfx::Rect(0, 0, 400, 400));
widget->Show();
aura::Window* parent = widget->GetNativeView();
@@ -421,9 +422,10 @@
// Same as |ChildModal| test, but using |EventGenerator| rather than bypassing
// it by calling |ActivateWindow|.
TEST_F(WindowModalityControllerTest, ChildModalEventGenerator) {
- views::test::ChildModalParent* delegate = new views::test::ChildModalParent;
- views::Widget* widget = views::Widget::CreateWindowWithBounds(
- delegate, gfx::Rect(0, 0, 400, 400));
+ views::test::ChildModalParent* delegate =
+ new views::test::ChildModalParent(CurrentContext());
+ views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds(
+ delegate, CurrentContext(), gfx::Rect(0, 0, 400, 400));
widget->Show();
aura::Window* parent = widget->GetNativeView();
diff --git a/chrome/browser/ui/views/accessibility/accessibility_event_router_views_unittest.cc b/chrome/browser/ui/views/accessibility/accessibility_event_router_views_unittest.cc
index f464cdf..e991a22f 100644
--- a/chrome/browser/ui/views/accessibility/accessibility_event_router_views_unittest.cc
+++ b/chrome/browser/ui/views/accessibility/accessibility_event_router_views_unittest.cc
@@ -29,6 +29,7 @@
#endif
#if defined(USE_AURA)
+#include "ui/aura/root_window.h"
#include "ui/aura/test/aura_test_helper.h"
#endif
@@ -121,8 +122,14 @@
}
views::Widget* CreateWindowWithContents(views::View* contents) {
- return views::Widget::CreateWindowWithBounds(
+ gfx::NativeView context = NULL;
+#if defined(USE_AURA)
+ context = aura_test_helper_->root_window();
+#endif
+
+ return views::Widget::CreateWindowWithContextAndBounds(
new AccessibilityWindowDelegate(contents),
+ context,
gfx::Rect(0, 0, 500, 500));
}
diff --git a/chrome/browser/ui/views/first_run_bubble_unittest.cc b/chrome/browser/ui/views/first_run_bubble_unittest.cc
index d83ffb5..327b9334 100644
--- a/chrome/browser/ui/views/first_run_bubble_unittest.cc
+++ b/chrome/browser/ui/views/first_run_bubble_unittest.cc
@@ -43,7 +43,16 @@
}
TEST_F(FirstRunBubbleTest, CreateAndClose) {
- FirstRunBubble* delegate = FirstRunBubble::ShowBubble(NULL, NULL);
+ // Create the anchor and parent widgets.
+ views::Widget::InitParams params =
+ CreateParams(views::Widget::InitParams::TYPE_WINDOW);
+ params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ scoped_ptr<views::Widget> anchor_widget(new views::Widget);
+ anchor_widget->Init(params);
+ anchor_widget->Show();
+
+ FirstRunBubble* delegate =
+ FirstRunBubble::ShowBubble(NULL, anchor_widget->GetContentsView());
EXPECT_TRUE(delegate != NULL);
delegate->GetWidget()->CloseNow();
}
diff --git a/chrome/browser/ui/views/tabs/tab_unittest.cc b/chrome/browser/ui/views/tabs/tab_unittest.cc
index d35497a..5f87f93a 100644
--- a/chrome/browser/ui/views/tabs/tab_unittest.cc
+++ b/chrome/browser/ui/views/tabs/tab_unittest.cc
@@ -73,7 +73,7 @@
TEST_F(TabTest, HitTestTopPixel) {
Widget widget;
- Widget::InitParams params;
+ Widget::InitParams params(CreateParams(Widget::InitParams::TYPE_WINDOW));
params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.bounds.SetRect(10, 20, 300, 400);
widget.Init(params);
diff --git a/ui/views/test/child_modal_window.cc b/ui/views/test/child_modal_window.cc
index b3e072af..ebf1ac2 100644
--- a/ui/views/test/child_modal_window.cc
+++ b/ui/views/test/child_modal_window.cc
@@ -45,9 +45,10 @@
} // namespace
-void CreateChildModalParent() {
- Widget::CreateWindowWithBounds(
- new ChildModalParent,
+void CreateChildModalParent(gfx::NativeView context) {
+ Widget::CreateWindowWithContextAndBounds(
+ new ChildModalParent(context),
+ context,
gfx::Rect(kWindowLeft, kWindowTop, kWindowWidth, kWindowHeight))->Show();
}
@@ -106,7 +107,7 @@
return ui::MODAL_TYPE_CHILD;
}
-ChildModalParent::ChildModalParent()
+ChildModalParent::ChildModalParent(gfx::NativeView context)
: ALLOW_THIS_IN_INITIALIZER_LIST(button_(new NativeTextButton(
this, ASCIIToUTF16("Show/Hide Child Modal Window")))),
textfield_(new Textfield),
@@ -114,7 +115,9 @@
modal_parent_(NULL),
child_(NULL) {
Widget* widget = new Widget;
- widget->Init(Widget::InitParams(Widget::InitParams::TYPE_CONTROL));
+ Widget::InitParams params(Widget::InitParams::TYPE_CONTROL);
+ params.context = context;
+ widget->Init(params);
widget->GetRootView()->set_background(
Background::CreateSolidBackground(kModalParentColor));
modal_parent_ = widget->GetNativeView();
diff --git a/ui/views/test/child_modal_window.h b/ui/views/test/child_modal_window.h
index f7fb8cbe..455df7c 100644
--- a/ui/views/test/child_modal_window.h
+++ b/ui/views/test/child_modal_window.h
@@ -17,13 +17,13 @@
class Widget;
namespace test {
-void CreateChildModalParent();
+void CreateChildModalParent(gfx::NativeView context);
class ChildModalParent : public WidgetDelegateView,
public ButtonListener,
public WidgetObserver {
public:
- ChildModalParent();
+ ChildModalParent(gfx::NativeView context);
virtual ~ChildModalParent();
void ShowChild();
diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc
index e819d14..293510f 100644
--- a/ui/views/view_unittest.cc
+++ b/ui/views/view_unittest.cc
@@ -840,7 +840,7 @@
TEST_F(ViewTest, RemoveNotification) {
ViewStorage* vs = ViewStorage::GetInstance();
Widget* widget = new Widget;
- widget->Init(Widget::InitParams(Widget::InitParams::TYPE_POPUP));
+ widget->Init(CreateParams(Widget::InitParams::TYPE_POPUP));
View* root_view = widget->GetRootView();
View* v1 = new View;
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
index 59d49be6..b8bb6c6 100644
--- a/ui/views/widget/widget_unittest.cc
+++ b/ui/views/widget/widget_unittest.cc
@@ -612,7 +612,7 @@
OwnershipTestState state;
Widget* widget = new OwnershipTestWidget(&state);
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
+ Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
params.native_widget =
new OwnershipTestNativeWidgetPlatform(widget, &state);
widget->Init(params);
@@ -631,7 +631,7 @@
Widget* toplevel = CreateTopLevelPlatformWidget();
Widget* widget = new OwnershipTestWidget(&state);
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
+ Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
params.native_widget =
new OwnershipTestNativeWidgetPlatform(widget, &state);
params.parent = toplevel->GetNativeView();
@@ -655,7 +655,7 @@
OwnershipTestState state;
Widget* widget = new OwnershipTestWidget(&state);
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
+ Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
params.native_widget =
new OwnershipTestNativeWidgetPlatform(widget, &state);
widget->Init(params);
@@ -680,7 +680,7 @@
Widget* toplevel = CreateTopLevelPlatformWidget();
Widget* widget = new OwnershipTestWidget(&state);
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
+ Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
params.native_widget =
new OwnershipTestNativeWidgetPlatform(widget, &state);
params.parent = toplevel->GetNativeView();
@@ -706,7 +706,7 @@
Widget* toplevel = CreateTopLevelPlatformWidget();
Widget* widget = new OwnershipTestWidget(&state);
- Widget::InitParams params(Widget::InitParams::TYPE_POPUP);
+ Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
params.native_widget =
new OwnershipTestNativeWidgetPlatform(widget, &state);
params.parent = toplevel->GetNativeView();