diff options
author | erg@chromium.org <erg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-09 21:42:35 +0000 |
---|---|---|
committer | erg@chromium.org <erg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-09 21:42:35 +0000 |
commit | dc904a636d578e2134e5911c98b7e00831be5bd8 (patch) | |
tree | 8341a71bcb4138695f1a79437ae3be93ea8f2611 | |
parent | 3159ca547dd7af238e0f18c1a33c1b3f6e830d22 (diff) | |
download | chromium_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.cc | 2 | ||||
-rw-r--r-- | ash/drag_drop/drag_drop_controller.cc | 2 | ||||
-rw-r--r-- | ash/drag_drop/drag_image_view.cc | 7 | ||||
-rw-r--r-- | ash/drag_drop/drag_image_view.h | 2 | ||||
-rw-r--r-- | ash/launcher/launcher_tooltip_manager_unittest.cc | 23 | ||||
-rw-r--r-- | ash/launcher/launcher_view_unittest.cc | 20 | ||||
-rw-r--r-- | ash/shell/widgets.cc | 5 | ||||
-rw-r--r-- | ash/shell/window_type_launcher.cc | 6 | ||||
-rw-r--r-- | chrome/browser/chromeos/input_method/candidate_window_view_unittest.cc | 6 | ||||
-rw-r--r-- | chrome/browser/ui/views/extensions/native_app_window_views.cc | 3 | ||||
-rw-r--r-- | ui/oak/oak.h | 2 | ||||
-rw-r--r-- | ui/oak/oak_window.cc | 9 | ||||
-rw-r--r-- | ui/views/controls/table/table_view_unittest.cc | 19 | ||||
-rw-r--r-- | ui/views/test/views_test_base.cc | 8 | ||||
-rw-r--r-- | ui/views/test/views_test_base.h | 4 | ||||
-rw-r--r-- | ui/views/widget/widget.cc | 12 | ||||
-rw-r--r-- | ui/views/widget/widget.h | 14 |
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); |