blob: c1f0507f4d5e6e0916d91ee2456d4a00b3914eea [file] [log] [blame]
// Copyright 2018 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.
#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) {
const Extension* extension = nullptr;
// Load the extension and wait for it to be ready.
{
ResultCatcher catcher;
ASSERT_TRUE(extension = LoadExtension("extension"));
ASSERT_TRUE(catcher.GetNextResult());
}
const ExtensionId extension_id = extension->id();
ExtensionRegistry* registry = ExtensionRegistry::Get(browser_context());
// Reload the extension and wait for a pair of
// ExtensionRegistry::OnExtensionUnloaded()/Loaded() calls.
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));
// Wait for the background page to load.
{
ResultCatcher catcher;
ASSERT_TRUE(catcher.GetNextResult());
}
}
IN_PROC_BROWSER_TEST_F(ShellRuntimeApiTest, RuntimeReloadApp) {
const Extension* extension = nullptr;
// Load and launch the app and wait for it to create a window.
{
ResultCatcher catcher;
extension = LoadApp("platform_app");
ASSERT_TRUE(catcher.GetNextResult());
}
const ExtensionId extension_id = extension->id();
ExtensionRegistry* registry = ExtensionRegistry::Get(browser_context());
// Reload the extension and wait for a pair of
// ExtensionRegistry::OnExtensionUnloaded()/Loaded() calls.
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));
// Reloading the app should launch it again automatically.
// Wait for the app to create a new window.
{
ResultCatcher catcher;
ASSERT_TRUE(catcher.GetNextResult());
}
}
} // namespace extensions