#include "extensions/browser/browsertest_util.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/test_extension_registry_observer.h"
#include "extensions/common/extension_id.h"
#include "extensions/shell/browser/shell_extension_system.h"
#include "extensions/shell/test/shell_apitest.h"
#include "extensions/test/result_catcher.h"
namespace extensions {
using ShellRuntimeApiTest = ShellApiTest;
IN_PROC_BROWSER_TEST_F(ShellRuntimeApiTest, RuntimeReload) {
scoped_refptr<const Extension> extension;
{
ResultCatcher catcher;
ASSERT_TRUE(extension = base::WrapRefCounted(LoadExtension("extension")));
ASSERT_TRUE(catcher.GetNextResult());
}
const ExtensionId extension_id = extension->id();
ExtensionRegistry* registry = ExtensionRegistry::Get(browser_context());
TestExtensionRegistryObserver registry_observer(registry, extension_id);
ASSERT_TRUE(browsertest_util::ExecuteScriptInBackgroundPageNoWait(
browser_context(), extension_id, "chrome.runtime.reload();"));
ASSERT_EQ(extension, registry_observer.WaitForExtensionUnloaded());
EXPECT_TRUE(registry->disabled_extensions().Contains(extension_id));
ASSERT_TRUE(extension = registry_observer.WaitForExtensionLoaded());
ASSERT_EQ(extension->id(), extension_id);
EXPECT_TRUE(registry->enabled_extensions().Contains(extension_id));
{
ResultCatcher catcher;
ASSERT_TRUE(catcher.GetNextResult());
}
}
IN_PROC_BROWSER_TEST_F(ShellRuntimeApiTest, RuntimeReloadApp) {
scoped_refptr<const Extension> extension;
{
ResultCatcher catcher;
extension = base::WrapRefCounted(LoadApp("platform_app"));
ASSERT_TRUE(catcher.GetNextResult());
}
const ExtensionId extension_id = extension->id();
ExtensionRegistry* registry = ExtensionRegistry::Get(browser_context());
TestExtensionRegistryObserver registry_observer(registry, extension_id);
ASSERT_TRUE(browsertest_util::ExecuteScriptInBackgroundPageNoWait(
browser_context(), extension_id, "chrome.runtime.reload();"));
ASSERT_EQ(extension, registry_observer.WaitForExtensionUnloaded());
EXPECT_TRUE(registry->disabled_extensions().Contains(extension_id));
ASSERT_TRUE(extension = registry_observer.WaitForExtensionLoaded());
ASSERT_EQ(extension->id(), extension_id);
EXPECT_TRUE(registry->enabled_extensions().Contains(extension_id));
{
ResultCatcher catcher;
ASSERT_TRUE(catcher.GetNextResult());
}
}
}