blob: 3251ee4257e59356e7be84e56d3a4681a228d267 [file] [log] [blame]
[email protected]937cf9d2012-08-30 03:51:551// 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
dchengc963c7142016-04-08 03:55:225#include "chrome/browser/extensions/default_apps.h"
6
7#include <memory>
8
[email protected]b19fe572013-07-18 04:54:269#include "base/message_loop/message_loop.h"
avia2f4804a2015-12-24 23:11:1310#include "build/build_config.h"
[email protected]e0ec3cb12013-04-03 17:35:3011#include "chrome/browser/extensions/external_pref_loader.h"
[email protected]937cf9d2012-08-30 03:51:5512#include "chrome/common/chrome_paths.h"
[email protected]937cf9d2012-08-30 03:51:5513#include "chrome/common/pref_names.h"
14#include "chrome/test/base/testing_profile.h"
brettwb1fc1b82016-02-02 00:19:0815#include "components/prefs/pref_service.h"
[email protected]937cf9d2012-08-30 03:51:5516#include "content/public/test/test_browser_thread.h"
[email protected]e4452d32013-11-15 23:07:4117#include "extensions/common/extension.h"
[email protected]937cf9d2012-08-30 03:51:5518#include "testing/gtest/include/gtest/gtest.h"
19
20using default_apps::Provider;
[email protected]e0ec3cb12013-04-03 17:35:3021
22namespace extensions {
[email protected]937cf9d2012-08-30 03:51:5523
24class MockExternalLoader : public ExternalLoader {
25 public:
26 MockExternalLoader() {}
27
dchengae36a4a2014-10-21 12:36:3628 void StartLoading() override {}
29
[email protected]937cf9d2012-08-30 03:51:5530 private:
dchengae36a4a2014-10-21 12:36:3631 ~MockExternalLoader() override {}
[email protected]937cf9d2012-08-30 03:51:5532};
33
34class DefaultAppsTest : public testing::Test {
35 public:
[email protected]1ef90012014-01-15 22:24:3336 DefaultAppsTest() : ui_thread_(content::BrowserThread::UI, &loop_) {}
dcheng72191812014-10-28 20:49:5637 ~DefaultAppsTest() override {}
38
[email protected]937cf9d2012-08-30 03:51:5539 private:
[email protected]1ef90012014-01-15 22:24:3340 base::MessageLoopForIO loop_;
[email protected]937cf9d2012-08-30 03:51:5541 content::TestBrowserThread ui_thread_;
42};
43
[email protected]13e062e2014-08-09 10:21:5544#if !defined(OS_CHROMEOS)
[email protected]937cf9d2012-08-30 03:51:5545// Chrome OS has different way of installing default apps.
[email protected]3ed92b8e2012-08-30 17:59:2346// Android does not currently support installing apps via Chrome.
[email protected]937cf9d2012-08-30 03:51:5547TEST_F(DefaultAppsTest, Install) {
dchengc963c7142016-04-08 03:55:2248 std::unique_ptr<TestingProfile> profile(new TestingProfile());
[email protected]e0ec3cb12013-04-03 17:35:3049 ExternalLoader* loader = new MockExternalLoader();
[email protected]937cf9d2012-08-30 03:51:5550
[email protected]1d5e58b2013-01-31 08:41:4051 Provider provider(profile.get(), NULL, loader, Manifest::INTERNAL,
52 Manifest::INTERNAL, Extension::NO_FLAGS);
[email protected]937cf9d2012-08-30 03:51:5553
54 // The default apps should be installed if kDefaultAppsInstallState
55 // is unknown.
56 EXPECT_TRUE(provider.ShouldInstallInProfile());
57 int state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
58 EXPECT_TRUE(state == default_apps::kAlreadyInstalledDefaultApps);
59
60 // The default apps should only be installed once.
61 EXPECT_FALSE(provider.ShouldInstallInProfile());
62 state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
63 EXPECT_TRUE(state == default_apps::kAlreadyInstalledDefaultApps);
64
65 // The default apps should not be installed if the state is
66 // kNeverProvideDefaultApps
67 profile->GetPrefs()->SetInteger(prefs::kDefaultAppsInstallState,
68 default_apps::kNeverInstallDefaultApps);
69 EXPECT_FALSE(provider.ShouldInstallInProfile());
70 state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
71 EXPECT_TRUE(state == default_apps::kNeverInstallDefaultApps);
72
73 // The old default apps with kAlwaysInstallDefaultAppss should be migrated.
74 profile->GetPrefs()->SetInteger(prefs::kDefaultAppsInstallState,
75 default_apps::kProvideLegacyDefaultApps);
76 EXPECT_TRUE(provider.ShouldInstallInProfile());
77 state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
78 EXPECT_TRUE(state == default_apps::kAlreadyInstalledDefaultApps);
79
80 class DefaultTestingProfile : public TestingProfile {
dchengae36a4a2014-10-21 12:36:3681 bool WasCreatedByVersionOrLater(const std::string& version) override {
[email protected]937cf9d2012-08-30 03:51:5582 return false;
83 }
84 };
85 profile.reset(new DefaultTestingProfile);
[email protected]1d5e58b2013-01-31 08:41:4086 Provider provider2(profile.get(), NULL, loader, Manifest::INTERNAL,
87 Manifest::INTERNAL, Extension::NO_FLAGS);
[email protected]937cf9d2012-08-30 03:51:5588 // The old default apps with kProvideLegacyDefaultApps should be migrated
89 // even if the profile version is older than Chrome version.
90 profile->GetPrefs()->SetInteger(prefs::kDefaultAppsInstallState,
91 default_apps::kProvideLegacyDefaultApps);
92 EXPECT_TRUE(provider2.ShouldInstallInProfile());
93 state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
94 EXPECT_TRUE(state == default_apps::kAlreadyInstalledDefaultApps);
95}
96#endif
[email protected]e0ec3cb12013-04-03 17:35:3097
98} // namespace extensions