| Index: chrome/browser/extensions/extension_messages_apitest.cc
|
| diff --git a/chrome/browser/extensions/extension_messages_apitest.cc b/chrome/browser/extensions/extension_messages_apitest.cc
|
| index 9747d06632e548cdf18178f83814c25c4938a792..a46af8931d25ba75877d99eee0d58725c5c4eebd 100644
|
| --- a/chrome/browser/extensions/extension_messages_apitest.cc
|
| +++ b/chrome/browser/extensions/extension_messages_apitest.cc
|
| @@ -28,6 +28,7 @@
|
| #include "chrome/browser/infobars/infobar_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/ui/browser.h"
|
| +#include "chrome/browser/ui/browser_commands.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| #include "chrome/common/chrome_paths.h"
|
| #include "chrome/common/chrome_switches.h"
|
| @@ -35,9 +36,11 @@
|
| #include "content/public/browser/notification_registrar.h"
|
| #include "content/public/browser/notification_service.h"
|
| #include "content/public/test/browser_test_utils.h"
|
| +#include "content/public/test/test_utils.h"
|
| #include "extensions/browser/event_router.h"
|
| #include "extensions/browser/extension_prefs.h"
|
| #include "extensions/browser/extension_system.h"
|
| +#include "extensions/browser/process_manager.h"
|
| #include "extensions/common/api/runtime.h"
|
| #include "extensions/common/extension_builder.h"
|
| #include "extensions/common/value_builder.h"
|
| @@ -1286,6 +1289,44 @@ IN_PROC_BROWSER_TEST_F(ExternallyConnectableMessagingTest,
|
|
|
| #endif // !defined(OS_WIN) - http://crbug.com/350517.
|
|
|
| +// Tests that messages sent in the unload handler of a window arrive.
|
| +IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MessagingOnUnload) {
|
| + host_resolver()->AddRule("*", "127.0.0.1");
|
| + ASSERT_TRUE(StartEmbeddedTestServer());
|
| + const Extension* extension =
|
| + LoadExtension(test_data_dir_.AppendASCII("messaging/on_unload"));
|
| + ExtensionTestMessageListener listener("listening", false);
|
| + ASSERT_TRUE(extension);
|
| + ui_test_utils::NavigateToURL(
|
| + browser(), embedded_test_server()->GetURL("example.com", "/empty.html"));
|
| + EXPECT_TRUE(listener.WaitUntilSatisfied());
|
| + ExtensionHost* background_host =
|
| + ProcessManager::Get(profile())->GetBackgroundHostForExtension(
|
| + extension->id());
|
| + ASSERT_TRUE(background_host);
|
| + content::WebContents* background_contents = background_host->host_contents();
|
| + ASSERT_TRUE(background_contents);
|
| + int message_count = -1;
|
| + ASSERT_TRUE(content::ExecuteScriptAndExtractInt(
|
| + background_contents,
|
| + "window.domAutomationController.send(window.messageCount);",
|
| + &message_count));
|
| + // There shouldn't be any messages yet.
|
| + EXPECT_EQ(0, message_count);
|
| +
|
| + content::WebContentsDestroyedWatcher destroyed_watcher(
|
| + browser()->tab_strip_model()->GetActiveWebContents());
|
| + chrome::CloseTab(browser());
|
| + destroyed_watcher.Wait();
|
| + base::RunLoop().RunUntilIdle();
|
| + // The extension should have sent a message from its unload handler.
|
| + ASSERT_TRUE(content::ExecuteScriptAndExtractInt(
|
| + background_contents,
|
| + "window.domAutomationController.send(window.messageCount);",
|
| + &message_count));
|
| + EXPECT_EQ(1, message_count);
|
| +}
|
| +
|
| } // namespace
|
|
|
| }; // namespace extensions
|
|
|