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();