• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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/memory/scoped_ptr.h"
6 #include "base/message_loop/message_loop.h"
7 #include "base/prefs/pref_service.h"
8 #include "chrome/browser/extensions/default_apps.h"
9 #include "chrome/browser/extensions/external_pref_loader.h"
10 #include "chrome/common/chrome_paths.h"
11 #include "chrome/common/pref_names.h"
12 #include "chrome/test/base/testing_profile.h"
13 #include "content/public/test/test_browser_thread.h"
14 #include "extensions/common/extension.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 
17 using default_apps::Provider;
18 
19 namespace extensions {
20 
21 class MockExternalLoader : public ExternalLoader {
22  public:
MockExternalLoader()23   MockExternalLoader() {}
24 
StartLoading()25   virtual void StartLoading() OVERRIDE {}
26  private:
~MockExternalLoader()27   virtual ~MockExternalLoader() {}
28 };
29 
30 class DefaultAppsTest : public testing::Test {
31  public:
DefaultAppsTest()32   DefaultAppsTest() : ui_thread_(content::BrowserThread::UI, &loop_) {}
~DefaultAppsTest()33   virtual ~DefaultAppsTest() {}
34  private:
35   base::MessageLoopForIO loop_;
36   content::TestBrowserThread ui_thread_;
37 };
38 
39 #if !defined(OS_CHROMEOS)
40 // Chrome OS has different way of installing default apps.
41 // Android does not currently support installing apps via Chrome.
TEST_F(DefaultAppsTest,Install)42 TEST_F(DefaultAppsTest, Install) {
43   scoped_ptr<TestingProfile> profile(new TestingProfile());
44   ExternalLoader* loader = new MockExternalLoader();
45 
46   Provider provider(profile.get(), NULL, loader, Manifest::INTERNAL,
47                     Manifest::INTERNAL, Extension::NO_FLAGS);
48 
49   // The default apps should be installed if kDefaultAppsInstallState
50   // is unknown.
51   EXPECT_TRUE(provider.ShouldInstallInProfile());
52   int state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
53   EXPECT_TRUE(state == default_apps::kAlreadyInstalledDefaultApps);
54 
55   // The default apps should only be installed once.
56   EXPECT_FALSE(provider.ShouldInstallInProfile());
57   state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
58   EXPECT_TRUE(state == default_apps::kAlreadyInstalledDefaultApps);
59 
60   // The default apps should not be installed if the state is
61   // kNeverProvideDefaultApps
62   profile->GetPrefs()->SetInteger(prefs::kDefaultAppsInstallState,
63       default_apps::kNeverInstallDefaultApps);
64   EXPECT_FALSE(provider.ShouldInstallInProfile());
65   state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
66   EXPECT_TRUE(state == default_apps::kNeverInstallDefaultApps);
67 
68   // The old default apps with kAlwaysInstallDefaultAppss should be migrated.
69   profile->GetPrefs()->SetInteger(prefs::kDefaultAppsInstallState,
70       default_apps::kProvideLegacyDefaultApps);
71   EXPECT_TRUE(provider.ShouldInstallInProfile());
72   state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
73   EXPECT_TRUE(state == default_apps::kAlreadyInstalledDefaultApps);
74 
75   class DefaultTestingProfile : public TestingProfile {
76     virtual  bool WasCreatedByVersionOrLater(
77         const std::string& version) OVERRIDE {
78       return false;
79     }
80   };
81   profile.reset(new DefaultTestingProfile);
82   Provider provider2(profile.get(), NULL, loader, Manifest::INTERNAL,
83                      Manifest::INTERNAL, Extension::NO_FLAGS);
84   // The old default apps with kProvideLegacyDefaultApps should be migrated
85   // even if the profile version is older than Chrome version.
86   profile->GetPrefs()->SetInteger(prefs::kDefaultAppsInstallState,
87       default_apps::kProvideLegacyDefaultApps);
88   EXPECT_TRUE(provider2.ShouldInstallInProfile());
89   state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
90   EXPECT_TRUE(state == default_apps::kAlreadyInstalledDefaultApps);
91 }
92 #endif
93 
94 }  // namespace extensions
95