Index: chrome/browser/extensions/events_apitest.cc |
diff --git a/chrome/browser/extensions/events_apitest.cc b/chrome/browser/extensions/events_apitest.cc |
index 3420022dc8b3ba664a153583b7ed8d65c89ae699..8ebff3cdde31b65addb609e32e3b2014ce54f129 100644 |
--- a/chrome/browser/extensions/events_apitest.cc |
+++ b/chrome/browser/extensions/events_apitest.cc |
@@ -2,8 +2,51 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include "base/files/file_path.h" |
+#include "base/files/file_util.h" |
#include "chrome/browser/extensions/extension_apitest.h" |
+#include "extensions/browser/event_router.h" |
+#include "extensions/browser/extension_registry.h" |
+ |
+namespace extensions { |
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, Events) { |
ASSERT_TRUE(RunExtensionTest("events")) << message_; |
} |
+ |
+// Tests that events are unregistered when an extension page shuts down. |
+IN_PROC_BROWSER_TEST_F(ExtensionApiTest, EventsAreUnregistered) { |
+ // In this test, page1.html registers for a number of events, then navigates |
+ // to page2.html, which should unregister those events. page2.html notifies |
+ // pass, by which point the event should have been unregistered. |
+ EventRouter* event_router = EventRouter::Get(profile()); |
+ ExtensionRegistry* registry = ExtensionRegistry::Get(profile()); |
+ |
+ std::string test_extension_name = "events_are_unregistered"; |
+ ASSERT_TRUE(RunExtensionSubtest(test_extension_name, "page1.html")) |
+ << message_; |
+ |
+ // Find the extension we just installed by looking for the path. |
+ base::FilePath extension_path = |
+ test_data_dir_.AppendASCII(test_extension_name); |
+ const Extension* extension = |
+ GetExtensionByPath(registry->enabled_extensions(), extension_path); |
+ ASSERT_TRUE(extension) << "No extension found at \"" << extension_path.value() |
+ << "\" (absolute path \"" |
+ << base::MakeAbsoluteFilePath(extension_path).value() |
+ << "\")"; |
+ const std::string& id = extension->id(); |
+ |
+ // The page has closed, so no matter what all events are no longer listened |
+ // to. |
+ EXPECT_FALSE( |
+ event_router->ExtensionHasEventListener(id, "browserAction.onClicked")); |
+ EXPECT_FALSE( |
+ event_router->ExtensionHasEventListener(id, "runtime.onStartup")); |
+ EXPECT_FALSE( |
+ event_router->ExtensionHasEventListener(id, "runtime.onSuspend")); |
+ EXPECT_FALSE( |
+ event_router->ExtensionHasEventListener(id, "runtime.onInstalled")); |
+} |
+ |
+} // namespace extensions |