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
|
// Copyright 2018 The Chromium Authors
// 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) {
scoped_refptr<const Extension> extension;
// Load the extension and wait for it to be ready.
{
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());
// 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) {
scoped_refptr<const Extension> extension;
// Load and launch the app and wait for it to create a window.
{
ResultCatcher catcher;
extension = base::WrapRefCounted(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
|