| // Copyright (c) 2010 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 "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. |
| // |
| // This test relies on the extension installed with RunExtensionSubtest |
| // actually being installed, which won't happen if subtests are skipped (see |
| // comment on ExtensionApiTest::ExtensionSubtestsAreSkipped) |
| if (ExtensionSubtestsAreSkipped()) |
| return; |
| |
| 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. Assertions for normal events: |
| 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")); |
| // Assertions for filtered events: |
| EXPECT_FALSE(event_router->ExtensionHasEventListener( |
| id, "webNavigation.onBeforeNavigate")); |
| EXPECT_FALSE( |
| event_router->ExtensionHasEventListener(id, "webNavigation.onCommitted")); |
| EXPECT_FALSE(event_router->ExtensionHasEventListener( |
| id, "webNavigation.onDOMContentLoaded")); |
| EXPECT_FALSE( |
| event_router->ExtensionHasEventListener(id, "webNavigation.onCompleted")); |
| } |
| |
| } // namespace extensions |