| // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
 | // 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/macros.h" | 
 | #include "base/memory/scoped_refptr.h" | 
 | #include "build/build_config.h" | 
 | #include "build/chromeos_buildflags.h" | 
 | #include "extensions/common/extension.h" | 
 |  | 
 | #if defined(OS_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 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, | 
 |   }; | 
 |  | 
 |   explicit TestExtensionEnvironment(Type type = Type::kWithTaskEnvironment); | 
 |  | 
 |   ~TestExtensionEnvironment(); | 
 |  | 
 |   TestingProfile* profile() const; | 
 |  | 
 |   // Returns the TestExtensionSystem created by the TestingProfile. | 
 |   TestExtensionSystem* GetExtensionSystem(); | 
 |  | 
 |   // Returns an ExtensionService created (and owned) by the | 
 |   // TestExtensionSystem created by the TestingProfile. | 
 |   ExtensionService* GetExtensionService(); | 
 |  | 
 |   // Returns ExtensionPrefs created (and owned) by the | 
 |   // TestExtensionSystem created by the TestingProfile. | 
 |   ExtensionPrefs* GetExtensionPrefs(); | 
 |  | 
 |   // 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& manifest_extra); | 
 |  | 
 |   // Use a specific extension ID instead of the default generated in | 
 |   // Extension::Create. | 
 |   const Extension* MakeExtension(const base::Value& 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(); | 
 |  | 
 |  private: | 
 |   class ChromeOSEnv; | 
 |  | 
 |   void Init(); | 
 |  | 
 |   // 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_ASH) | 
 |   const std::unique_ptr<ChromeOSEnv> chromeos_env_; | 
 | #endif | 
 |  | 
 | #if defined(OS_WIN) | 
 |   ui::ScopedOleInitializer ole_initializer_; | 
 | #endif | 
 |  | 
 |   std::unique_ptr<TestingProfile> profile_; | 
 |   ExtensionService* extension_service_ = nullptr; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(TestExtensionEnvironment); | 
 | }; | 
 |  | 
 | }  // namespace extensions | 
 |  | 
 | #endif  // CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_ENVIRONMENT_H_ |