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#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_UNITTEST_H_
6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_UNITTEST_H_
7
8#include "base/at_exit.h"
9#include "base/files/file_path.h"
10#include "base/files/scoped_temp_dir.h"
11#include "base/memory/ref_counted.h"
12#include "base/memory/scoped_ptr.h"
13#include "base/message_loop/message_loop.h"
14#include "chrome/browser/extensions/extension_service.h"
15#include "chrome/common/extensions/feature_switch.h"
16#include "content/public/test/test_browser_thread_bundle.h"
17#include "testing/gtest/include/gtest/gtest.h"
18
19#if defined(OS_CHROMEOS)
20#include "chrome/browser/chromeos/login/user_manager.h"
21#include "chrome/browser/chromeos/settings/cros_settings.h"
22#include "chrome/browser/chromeos/settings/device_settings_service.h"
23#endif
24
25class TestingProfile;
26
27namespace extensions {
28class ManagementPolicy;
29}
30
31class ExtensionServiceTestBase : public testing::Test {
32 public:
33  struct ExtensionServiceInitParams {
34    base::FilePath profile_path;
35    base::FilePath pref_file;
36    base::FilePath extensions_install_dir;
37    bool autoupdate_enabled;
38    bool is_first_run;
39
40    ExtensionServiceInitParams();
41  };
42
43  ExtensionServiceTestBase();
44  virtual ~ExtensionServiceTestBase();
45
46  void InitializeExtensionService(const ExtensionServiceInitParams& params);
47
48  void InitializeInstalledExtensionService(
49      const base::FilePath& prefs_file,
50      const base::FilePath& source_install_dir);
51
52  void InitializeEmptyExtensionService();
53
54  void InitializeExtensionProcessManager();
55
56  void InitializeExtensionServiceWithUpdater();
57
58  static void SetUpTestCase();
59
60  virtual void SetUp() OVERRIDE;
61  virtual void TearDown() OVERRIDE;
62
63  void set_extensions_enabled(bool enabled) {
64    service_->set_extensions_enabled(enabled);
65  }
66
67 protected:
68  void InitializeExtensionServiceHelper(bool autoupdate_enabled,
69                                        bool is_first_run);
70
71  content::TestBrowserThreadBundle thread_bundle_;
72  base::ShadowingAtExitManager at_exit_manager_;
73  base::ScopedTempDir temp_dir_;
74  scoped_ptr<TestingProfile> profile_;
75  base::FilePath extensions_install_dir_;
76  base::FilePath data_dir_;
77  // Managed by extensions::ExtensionSystemFactory.
78  ExtensionService* service_;
79  extensions::ManagementPolicy* management_policy_;
80  size_t expected_extensions_count_;
81
82#if defined OS_CHROMEOS
83  chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
84  chromeos::ScopedTestCrosSettings test_cros_settings_;
85  chromeos::ScopedTestUserManager test_user_manager_;
86#endif
87};
88
89#endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_UNITTEST_H_
90