Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / app_list / profile_loader_unittest.cc
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 }