Index: functional/browser.py |
=================================================================== |
--- functional/browser.py (revision 70768) |
+++ functional/browser.py (working copy) |
@@ -174,6 +174,55 @@ |
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 they 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() |