Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(219)

Unified Diff: chrome/browser/extensions/app_background_page_apitest.cc

Issue 2762513002: Remove keep-alive impulse IPCs from NaCl modules. (Closed)
Patch Set: Rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/extensions/lazy_background_page_apitest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/app_background_page_apitest.cc
diff --git a/chrome/browser/extensions/app_background_page_apitest.cc b/chrome/browser/extensions/app_background_page_apitest.cc
index 78ce1351723219080e25ce2ee89815038763ba79..2ac5033802440ad3834ec97f5d1ecafca9aa1318 100644
--- a/chrome/browser/extensions/app_background_page_apitest.cc
+++ b/chrome/browser/extensions/app_background_page_apitest.cc
@@ -122,9 +122,6 @@ class AppBackgroundPageNaClTest : public AppBackgroundPageApiTest {
void SetUpOnMainThread() override {
AppBackgroundPageApiTest::SetUpOnMainThread();
-#if !defined(DISABLE_NACL)
- nacl::NaClProcessHost::SetPpapiKeepAliveThrottleForTesting(50);
-#endif
extensions::ProcessManager::SetEventPageIdleTimeForTesting(1000);
extensions::ProcessManager::SetEventPageSuspendingTimeForTesting(1000);
}
@@ -145,56 +142,6 @@ class AppBackgroundPageNaClTest : public AppBackgroundPageApiTest {
const Extension* extension_;
};
-// Produces an extensions::ProcessManager::ImpulseCallbackForTesting callback
-// that will match a specified goal and can be waited on.
-class ImpulseCallbackCounter {
- public:
- explicit ImpulseCallbackCounter(extensions::ProcessManager* manager,
- const std::string& extension_id)
- : observed_(0),
- goal_(0),
- manager_(manager),
- extension_id_(extension_id) {
- }
-
- extensions::ProcessManager::ImpulseCallbackForTesting
- SetGoalAndGetCallback(int goal) {
- observed_ = 0;
- goal_ = goal;
- message_loop_runner_ = new content::MessageLoopRunner();
- return base::Bind(&ImpulseCallbackCounter::ImpulseCallback,
- base::Unretained(this),
- message_loop_runner_->QuitClosure(),
- extension_id_);
- }
-
- void Wait() {
- message_loop_runner_->Run();
- }
- private:
- void ImpulseCallback(
- const base::Closure& quit_callback,
- const std::string& extension_id_from_test,
- const std::string& extension_id_from_manager) {
- if (extension_id_from_test == extension_id_from_manager) {
- if (++observed_ >= goal_) {
- // Clear callback to free reference to message loop.
- manager_->SetKeepaliveImpulseCallbackForTesting(
- extensions::ProcessManager::ImpulseCallbackForTesting());
- manager_->SetKeepaliveImpulseDecrementCallbackForTesting(
- extensions::ProcessManager::ImpulseCallbackForTesting());
- quit_callback.Run();
- }
- }
- }
-
- int observed_;
- int goal_;
- extensions::ProcessManager* manager_;
- const std::string extension_id_;
- scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
-};
-
} // namespace
// Disable on Mac only. http://crbug.com/95139
@@ -592,54 +539,63 @@ IN_PROC_BROWSER_TEST_F(AppBackgroundPageApiTest, UnloadExtensionWhileHidden) {
ASSERT_TRUE(WaitForBackgroundMode(false));
}
-// Verify active NaCl embeds cause many keepalive impulses to be sent.
-// Disabled on Windows due to flakiness: http://crbug.com/346278
-#if defined(OS_WIN)
-#define MAYBE_BackgroundKeepaliveActive DISABLED_BackgroundKeepaliveActive
-#else
-// Disabling other platforms too since the test started failing
-// consistently. http://crbug.com/490440
-#define MAYBE_BackgroundKeepaliveActive DISABLED_BackgroundKeepaliveActive
-#endif
-IN_PROC_BROWSER_TEST_F(AppBackgroundPageNaClTest,
- MAYBE_BackgroundKeepaliveActive) {
#if !defined(DISABLE_NACL)
- ExtensionTestMessageListener nacl_modules_loaded("nacl_modules_loaded", true);
- LaunchTestingApp();
+
+// Verify that active NaCl embeds raise the keepalive count.
+IN_PROC_BROWSER_TEST_F(AppBackgroundPageNaClTest, BackgroundKeepaliveActive) {
extensions::ProcessManager* manager =
extensions::ProcessManager::Get(browser()->profile());
- ImpulseCallbackCounter active_impulse_counter(manager, extension()->id());
- EXPECT_TRUE(nacl_modules_loaded.WaitUntilSatisfied());
-
- // Target .5 seconds: .5 seconds / 50ms throttle * 2 embeds == 20 impulses.
- manager->SetKeepaliveImpulseCallbackForTesting(
- active_impulse_counter.SetGoalAndGetCallback(20));
- active_impulse_counter.Wait();
-#endif
+ ExtensionTestMessageListener ready_listener("ready", true);
+ LaunchTestingApp();
+ EXPECT_TRUE(ready_listener.WaitUntilSatisfied());
+
+ // When the app calls chrome.test.sendMessage() the keepalive count stays
+ // incremented until the call completes (i.e. until we call Reply() below).
+ // So between WaitUntilSatisfied() and Reply(), we know that the count must
+ // be in the incremented state, and in this case that is the only
+ // contributor to the keepalive count.
+ EXPECT_EQ(1, manager->GetLazyKeepaliveCount(extension()));
+
+ ExtensionTestMessageListener created1_listener("created_module:1", true);
+ ready_listener.Reply("create_module");
+ EXPECT_TRUE(created1_listener.WaitUntilSatisfied());
+
+ // Now chrome.test.sendMessage() is incrementing the keepalive count, but
+ // there is also a Native Client module active, incrementing it again.
+ EXPECT_EQ(2, manager->GetLazyKeepaliveCount(extension()));
+
+ ExtensionTestMessageListener created2_listener("created_module:2", true);
+ created1_listener.Reply("create_module");
+ EXPECT_TRUE(created2_listener.WaitUntilSatisfied());
+
+ // Keepalive comes from chrome.test.sendMessage, plus two modules.
+ EXPECT_EQ(3, manager->GetLazyKeepaliveCount(extension()));
+
+ // Tear-down both modules.
+ ExtensionTestMessageListener destroyed1_listener("destroyed_module", true);
+ created2_listener.Reply("destroy_module");
+ EXPECT_TRUE(destroyed1_listener.WaitUntilSatisfied());
+ ExtensionTestMessageListener destroyed2_listener("destroyed_module", false);
+ destroyed1_listener.Reply("destroy_module");
+ EXPECT_TRUE(destroyed2_listener.WaitUntilSatisfied());
+
+ // Both modules are gone, and no sendMessage API reply is pending (since the
+ // last listener has the |will_reply| flag set to |false|).
+ EXPECT_EQ(0, manager->GetLazyKeepaliveCount(extension()));
}
-// Verify that nacl modules that go idle will not send keepalive impulses.
-// Disabled on windows due to Win XP failures:
-// DesktopWindowTreeHostWin::HandleCreate not implemented. crbug.com/331954
-#if defined(OS_WIN)
-#define MAYBE_BackgroundKeepaliveIdle DISABLED_BackgroundKeepaliveIdle
-#else
-// ASAN errors appearing: https://crbug.com/332440
-#define MAYBE_BackgroundKeepaliveIdle DISABLED_BackgroundKeepaliveIdle
-#endif
-IN_PROC_BROWSER_TEST_F(AppBackgroundPageNaClTest,
- MAYBE_BackgroundKeepaliveIdle) {
-#if !defined(DISABLE_NACL)
- ExtensionTestMessageListener nacl_modules_loaded("nacl_modules_loaded", true);
+// Verify that we can create a NaCl module by adding the <embed> to the
+// background page, without having to e.g. touch emebed.lastError to
+// trigger the module to load.
+// Disabled due to http://crbug.com/371059.
+IN_PROC_BROWSER_TEST_F(AppBackgroundPageNaClTest, DISABLED_CreateNaClModule) {
+ ExtensionTestMessageListener ready_listener("ready", true);
LaunchTestingApp();
- extensions::ProcessManager* manager =
- extensions::ProcessManager::Get(browser()->profile());
- ImpulseCallbackCounter idle_impulse_counter(manager, extension()->id());
- EXPECT_TRUE(nacl_modules_loaded.WaitUntilSatisfied());
+ EXPECT_TRUE(ready_listener.WaitUntilSatisfied());
- manager->SetKeepaliveImpulseDecrementCallbackForTesting(
- idle_impulse_counter.SetGoalAndGetCallback(1));
- nacl_modules_loaded.Reply("be idle");
- idle_impulse_counter.Wait();
-#endif
+ ExtensionTestMessageListener created_listener("created_module:1", false);
+ ready_listener.Reply("create_module_without_hack");
+ EXPECT_TRUE(created_listener.WaitUntilSatisfied());
}
+
+#endif // !defined(DISABLE_NACL)
« no previous file with comments | « no previous file | chrome/browser/extensions/lazy_background_page_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698