#include "chrome/browser/extensions/external_provider_impl.h"
#include "base/command_line.h"
-#include "base/file_util.h"
#include "base/files/file_path.h"
+#include "base/files/file_util.h"
#include "base/memory/scoped_ptr.h"
#include "base/path_service.h"
+#include "base/prefs/testing_pref_service.h"
#include "base/strings/stringprintf.h"
#include "base/test/scoped_path_override.h"
#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/extensions/extension_service_unittest.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_service_test_base.h"
#include "chrome/browser/extensions/updater/extension_cache_fake.h"
+#include "chrome/browser/extensions/updater/extension_updater.h"
+#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/extension_constants.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/base/testing_browser_process.h"
#include "chrome/test/base/testing_profile.h"
#include "content/public/browser/notification_service.h"
#include "content/public/test/test_utils.h"
#include "testing/gmock/include/gmock/gmock.h"
#if defined(OS_CHROMEOS)
-#include "chromeos/system/mock_statistics_provider.h"
+#include "chrome/browser/chromeos/customization_document.h"
+#include "chrome/browser/chromeos/login/users/fake_user_manager.h"
+#include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
+#include "chromeos/system/fake_statistics_provider.h"
#include "chromeos/system/statistics_provider.h"
#endif
-using ::testing::_;
using ::testing::NotNull;
using ::testing::Return;
+using ::testing::_;
namespace extensions {
class ExternalProviderImplTest : public ExtensionServiceTestBase {
public:
ExternalProviderImplTest() {}
- virtual ~ExternalProviderImplTest() {}
+ ~ExternalProviderImplTest() override {}
void InitServiceWithExternalProviders() {
- InitializeExtensionServiceWithUpdater();
+#if defined(OS_CHROMEOS)
+ chromeos::ScopedUserManagerEnabler scoped_user_manager(
+ new chromeos::FakeUserManager);
+#endif
+ InitializeExtensionServiceWithUpdaterAndPrefs();
+
+ service()->updater()->SetExtensionCacheForTesting(
+ test_extension_cache_.get());
+
+ // Don't install default apps. Some of the default apps are downloaded from
+ // the webstore, ignoring the url we pass to kAppsGalleryUpdateURL, which
+ // would cause the external updates to never finish install.
+ profile_->GetPrefs()->SetString(prefs::kDefaultApps, "");
ProviderCollection providers;
extensions::ExternalProviderImpl::CreateExternalProviders(
}
}
+ void InitializeExtensionServiceWithUpdaterAndPrefs() {
+ ExtensionServiceInitParams params = CreateDefaultInitParams();
+ params.autoupdate_enabled = true;
+ // Create prefs file to make the profile not new.
+ const char prefs[] = "{}";
+ EXPECT_EQ(base::WriteFile(params.pref_file, prefs, sizeof(prefs)),
+ int(sizeof(prefs)));
+ InitializeExtensionService(params);
+ service_->updater()->Start();
+ }
+
// ExtensionServiceTestBase overrides:
- virtual void SetUp() OVERRIDE {
+ void SetUp() override {
ExtensionServiceTestBase::SetUp();
test_server_.reset(new EmbeddedTestServer());
+
+#if defined(OS_CHROMEOS)
+ TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_);
+ chromeos::ServicesCustomizationDocument::RegisterPrefs(
+ local_state_.registry());
+#endif
+
ASSERT_TRUE(test_server_->InitializeAndWaitUntilReady());
test_server_->RegisterRequestHandler(
base::Bind(&ExternalProviderImplTest::HandleRequest,
CommandLine* cmdline = CommandLine::ForCurrentProcess();
cmdline->AppendSwitchASCII(switches::kAppsGalleryUpdateURL,
test_server_->GetURL(kManifestPath).spec());
-#if defined(OS_CHROMEOS)
- chromeos::system::StatisticsProvider::SetTestProvider(
- &mock_statistics_provider_);
- EXPECT_CALL(mock_statistics_provider_, GetMachineStatistic(_, NotNull()))
- .WillRepeatedly(Return(false));
-#endif
}
- virtual void TearDown() OVERRIDE {
-#if defined(OS_CHROMEOS)
- chromeos::system::StatisticsProvider::SetTestProvider(NULL);
-#endif
+ void TearDown() override {
+ TestingBrowserProcess::GetGlobal()->SetLocalState(NULL);
}
private:
extension_misc::kInAppPaymentsSupportAppId,
test_server_->GetURL(kAppPath).spec().c_str()));
response->set_content_type("text/xml");
- return response.PassAs<HttpResponse>();
+ return response.Pass();
}
if (url.path() == kAppPath) {
base::FilePath test_data_dir;
scoped_ptr<BasicHttpResponse> response(new BasicHttpResponse);
response->set_code(net::HTTP_OK);
response->set_content(contents);
- return response.PassAs<HttpResponse>();
+ return response.Pass();
}
- return scoped_ptr<HttpResponse>();
+ return nullptr;
}
scoped_ptr<EmbeddedTestServer> test_server_;
scoped_ptr<ExtensionCacheFake> test_extension_cache_;
+
#if defined(OS_CHROMEOS)
- chromeos::system::MockStatisticsProvider mock_statistics_provider_;
+ // chromeos::ServicesCustomizationExternalLoader is hooked up as an
+ // extensions::ExternalLoader and depends on a functioning StatisticsProvider.
+ chromeos::system::ScopedFakeStatisticsProvider fake_statistics_provider_;
+ TestingPrefServiceSimple local_state_;
#endif
DISALLOW_COPY_AND_ASSIGN(ExternalProviderImplTest);