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
|
// Copyright 2015 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_EXTENSION_SERVICE_TEST_WITH_INSTALL_H_
#define CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_TEST_WITH_INSTALL_H_
#include <stddef.h>
#include <string>
#include "base/macros.h"
#include "base/scoped_observer.h"
#include "chrome/browser/extensions/extension_service_test_base.h"
#include "extensions/browser/extension_registry_observer.h"
#include "extensions/common/extension.h"
#include "extensions/common/feature_switch.h"
namespace base {
class FilePath;
}
namespace extensions {
class ExtensionRegistry;
// An enhancement of ExtensionServiceTestBase that provides helpers to install,
// update, and uninstall extensions.
class ExtensionServiceTestWithInstall : public ExtensionServiceTestBase,
public ExtensionRegistryObserver {
public:
ExtensionServiceTestWithInstall();
~ExtensionServiceTestWithInstall() override;
protected:
void InitializeExtensionService(
const ExtensionServiceInitParams& params) override;
static std::vector<base::string16> GetErrors();
void PackCRX(const base::FilePath& dir_path,
const base::FilePath& pem_path,
const base::FilePath& crx_path);
enum InstallState {
INSTALL_FAILED,
INSTALL_UPDATED,
INSTALL_NEW,
INSTALL_WITHOUT_LOAD,
};
const Extension* PackAndInstallCRX(const base::FilePath& dir_path,
const base::FilePath& pem_path,
InstallState install_state,
int creation_flags,
Manifest::Location install_location);
const Extension* PackAndInstallCRX(const base::FilePath& dir_path,
const base::FilePath& pem_path,
InstallState install_state);
const Extension* PackAndInstallCRX(const base::FilePath& dir_path,
InstallState install_state);
const Extension* PackAndInstallCRX(const base::FilePath& dir_path,
Manifest::Location install_location,
InstallState install_state);
const Extension* InstallCRX(const base::FilePath& path,
InstallState install_state,
int creation_flags,
const std::string& expected_old_name);
const Extension* InstallCRX(const base::FilePath& path,
Manifest::Location install_location,
InstallState install_state,
int creation_flags);
const Extension* InstallCRX(const base::FilePath& path,
InstallState install_state,
int creation_flags);
const Extension* InstallCRX(const base::FilePath& path,
InstallState install_state);
const Extension* InstallCRXFromWebStore(const base::FilePath& path,
InstallState install_state);
// Verifies the result of a CRX installation. Used by InstallCRX. Set the
// |install_state| to INSTALL_FAILED if the installation is expected to fail.
// Returns an Extension pointer if the install succeeded, null otherwise.
const Extension* VerifyCrxInstall(const base::FilePath& path,
InstallState install_state);
// Verifies the result of a CRX installation. Used by InstallCRX. Set the
// |install_state| to INSTALL_FAILED if the installation is expected to fail.
// If |install_state| is INSTALL_UPDATED, and |expected_old_name| is
// non-empty, expects that the existing extension's title was
// |expected_old_name|.
// Returns an Extension pointer if the install succeeded, null otherwise.
const Extension* VerifyCrxInstall(const base::FilePath& path,
InstallState install_state,
const std::string& expected_old_name);
enum UpdateState {
FAILED_SILENTLY,
FAILED,
UPDATED,
INSTALLED,
DISABLED,
ENABLED
};
void PackCRXAndUpdateExtension(const std::string& id,
const base::FilePath& dir_path,
const base::FilePath& pem_path,
UpdateState expected_state);
void UpdateExtension(const std::string& id,
const base::FilePath& in_path,
UpdateState expected_state);
void UninstallExtension(const std::string& id);
void TerminateExtension(const std::string& id);
// ExtensionRegistryObserver:
void OnExtensionLoaded(content::BrowserContext* browser_context,
const Extension* extension) override;
void OnExtensionUnloaded(content::BrowserContext* browser_context,
const Extension* extension,
UnloadedExtensionReason reason) override;
void OnExtensionWillBeInstalled(content::BrowserContext* browser_context,
const Extension* extension,
bool is_update,
const std::string& old_name) override;
// TODO(treib,devlin): Make these private and add accessors as needed.
extensions::ExtensionList loaded_;
const Extension* installed_;
bool was_update_;
std::string old_name_;
std::string unloaded_id_;
UnloadedExtensionReason unloaded_reason_;
private:
void InstallCRXInternal(const base::FilePath& crx_path,
Manifest::Location install_location,
InstallState install_state,
int creation_flags);
size_t expected_extensions_count_;
FeatureSwitch::ScopedOverride override_external_install_prompt_;
ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
registry_observer_;
DISALLOW_COPY_AND_ASSIGN(ExtensionServiceTestWithInstall);
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SERVICE_TEST_WITH_INSTALL_H_
|