diff options
-rw-r--r-- | chrome/test/functional/browser.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/chrome/test/functional/browser.py b/chrome/test/functional/browser.py index ac1785a..a7f7f18 100644 --- a/chrome/test/functional/browser.py +++ b/chrome/test/functional/browser.py @@ -174,6 +174,55 @@ class BrowserTest(pyauto.PyUITest): pid2 = self.GetBrowserInfo()['windows'][0]['tabs'][0]['renderer_pid'] self.assertNotEqual(pid1, pid2) + def testPopupSharesProcess(self): + """Verify that parent tab and popup share a process.""" + file_url = self.GetFileURLForPath(os.path.join( + self.DataDir(), 'popup_blocker', 'popup-blocked-to-post-blank.html')) + self.NavigateToURL(file_url) + blocked_popups = self.GetBlockedPopupsInfo() + self.assertEqual(1, len(blocked_popups), msg='Popup not blocked') + self.UnblockAndLaunchBlockedPopup(0) + self.assertEquals(2, self.GetBrowserWindowCount()) + parent_pid = self.GetBrowserInfo()['windows'][0]['tabs'][0]['renderer_pid'] + popup_pid = self.GetBrowserInfo()['windows'][1]['tabs'][0]['renderer_pid'] + self.assertEquals(popup_pid, parent_pid, + msg='Parent and popup are not sharing a process.') + + def testKillAndReloadSharedProcess(self): + """Verify that killing a shared process kills all associated renderers. + In this case we are killing a process shared by a parent and + its popup process. Reloading both should share a process again. + """ + file_url = self.GetFileURLForPath(os.path.join( + self.DataDir(), 'popup_blocker', 'popup-blocked-to-post-blank.html')) + self.NavigateToURL(file_url) + blocked_popups = self.GetBlockedPopupsInfo() + self.assertEqual(1, len(blocked_popups), msg='Popup not blocked') + self.UnblockAndLaunchBlockedPopup(0) + self.assertEquals(2, self.GetBrowserWindowCount()) + # Check that the renderers are alive. + self.assertEquals(1, self.FindInPage('pop-up')['match_count']) + self.assertEquals(1, + self.FindInPage('popup', tab_index=0, windex=1)['match_count']) + # Check if they are sharing a process id. + self.assertEquals( + self.GetBrowserInfo()['windows'][0]['tabs'][0]['renderer_pid'], + self.GetBrowserInfo()['windows'][1]['tabs'][0]['renderer_pid']) + shared_pid = self.GetBrowserInfo()['windows'][0]['tabs'][0]['renderer_pid'] + # This method would fail if the renderers are not killed. + self.KillRendererProcess(shared_pid) + + # Reload the parent and popup windows. + self.GetBrowserWindow(0).GetTab(0).Reload() + self.GetBrowserWindow(1).GetTab(0).Reload() + # Check if both are sharing a process id. + self.assertEquals( + self.GetBrowserInfo()['windows'][0]['tabs'][0]['renderer_pid'], + self.GetBrowserInfo()['windows'][1]['tabs'][0]['renderer_pid']) + # The shared process id should be different from the previous one. + self.assertNotEqual(shared_pid, + self.GetBrowserInfo()['windows'][0]['tabs'][0]['renderer_pid']) + if __name__ == '__main__': pyauto_functional.Main() |