1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_ENVIRONMENT_H_
#define CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_ENVIRONMENT_H_
#include <memory>
#include <string>
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "extensions/common/extension.h"
#if BUILDFLAG(IS_WIN)
#include "ui/base/win/scoped_ole_initializer.h"
#endif
class TestingProfile;
namespace base {
class Value;
}
namespace content {
class BrowserTaskEnvironment;
class WebContents;
}
namespace extensions {
class Extension;
class ExtensionPrefs;
class ExtensionRegistrar;
class ExtensionService;
class TestExtensionSystem;
// This class provides a minimal environment in which to create
// extensions and tabs for extension-related unittests.
class TestExtensionEnvironment {
public:
// Fetches the TestExtensionSystem in `profile` and creates a default
// ExtensionService there,
static ExtensionService* CreateExtensionServiceForProfile(
TestingProfile* profile);
enum class Type {
// A TestExtensionEnvironment which will provide a BrowserTaskEnvironment
// in its scope.
kWithTaskEnvironment,
// A TestExtensionEnvironment which will run on top of the existing task
// environment without trying to provide one.
kInheritExistingTaskEnvironment,
};
enum class ProfileCreationType {
kNoCreate,
kCreate,
};
#if BUILDFLAG(IS_CHROMEOS)
enum class OSSetupType {
kNoSetUp,
kSetUp,
};
#endif
explicit TestExtensionEnvironment(
Type type = Type::kWithTaskEnvironment,
ProfileCreationType profile_creation_type = ProfileCreationType::kCreate
#if BUILDFLAG(IS_CHROMEOS)
,
OSSetupType os_setup_type = OSSetupType::kSetUp
#endif
);
TestExtensionEnvironment(const TestExtensionEnvironment&) = delete;
TestExtensionEnvironment& operator=(const TestExtensionEnvironment&) = delete;
~TestExtensionEnvironment();
void SetProfile(TestingProfile* profile);
TestingProfile* profile() const;
// Returns the TestExtensionSystem created by the TestingProfile.
TestExtensionSystem* GetExtensionSystem();
// Returns ExtensionPrefs created (and owned) by the
// TestExtensionSystem created by the TestingProfile.
ExtensionPrefs* GetExtensionPrefs();
// Returns ExtensionRegistrar created (and owned) by the
// TestExtensionSystem created by the TestingProfile.
ExtensionRegistrar* GetExtensionRegistrar();
// Creates an Extension and registers it with the ExtensionService.
// The Extension has a default manifest of {name: "Extension",
// version: "1.0", manifest_version: 2}, and values in
// manifest_extra override these defaults.
const Extension* MakeExtension(const base::Value::Dict& manifest_extra);
// Use a specific extension ID instead of the default generated in
// Extension::Create.
const Extension* MakeExtension(const base::Value::Dict& manifest_extra,
const std::string& id);
// Generates a valid packaged app manifest with the given ID. If `install`
// it gets added to the ExtensionService in `profile`.
scoped_refptr<const Extension> MakePackagedApp(const std::string& id,
bool install);
// Returns a test web contents that has a tab id.
std::unique_ptr<content::WebContents> MakeTab() const;
// Deletes the testing profile to test profile teardown.
void DeleteProfile();
void ProfileMarkedForPermanentDeletionForTest();
private:
class ChromeOSEnv;
void Init();
// Returns an ExtensionService created (and owned) by the
// TestExtensionSystem created by the TestingProfile.
ExtensionService* GetExtensionService();
// If `task_environment_` is needed, then it needs to constructed before
// `profile_` and destroyed after `profile_`.
const std::unique_ptr<content::BrowserTaskEnvironment> task_environment_;
#if BUILDFLAG(IS_CHROMEOS)
const std::unique_ptr<ChromeOSEnv> chromeos_env_;
#endif
#if BUILDFLAG(IS_WIN)
ui::ScopedOleInitializer ole_initializer_;
#endif
// TestingProfile may be created or not, depending on the caller's
// configuration passed to the constructor. This member keeps the ownership
// if the mode is kCreate.
std::unique_ptr<TestingProfile> profile_;
// Unowned pointer of Profile for this test environment. May be the pointer
// to `profile_`, or may be injected by SetProfile().
raw_ptr<TestingProfile, DanglingUntriaged> profile_ptr_;
raw_ptr<ExtensionService, DanglingUntriaged> extension_service_ = nullptr;
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_ENVIRONMENT_H_
|