// 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