| Index: chrome/browser/ui/app_list/app_list_shower_views_unittest.cc
 | 
| diff --git a/chrome/browser/ui/app_list/test/app_list_shower_unittest.cc b/chrome/browser/ui/app_list/app_list_shower_views_unittest.cc
 | 
| similarity index 58%
 | 
| rename from chrome/browser/ui/app_list/test/app_list_shower_unittest.cc
 | 
| rename to chrome/browser/ui/app_list/app_list_shower_views_unittest.cc
 | 
| index 0174963472e8d4a0a994a95f81bfaffc07f2bc8a..fb2f7476abaf9af52ade0454c7b738828045f27c 100644
 | 
| --- a/chrome/browser/ui/app_list/test/app_list_shower_unittest.cc
 | 
| +++ b/chrome/browser/ui/app_list/app_list_shower_views_unittest.cc
 | 
| @@ -2,26 +2,38 @@
 | 
|  // Use of this source code is governed by a BSD-style license that can be
 | 
|  // found in the LICENSE file.
 | 
|  
 | 
| +#include "chrome/browser/ui/app_list/app_list_shower_views.h"
 | 
| +
 | 
|  #include "base/files/file_path.h"
 | 
|  #include "chrome/browser/profiles/profile.h"
 | 
| -#include "chrome/browser/ui/app_list/app_list.h"
 | 
| -#include "chrome/browser/ui/app_list/app_list_factory.h"
 | 
| -#include "chrome/browser/ui/app_list/app_list_shower.h"
 | 
| +#include "chrome/browser/ui/app_list/app_list_shower_delegate.h"
 | 
|  #include "chrome/browser/ui/app_list/scoped_keep_alive.h"
 | 
|  #include "chrome/browser/ui/app_list/test/fake_profile.h"
 | 
|  #include "testing/gtest/include/gtest/gtest.h"
 | 
|  
 | 
