Home | History | Annotate | Download | only in app_list
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/bind.h"
      6 #include "base/files/file_path.h"
      7 #include "base/memory/scoped_ptr.h"
      8 #include "chrome/browser/profiles/profile.h"
      9 #include "chrome/browser/ui/app_list/profile_loader.h"
     10 #include "chrome/browser/ui/app_list/test/fake_profile.h"
     11 #include "chrome/browser/ui/app_list/test/fake_profile_store.h"
     12 #include "testing/gtest/include/gtest/gtest.h"
     13 
     14 class ProfileLoaderUnittest : public testing::Test {
     15  public:
     16   virtual void SetUp() OVERRIDE {
     17     last_callback_result_ = NULL;
     18     profile1_.reset(
     19         new FakeProfile("p1", base::FilePath(FILE_PATH_LITERAL("profile1"))));
     20     profile2_.reset(
     21         new FakeProfile("p2", base::FilePath(FILE_PATH_LITERAL("profile2"))));
     22 
     23     profile_store_.reset(new FakeProfileStore(
     24         base::FilePath(FILE_PATH_LITERAL("udd"))));
     25     loader_.reset(new ProfileLoader(profile_store_.get()));
     26   }
     27 
     28   void StartLoadingProfile(Profile* profile) {
     29     loader_->LoadProfileInvalidatingOtherLoads(
     30         profile->GetPath(),
     31         base::Bind(&ProfileLoaderUnittest::OnProfileLoaded,
     32                   base::Unretained(this)));
     33   }
     34 
     35   void FinishLoadingProfile(Profile* profile) {
     36     profile_store_->LoadProfile(profile);
     37   }
     38 
     39   void OnProfileLoaded(Profile* profile) {
     40     last_callback_result_ = profile;
     41   }
     42 
     43   bool HasKeepAlive() const {
     44     return loader_->keep_alive_.get() != NULL;
     45   }
     46 
     47  protected:
     48   scoped_ptr<ProfileLoader> loader_;
     49   scoped_ptr<FakeProfileStore> profile_store_;
     50   scoped_ptr<FakeProfile> profile1_;
     51   scoped_ptr<FakeProfile> profile2_;
     52   Profile* last_callback_result_;
     53 };
     54 
     55 TEST_F(ProfileLoaderUnittest, LoadASecondProfileBeforeTheFirstFinishes) {
     56   EXPECT_FALSE(loader_->IsAnyProfileLoading());
     57 
     58   StartLoadingProfile(profile1_.get());
     59   EXPECT_TRUE(loader_->IsAnyProfileLoading());
     60 
     61   StartLoadingProfile(profile2_.get());
     62   FinishLoadingProfile(profile1_.get());
     63   EXPECT_EQ(NULL, last_callback_result_);
     64 
     65   FinishLoadingProfile(profile2_.get());
     66   EXPECT_EQ(profile2_.get(), last_callback_result_);
     67   EXPECT_FALSE(loader_->IsAnyProfileLoading());
     68 }
     69 
     70 TEST_F(ProfileLoaderUnittest, TestKeepsAliveWhileLoadingProfiles) {
     71   EXPECT_FALSE(loader_->IsAnyProfileLoading());
     72   EXPECT_FALSE(HasKeepAlive());
     73 
     74   StartLoadingProfile(profile1_.get());
     75   EXPECT_TRUE(loader_->IsAnyProfileLoading());
     76   EXPECT_TRUE(HasKeepAlive());
     77 
     78   FinishLoadingProfile(profile1_.get());
     79   EXPECT_FALSE(loader_->IsAnyProfileLoading());
     80   EXPECT_FALSE(HasKeepAlive());
     81 }
     82 
     83 TEST_F(ProfileLoaderUnittest, TestKeepsAliveWhileLoadingMultipleProfiles) {
     84   EXPECT_FALSE(loader_->IsAnyProfileLoading());
     85   EXPECT_FALSE(HasKeepAlive());
     86 
     87   StartLoadingProfile(profile1_.get());
     88   EXPECT_TRUE(loader_->IsAnyProfileLoading());
     89   EXPECT_TRUE(HasKeepAlive());
     90 
     91   StartLoadingProfile(profile2_.get());
     92   EXPECT_TRUE(loader_->IsAnyProfileLoading());
     93   EXPECT_TRUE(HasKeepAlive());
     94 
     95   FinishLoadingProfile(profile1_.get());
     96   EXPECT_TRUE(loader_->IsAnyProfileLoading());
     97   EXPECT_TRUE(HasKeepAlive());
     98 
     99   FinishLoadingProfile(profile2_.get());
    100   EXPECT_FALSE(loader_->IsAnyProfileLoading());
    101   EXPECT_FALSE(HasKeepAlive());
    102 }
    103 
    104 TEST_F(ProfileLoaderUnittest, TestInvalidatingCurrentLoad) {
    105   EXPECT_FALSE(loader_->IsAnyProfileLoading());
    106   EXPECT_FALSE(HasKeepAlive());
    107 
    108   StartLoadingProfile(profile1_.get());
    109   loader_->InvalidatePendingProfileLoads();
    110   // The profile is still considered loading even though we will do nothing when
    111   // it gets here.
    112   EXPECT_TRUE(loader_->IsAnyProfileLoading());
    113   EXPECT_TRUE(HasKeepAlive());
    114 
    115   FinishLoadingProfile(profile1_.get());
    116   EXPECT_EQ(NULL, last_callback_result_);
    117 }
    118