| Index: ui/app_list/views/app_list_view_unittest.cc | 
| diff --git a/ui/app_list/views/app_list_view_unittest.cc b/ui/app_list/views/app_list_view_unittest.cc | 
| index 880269afd800d454cdfcc0c00affe6782503f379..4711d28893331fa4768121694b69e6f5de4fc23a 100644 | 
| --- a/ui/app_list/views/app_list_view_unittest.cc | 
| +++ b/ui/app_list/views/app_list_view_unittest.cc | 
| @@ -33,8 +33,6 @@ | 
| namespace app_list { | 
| namespace test { | 
|  | 
| -namespace { | 
| - | 
| enum TestType { | 
| TEST_TYPE_START = 0, | 
| NORMAL = TEST_TYPE_START, | 
| @@ -43,24 +41,6 @@ enum TestType { | 
| TEST_TYPE_END, | 
| }; | 
|  | 
| -bool IsViewAtOrigin(views::View* view) { | 
| -  return view->bounds().origin().IsOrigin(); | 
| -} | 
| - | 
| -size_t GetVisibleTileItemViews(const std::vector<TileItemView*>& tiles) { | 
| -  size_t count = 0; | 
| -  for (std::vector<TileItemView*>::const_iterator it = tiles.begin(); | 
| -       it != tiles.end(); | 
| -       ++it) { | 
| -    if ((*it)->visible()) | 
| -      count++; | 
| -  } | 
| -  return count; | 
| -} | 
| - | 
| -// Choose a set that is 3 regular app list pages and 2 landscape app list pages. | 
| -const int kInitialItems = 34; | 
| - | 
| // Allows the same tests to run with different contexts: either an Ash-style | 
| // root window or a desktop window tree host. | 
| class AppListViewTestContext { | 
| @@ -126,6 +106,35 @@ class AppListViewTestContext { | 
| DISALLOW_COPY_AND_ASSIGN(AppListViewTestContext); | 
| }; | 
|  | 
| +namespace { | 
| + | 
| +bool IsViewAtOrigin(views::View* view) { | 
| +  return view->bounds().origin().IsOrigin(); | 
| +} | 
| + | 
| +size_t GetVisibleTileItemViews(const std::vector<TileItemView*>& tiles) { | 
| +  size_t count = 0; | 
| +  for (std::vector<TileItemView*>::const_iterator it = tiles.begin(); | 
| +       it != tiles.end(); | 
| +       ++it) { | 
| +    if ((*it)->visible()) | 
| +      count++; | 
| +  } | 
| +  return count; | 
| +} | 
| + | 
| +// Choose a set that is 3 regular app list pages and 2 landscape app list pages. | 
| +const int kInitialItems = 34; | 
| + | 
| +class TestTileSearchResult : public SearchResult { | 
| + public: | 
| +  TestTileSearchResult() { set_display_type(DISPLAY_TILE); } | 
| +  virtual ~TestTileSearchResult() {} | 
| + | 
| + private: | 
| +  DISALLOW_COPY_AND_ASSIGN(TestTileSearchResult); | 
| +}; | 
| + | 
| // Extend the regular AppListTestViewDelegate to communicate back to the test | 
| // context. Note the test context doesn't simply inherit this, because the | 
| // delegate is owned by the view. | 
| @@ -147,6 +156,99 @@ class UnitTestViewDelegate : public app_list::test::AppListTestViewDelegate { | 
| DISALLOW_COPY_AND_ASSIGN(UnitTestViewDelegate); | 
| }; | 
|  | 
| +class AppListViewTestAura : public views::ViewsTestBase, | 
| +                            public ::testing::WithParamInterface<int> { | 
| + public: | 
| +  AppListViewTestAura() {} | 
| +  virtual ~AppListViewTestAura() {} | 
| + | 
| +  // testing::Test overrides: | 
| +  virtual void SetUp() OVERRIDE { | 
| +    views::ViewsTestBase::SetUp(); | 
| + | 
| +    // On Ash (only) the app list is placed into an aura::Window "container", | 
| +    // which is also used to determine the context. In tests, use the ash root | 
| +    // window as the parent. This only works on aura where the root window is a | 
| +    // NativeView as well as a NativeWindow. | 
| +    gfx::NativeView container = NULL; | 
| +#if defined(USE_AURA) | 
| +    container = GetContext(); | 
| +#endif | 
| + | 
| +    test_context_.reset(new AppListViewTestContext(GetParam(), container)); | 
| +  } | 
| + | 
| +  virtual void TearDown() OVERRIDE { | 
| +    test_context_.reset(); | 
| +    views::ViewsTestBase::TearDown(); | 
| +  } | 
| + | 
| + protected: | 
| +  scoped_ptr<AppListViewTestContext> test_context_; | 
| + | 
| + private: | 
| +  DISALLOW_COPY_AND_ASSIGN(AppListViewTestAura); | 
| +}; | 
| + | 
| +class AppListViewTestDesktop : public views::ViewsTestBase, | 
| +                               public ::testing::WithParamInterface<int> { | 
| + public: | 
| +  AppListViewTestDesktop() {} | 
| +  virtual ~AppListViewTestDesktop() {} | 
| + | 
| +  // testing::Test overrides: | 
| +  virtual void SetUp() OVERRIDE { | 
| +    set_views_delegate(new AppListViewTestViewsDelegate(this)); | 
| +    views::ViewsTestBase::SetUp(); | 
| +    test_context_.reset(new AppListViewTestContext(GetParam(), NULL)); | 
| +  } | 
| + | 
| +  virtual void TearDown() OVERRIDE { | 
| +    test_context_.reset(); | 
| +    views::ViewsTestBase::TearDown(); | 
| +  } | 
| + | 
| + protected: | 
| +  scoped_ptr<AppListViewTestContext> test_context_; | 
| + | 
| + private: | 
| +  class AppListViewTestViewsDelegate : public views::TestViewsDelegate { | 
| +   public: | 
| +    AppListViewTestViewsDelegate(AppListViewTestDesktop* parent) | 
| +        : parent_(parent) {} | 
| + | 
| +    // Overridden from views::ViewsDelegate: | 
| +    virtual void OnBeforeWidgetInit( | 
| +        views::Widget::InitParams* params, | 
| +        views::internal::NativeWidgetDelegate* delegate) OVERRIDE; | 
| + | 
| +   private: | 
| +    AppListViewTestDesktop* parent_; | 
| + | 
| +    DISALLOW_COPY_AND_ASSIGN(AppListViewTestViewsDelegate); | 
| +  }; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(AppListViewTestDesktop); | 
| +}; | 
| + | 
| +void AppListViewTestDesktop::AppListViewTestViewsDelegate::OnBeforeWidgetInit( | 
| +    views::Widget::InitParams* params, | 
| +    views::internal::NativeWidgetDelegate* delegate) { | 
| +// Mimic the logic in ChromeViewsDelegate::OnBeforeWidgetInit(). Except, for | 
| +// ChromeOS, use the root window from the AuraTestHelper rather than depending | 
| +// on ash::Shell:GetPrimaryRootWindow(). Also assume non-ChromeOS is never the | 
| +// Ash desktop, as that is covered by AppListViewTestAura. | 
| +#if defined(OS_CHROMEOS) | 
| +  if (!params->parent && !params->context) | 
| +    params->context = parent_->GetContext(); | 
| +#elif defined(USE_AURA) | 
| +  if (params->parent == NULL && params->context == NULL && !params->child) | 
| +    params->native_widget = new views::DesktopNativeWidgetAura(delegate); | 
| +#endif | 
| +} | 
| + | 
| +}  // namespace | 
| + | 
| AppListViewTestContext::AppListViewTestContext(int test_type, | 
| gfx::NativeView parent) | 
| : test_type_(static_cast<TestType>(test_type)) { | 
| @@ -313,7 +415,6 @@ void AppListViewTestContext::RunStartPageTest() { | 
| ShowContentsViewPageAndVerify(contents_view->GetPageIndexForNamedPage( | 
| ContentsView::NAMED_PAGE_START)); | 
| EXPECT_FALSE(main_view->search_box_view()->visible()); | 
| -    EXPECT_EQ(3u, GetVisibleTileItemViews(start_page_view->tile_views())); | 
|  | 
| gfx::Size view_size(view_->GetPreferredSize()); | 
| ShowContentsViewPageAndVerify( | 
| @@ -325,10 +426,12 @@ void AppListViewTestContext::RunStartPageTest() { | 
| EXPECT_EQ(view_size.ToString(), view_->GetPreferredSize().ToString()); | 
|  | 
| // Check tiles hide and show on deletion and addition. | 
| -    model->CreateAndAddItem("Test app"); | 
| -    EXPECT_EQ(4u, GetVisibleTileItemViews(start_page_view->tile_views())); | 
| -    model->DeleteItem(model->GetItemName(0)); | 
| -    EXPECT_EQ(3u, GetVisibleTileItemViews(start_page_view->tile_views())); | 
| +    model->results()->Add(new TestTileSearchResult()); | 
| +    start_page_view->Update(); | 
| +    EXPECT_EQ(1u, GetVisibleTileItemViews(start_page_view->tile_views())); | 
| +    model->results()->RemoveAll(); | 
| +    start_page_view->Update(); | 
| +    EXPECT_EQ(0u, GetVisibleTileItemViews(start_page_view->tile_views())); | 
| } else { | 
| EXPECT_EQ(NULL, start_page_view); | 
| } | 
| @@ -410,21 +513,25 @@ void AppListViewTestContext::RunProfileChangeTest() { | 
| EXPECT_EQ(view_->app_list_main_view()->contents_view(), | 
| contents_switcher_view->contents_view()); | 
| EXPECT_NO_FATAL_FAILURE(CheckView(start_page_view)); | 
| -    EXPECT_EQ(1u, GetVisibleTileItemViews(start_page_view->tile_views())); | 
| } else { | 
| EXPECT_EQ(NULL, contents_switcher_view); | 
| EXPECT_EQ(NULL, start_page_view); | 
| } | 
|  | 
| // New model updates should be processed by the start page view. | 
| -  delegate_->GetTestModel()->CreateAndAddItem("Test App"); | 
| -  if (test_type_ == EXPERIMENTAL) | 
| -    EXPECT_EQ(2u, GetVisibleTileItemViews(start_page_view->tile_views())); | 
| +  delegate_->GetTestModel()->results()->Add(new TestTileSearchResult()); | 
| +  if (test_type_ == EXPERIMENTAL) { | 
| +    start_page_view->Update(); | 
| +    EXPECT_EQ(1u, GetVisibleTileItemViews(start_page_view->tile_views())); | 
| +  } | 
|  | 
| // Old model updates should be ignored. | 
| -  original_test_model->CreateAndAddItem("Test App 2"); | 
| -  if (test_type_ == EXPERIMENTAL) | 
| -    EXPECT_EQ(2u, GetVisibleTileItemViews(start_page_view->tile_views())); | 
| +  original_test_model->results()->Add(new TestTileSearchResult()); | 
| +  original_test_model->results()->Add(new TestTileSearchResult()); | 
| +  if (test_type_ == EXPERIMENTAL) { | 
| +    start_page_view->Update(); | 
| +    EXPECT_EQ(1u, GetVisibleTileItemViews(start_page_view->tile_views())); | 
| +  } | 
|  | 
| Close(); | 
| } | 
| @@ -519,99 +626,6 @@ void AppListViewTestContext::RunSearchResultsTest() { | 
| Close(); | 
| } | 
|  | 
| -class AppListViewTestAura : public views::ViewsTestBase, | 
| -                            public ::testing::WithParamInterface<int> { | 
| - public: | 
| -  AppListViewTestAura() {} | 
| -  virtual ~AppListViewTestAura() {} | 
| - | 
| -  // testing::Test overrides: | 
| -  virtual void SetUp() OVERRIDE { | 
| -    views::ViewsTestBase::SetUp(); | 
| - | 
| -    // On Ash (only) the app list is placed into an aura::Window "container", | 
| -    // which is also used to determine the context. In tests, use the ash root | 
| -    // window as the parent. This only works on aura where the root window is a | 
| -    // NativeView as well as a NativeWindow. | 
| -    gfx::NativeView container = NULL; | 
| -#if defined(USE_AURA) | 
| -    container = GetContext(); | 
| -#endif | 
| - | 
| -    test_context_.reset(new AppListViewTestContext(GetParam(), container)); | 
| -  } | 
| - | 
| -  virtual void TearDown() OVERRIDE { | 
| -    test_context_.reset(); | 
| -    views::ViewsTestBase::TearDown(); | 
| -  } | 
| - | 
| - protected: | 
| -  scoped_ptr<AppListViewTestContext> test_context_; | 
| - | 
| - private: | 
| -  DISALLOW_COPY_AND_ASSIGN(AppListViewTestAura); | 
| -}; | 
| - | 
| -class AppListViewTestDesktop : public views::ViewsTestBase, | 
| -                               public ::testing::WithParamInterface<int> { | 
| - public: | 
| -  AppListViewTestDesktop() {} | 
| -  virtual ~AppListViewTestDesktop() {} | 
| - | 
| -  // testing::Test overrides: | 
| -  virtual void SetUp() OVERRIDE { | 
| -    set_views_delegate(new AppListViewTestViewsDelegate(this)); | 
| -    views::ViewsTestBase::SetUp(); | 
| -    test_context_.reset(new AppListViewTestContext(GetParam(), NULL)); | 
| -  } | 
| - | 
| -  virtual void TearDown() OVERRIDE { | 
| -    test_context_.reset(); | 
| -    views::ViewsTestBase::TearDown(); | 
| -  } | 
| - | 
| - protected: | 
| -  scoped_ptr<AppListViewTestContext> test_context_; | 
| - | 
| - private: | 
| -  class AppListViewTestViewsDelegate : public views::TestViewsDelegate { | 
| -   public: | 
| -    AppListViewTestViewsDelegate(AppListViewTestDesktop* parent) | 
| -        : parent_(parent) {} | 
| - | 
| -    // Overridden from views::ViewsDelegate: | 
| -    virtual void OnBeforeWidgetInit( | 
| -        views::Widget::InitParams* params, | 
| -        views::internal::NativeWidgetDelegate* delegate) OVERRIDE; | 
| - | 
| -   private: | 
| -    AppListViewTestDesktop* parent_; | 
| - | 
| -    DISALLOW_COPY_AND_ASSIGN(AppListViewTestViewsDelegate); | 
| -  }; | 
| - | 
| -  DISALLOW_COPY_AND_ASSIGN(AppListViewTestDesktop); | 
| -}; | 
| - | 
| -void AppListViewTestDesktop::AppListViewTestViewsDelegate::OnBeforeWidgetInit( | 
| -    views::Widget::InitParams* params, | 
| -    views::internal::NativeWidgetDelegate* delegate) { | 
| -// Mimic the logic in ChromeViewsDelegate::OnBeforeWidgetInit(). Except, for | 
| -// ChromeOS, use the root window from the AuraTestHelper rather than depending | 
| -// on ash::Shell:GetPrimaryRootWindow(). Also assume non-ChromeOS is never the | 
| -// Ash desktop, as that is covered by AppListViewTestAura. | 
| -#if defined(OS_CHROMEOS) | 
| -  if (!params->parent && !params->context) | 
| -    params->context = parent_->GetContext(); | 
| -#elif defined(USE_AURA) | 
| -  if (params->parent == NULL && params->context == NULL && !params->child) | 
| -    params->native_widget = new views::DesktopNativeWidgetAura(delegate); | 
| -#endif | 
| -} | 
| - | 
| -}  // namespace | 
| - | 
| // Tests showing the app list with basic test model in an ash-style root window. | 
| TEST_P(AppListViewTestAura, Display) { | 
| EXPECT_NO_FATAL_FAILURE(test_context_->RunDisplayTest()); | 
|  |