blob: a3c073c3909491560eb731ec541476ed07898a51 [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
avia2f4804a2015-12-24 23:11:139#include "build/build_config.h"
[email protected]e0ec3cb12013-04-03 17:35:3010#include "chrome/browser/extensions/external_pref_loader.h"
[email protected]937cf9d2012-08-30 03:51:5511#include "chrome/common/chrome_paths.h"
[email protected]937cf9d2012-08-30 03:51:5512#include "chrome/common/pref_names.h"
13#include "chrome/test/base/testing_profile.h"
brettwb1fc1b82016-02-02 00:19:0814#include "components/prefs/pref_service.h"
Gabriel Charettec7108742019-08-23 03:31:4015#include "content/public/test/browser_task_environment.h"
[email protected]e4452d32013-11-15 23:07:4116#include "extensions/common/extension.h"
[email protected]937cf9d2012-08-30 03:51:5517#include "testing/gtest/include/gtest/gtest.h"
18
19using default_apps::Provider;
[email protected]e0ec3cb12013-04-03 17:35:3020
21namespace extensions {
[email protected]937cf9d2012-08-30 03:51:5522
23class MockExternalLoader : public ExternalLoader {
24 public:
25 MockExternalLoader() {}
26
dchengae36a4a2014-10-21 12:36:3627 void StartLoading() override {}
28
[email protected]937cf9d2012-08-30 03:51:5529 private:
dchengae36a4a2014-10-21 12:36:3630 ~MockExternalLoader() override {}
[email protected]937cf9d2012-08-30 03:51:5531};
32
33class DefaultAppsTest : public testing::Test {
34 public:
fdoray2ce6dc222017-04-27 14:39:3935 DefaultAppsTest()
Gabriel Charette798fde72019-08-20 22:24:0436 : task_environment_(content::BrowserTaskEnvironment::IO_MAINLOOP) {}
dcheng72191812014-10-28 20:49:5637 ~DefaultAppsTest() override {}
38
[email protected]937cf9d2012-08-30 03:51:5539 private:
Gabriel Charette798fde72019-08-20 22:24:0440 content::BrowserTaskEnvironment task_environment_;
[email protected]937cf9d2012-08-30 03:51:5541};
42
[email protected]13e062e2014-08-09 10:21:5543#if !defined(OS_CHROMEOS)
[email protected]937cf9d2012-08-30 03:51:5544// Chrome OS has different way of installing default apps.
[email protected]3ed92b8e2012-08-30 17:59:2345// Android does not currently support installing apps via Chrome.
[email protected]937cf9d2012-08-30 03:51:5546TEST_F(DefaultAppsTest, Install) {
dchengc963c7142016-04-08 03:55:2247 std::unique_ptr<TestingProfile> profile(new TestingProfile());
[email protected]e0ec3cb12013-04-03 17:35:3048 ExternalLoader* loader = new MockExternalLoader();
[email protected]937cf9d2012-08-30 03:51:5549
[email protected]1d5e58b2013-01-31 08:41:4050 Provider provider(profile.get(), NULL, loader, Manifest::INTERNAL,
51 Manifest::INTERNAL, Extension::NO_FLAGS);
[email protected]937cf9d2012-08-30 03:51:5552
53 // The default apps should be installed if kDefaultAppsInstallState
54 // is unknown.
55 EXPECT_TRUE(provider.ShouldInstallInProfile());
56 int state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
57 EXPECT_TRUE(state == default_apps::kAlreadyInstalledDefaultApps);
58
59 // The default apps should only be installed once.
60 EXPECT_FALSE(provider.ShouldInstallInProfile());
61 state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
62 EXPECT_TRUE(state == default_apps::kAlreadyInstalledDefaultApps);
63
64 // The default apps should not be installed if the state is
65 // kNeverProvideDefaultApps
66 profile->GetPrefs()->SetInteger(prefs::kDefaultAppsInstallState,
67 default_apps::kNeverInstallDefaultApps);
68 EXPECT_FALSE(provider.ShouldInstallInProfile());
69 state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
70 EXPECT_TRUE(state == default_apps::kNeverInstallDefaultApps);
71
72 // The old default apps with kAlwaysInstallDefaultAppss should be migrated.
73 profile->GetPrefs()->SetInteger(prefs::kDefaultAppsInstallState,
74 default_apps::kProvideLegacyDefaultApps);
75 EXPECT_TRUE(provider.ShouldInstallInProfile());
76 state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
77 EXPECT_TRUE(state == default_apps::kAlreadyInstalledDefaultApps);
78
79 class DefaultTestingProfile : public TestingProfile {
dchengae36a4a2014-10-21 12:36:3680 bool WasCreatedByVersionOrLater(const std::string& version) override {
[email protected]937cf9d2012-08-30 03:51:5581 return false;
82 }
83 };
84 profile.reset(new DefaultTestingProfile);
[email protected]1d5e58b2013-01-31 08:41:4085 Provider provider2(profile.get(), NULL, loader, Manifest::INTERNAL,
86 Manifest::INTERNAL, Extension::NO_FLAGS);
[email protected]937cf9d2012-08-30 03:51:5587 // The old default apps with kProvideLegacyDefaultApps should be migrated
88 // even if the profile version is older than Chrome version.
89 profile->GetPrefs()->SetInteger(prefs::kDefaultAppsInstallState,
90 default_apps::kProvideLegacyDefaultApps);
91 EXPECT_TRUE(provider2.ShouldInstallInProfile());
92 state = profile->GetPrefs()->GetInteger(prefs::kDefaultAppsInstallState);
93 EXPECT_TRUE(state == default_apps::kAlreadyInstalledDefaultApps);
94}
95#endif
[email protected]e0ec3cb12013-04-03 17:35:3096
97} // namespace extensions