summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorerg@chromium.org <erg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-09 21:42:35 +0000
committererg@chromium.org <erg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-09 21:42:35 +0000
commitdc904a636d578e2134e5911c98b7e00831be5bd8 (patch)
tree8341a71bcb4138695f1a79437ae3be93ea8f2611
parent3159ca547dd7af238e0f18c1a33c1b3f6e830d22 (diff)
downloadchromium_src-dc904a636d578e2134e5911c98b7e00831be5bd8.zip
chromium_src-dc904a636d578e2134e5911c98b7e00831be5bd8.tar.gz
chromium_src-dc904a636d578e2134e5911c98b7e00831be5bd8.tar.bz2
More work to make ash_unittests pass when we require context.
With the context checking DCHECK, ash_unittests and unit_tests now run on chromeos. BUG=161882 Review URL: https://chromiumcodereview.appspot.com/11801027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@175892 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--ash/accelerators/accelerator_controller.cc2
-rw-r--r--ash/drag_drop/drag_drop_controller.cc2
-rw-r--r--ash/drag_drop/drag_image_view.cc7
-rw-r--r--ash/drag_drop/drag_image_view.h2
-rw-r--r--ash/launcher/launcher_tooltip_manager_unittest.cc23
-rw-r--r--ash/launcher/launcher_view_unittest.cc20
-rw-r--r--ash/shell/widgets.cc5
-rw-r--r--ash/shell/window_type_launcher.cc6
-rw-r--r--chrome/browser/chromeos/input_method/candidate_window_view_unittest.cc6
-rw-r--r--chrome/browser/ui/views/extensions/native_app_window_views.cc3
-rw-r--r--ui/oak/oak.h2
-rw-r--r--ui/oak/oak_window.cc9
-rw-r--r--ui/views/controls/table/table_view_unittest.cc19
-rw-r--r--ui/views/test/views_test_base.cc8
-rw-r--r--ui/views/test/views_test_base.h4
-rw-r--r--ui/views/widget/widget.cc12
-rw-r--r--ui/views/widget/widget.h14
17 files changed, 109 insertions, 35 deletions
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc
index e2399f2..2827d91 100644
--- a/ash/accelerators/accelerator_controller.cc
+++ b/ash/accelerators/accelerator_controller.cc
@@ -629,7 +629,7 @@ bool AcceleratorController::PerformAction(int action,
case SHOW_OAK:
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kAshEnableOak)) {
- oak::ShowOakWindow();
+ oak::ShowOakWindowWithContext(Shell::GetPrimaryRootWindow());
return true;
}
break;
diff --git a/ash/drag_drop/drag_drop_controller.cc b/ash/drag_drop/drag_drop_controller.cc
index 30362e2..9477f98 100644
--- a/ash/drag_drop/drag_drop_controller.cc
+++ b/ash/drag_drop/drag_drop_controller.cc
@@ -152,7 +152,7 @@ int DragDropController::StartDragAndDrop(
drag_image_final_bounds_for_cancel_animation_ = gfx::Rect(
start_location - provider->GetDragImageOffset(),
provider->GetDragImage().size());
- drag_image_.reset(new DragImageView);
+ drag_image_.reset(new DragImageView(source_window->GetRootWindow()));
drag_image_->SetImage(provider->GetDragImage());
drag_image_offset_ = provider->GetDragImageOffset();
gfx::Rect drag_image_bounds(start_location, drag_image_->GetPreferredSize());
diff --git a/ash/drag_drop/drag_image_view.cc b/ash/drag_drop/drag_image_view.cc
index acb4292..066b99c 100644
--- a/ash/drag_drop/drag_image_view.cc
+++ b/ash/drag_drop/drag_image_view.cc
@@ -18,11 +18,12 @@ namespace internal {
namespace {
using views::Widget;
-Widget* CreateDragWidget() {
+Widget* CreateDragWidget(gfx::NativeView context) {
Widget* drag_widget = new Widget;
Widget::InitParams params;
params.type = Widget::InitParams::TYPE_TOOLTIP;
params.keep_on_top = true;
+ params.context = context;
params.accept_events = false;
params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.transparent = true;
@@ -34,8 +35,8 @@ Widget* CreateDragWidget() {
}
}
-DragImageView::DragImageView() : views::ImageView() {
- widget_.reset(CreateDragWidget());
+DragImageView::DragImageView(gfx::NativeView context) : views::ImageView() {
+ widget_.reset(CreateDragWidget(context));
widget_->SetContentsView(this);
widget_->SetAlwaysOnTop(true);
diff --git a/ash/drag_drop/drag_image_view.h b/ash/drag_drop/drag_image_view.h
index d8db83c..c2791c4 100644
--- a/ash/drag_drop/drag_image_view.h
+++ b/ash/drag_drop/drag_image_view.h
@@ -16,7 +16,7 @@ namespace internal {
class DragImageView : public views::ImageView {
public:
- DragImageView();
+ explicit DragImageView(gfx::NativeView context);
virtual ~DragImageView();
// Sets the bounds of the native widget in screen
diff --git a/ash/launcher/launcher_tooltip_manager_unittest.cc b/ash/launcher/launcher_tooltip_manager_unittest.cc
index 249b0a0..7cc972a 100644
--- a/ash/launcher/launcher_tooltip_manager_unittest.cc
+++ b/ash/launcher/launcher_tooltip_manager_unittest.cc
@@ -6,6 +6,7 @@
#include "ash/root_window_controller.h"
#include "ash/shell.h"
+#include "ash/shell_window_ids.h"
#include "ash/test/ash_test_base.h"
#include "ash/wm/shelf_layout_manager.h"
#include "ash/wm/window_util.h"
@@ -51,12 +52,12 @@ class LauncherTooltipManagerTest : public AshTestBase {
}
void ShowDelayed() {
- dummy_anchor_.reset(new views::View);
+ CreateWidget();
tooltip_manager_->ShowDelayed(dummy_anchor_.get(), string16());
}
void ShowImmediately() {
- dummy_anchor_.reset(new views::View);
+ CreateWidget();
tooltip_manager_->ShowImmediately(dummy_anchor_.get(), string16());
}
@@ -77,10 +78,27 @@ class LauncherTooltipManagerTest : public AshTestBase {
}
protected:
+ scoped_ptr<views::Widget> widget_;
scoped_ptr<views::View> dummy_anchor_;
scoped_ptr<internal::LauncherTooltipManager> tooltip_manager_;
private:
+ void CreateWidget() {
+ dummy_anchor_.reset(new views::View);
+
+ widget_.reset(new views::Widget);
+ views::Widget::InitParams params(
+ views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
+ params.transparent = true;
+ params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.parent = Shell::GetContainer(
+ Shell::GetPrimaryRootWindow(),
+ ash::internal::kShellWindowId_LauncherContainer);
+
+ widget_->Init(params);
+ widget_->SetContentsView(dummy_anchor_.get());
+ }
+
DISALLOW_COPY_AND_ASSIGN(LauncherTooltipManagerTest);
};
@@ -103,6 +121,7 @@ TEST_F(LauncherTooltipManagerTest, HideWhenShelfIsHidden) {
scoped_ptr<views::Widget> widget(new views::Widget);
views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.context = CurrentContext();
widget->Init(params);
widget->SetFullscreen(true);
widget->Show();
diff --git a/ash/launcher/launcher_view_unittest.cc b/ash/launcher/launcher_view_unittest.cc
index 2c5ade8..d03b639 100644
--- a/ash/launcher/launcher_view_unittest.cc
+++ b/ash/launcher/launcher_view_unittest.cc
@@ -14,6 +14,7 @@
#include "ash/launcher/launcher_tooltip_manager.h"
#include "ash/root_window_controller.h"
#include "ash/shell.h"
+#include "ash/shell_window_ids.h"
#include "ash/test/ash_test_base.h"
#include "ash/test/launcher_view_test_api.h"
#include "ash/test/test_launcher_delegate.h"
@@ -21,6 +22,7 @@
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "grit/ash_resources.h"
+#include "ui/aura/root_window.h"
#include "ui/aura/test/aura_test_base.h"
#include "ui/aura/window.h"
#include "ui/base/events/event.h"
@@ -109,6 +111,7 @@ TEST_F(LauncherViewIconObserverTest, AddRemove) {
views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.bounds = gfx::Rect(0, 0, 200, 200);
+ params.context = CurrentContext();
scoped_ptr<views::Widget> widget(new views::Widget());
widget->Init(params);
@@ -200,6 +203,20 @@ class LauncherViewTest : public AshTestBase {
}
protected:
+ void EnsureViewIsInWidget() {
+ widget_.reset(new views::Widget);
+ views::Widget::InitParams params(
+ views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
+ params.transparent = true;
+ params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.parent = Shell::GetContainer(
+ Shell::GetPrimaryRootWindow(),
+ ash::internal::kShellWindowId_LauncherContainer);
+
+ widget_->Init(params);
+ widget_->SetContentsView(launcher_view_.get());
+ }
+
LauncherID AddAppShortcut() {
LauncherItem item;
item.type = TYPE_APP_SHORTCUT;
@@ -341,6 +358,7 @@ class LauncherViewTest : public AshTestBase {
MockLauncherDelegate delegate_;
scoped_ptr<LauncherModel> model_;
+ scoped_ptr<views::Widget> widget_;
scoped_ptr<internal::LauncherView> launcher_view_;
scoped_ptr<LauncherViewTestAPI> test_api_;
@@ -682,6 +700,8 @@ TEST_F(LauncherViewTest, LauncherItemStatusPlatformApp) {
}
TEST_F(LauncherViewTest, LauncherTooltipTest) {
+ EnsureViewIsInWidget();
+
ASSERT_EQ(test_api_->GetLastVisibleIndex() + 1,
test_api_->GetButtonCount());
diff --git a/ash/shell/widgets.cc b/ash/shell/widgets.cc
index cc32fd2..e83a603 100644
--- a/ash/shell/widgets.cc
+++ b/ash/shell/widgets.cc
@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "ash/shell.h"
#include "base/utf_string_conversions.h" // ASCIIToUTF16
+#include "ui/aura/root_window.h"
#include "ui/aura/window.h"
#include "ui/gfx/canvas.h"
#include "ui/views/controls/button/checkbox.h"
@@ -131,7 +133,8 @@ namespace shell {
void CreateWidgetsWindow() {
gfx::Rect bounds(kWindowLeft, kWindowTop, kWindowWidth, kWindowHeight);
views::Widget* widget =
- views::Widget::CreateWindowWithBounds(new WidgetsWindow, bounds);
+ views::Widget::CreateWindowWithContextAndBounds(
+ new WidgetsWindow, Shell::GetPrimaryRootWindow(), bounds);
widget->GetNativeView()->SetName("WidgetsWindow");
widget->Show();
}
diff --git a/ash/shell/window_type_launcher.cc b/ash/shell/window_type_launcher.cc
index 448a3d1..e923a15 100644
--- a/ash/shell/window_type_launcher.cc
+++ b/ash/shell/window_type_launcher.cc
@@ -183,8 +183,10 @@ void AddViewToLayout(views::GridLayout* layout, views::View* view) {
void InitWindowTypeLauncher() {
views::Widget* widget =
- views::Widget::CreateWindowWithBounds(new WindowTypeLauncher,
- gfx::Rect(120, 150, 300, 410));
+ views::Widget::CreateWindowWithContextAndBounds(
+ new WindowTypeLauncher,
+ Shell::GetPrimaryRootWindow(),
+ gfx::Rect(120, 150, 300, 410));
widget->GetNativeView()->SetName("WindowTypeLauncher");
views::corewm::SetShadowType(widget->GetNativeView(),
views::corewm::SHADOW_TYPE_RECTANGULAR);
diff --git a/chrome/browser/chromeos/input_method/candidate_window_view_unittest.cc b/chrome/browser/chromeos/input_method/candidate_window_view_unittest.cc
index 48001a0..d0b17ea 100644
--- a/chrome/browser/chromeos/input_method/candidate_window_view_unittest.cc
+++ b/chrome/browser/chromeos/input_method/candidate_window_view_unittest.cc
@@ -217,7 +217,8 @@ TEST_F(CandidateWindowViewTest, ShortcutSettingTest) {
const char* kExpectedHorizontalCustomizedLabel[] = { "a.", "s.", "d." };
views::Widget* widget = new views::Widget;
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
+ views::Widget::InitParams params =
+ CreateParams(views::Widget::InitParams::TYPE_WINDOW);
widget->Init(params);
CandidateWindowView candidate_window_view(widget);
@@ -423,7 +424,8 @@ TEST_F(CandidateWindowViewTest, DoNotChangeRowHeightWithLabelSwitchTest) {
// We should NOT manually free widget by default, otherwise double free will
// be occurred. So, we should instantiate widget class with "new" operation.
views::Widget* widget = new views::Widget;
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
+ views::Widget::InitParams params =
+ CreateParams(views::Widget::InitParams::TYPE_WINDOW);
widget->Init(params);
CandidateWindowView candidate_window_view(widget);
diff --git a/chrome/browser/ui/views/extensions/native_app_window_views.cc b/chrome/browser/ui/views/extensions/native_app_window_views.cc
index 4a066f6..b792c15 100644
--- a/chrome/browser/ui/views/extensions/native_app_window_views.cc
+++ b/chrome/browser/ui/views/extensions/native_app_window_views.cc
@@ -79,6 +79,9 @@ void NativeAppWindowViews::InitializeDefaultWindow(
init_params.delegate = this;
init_params.remove_standard_frame = true;
init_params.use_system_default_icon = true;
+ // TODO(erg): Conceptually, these are toplevel windows, but we theoretically
+ // could plumb context through to here in some cases.
+ init_params.top_level = true;
window_->Init(init_params);
gfx::Rect window_bounds = create_params.bounds;
window_bounds.Inset(-GetFrameInsets());
diff --git a/ui/oak/oak.h b/ui/oak/oak.h
index 98afcc8..0ffdc85 100644
--- a/ui/oak/oak.h
+++ b/ui/oak/oak.h
@@ -10,7 +10,7 @@
namespace oak {
// Shows the Oak window. Refocuses an existing one.
-OAK_EXPORT void ShowOakWindow();
+OAK_EXPORT void ShowOakWindowWithContext(gfx::NativeView context);
} // namespace oak
diff --git a/ui/oak/oak_window.cc b/ui/oak/oak_window.cc
index 7bcf202..832a7a9 100644
--- a/ui/oak/oak_window.cc
+++ b/ui/oak/oak_window.cc
@@ -146,11 +146,14 @@ void OakWindow::Init() {
} // namespace internal
-void ShowOakWindow() {
+void ShowOakWindowWithContext(gfx::NativeView context) {
if (!internal::OakWindow::instance) {
+ // TODO(erg): Do we want to reuse this window in times with a different
+ // context? For now, this is OK, but if we ever use Oak outside of the ash
+ // shell, we run into crbug.com/165759.
internal::OakWindow::instance =
- views::Widget::CreateWindowWithBounds(new internal::OakWindow,
- gfx::Rect(10, 10, 500, 500));
+ views::Widget::CreateWindowWithContextAndBounds(
+ new internal::OakWindow, context, gfx::Rect(10, 10, 500, 500));
}
internal::OakWindow::instance->Show();
}
diff --git a/ui/views/controls/table/table_view_unittest.cc b/ui/views/controls/table/table_view_unittest.cc
index 797674f..5b14c5a 100644
--- a/ui/views/controls/table/table_view_unittest.cc
+++ b/ui/views/controls/table/table_view_unittest.cc
@@ -17,8 +17,8 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/models/table_model.h"
#include "ui/base/models/table_model_observer.h"
-#include "ui/base/win/scoped_ole_initializer.h"
#include "ui/views/controls/table/table_view.h"
+#include "ui/views/test/views_test_base.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h"
@@ -133,7 +133,7 @@ int TestTableModel::CompareValues(int row1, int row2, int column_id) {
// TableViewTest ---------------------------------------------------------------
-class TableViewTest : public testing::Test, views::WidgetDelegate {
+class TableViewTest : public ViewsTestBase, views::WidgetDelegate {
public:
virtual void SetUp() OVERRIDE;
virtual void TearDown() OVERRIDE;
@@ -173,28 +173,29 @@ class TableViewTest : public testing::Test, views::WidgetDelegate {
TableView* table_;
private:
- MessageLoopForUI message_loop_;
views::Widget* window_;
- ui::ScopedOleInitializer ole_initializer_;
};
void TableViewTest::SetUp() {
+ ViewsTestBase::SetUp();
+
model_.reset(CreateModel());
std::vector<ui::TableColumn> columns;
columns.resize(2);
columns[0].id = 0;
columns[1].id = 1;
+
+ // TODO(erg): This crashes on windows. Try making this derive from ViewsTests.
table_ = new TableView(model_.get(), columns, views::ICON_AND_TEXT,
false, false, false);
- window_ = views::Widget::CreateWindowWithBounds(
- this,
- gfx::Rect(100, 100, 512, 512));
+ window_ = views::Widget::CreateWindowWithContextAndBounds(
+ this, GetContext(), gfx::Rect(100, 100, 512, 512));
}
void TableViewTest::TearDown() {
window_->Close();
- // Temporary workaround to avoid leak of RootView::pending_paint_task_.
- message_loop_.RunUntilIdle();
+
+ ViewsTestBase::TearDown();
}
void TableViewTest::VerifyViewOrder(int first, ...) {
diff --git a/ui/views/test/views_test_base.cc b/ui/views/test/views_test_base.cc
index 494434b..d4c3dba 100644
--- a/ui/views/test/views_test_base.cc
+++ b/ui/views/test/views_test_base.cc
@@ -69,4 +69,12 @@ Widget::InitParams ViewsTestBase::CreateParams(
return params;
}
+gfx::NativeView ViewsTestBase::GetContext() {
+#if defined(USE_AURA)
+ return aura_test_helper_->root_window();
+#else
+ return NULL;
+#endif
+}
+
} // namespace views
diff --git a/ui/views/test/views_test_base.h b/ui/views/test/views_test_base.h
index f348a62..b59ffef 100644
--- a/ui/views/test/views_test_base.h
+++ b/ui/views/test/views_test_base.h
@@ -48,6 +48,10 @@ class ViewsTestBase : public testing::Test {
// cross-platform tests.
Widget::InitParams CreateParams(Widget::InitParams::Type type);
+ // Returns a context view. In aura builds, this will be the
+ // RootWindow. Everywhere else, NULL.
+ gfx::NativeView GetContext();
+
private:
MessageLoopForUI message_loop_;
scoped_ptr<TestViewsDelegate> views_delegate_;
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
index 8aaa88a..9712cba 100644
--- a/ui/views/widget/widget.cc
+++ b/ui/views/widget/widget.cc
@@ -230,18 +230,18 @@ Widget* Widget::CreateWindow(WidgetDelegate* delegate) {
}
// static
-Widget* Widget::CreateWindowWithParent(WidgetDelegate* delegate,
- gfx::NativeWindow parent) {
- return CreateWindowWithParentAndBounds(delegate, parent, gfx::Rect());
-}
-
-// static
Widget* Widget::CreateWindowWithBounds(WidgetDelegate* delegate,
const gfx::Rect& bounds) {
return CreateWindowWithParentAndBounds(delegate, NULL, bounds);
}
// static
+Widget* Widget::CreateWindowWithParent(WidgetDelegate* delegate,
+ gfx::NativeWindow parent) {
+ return CreateWindowWithParentAndBounds(delegate, parent, gfx::Rect());
+}
+
+// static
Widget* Widget::CreateWindowWithParentAndBounds(WidgetDelegate* delegate,
gfx::NativeWindow parent,
const gfx::Rect& bounds) {
diff --git a/ui/views/widget/widget.h b/ui/views/widget/widget.h
index 0eaa78a..ac98e76 100644
--- a/ui/views/widget/widget.h
+++ b/ui/views/widget/widget.h
@@ -207,12 +207,20 @@ class VIEWS_EXPORT Widget : public internal::NativeWidgetDelegate,
Widget();
virtual ~Widget();
- // Creates a decorated window Widget with the specified properties.
+ // Creates a toplevel window with no context. These methods should only be
+ // used in cases where there is no contextual information because we're
+ // creating a toplevel window connected to no other event.
+ //
+ // If you have any parenting or context information, or can pass that
+ // information, prefer the WithParent or WithContext versions of these
+ // methods.
static Widget* CreateWindow(WidgetDelegate* delegate);
- static Widget* CreateWindowWithParent(WidgetDelegate* delegate,
- gfx::NativeWindow parent);
static Widget* CreateWindowWithBounds(WidgetDelegate* delegate,
const gfx::Rect& bounds);
+
+ // Creates a decorated window Widget with the specified properties.
+ static Widget* CreateWindowWithParent(WidgetDelegate* delegate,
+ gfx::NativeWindow parent);
static Widget* CreateWindowWithParentAndBounds(WidgetDelegate* delegate,
gfx::NativeWindow parent,
const gfx::Rect& bounds);