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

Unified Diff: chrome/test/functional/notifications.py

Issue 11316295: Revert 170658. r170654 had moved these tests to interactive_ui_tests, which is needed for notificat… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years 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 | « chrome/test/functional/PYAUTO_TESTS ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/functional/notifications.py
===================================================================
--- chrome/test/functional/notifications.py (revision 170658)
+++ chrome/test/functional/notifications.py (working copy)
@@ -1,546 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-import os
-import urllib
-
-import pyauto_functional
-import pyauto
-
-
-class NotificationsTest(pyauto.PyUITest):
- """Test of HTML5 desktop notifications."""
- def __init__(self, methodName='runTest'):
- super(NotificationsTest, self).__init__(methodName)
- self.EMPTY_PAGE_URL = self.GetHttpURLForDataPath('empty.html')
- # Content settings for default notification permission.
- self.ALLOW_ALL_SETTING = 1
- self.DENY_ALL_SETTING = 2
- self.ASK_SETTING = 3
-
- # HTML page used for notification testing.
- self.TEST_PAGE_URL = self.GetFileURLForDataPath(
- os.path.join('notifications', 'notification_tester.html'))
-
- def Debug(self):
- """Test method for experimentation.
-
- This method will not run automatically.
- """
- while True:
- raw_input('Interact with the browser and hit <enter> to dump notification'
- 'state...')
- print '*' * 20
- self.pprint(self.GetActiveNotifications())
- self.pprint(self._GetDefaultPermissionSetting())
-
- def _SetDefaultPermissionSetting(self, setting):
- """Sets the default setting for whether sites are allowed to create
- notifications.
- """
- self.SetPrefs(pyauto.kDefaultContentSettings, {u'notifications': setting})
-
- def _GetDefaultPermissionSetting(self):
- """Gets the default setting for whether sites are allowed to create
- notifications.
- """
- return self.GetPrefsInfo().Prefs(
- pyauto.kDefaultContentSettings)[u'notifications']
-
- def _GetDeniedOrigins(self):
- """Gets the list of origins that are explicitly denied to create
- notifications.
- """
- return (self.GetPrefsInfo().Prefs(pyauto.kDesktopNotificationDeniedOrigins)
- or [])
-
- def _GetAllowedOrigins(self):
- """Gets the list of origins that are explicitly allowed to create
- notifications.
- """
- return (self.GetPrefsInfo().Prefs(pyauto.kDesktopNotificationAllowedOrigins)
- or [])
-
- def _SetAllowedOrigins(self, origins):
- """Sets the list of allowed origins to the given list.
-
- None of the items in the list should be explicitly denied.
- """
- return self.SetPrefs(pyauto.kDesktopNotificationAllowedOrigins, origins)
-
- def _SetDeniedOrigins(self, origins):
- """Sets the list of denied origins to the given list.
-
- None of the items in the list should be explicitly allowed.
- """
- return self.SetPrefs(pyauto.kDesktopNotificationDeniedOrigins, origins)
-
- def _DenyOrigin(self, new_origin):
- """Denies the given origin to create notifications.
-
- If it was explicitly allowed, that preference is dropped.
- """
- self._DropOriginPreference(new_origin)
- denied = self._GetDeniedOrigins()
- if new_origin not in denied:
- self._SetDeniedOrigins(denied + [new_origin])
-
- def _AllowOrigin(self, new_origin):
- """Allows the given origin to create notifications. If it was explicitly
- denied, that preference is dropped.
- """
- self._DropOriginPreference(new_origin)
- allowed = self._GetAllowedOrigins()
- if new_origin not in allowed:
- self._SetAllowedOrigins(allowed + [new_origin])
-
- def _DropOriginPreference(self, new_origin):
- """Drops the preference as to whether this origin should be allowed to
- create notifications. If it was explicitly allowed or explicitly denied,
- that preference is removed.
- """
- allowed = self._GetAllowedOrigins()
- if allowed and new_origin in allowed:
- allowed.remove(new_origin)
- self._SetAllowedOrigins(allowed)
- denied = self._GetDeniedOrigins()
- if denied and new_origin in denied:
- denied.remove(new_origin)
- self._SetDeniedOrigins(denied)
-
- def _AllowAllOrigins(self):
- """Allows any origin to create notifications."""
- self._SetDefaultPermissionSetting(self.ALLOW_ALL_SETTING)
- self._SetDeniedOrigins([])
-
- def _VerifyInfobar(self, origin, tab_index=0, windex=0):
- """Helper to verify the notification infobar contents are correct.
-
- Defaults to first tab in first window.
-
- Args:
- origin: origin of the notification, e.g., www.gmail.com
- tab_index: index of the tab within the given window
- windex: index of the window
- """
- tab_info = self.GetBrowserInfo()['windows'][windex]['tabs'][tab_index]
- self.assertEquals(1, len(tab_info['infobars']))
- infobar = tab_info['infobars'][0]
- text = 'Allow %s to show desktop notifications?' % origin
- self.assertEqual(text, infobar['text'])
- self.assertEqual(2, len(infobar['buttons']))
- self.assertEqual('Allow', infobar['buttons'][0])
- self.assertEqual('Deny', infobar['buttons'][1])
-
- def _CreateSimpleNotification(self, img_url, title, text,
- replace_id='', tab_index=0, windex=0):
- """Creates a simple notification.
-
- Returns the id of the notification, which can be used to cancel it later.
-
- This executes a script in the page which shows a notification.
- This will only work if the page is navigated to |TEST_PAGE_URL|.
- The page must also have permission to show notifications.
-
- Args:
- img_url: url of a image to use; can be a data url
- title: title of the notification
- text: text in the notification
- replace_id: id string to be used for this notification. If another
- notification is shown with the same replace_id, the former
- will be replaced.
- tab_index: index of the tab within the given window
- windex: index of the window
- """
- return self.CallJavascriptFunc('createNotification',
- [img_url, title, text, replace_id],
- tab_index,
- windex);
-
- def _CreateHTMLNotification(self, content_url, replace_id='',
- wait_for_display=True, tab_index=0, windex=0):
- """Creates an HTML notification.
-
- Returns the id of the notification, which can be used to cancel it later.
-
- This executes a script in the page which shows a notification.
- This will only work if the page is navigated to |TEST_PAGE_URL|.
- The page must also have permission to show notifications.
-
- Args:
- content_url: url of the page to show in the notification
- replace_id: id string to be used for this notification. If another
- notification is shown with the same replace_id, the former
- will be replaced.
- wait_for_display: whether we should wait for the notification to display
- tab_index: index of the tab within the given window
- windex: index of the window
- """
- return self.CallJavascriptFunc('createHTMLNotification',
- [content_url, replace_id, wait_for_display],
- tab_index,
- windex)
-
- def _RequestPermission(self, tab_index=0, windex=0):
- """Requests permission to create notifications.
-
- This will only work if the current page is navigated to |TEST_PAGE_URL|.
-
- Args:
- tab_index: index of the tab within the given window
- windex: index of the window
- """
- self.CallJavascriptFunc('requestPermission', [], tab_index, windex)
-
- def _CancelNotification(self, notification_id, tab_index=0, windex=0):
- """Cancels a notification with the given id.
-
- This canceling is done in the page that showed that notification and so
- follows a different path than closing a notification via the UI.
-
- This function should NOT be called until |WaitForNotificationCount| has been
- used to verify the notification is showing. This function cannot be used to
- cancel a notification that is in the display queue.
-
- This will only work if the page is navigated to |TEST_PAGE_URL|.
-
- Args:
- notification_id: id of the notification to cancel
- tab_index: index of the tab within the given window that created the
- notification
- windex: index of the window
- """
- msg = self.CallJavascriptFunc(
- 'cancelNotification', [notification_id], tab_index, windex)
- # '1' signifies success.
- self.assertEquals('1', msg)
-
- def testCreateSimpleNotification(self):
- """Creates a simple notification."""
- self._AllowAllOrigins()
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateSimpleNotification('no_such_file.png', 'My Title', 'My Body')
- self.assertEquals(1, len(self.GetActiveNotifications()))
- notification = self.GetActiveNotifications()[0]
- html_data = urllib.unquote(notification['content_url'])
- self.assertTrue('no_such_file.png' in html_data)
- self.assertTrue('My Title' in html_data)
- self.assertTrue('My Body' in html_data)
-
- def testCreateHTMLNotification(self):
- """Creates an HTML notification using a fake url."""
- self._AllowAllOrigins()
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertEquals(1, len(self.GetActiveNotifications()))
- notification = self.GetActiveNotifications()[0]
- self.assertEquals(self.EMPTY_PAGE_URL, notification['content_url'])
- self.assertEquals('', notification['display_source'])
- self.assertEquals('file:///', notification['origin_url'])
-
- def testCloseNotification(self):
- """Creates a notification and closes it."""
- self._AllowAllOrigins()
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.CloseNotification(0)
- self.assertFalse(self.GetActiveNotifications())
-
- def testCancelNotification(self):
- """Creates a notification and cancels it in the origin page."""
- self._AllowAllOrigins()
- self.NavigateToURL(self.TEST_PAGE_URL)
- note_id = self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertNotEquals(-1, note_id)
- self.WaitForNotificationCount(1)
- self._CancelNotification(note_id)
- self.assertFalse(self.GetActiveNotifications())
-
- def testPermissionInfobarAppears(self):
- """Requests notification privileges and verifies the infobar appears."""
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._RequestPermission()
- self.assertTrue(self.WaitForInfobarCount(1))
- self.assertFalse(self.GetActiveNotifications())
- self._VerifyInfobar('') # file:/// origins are blank
-
- def testAllowOnPermissionInfobar(self):
- """Tries to create a notification and clicks allow on the infobar."""
- self.NavigateToURL(self.TEST_PAGE_URL)
- # This notification should not be shown because we do not have permission.
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertFalse(self.GetActiveNotifications())
-
- self._RequestPermission()
- self.assertTrue(self.WaitForInfobarCount(1))
- self.PerformActionOnInfobar('accept', 0)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.WaitForNotificationCount(1)
-
- def testOriginPreferencesBasic(self):
- """Tests that we can allow and deny origins."""
- altavista = 'http://www.altavista.com'
- gmail = 'http://www.gmail.com'
- yahoo = 'http://www.yahoo.com'
- self._SetDeniedOrigins([altavista, gmail])
- self.assertEquals(altavista, self._GetDeniedOrigins()[0])
- self.assertEquals(gmail, self._GetDeniedOrigins()[1])
- self._DenyOrigin(yahoo)
- self.assertEquals(yahoo, self._GetDeniedOrigins()[2])
- self.assertEquals(3, len(self._GetDeniedOrigins()))
- self._DropOriginPreference(gmail)
- self.assertEquals(2, len(self._GetDeniedOrigins()))
- self.assertFalse(gmail in self._GetDeniedOrigins())
-
- self._AllowOrigin(yahoo)
- self.assertEquals(1, len(self._GetDeniedOrigins()))
- self.assertFalse(yahoo in self._GetDeniedOrigins())
- self.assertTrue(yahoo in self._GetAllowedOrigins())
-
- self._SetAllowedOrigins([altavista, gmail])
- self._SetDeniedOrigins([])
- self.assertEquals(altavista, self._GetAllowedOrigins()[0])
- self.assertEquals(gmail, self._GetAllowedOrigins()[1])
- self._AllowOrigin(yahoo)
- self.assertEquals(yahoo, self._GetAllowedOrigins()[2])
- self.assertEquals(3, len(self._GetAllowedOrigins()))
- self._DropOriginPreference(gmail)
- self.assertEquals(2, len(self._GetAllowedOrigins()))
- self.assertFalse(gmail in self._GetAllowedOrigins())
-
- self._DenyOrigin(yahoo)
- self.assertEquals(1, len(self._GetAllowedOrigins()))
- self.assertTrue(yahoo in self._GetDeniedOrigins())
- self.assertFalse(yahoo in self._GetAllowedOrigins())
-
- def testDenyOnPermissionInfobar (self):
- """Test that no notification is created when Deny is chosen
- from permission infobar."""
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._RequestPermission()
- self.assertTrue(self.WaitForInfobarCount(1))
- self.PerformActionOnInfobar('cancel', 0)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertFalse(self.GetActiveNotifications())
- self.assertEquals(['file:///'], self._GetDeniedOrigins())
-
- def testClosePermissionInfobar(self):
- """Test that no notification is created when permission
- infobar is dismissed."""
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._RequestPermission()
- self.assertTrue(self.WaitForInfobarCount(1))
- self.PerformActionOnInfobar('dismiss', 0)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertFalse(self.GetActiveNotifications())
- self.assertFalse(self._GetDeniedOrigins())
-
- def testNotificationWithPropertyMissing(self):
- """Test that a notification can be created if one property is missing."""
- self._AllowAllOrigins()
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateSimpleNotification('no_such_file.png', 'My Title', '')
- self.assertEquals(1, len(self.GetActiveNotifications()))
- html_data = urllib.unquote(self.GetActiveNotifications()[0]['content_url'])
- self.assertTrue('no_such_file.png' in html_data)
- self.assertTrue('My Title' in html_data)
-
- def testAllowNotificationsFromAllSites(self):
- """Verify that all domains can be allowed to show notifications."""
- self._SetDefaultPermissionSetting(self.ALLOW_ALL_SETTING)
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertEquals(1, len(self.GetActiveNotifications()))
- self.assertFalse(self.GetBrowserInfo()['windows'][0]['tabs'][0]['infobars'])
-
- def testDenyNotificationsFromAllSites(self):
- """Verify that no domain can show notifications."""
- self._SetDefaultPermissionSetting(self.DENY_ALL_SETTING)
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertFalse(self.GetActiveNotifications())
-
- def testDenyDomainAndAllowAll(self):
- """Verify that denying a domain and allowing all shouldn't show
- notifications from the denied domain."""
- self._DenyOrigin('file:///')
- self._SetDefaultPermissionSetting(self.ALLOW_ALL_SETTING)
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertFalse(self.GetActiveNotifications())
-
- def testAllowDomainAndDenyAll(self):
- """Verify that allowing a domain and denying all others should show
- notifications from the allowed domain."""
- self._AllowOrigin('file:///')
- self._SetDefaultPermissionSetting(self.DENY_ALL_SETTING)
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertEquals(1, len(self.GetActiveNotifications()))
- self.assertFalse(self.GetBrowserInfo()['windows'][0]['tabs'][0]['infobars'])
-
- def testDenyAndThenAllowDomain(self):
- """Verify that denying and again allowing should show notifications."""
- self._DenyOrigin('file:///')
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertEquals(len(self.GetActiveNotifications()), 0)
- self._AllowOrigin('file:///')
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertEquals(1, len(self.GetActiveNotifications()))
- self.assertFalse(self.GetBrowserInfo()['windows'][0]['tabs'][0]['infobars'])
-
- def testCreateDenyCloseNotifications(self):
- """Verify able to create, deny, and close the notification."""
- self._AllowAllOrigins()
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertEquals(1, len(self.GetActiveNotifications()))
- origin = 'file:///'
- self._DenyOrigin(origin)
- self.assertTrue(origin in self._GetDeniedOrigins())
- self.CloseNotification(0)
- self.assertEquals(0, len(self.GetActiveNotifications()))
-
- def testOriginPrefsNotSavedInIncognito(self):
- """Verify that allow/deny origin preferences are not saved in incognito."""
- self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW)
- self.NavigateToURL(self.TEST_PAGE_URL, 1, 0)
- self._RequestPermission(windex=1)
- self.assertTrue(self.WaitForInfobarCount(1, windex=1))
- self.PerformActionOnInfobar('cancel', 0, windex=1)
-
- self.CloseBrowserWindow(1)
- self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW)
- self.NavigateToURL(self.TEST_PAGE_URL, 1, 0)
- self._RequestPermission(windex=1)
- self.assertTrue(self.WaitForInfobarCount(1, windex=1))
- self.PerformActionOnInfobar('accept', 0, windex=1)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL, windex=1)
- self.assertEquals(1, len(self.GetActiveNotifications()))
-
- self.CloseBrowserWindow(1)
- self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW)
- self.NavigateToURL(self.TEST_PAGE_URL, 1, 0)
- self._RequestPermission(windex=1)
- self.assertTrue(self.WaitForInfobarCount(1, windex=1))
-
- self.assertFalse(self._GetDeniedOrigins())
- self.assertFalse(self._GetAllowedOrigins())
-
- def testExitBrowserWithInfobar(self):
- """Exit the browser window, when the infobar appears."""
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._RequestPermission()
- self.assertTrue(self.WaitForInfobarCount(1))
-
- def testCrashTabWithPermissionInfobar(self):
- """Test crashing the tab with permission infobar doesn't crash Chrome."""
- self.AppendTab(pyauto.GURL(self.EMPTY_PAGE_URL))
- self.assertTrue(self.ActivateTab(0))
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._RequestPermission()
- self.assertTrue(self.WaitForInfobarCount(1))
- self.KillRendererProcess(
- self.GetBrowserInfo()['windows'][0]['tabs'][0]['renderer_pid'])
-
- def testKillNotificationProcess(self):
- """Test killing a notification doesn't crash Chrome."""
- self._AllowAllOrigins()
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.KillRendererProcess(self.GetActiveNotifications()[0]['pid'])
- self.WaitForNotificationCount(0)
-
- def testIncognitoNotification(self):
- """Test notifications in incognito window."""
- self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW)
- self.NavigateToURL(self.TEST_PAGE_URL, 1, 0)
- self.assertTrue(self.ActivateTab(0, 1))
- self._RequestPermission(windex=1)
- self.assertTrue(self.WaitForInfobarCount(1, windex=1))
- self.PerformActionOnInfobar('accept', infobar_index=0, windex=1)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL, windex=1)
- self.assertEquals(1, len(self.GetActiveNotifications()))
-
- def testSpecialURLNotification(self):
- """Test a page cannot create a notification to a chrome: url."""
- self._AllowAllOrigins()
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateHTMLNotification('chrome://settings',
- wait_for_display=False);
- self.assertFalse(self.GetActiveNotifications())
-
- def testCloseTabWithPermissionInfobar(self):
- """Test that user can close tab when infobar present."""
- self.AppendTab(pyauto.GURL('about:blank'))
- self.ActivateTab(0)
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._RequestPermission()
- self.assertTrue(self.WaitForInfobarCount(1))
- self.CloseTab()
-
- def testNavigateAwayWithPermissionInfobar(self):
- """Test navigating away when an infobar is present, then trying to create a
- notification from the same page."""
- self.AppendTab(pyauto.GURL('about:blank'))
- self.assertTrue(self.ActivateTab(0))
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._RequestPermission()
- self.assertTrue(self.WaitForInfobarCount(1))
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._RequestPermission()
- self.assertTrue(self.WaitForInfobarCount(1))
- self.PerformActionOnInfobar('accept', 0)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertEquals(1, len(self.GetActiveNotifications()))
-
- def testCrashRendererNotificationRemain(self):
- """Test crashing renderer does not close or crash notification."""
- self._AllowAllOrigins()
- self.AppendTab(pyauto.GURL('about:blank'))
- self.ActivateTab(0)
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL)
- self.assertEquals(1, len(self.GetActiveNotifications()))
- self.KillRendererProcess(
- self.GetBrowserInfo()['windows'][0]['tabs'][0]['renderer_pid'])
- self.assertEquals(1, len(self.GetActiveNotifications()))
-
- def testNotificationOrderAfterClosingOne(self):
- """Tests that closing a notification leaves the rest
- of the notifications in the correct order.
- """
- if self.IsWin7():
- return # crbug.com/66072
- self._AllowAllOrigins()
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateSimpleNotification('', 'Title1', '')
- self._CreateSimpleNotification('', 'Title2', '')
- self._CreateSimpleNotification('', 'Title3', '')
- old_notifications = self.GetAllNotifications()
- self.assertEquals(3, len(old_notifications))
- self.CloseNotification(1)
- new_notifications = self.GetAllNotifications()
- self.assertEquals(2, len(new_notifications))
- self.assertEquals(old_notifications[0]['id'], new_notifications[0]['id'])
- self.assertEquals(old_notifications[2]['id'], new_notifications[1]['id'])
-
- def testNotificationReplacement(self):
- """Test that we can replace a notification using the replaceId."""
- self._AllowAllOrigins()
- self.NavigateToURL(self.TEST_PAGE_URL)
- self._CreateSimpleNotification('', 'Title2', '', 'chat')
- self.WaitForNotificationCount(1)
- # Since this notification has the same replaceId, 'chat', it should replace
- # the first notification.
- self._CreateHTMLNotification(self.EMPTY_PAGE_URL, 'chat')
- notifications = self.GetActiveNotifications()
- self.assertEquals(1, len(notifications))
- self.assertEquals(self.EMPTY_PAGE_URL, notifications[0]['content_url'])
-
-
-if __name__ == '__main__':
- pyauto_functional.Main()
« no previous file with comments | « chrome/test/functional/PYAUTO_TESTS ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698