Commit 353f0fb4 authored by David Bertoni's avatar David Bertoni Committed by Commit Bot

[Extensions] Check that onInstalled event is triggered on update.

Bug: 954657
Change-Id: I3748b0f2f87c1ca22fd056f4002546300de66162
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1629427Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Commit-Queue: David Bertoni <dbertoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#664755}
parent 6b3cb2c8
...@@ -1141,11 +1141,14 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdatePackedExtension) { ...@@ -1141,11 +1141,14 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdatePackedExtension) {
"version": "0.1", "version": "0.1",
"background": {"service_worker": "script.js"} "background": {"service_worker": "script.js"}
})"; })";
constexpr char kNewVersionString[] = "0.2";
// This script installs an event listener for updates to the extension with // This script installs an event listener for updates to the extension with
// a callback that forces itself to reload. // a callback that forces itself to reload.
constexpr char kScript[] = constexpr char kScript1[] =
R"( R"(
chrome.runtime.onUpdateAvailable.addListener(function(details) { chrome.runtime.onUpdateAvailable.addListener(function(details) {
chrome.test.assertEq('%s', details.version);
chrome.runtime.reload(); chrome.runtime.reload();
}); });
chrome.test.sendMessage('ready1'); chrome.test.sendMessage('ready1');
...@@ -1156,7 +1159,8 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdatePackedExtension) { ...@@ -1156,7 +1159,8 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdatePackedExtension) {
// Write the manifest and script files and load the extension. // Write the manifest and script files and load the extension.
test_dir.WriteManifest(kManifest1); test_dir.WriteManifest(kManifest1);
test_dir.WriteFile(FILE_PATH_LITERAL("script.js"), kScript); test_dir.WriteFile(FILE_PATH_LITERAL("script.js"),
base::StringPrintf(kScript1, kNewVersionString));
{ {
ExtensionTestMessageListener ready_listener("ready1", false); ExtensionTestMessageListener ready_listener("ready1", false);
...@@ -1172,18 +1176,26 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdatePackedExtension) { ...@@ -1172,18 +1176,26 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdatePackedExtension) {
R"({ R"({
"name": "Test Extension", "name": "Test Extension",
"manifest_version": 2, "manifest_version": 2,
"version": "0.2", "version": "%s",
"background": {"service_worker": "script.js"} "background": {"service_worker": "script.js"}
})"; })";
constexpr char kScript2[] =
R"(
chrome.runtime.onInstalled.addListener(function(details) {
chrome.test.assertEq('update', details.reason);
chrome.test.sendMessage('onInstalled');
});
chrome.test.sendMessage('ready2');
)";
// Rewrite the manifest and script files with a version change in the manifest // Rewrite the manifest and script files with a version change in the manifest
// file. After reloading the extension, the old version of the extension // file. After reloading the extension, the old version of the extension
// should detect the update, force the reload, and the new script should // should detect the update, force the reload, and the new script should
// execute. // execute.
test_dir.WriteManifest(kManifest2); test_dir.WriteManifest(base::StringPrintf(kManifest2, kNewVersionString));
test_dir.WriteFile(FILE_PATH_LITERAL("script.js"), test_dir.WriteFile(FILE_PATH_LITERAL("script.js"), kScript2);
"chrome.test.sendMessage('ready2');");
{ {
ExtensionTestMessageListener ready_listener("ready2", false); ExtensionTestMessageListener ready_listener("ready2", false);
ExtensionTestMessageListener on_installed_listener("onInstalled", false);
base::FilePath path = test_dir.Pack(); base::FilePath path = test_dir.Pack();
ExtensionService* const extension_service = ExtensionService* const extension_service =
ExtensionSystem::Get(profile())->extension_service(); ExtensionSystem::Get(profile())->extension_service();
...@@ -1195,6 +1207,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdatePackedExtension) { ...@@ -1195,6 +1207,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdatePackedExtension) {
.GetByID(id) .GetByID(id)
->version() ->version()
.GetString()); .GetString());
EXPECT_TRUE(on_installed_listener.WaitUntilSatisfied());
} }
} }
...@@ -1218,6 +1231,14 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdateUnpackedExtension) { ...@@ -1218,6 +1231,14 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdateUnpackedExtension) {
"version": "0.2", "version": "0.2",
"background": {"service_worker": "script.js"} "background": {"service_worker": "script.js"}
})"; })";
constexpr char kScript[] =
R"(
chrome.runtime.onInstalled.addListener(function(details) {
chrome.test.assertEq('%s', details.reason);
chrome.test.sendMessage('onInstalled');
});
chrome.test.sendMessage('%s');
)";
std::string id; std::string id;
...@@ -1240,36 +1261,42 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdateUnpackedExtension) { ...@@ -1240,36 +1261,42 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, UpdateUnpackedExtension) {
// Write the manifest and script files and load the extension. // Write the manifest and script files and load the extension.
test_dir.WriteManifest(kManifest1); test_dir.WriteManifest(kManifest1);
test_dir.WriteFile(FILE_PATH_LITERAL("script.js"), test_dir.WriteFile(FILE_PATH_LITERAL("script.js"),
"chrome.test.sendMessage('ready1');"); base::StringPrintf(kScript, "install", "ready1"));
{ {
ExtensionTestMessageListener ready_listener("ready1", false); ExtensionTestMessageListener ready_listener("ready1", false);
ExtensionTestMessageListener on_installed_listener("onInstalled", false);
installer->Load(test_dir.UnpackedPath()); installer->Load(test_dir.UnpackedPath());
EXPECT_TRUE(ready_listener.WaitUntilSatisfied()); EXPECT_TRUE(ready_listener.WaitUntilSatisfied());
EXPECT_TRUE(on_installed_listener.WaitUntilSatisfied());
ASSERT_FALSE(id.empty()); ASSERT_FALSE(id.empty());
} }
// Rewrite the script file without a version change in the manifest and reload // Rewrite the script file without a version change in the manifest and reload
// the extension. The new script should execute. // the extension. The new script should execute.
test_dir.WriteFile(FILE_PATH_LITERAL("script.js"), test_dir.WriteFile(FILE_PATH_LITERAL("script.js"),
"chrome.test.sendMessage('ready2');"); base::StringPrintf(kScript, "update", "ready2"));
{ {
ExtensionTestMessageListener ready_listener("ready2", false); ExtensionTestMessageListener ready_listener("ready2", false);
ExtensionTestMessageListener on_installed_listener("onInstalled", false);
extension_service->ReloadExtension(id); extension_service->ReloadExtension(id);
EXPECT_TRUE(ready_listener.WaitUntilSatisfied()); EXPECT_TRUE(ready_listener.WaitUntilSatisfied());
EXPECT_TRUE(on_installed_listener.WaitUntilSatisfied());
} }
// Rewrite the manifest and script files with a version change in the manifest // Rewrite the manifest and script files with a version change in the manifest
// file. After reloading the extension, the new script should execute. // file. After reloading the extension, the new script should execute.
test_dir.WriteManifest(kManifest2); test_dir.WriteManifest(kManifest2);
test_dir.WriteFile(FILE_PATH_LITERAL("script.js"), test_dir.WriteFile(FILE_PATH_LITERAL("script.js"),
"chrome.test.sendMessage('ready3');"); base::StringPrintf(kScript, "update", "ready3"));
{ {
ExtensionTestMessageListener ready_listener("ready3", false); ExtensionTestMessageListener ready_listener("ready3", false);
ExtensionTestMessageListener on_installed_listener("onInstalled", false);
extension_service->ReloadExtension(id); extension_service->ReloadExtension(id);
EXPECT_TRUE(ready_listener.WaitUntilSatisfied()); EXPECT_TRUE(ready_listener.WaitUntilSatisfied());
EXPECT_TRUE(on_installed_listener.WaitUntilSatisfied());
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment