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.
5 #include "chrome/browser/extensions/external_provider_impl.h"
7 #include "base/command_line.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/prefs/testing_pref_service.h"
10 #include "base/test/scoped_path_override.h"
11 #include "chrome/browser/chrome_notification_types.h"
12 #include "chrome/browser/chromeos/customization_document.h"
13 #include "chrome/browser/extensions/extension_service_unittest.h"
14 #include "chrome/common/chrome_paths.h"
15 #include "chrome/common/chrome_switches.h"
16 #include "chrome/test/base/testing_browser_process.h"
17 #include "chrome/test/base/testing_profile.h"
18 #include "chromeos/system/mock_statistics_provider.h"
19 #include "chromeos/system/statistics_provider.h"
20 #include "content/public/browser/notification_service.h"
21 #include "content/public/test/test_utils.h"
22 #include "testing/gmock/include/gmock/gmock.h"
25 using ::testing::NotNull;
26 using ::testing::Return;
28 namespace extensions {
32 const char kExternalAppId[] = "kekdneafjmhmndejhmbcadfiiofngffo";
34 class ExternalProviderImplChromeOSTest : public ExtensionServiceTestBase {
36 ExternalProviderImplChromeOSTest() {}
37 virtual ~ExternalProviderImplChromeOSTest() {}
39 void InitServiceWithExternalProviders() {
40 InitializeEmptyExtensionService();
43 ProviderCollection providers;
44 extensions::ExternalProviderImpl::CreateExternalProviders(
45 service_, profile_.get(), &providers);
47 for (ProviderCollection::iterator i = providers.begin();
50 service_->AddProviderForTesting(i->release());
54 // ExtensionServiceTestBase overrides:
55 virtual void SetUp() OVERRIDE {
56 ExtensionServiceTestBase::SetUp();
58 TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_);
59 chromeos::ServicesCustomizationDocument::RegisterPrefs(
60 local_state_.registry());
62 external_externsions_overrides_.reset(
63 new base::ScopedPathOverride(chrome::DIR_EXTERNAL_EXTENSIONS,
64 data_dir_.Append("external")));
66 chromeos::system::StatisticsProvider::SetTestProvider(
67 &mock_statistics_provider_);
68 EXPECT_CALL(mock_statistics_provider_, GetMachineStatistic(_, NotNull()))
69 .WillRepeatedly(Return(false));
72 virtual void TearDown() OVERRIDE {
73 chromeos::system::StatisticsProvider::SetTestProvider(NULL);
74 TestingBrowserProcess::GetGlobal()->SetLocalState(NULL);
78 TestingPrefServiceSimple local_state_;
79 scoped_ptr<base::ScopedPathOverride> external_externsions_overrides_;
80 chromeos::system::MockStatisticsProvider mock_statistics_provider_;
82 DISALLOW_COPY_AND_ASSIGN(ExternalProviderImplChromeOSTest);
87 // Normal mode, external app should be installed.
88 TEST_F(ExternalProviderImplChromeOSTest, Normal) {
89 InitServiceWithExternalProviders();
91 service_->CheckForExternalUpdates();
92 content::WindowedNotificationObserver(
93 chrome::NOTIFICATION_CRX_INSTALLER_DONE,
94 content::NotificationService::AllSources()).Wait();
96 EXPECT_TRUE(service_->GetInstalledExtension(kExternalAppId));
99 // App mode, no external app should be installed.
100 TEST_F(ExternalProviderImplChromeOSTest, AppMode) {
101 CommandLine* command = CommandLine::ForCurrentProcess();
102 command->AppendSwitchASCII(switches::kForceAppMode, std::string());
103 command->AppendSwitchASCII(switches::kAppId, std::string("app_id"));
105 InitServiceWithExternalProviders();
107 service_->CheckForExternalUpdates();
108 base::RunLoop().RunUntilIdle();
110 EXPECT_FALSE(service_->GetInstalledExtension(kExternalAppId));
113 } // namespace extensions