| -class FakeAppList : public AppList {
 | 
| +namespace {
 | 
| +
 | 
| +class FakeAppListShower : public AppListShower {
 | 
|   public:
 | 
| -  explicit FakeAppList(Profile* profile)
 | 
| -      : profile_(profile) {
 | 
| +  explicit FakeAppListShower(AppListShowerDelegate* delegate)
 | 
| +      : AppListShower(delegate), has_view_(false), visible_(false) {}
 | 
| +
 | 
| +  // AppListShower:
 | 
| +  virtual void HandleViewBeingDestroyed() OVERRIDE {
 | 
| +    AppListShower::HandleViewBeingDestroyed();
 | 
| +    has_view_ = false;
 | 
| +    visible_ = false;
 | 
|    }
 | 
|  
 | 
| -  std::string profile_name() {
 | 
| -    return profile_->GetProfileName();
 | 
| +  virtual bool IsAppListVisible() const OVERRIDE { return visible_; }
 | 
| +
 | 
| +  virtual app_list::AppListView* MakeViewForCurrentProfile() OVERRIDE {
 | 
| +    has_view_ = true;
 | 
| +    return NULL;
 | 
|    }
 | 
|  
 | 
| -  // AppList overrides.
 | 
| +  virtual void UpdateViewForNewProfile() OVERRIDE {}
 | 
| +
 | 
|    virtual void Show() OVERRIDE {
 | 
|      visible_ = true;
 | 
|    }
 | 
| @@ -30,54 +42,28 @@ class FakeAppList : public AppList {
 | 
|      visible_ = false;
 | 
|    }
 | 
|  
 | 
| -  virtual void MoveNearCursor() OVERRIDE {
 | 
| +  virtual bool HasView() const OVERRIDE {
 | 
| +    return has_view_;
 | 
|    }
 | 
|  
 | 
| -  virtual bool IsVisible() OVERRIDE {
 | 
| -    return visible_;
 | 
| -  }
 | 
| -
 | 
| -  virtual void Prerender() OVERRIDE {
 | 
| -    prerendered_ = true;
 | 
| -  }
 | 
| -
 | 
| -  virtual gfx::NativeWindow GetWindow() OVERRIDE {
 | 
| -    return NULL;
 | 
| -  }
 | 
| -
 | 
| -  virtual void SetProfile(Profile* profile) OVERRIDE {
 | 
| -    profile_ = profile;
 | 
| -  }
 | 
| -
 | 
| -  Profile* profile_;
 | 
| + private:
 | 
| +  bool has_view_;
 | 
|    bool visible_;
 | 
| -  bool prerendered_;
 | 
| -};
 | 
| -
 | 
| -class FakeFactory : public AppListFactory {
 | 
| - public:
 | 
| -  FakeFactory()
 | 
| -      : views_created_(0) {
 | 
| -  }
 | 
| -
 | 
| -  virtual AppList* CreateAppList(
 | 
| -      Profile* profile,
 | 
| -      AppListService* service,
 | 
| -      const base::Closure& on_should_dismiss) OVERRIDE {
 | 
| -    views_created_++;
 | 
| -    return new FakeAppList(profile);
 | 
| -  }
 | 
|  
 | 
| -  int views_created_;
 | 
| +  DISALLOW_COPY_AND_ASSIGN(FakeAppListShower);
 | 
|  };
 | 
|  
 | 
| -class AppListShowerUnitTest : public testing::Test {
 | 
| +}  // namespace
 | 
| +
 | 
| +class AppListShowerUnitTest : public testing::Test,
 | 
| +                              public AppListShowerDelegate {
 | 
|   public:
 | 
| +  AppListShowerUnitTest()
 | 
| +      : views_created_(0),
 | 
| +        views_dismissed_(0) {}
 | 
| +
 | 
|    virtual void SetUp() OVERRIDE {
 | 
| -    factory_ = new FakeFactory;
 | 
| -    shower_.reset(
 | 
| -        new AppListShower(scoped_ptr<AppListFactory>(factory_),
 | 
| -                          NULL /* service */));
 | 
| +    shower_.reset(new FakeAppListShower(this));
 | 
|      profile1_ = CreateProfile("p1").Pass();
 | 
|      profile2_ = CreateProfile("p2").Pass();
 | 
|    }
 | 
| @@ -89,19 +75,26 @@ class AppListShowerUnitTest : public testing::Test {
 | 
|      return make_scoped_ptr(new FakeProfile(name));
 | 
|    }
 | 
|  
 | 
| -  FakeAppList* GetCurrentAppList() {
 | 
| -    return static_cast<FakeAppList*>(shower_->app_list());
 | 
| +  // AppListCreatorDelegate:
 | 
| +  virtual AppListControllerDelegate* GetControllerDelegateForCreate() OVERRIDE {
 | 
| +    return NULL;
 | 
|    }
 | 
|  
 | 
|    bool HasKeepAlive() const {
 | 
|      return shower_->keep_alive_.get() != NULL;
 | 
|    }
 | 
|  
 | 
| -  // Owned by |shower_|.
 | 
| -  FakeFactory* factory_;
 | 
| -  scoped_ptr<AppListShower> shower_;
 | 
| +  virtual void OnViewCreated() OVERRIDE { ++views_created_; }
 | 
| +  virtual void OnViewDismissed() OVERRIDE { ++views_dismissed_; }
 | 
| +  virtual void MoveNearCursor(app_list::AppListView* view) OVERRIDE {}
 | 
| +
 | 
| + protected:
 | 
| +  scoped_ptr<FakeAppListShower> shower_;
 | 
|    scoped_ptr<FakeProfile> profile1_;
 | 
|    scoped_ptr<FakeProfile> profile2_;
 | 
| +
 | 
| +  int views_created_;
 | 
| +  int views_dismissed_;
 | 
|  };
 | 
|  
 | 
|  TEST_F(AppListShowerUnitTest, Preconditions) {
 | 
| @@ -126,17 +119,23 @@ TEST_F(AppListShowerUnitTest, HidingViewRemovesKeepalive) {
 | 
|  }
 | 
|  
 | 
|  TEST_F(AppListShowerUnitTest, HideAndShowReusesView) {
 | 
| +  EXPECT_EQ(0, views_created_);
 | 
|    shower_->ShowForProfile(profile1_.get());
 | 
| +  EXPECT_EQ(1, views_created_);
 | 
| +  EXPECT_EQ(0, views_dismissed_);
 | 
|    shower_->DismissAppList();
 | 
| +  EXPECT_EQ(1, views_dismissed_);
 | 
|    shower_->ShowForProfile(profile1_.get());
 | 
| -  EXPECT_EQ(1, factory_->views_created_);
 | 
| +  EXPECT_EQ(1, views_created_);
 | 
|  }
 | 
|  
 | 
|  TEST_F(AppListShowerUnitTest, CloseAndShowRecreatesView) {
 | 
|    shower_->ShowForProfile(profile1_.get());
 | 
|    shower_->HandleViewBeingDestroyed();
 | 
| +  // Destroying implies hiding. A separate notification shouldn't go out.
 | 
| +  EXPECT_EQ(0, views_dismissed_);
 | 
|    shower_->ShowForProfile(profile1_.get());
 | 
| -  EXPECT_EQ(2, factory_->views_created_);
 | 
| +  EXPECT_EQ(2, views_created_);
 | 
|  }
 | 
|  
 | 
|  TEST_F(AppListShowerUnitTest, CloseRemovesView) {
 | 
| @@ -157,10 +156,11 @@ TEST_F(AppListShowerUnitTest, CloseAppListClearsProfile) {
 | 
|  
 | 
|  TEST_F(AppListShowerUnitTest, SwitchingProfiles) {
 | 
|    shower_->ShowForProfile(profile1_.get());
 | 
| -  EXPECT_EQ("p1", GetCurrentAppList()->profile_name());
 | 
| +  EXPECT_EQ("p1", shower_->profile()->GetProfileName());
 | 
|    shower_->ShowForProfile(profile2_.get());
 | 
| -  EXPECT_EQ("p2", GetCurrentAppList()->profile_name());
 | 
| +  EXPECT_EQ("p2", shower_->profile()->GetProfileName());
 | 
|  
 | 
|    // Shouldn't create new view for second profile - it should switch in place.
 | 
| -  EXPECT_EQ(1, factory_->views_created_);
 | 
| +  EXPECT_EQ(1, views_created_);
 | 
| +  EXPECT_EQ(0, views_dismissed_);
 | 
|  }
 | 
| 
 |