Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(115)

Unified Diff: chrome/browser/extensions/chrome_test_extension_loader.h

Issue 2524553002: [Extensions] Create ChromeTestExtensionLoader (Closed)
Patch Set: compile Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/chrome_test_extension_loader.h
diff --git a/chrome/browser/extensions/chrome_test_extension_loader.h b/chrome/browser/extensions/chrome_test_extension_loader.h
new file mode 100644
index 0000000000000000000000000000000000000000..c070463efbdcd8d61473405fa3b5e396084e2bc3
--- /dev/null
+++ b/chrome/browser/extensions/chrome_test_extension_loader.h
@@ -0,0 +1,163 @@
+// Copyright 2016 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_CHROME_TEST_EXTENSION_LOADER_H_
+#define CHROME_BROWSER_EXTENSIONS_CHROME_TEST_EXTENSION_LOADER_H_
+
+#include <string>
+
+#include "base/files/file_path.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/macros.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/manifest.h"
+
+namespace base {
+class FilePath;
+}
+
+namespace content {
+class BrowserContext;
+}
+
+class ExtensionService;
+
+namespace extensions {
+class ExtensionRegistry;
+class ExtensionSystem;
+
+// A test class to help with loading packed or unpacked extensions. Designed to
+// be used by both browser tests and unit tests. Note that this should be used
+// for a single extension, and is designed to be used on the stack (rather than
+// as a test suite member).
+class ChromeTestExtensionLoader {
+ public:
+ explicit ChromeTestExtensionLoader(content::BrowserContext* browser_context);
+ ~ChromeTestExtensionLoader();
+
+ // Loads the extension specified by |file_path|. Works for both packed and
+ // unpacked extensions.
+ scoped_refptr<const Extension> LoadExtension(const base::FilePath& file_path);
+
+ // Myriad different settings. See the member variable declarations for
+ // explanations and defaults.
+ // Prefer using these setters rather than adding n different
+ // LoadExtensionWith* variants (that's not scalable).
+ void set_expected_id(const std::string& expected_id) {
+ expected_id_ = expected_id;
+ }
+ void add_creation_flag(Extension::InitFromValueFlags flag) {
+ creation_flags_ |= flag;
+ }
+ void set_creation_flags(int flags) { creation_flags_ = flags; }
+ void set_location(Manifest::Location location) { location_ = location; }
+ void set_should_fail(bool should_fail) { should_fail_ = should_fail; }
+ void set_pack_extension(bool pack_extension) {
+ pack_extension_ = pack_extension;
+ }
+ void set_install_immediately(bool install_immediately) {
+ install_immediately_ = install_immediately;
+ }
+ void set_grant_permissions(bool grant_permissions) {
+ grant_permissions_ = grant_permissions;
+ }
+ void set_allow_file_access(bool allow_file_access) {
+ allow_file_access_ = allow_file_access;
+ }
+ void set_allow_incognito_access(bool allow_incognito_access) {
+ allow_incognito_access_ = allow_incognito_access;
+ }
+ void set_ignore_manifest_warnings(bool ignore_manifest_warnings) {
+ ignore_manifest_warnings_ = ignore_manifest_warnings;
+ }
+ void set_require_modern_manifest_version(bool require_modern_version) {
+ require_modern_manifest_version_ = require_modern_version;
+ }
+ void set_install_param(const std::string& install_param) {
+ install_param_ = install_param;
+ }
+
+ private:
+ // Packs the extension at |unpacked_path| and returns the path to the created
+ // crx. Note that the created crx is tied to the lifetime of |this|.
+ base::FilePath PackExtension(const base::FilePath& unpacked_path);
+
+ // Loads the crx pointed to by |crx_path|.
+ scoped_refptr<const Extension> LoadCrx(const base::FilePath& crx_path);
+
+ // Loads the unpacked extension pointed to by |unpacked_path|.
+ scoped_refptr<const Extension> LoadUnpacked(
+ const base::FilePath& unpacked_path);
+
+ // Checks that the permissions of the loaded extension are correct.
+ void CheckPermissions(const std::string& extension_id);
+
+ // Checks for any errors associated with the extension.
+ bool CheckErrors(const Extension& extension);
+
+ // Waits for the extension to finish setting up.
+ bool WaitForExtensionReady();
+
+ // The associated context and services.
+ content::BrowserContext* browser_context_ = nullptr;
+ ExtensionSystem* extension_system_ = nullptr;
+ ExtensionService* extension_service_ = nullptr;
+ ExtensionRegistry* extension_registry_ = nullptr;
+
+ // A temporary directory for packing extensions.
+ base::ScopedTempDir temp_dir_;
+
+ // The extension id of the loaded extension.
+ std::string extension_id_;
+
+ // A provided PEM path to use. If not provided, a temporary one will be
+ // created.
+ base::FilePath pem_path_;
+
+ // The expected extension id, if any.
+ std::string expected_id_;
+
+ // An install param to use with the loaded extension.
+ std::string install_param_;
+
+ // Any creation flags (see Extension::InitFromValueFlags) to use for the
+ // extension. Only used for crx installs.
+ int creation_flags_ = Extension::NO_FLAGS;
+
+ // The install location of the added extension.
+ Manifest::Location location_ = Manifest::INTERNAL;
+
+ // Whether or not the installation should fail.
+ bool should_fail_ = false;
+
+ // Whether or not to always pack the extension before loading it. Otherwise,
+ // the extension will be loaded as an unpacked extension.
+ bool pack_extension_ = false;
+
+ // Whether or not to install the extension immediately. Only used for crx
+ // installs.
+ bool install_immediately_ = true;
+
+ // Whether or not to automatically grant permissions to the installed
+ // extension. Only used for crx installs.
+ bool grant_permissions_ = true;
+
+ // Whether or not to allow file access by default to the extension.
+ bool allow_file_access_ = false;
+
+ // Whether or not to allow incognito access by default to the extension.
+ bool allow_incognito_access_ = false;
+
+ // Whether or not to ignore manifest warnings during installation.
+ bool ignore_manifest_warnings_ = false;
+
+ // Whether or not to enforce a minimum manifest version requirement.
+ bool require_modern_manifest_version_ = true;
+
+ DISALLOW_COPY_AND_ASSIGN(ChromeTestExtensionLoader);
+};
+
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_CHROME_TEST_EXTENSION_LOADER_H_

Powered by Google App Engine
This is Rietveld 408576698