OLD | NEW |
---|---|
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 import os | 6 import os |
7 import urllib | 7 import urllib |
8 | 8 |
9 import pyauto_functional | 9 import pyauto_functional |
10 import pyauto | 10 import pyauto |
11 | 11 |
12 | 12 |
13 class NotificationsTest(pyauto.PyUITest): | 13 class NotificationsTest(pyauto.PyUITest): |
14 """Test of HTML5 desktop notifications.""" | 14 """Test of HTML5 desktop notifications.""" |
15 def __init__(self, methodName='runTest'): | 15 def __init__(self, methodName='runTest'): |
16 super(NotificationsTest, self).__init__(methodName) | 16 super(NotificationsTest, self).__init__(methodName) |
17 self.NO_SUCH_URL = 'http://no_such_url_exists/' | 17 self.NO_SUCH_URL = 'http://no_such_url_exists/' |
18 self.NO_SUCH_URL2 = 'http://no_such_url_exists2/' | |
19 self.NO_SUCH_URL3 = 'http://no_such_url_exists3/' | |
18 # Content settings for default notification permission. | 20 # Content settings for default notification permission. |
19 self.ALLOW_ALL_SETTING = 1 | 21 self.ALLOW_ALL_SETTING = 1 |
20 self.DENY_ALL_SETTING = 2 | 22 self.DENY_ALL_SETTING = 2 |
21 self.ASK_SETTING = 3 | 23 self.ASK_SETTING = 3 |
22 | 24 |
23 # HTML page used for notification testing. | 25 # HTML page used for notification testing. |
24 self.TEST_PAGE_URL = self.GetFileURLForDataPath( | 26 self.TEST_PAGE_URL = self.GetFileURLForDataPath( |
25 os.path.join('notifications', 'notification_tester.html')) | 27 os.path.join('notifications', 'notification_tester.html')) |
26 | 28 |
27 def Debug(self): | 29 def Debug(self): |
(...skipping 19 matching lines...) Expand all Loading... | |
47 """Gets the default setting for whether sites are allowed to create | 49 """Gets the default setting for whether sites are allowed to create |
48 notifications. | 50 notifications. |
49 """ | 51 """ |
50 return self.GetPrefsInfo().Prefs( | 52 return self.GetPrefsInfo().Prefs( |
51 pyauto.kDesktopNotificationDefaultContentSetting) | 53 pyauto.kDesktopNotificationDefaultContentSetting) |
52 | 54 |
53 def _GetDeniedOrigins(self): | 55 def _GetDeniedOrigins(self): |
54 """Gets the list of origins that are explicitly denied to create | 56 """Gets the list of origins that are explicitly denied to create |
55 notifications. | 57 notifications. |
56 """ | 58 """ |
57 return self.GetPrefsInfo().Prefs(pyauto.kDesktopNotificationDeniedOrigins) | 59 return (self.GetPrefsInfo().Prefs(pyauto.kDesktopNotificationDeniedOrigins) |
60 or []) | |
58 | 61 |
59 def _GetAllowedOrigins(self): | 62 def _GetAllowedOrigins(self): |
60 """Gets the list of origins that are explicitly allowed to create | 63 """Gets the list of origins that are explicitly allowed to create |
61 notifications. | 64 notifications. |
62 """ | 65 """ |
63 return self.GetPrefsInfo().Prefs(pyauto.kDesktopNotificationAllowedOrigins) | 66 return (self.GetPrefsInfo().Prefs(pyauto.kDesktopNotificationAllowedOrigins) |
67 or []) | |
64 | 68 |
65 def _SetAllowedOrigins(self, origins): | 69 def _SetAllowedOrigins(self, origins): |
66 """Sets the list of allowed origins to the given list. | 70 """Sets the list of allowed origins to the given list. |
67 | 71 |
68 None of the items in the list should be explicitly denied. | 72 None of the items in the list should be explicitly denied. |
69 """ | 73 """ |
70 return self.SetPrefs(pyauto.kDesktopNotificationAllowedOrigins, origins) | 74 return self.SetPrefs(pyauto.kDesktopNotificationAllowedOrigins, origins) |
71 | 75 |
72 def _SetDeniedOrigins(self, origins): | 76 def _SetDeniedOrigins(self, origins): |
73 """Sets the list of denied origins to the given list. | 77 """Sets the list of denied origins to the given list. |
74 | 78 |
75 None of the items in the list should be explicitly allowed. | 79 None of the items in the list should be explicitly allowed. |
76 """ | 80 """ |
77 return self.SetPrefs(pyauto.kDesktopNotificationDeniedOrigins, origins) | 81 return self.SetPrefs(pyauto.kDesktopNotificationDeniedOrigins, origins) |
78 | 82 |
79 def _DenyOrigin(self, new_origin): | 83 def _DenyOrigin(self, new_origin): |
80 """Denies the given origin to create notifications. | 84 """Denies the given origin to create notifications. |
81 | 85 |
82 If it was explicitly allowed, that preference is dropped. | 86 If it was explicitly allowed, that preference is dropped. |
83 """ | 87 """ |
84 self._DropOriginPreference(new_origin) | 88 self._DropOriginPreference(new_origin) |
85 denied = self._GetDeniedOrigins() or [] | 89 denied = self._GetDeniedOrigins() |
86 if new_origin not in denied: | 90 if new_origin not in denied: |
87 self._SetDeniedOrigins(denied + [new_origin]) | 91 self._SetDeniedOrigins(denied + [new_origin]) |
88 | 92 |
89 def _AllowOrigin(self, new_origin): | 93 def _AllowOrigin(self, new_origin): |
90 """Allows the given origin to create notifications. If it was explicitly | 94 """Allows the given origin to create notifications. If it was explicitly |
91 denied, that preference is dropped. | 95 denied, that preference is dropped. |
92 """ | 96 """ |
93 self._DropOriginPreference(new_origin) | 97 self._DropOriginPreference(new_origin) |
94 allowed = self._GetAllowedOrigins() or [] | 98 allowed = self._GetAllowedOrigins() |
95 if new_origin not in allowed: | 99 if new_origin not in allowed: |
96 self._SetAllowedOrigins(allowed + [new_origin]) | 100 self._SetAllowedOrigins(allowed + [new_origin]) |
97 | 101 |
98 def _DropOriginPreference(self, new_origin): | 102 def _DropOriginPreference(self, new_origin): |
99 """Drops the preference as to whether this origin should be allowed to | 103 """Drops the preference as to whether this origin should be allowed to |
100 create notifications. If it was explicitly allowed or explicitly denied, | 104 create notifications. If it was explicitly allowed or explicitly denied, |
101 that preference is removed. | 105 that preference is removed. |
102 """ | 106 """ |
103 allowed = self._GetAllowedOrigins() | 107 allowed = self._GetAllowedOrigins() |
104 if allowed and new_origin in allowed: | 108 if allowed and new_origin in allowed: |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
147 img_url: url of a image to use; can be a data url | 151 img_url: url of a image to use; can be a data url |
148 title: title of the notification | 152 title: title of the notification |
149 text: text in the notification | 153 text: text in the notification |
150 replace_id: id string to be used for this notification. If another | 154 replace_id: id string to be used for this notification. If another |
151 notification is shown with the same replace_id, the former | 155 notification is shown with the same replace_id, the former |
152 will be replaced. | 156 will be replaced. |
153 tab_index: index of the tab within the given window | 157 tab_index: index of the tab within the given window |
154 windex: index of the window | 158 windex: index of the window |
155 """ | 159 """ |
156 return self.CallJavascriptFunc('createNotification', | 160 return self.CallJavascriptFunc('createNotification', |
157 [img_url, title, text, replace_id], | 161 [img_url, title, text, replace_id], |
158 tab_index, | 162 tab_index, |
159 windex); | 163 windex); |
160 | 164 |
161 def _CreateHTMLNotification(self, content_url, replace_id='', tab_index=0, | 165 def _CreateHTMLNotification(self, content_url, replace_id='', tab_index=0, |
162 windex=0): | 166 windex=0): |
163 """Creates an HTML notification. | 167 """Creates an HTML notification. |
164 | 168 |
165 Returns the id of the notification, which can be used to cancel it later. | 169 Returns the id of the notification, which can be used to cancel it later. |
166 | 170 |
167 This executes a script in the page which shows a notification. | 171 This executes a script in the page which shows a notification. |
168 This will only work if the page is navigated to |TEST_PAGE_URL|. | 172 This will only work if the page is navigated to |TEST_PAGE_URL|. |
169 The page must also have permission to show notifications. | 173 The page must also have permission to show notifications. |
170 | 174 |
171 Args: | 175 Args: |
172 content_url: url of the page to show in the notification | 176 content_url: url of the page to show in the notification |
173 replace_id: id string to be used for this notification. If another | 177 replace_id: id string to be used for this notification. If another |
174 notification is shown with the same replace_id, the former | 178 notification is shown with the same replace_id, the former |
175 will be replaced. | 179 will be replaced. |
176 tab_index: index of the tab within the given window | 180 tab_index: index of the tab within the given window |
177 windex: index of the window | 181 windex: index of the window |
178 """ | 182 """ |
179 return self.CallJavascriptFunc('createHTMLNotification', | 183 return self.CallJavascriptFunc('createHTMLNotification', |
180 [content_url, replace_id], | 184 [content_url, replace_id], |
181 tab_index, | 185 tab_index, |
182 windex) | 186 windex) |
183 | 187 |
184 def _RequestPermission(self, tab_index=0, windex=0): | 188 def _RequestPermission(self, tab_index=0, windex=0): |
185 """Requests permission to create notifications. | 189 """Requests permission to create notifications. |
186 | 190 |
187 This will only work if the current page is navigated to |TEST_PAGE_URL|. | 191 This will only work if the current page is navigated to |TEST_PAGE_URL|. |
188 | 192 |
189 Args: | 193 Args: |
190 tab_index: index of the tab within the given window | 194 tab_index: index of the tab within the given window |
191 windex: index of the window | 195 windex: index of the window |
192 """ | 196 """ |
193 self.CallJavascriptFunc('requestPermission', [], windex, tab_index) | 197 self.CallJavascriptFunc('requestPermission', [], tab_index, windex) |
Nirnimesh
2010/11/24 23:02:59
Use named args whenever possible to avoid these pr
| |
194 | 198 |
195 def _CancelNotification(self, notification_id, tab_index=0, windex=0): | 199 def _CancelNotification(self, notification_id, tab_index=0, windex=0): |
196 """Cancels a notification with the given id. | 200 """Cancels a notification with the given id. |
197 | 201 |
198 This canceling is done in the page that showed that notification and so | 202 This canceling is done in the page that showed that notification and so |
199 follows a different path than closing a notification via the UI. | 203 follows a different path than closing a notification via the UI. |
200 | 204 |
201 This function should NOT be called until |WaitForNotificationCount| has been | 205 This function should NOT be called until |WaitForNotificationCount| has been |
202 used to verify the notification is showing. This function cannot be used to | 206 used to verify the notification is showing. This function cannot be used to |
203 cancel a notification that is in the display queue. | 207 cancel a notification that is in the display queue. |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
266 | 270 |
267 def testAllowOnPermissionInfobar(self): | 271 def testAllowOnPermissionInfobar(self): |
268 """Tries to create a notification and clicks allow on the infobar.""" | 272 """Tries to create a notification and clicks allow on the infobar.""" |
269 self.NavigateToURL(self.TEST_PAGE_URL) | 273 self.NavigateToURL(self.TEST_PAGE_URL) |
270 # This notification should not be shown because we do not have permission. | 274 # This notification should not be shown because we do not have permission. |
271 self._CreateHTMLNotification(self.NO_SUCH_URL) | 275 self._CreateHTMLNotification(self.NO_SUCH_URL) |
272 self.assertFalse(self.GetActiveNotifications()) | 276 self.assertFalse(self.GetActiveNotifications()) |
273 | 277 |
274 self._RequestPermission() | 278 self._RequestPermission() |
275 self.assertTrue(self.WaitForInfobarCount(1)) | 279 self.assertTrue(self.WaitForInfobarCount(1)) |
276 self.PerformActionOnInfobar('accept', infobar_index=0) | 280 self.PerformActionOnInfobar('accept', 0) |
277 self._CreateHTMLNotification(self.NO_SUCH_URL) | 281 self._CreateHTMLNotification(self.NO_SUCH_URL) |
278 self.WaitForNotificationCount(1) | 282 self.WaitForNotificationCount(1) |
279 | 283 |
280 def testOriginPreferencesBasic(self): | 284 def testOriginPreferencesBasic(self): |
281 """Tests that we can allow and deny origins.""" | 285 """Tests that we can allow and deny origins.""" |
282 altavista = 'www.altavista.com' | 286 altavista = 'www.altavista.com' |
283 gmail = 'www.gmail.com' | 287 gmail = 'www.gmail.com' |
284 yahoo = 'www.yahoo.com' | 288 yahoo = 'www.yahoo.com' |
285 self._SetDeniedOrigins([altavista, gmail]) | 289 self._SetDeniedOrigins([altavista, gmail]) |
286 self.assertEquals(altavista, self._GetDeniedOrigins()[0]) | 290 self.assertEquals(altavista, self._GetDeniedOrigins()[0]) |
(...skipping 19 matching lines...) Expand all Loading... | |
306 self.assertEquals(3, len(self._GetAllowedOrigins())) | 310 self.assertEquals(3, len(self._GetAllowedOrigins())) |
307 self._DropOriginPreference(gmail) | 311 self._DropOriginPreference(gmail) |
308 self.assertEquals(2, len(self._GetAllowedOrigins())) | 312 self.assertEquals(2, len(self._GetAllowedOrigins())) |
309 self.assertFalse(gmail in self._GetAllowedOrigins()) | 313 self.assertFalse(gmail in self._GetAllowedOrigins()) |
310 | 314 |
311 self._DenyOrigin(yahoo) | 315 self._DenyOrigin(yahoo) |
312 self.assertEquals(1, len(self._GetAllowedOrigins())) | 316 self.assertEquals(1, len(self._GetAllowedOrigins())) |
313 self.assertTrue(yahoo in self._GetDeniedOrigins()) | 317 self.assertTrue(yahoo in self._GetDeniedOrigins()) |
314 self.assertFalse(yahoo in self._GetAllowedOrigins()) | 318 self.assertFalse(yahoo in self._GetAllowedOrigins()) |
315 | 319 |
320 def testDenyOnPermissionInfobar (self): | |
321 """Test that no notification is created when Deny is chosen | |
322 from permission infobar.""" | |
323 self.NavigateToURL(self.TEST_PAGE_URL) | |
324 self._RequestPermission() | |
325 self.assertTrue(self.WaitForInfobarCount(1)) | |
326 self.PerformActionOnInfobar('cancel', 0) | |
327 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
328 self.assertFalse(self.GetActiveNotifications()) | |
329 self.assertEquals(['file:///'], self._GetDeniedOrigins()) | |
330 | |
331 def testClosePermissionInfobar(self): | |
332 """Test that no notification is created when permission | |
333 infobar is dismissed.""" | |
334 self.NavigateToURL(self.TEST_PAGE_URL) | |
335 self._RequestPermission() | |
336 self.assertTrue(self.WaitForInfobarCount(1)) | |
337 self.PerformActionOnInfobar('dismiss', 0) | |
338 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
339 self.assertFalse(self.GetActiveNotifications()) | |
340 self.assertFalse(self._GetDeniedOrigins()) | |
341 | |
342 def testNotificationWithPropertyMissing(self): | |
343 """Test that a notification can be created if one property is missing.""" | |
344 self._AllowAllOrigins() | |
345 self.NavigateToURL(self.TEST_PAGE_URL) | |
346 self._CreateSimpleNotification('no_such_file.png', 'My Title', '') | |
347 self.assertEquals(1, len(self.GetActiveNotifications())) | |
348 html_data = urllib.unquote(self.GetActiveNotifications()[0]['content_url']) | |
349 self.assertTrue('no_such_file.png' in html_data) | |
350 self.assertTrue('My Title' in html_data) | |
351 | |
352 def testAllowNotificationsFromAllSites(self): | |
353 """Verify that all domains can be allowed to show notifications.""" | |
354 self._SetDefaultPermissionSetting(self.ALLOW_ALL_SETTING) | |
355 self.NavigateToURL(self.TEST_PAGE_URL) | |
356 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
357 self.assertEquals(1, len(self.GetActiveNotifications())) | |
358 self.assertFalse(self.GetBrowserInfo()['windows'][0]['tabs'][0]['infobars']) | |
359 | |
360 def testDenyNotificationsFromAllSites(self): | |
361 """Verify that no domain can show notifications.""" | |
362 self._SetDefaultPermissionSetting(self.DENY_ALL_SETTING) | |
363 self.NavigateToURL(self.TEST_PAGE_URL) | |
364 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
365 self.assertFalse(self.GetActiveNotifications()) | |
366 | |
367 def testDenyDomainAndAllowAll(self): | |
368 """Verify that denying a domain and allowing all shouldn't show | |
369 notifications from the denied domain.""" | |
370 self._DenyOrigin('file:///') | |
371 self._SetDefaultPermissionSetting(self.ALLOW_ALL_SETTING) | |
372 self.NavigateToURL(self.TEST_PAGE_URL) | |
373 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
374 self.assertFalse(self.GetActiveNotifications()) | |
375 | |
376 def testAllowDomainAndDenyAll(self): | |
377 """Verify that allowing a domain and denying all others should show | |
378 notifications from the allowed domain.""" | |
379 self._AllowOrigin('file:///') | |
380 self._SetDefaultPermissionSetting(self.DENY_ALL_SETTING) | |
381 self.NavigateToURL(self.TEST_PAGE_URL) | |
382 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
383 self.assertEquals(1, len(self.GetActiveNotifications())) | |
384 self.assertFalse(self.GetBrowserInfo()['windows'][0]['tabs'][0]['infobars']) | |
385 | |
386 def testDenyAndThenAllowDomain(self): | |
387 """Verify that denying and again allowing should show notifications.""" | |
388 self._DenyOrigin('file:///') | |
389 self.NavigateToURL(self.TEST_PAGE_URL) | |
390 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
391 self.assertEquals(len(self.GetActiveNotifications()), 0) | |
392 self._AllowOrigin('file:///') | |
393 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
394 self.assertEquals(1, len(self.GetActiveNotifications())) | |
395 self.assertFalse(self.GetBrowserInfo()['windows'][0]['tabs'][0]['infobars']) | |
396 | |
397 def testCreateDenyCloseNotifications(self): | |
398 """Verify able to create, deny, and close the notification.""" | |
399 self._AllowAllOrigins() | |
400 self.NavigateToURL(self.TEST_PAGE_URL) | |
401 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
402 self.assertEquals(1, len(self.GetActiveNotifications())) | |
403 origin = 'file:///' | |
404 self._DenyOrigin(origin) | |
405 self.assertTrue(origin in self._GetDeniedOrigins()) | |
406 self.CloseNotification(0) | |
407 self.assertEquals(0, len(self.GetActiveNotifications())) | |
408 | |
409 def testOriginPrefsNotSavedInIncognito(self): | |
410 """Verify that allow/deny origin preferences are not saved in incognito.""" | |
411 self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW) | |
412 self.NavigateToURL(self.TEST_PAGE_URL, 1, 0) | |
413 self._RequestPermission(windex=1) | |
414 self.assertTrue(self.WaitForInfobarCount(1, windex=1)) | |
415 self.PerformActionOnInfobar('cancel', 0, windex=1) | |
416 | |
417 self.NavigateToURL(self.TEST_PAGE_URL, 1, 0) | |
418 self._RequestPermission(windex=1) | |
419 self.assertTrue(self.WaitForInfobarCount(1, windex=1)) | |
420 self.PerformActionOnInfobar('accept', 0, windex=1) | |
421 self._CreateHTMLNotification(self.NO_SUCH_URL, windex=1) | |
422 self.assertEquals(1, len(self.GetActiveNotifications())) | |
423 | |
424 self.NavigateToURL(self.TEST_PAGE_URL, 1, 0) | |
425 self._RequestPermission(windex=1) | |
426 self.assertTrue(self.WaitForInfobarCount(1, windex=1)) | |
427 | |
428 self.assertFalse(self._GetDeniedOrigins()) | |
429 self.assertFalse(self._GetAllowedOrigins()) | |
430 | |
431 def testExitBrowserWithInfobar(self): | |
432 """Exit the browser window, when the infobar appears.""" | |
433 self.NavigateToURL(self.TEST_PAGE_URL) | |
434 self._RequestPermission() | |
435 self.assertTrue(self.WaitForInfobarCount(1)) | |
436 | |
437 def testCrashTabWithPermissionInfobar(self): | |
438 """Test crashing the tab with permission infobar doesn't crash Chrome.""" | |
439 self.AppendTab(pyauto.GURL(self.NO_SUCH_URL)) | |
440 self.assertTrue(self.ActivateTab(0)) | |
441 self.NavigateToURL(self.TEST_PAGE_URL) | |
442 self._RequestPermission() | |
443 self.assertTrue(self.WaitForInfobarCount(1)) | |
444 self.Kill(self.GetBrowserInfo()['windows'][0]['tabs'][0]['renderer_pid']) | |
445 self.assertTrue(self.IsBrowserRunning()) | |
446 | |
447 def testKillNotificationProcess(self): | |
448 """Test killing a notification doesn't crash Chrome.""" | |
449 self._AllowAllOrigins() | |
450 self.NavigateToURL(self.TEST_PAGE_URL) | |
451 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
452 self.Kill(self.GetActiveNotifications()[0]['pid']) | |
453 self.assertTrue(self.IsBrowserRunning()) | |
454 self.WaitForNotificationCount(0) | |
455 | |
456 def testIncognitoNotification(self): | |
457 """Test notifications in incognito window.""" | |
458 self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW) | |
459 self.NavigateToURL(self.TEST_PAGE_URL, 1, 0) | |
460 self.assertTrue(self.ActivateTab(0, 1)) | |
461 self._RequestPermission(windex=1) | |
462 self.assertTrue(self.WaitForInfobarCount(1, windex=1)) | |
463 self.PerformActionOnInfobar('accept', infobar_index=0, windex=1) | |
464 self._CreateHTMLNotification(self.NO_SUCH_URL, windex=1) | |
465 self.assertEquals(1, len(self.GetActiveNotifications())) | |
466 | |
467 def testSpecialURLNotification(self): | |
468 """Test a page cannot create a notification to a chrome: url.""" | |
469 self._AllowAllOrigins() | |
470 self.NavigateToURL(self.TEST_PAGE_URL) | |
471 self._CreateHTMLNotification('chrome://extensions/') | |
472 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
Nirnimesh
2010/11/24 23:02:59
Why is this line needed?
| |
473 self.assertEquals(1, len(self.GetActiveNotifications())) | |
474 | |
475 def testCloseTabWithPermissionInfobar(self): | |
476 """Test that user can close tab when infobar present.""" | |
477 self.AppendTab(pyauto.GURL('about:blank')) | |
478 self.ActivateTab(0) | |
479 self.NavigateToURL(self.TEST_PAGE_URL) | |
480 self._RequestPermission() | |
481 self.assertTrue(self.WaitForInfobarCount(1)) | |
482 self.GetBrowserWindow(0).GetTab(0).Close(True) | |
483 self.assertTrue(self.IsBrowserRunning()) | |
484 | |
485 def testNavigateAwayWithPermissionInfobar(self): | |
486 """Test navigating away when an infobar is present, then trying to create a | |
487 notification from the same page.""" | |
488 self.AppendTab(pyauto.GURL('about:blank')) | |
489 self.assertTrue(self.ActivateTab(0)) | |
490 self.NavigateToURL(self.TEST_PAGE_URL) | |
491 self._RequestPermission() | |
492 self.assertTrue(self.WaitForInfobarCount(1)) | |
493 self.NavigateToURL(self.TEST_PAGE_URL) | |
494 self._RequestPermission() | |
495 self.assertTrue(self.WaitForInfobarCount(1)) | |
496 self.PerformActionOnInfobar('accept', 0) | |
497 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
498 self.assertEquals(1, len(self.GetActiveNotifications())) | |
499 | |
500 def testCrashRendererNotificationRemain(self): | |
501 """Test crashing renderer does not close or crash notification.""" | |
502 self._AllowAllOrigins() | |
503 self.AppendTab(pyauto.GURL('about:blank')) | |
504 self.ActivateTab(0) | |
505 self.NavigateToURL(self.TEST_PAGE_URL) | |
506 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
507 self.assertEquals(1, len(self.GetActiveNotifications())) | |
508 self.Kill(self.GetBrowserInfo()['windows'][0]['tabs'][0]['renderer_pid']) | |
509 self.assertTrue(self.IsBrowserRunning()) | |
510 self.assertEquals(1, len(self.GetActiveNotifications())) | |
511 | |
512 def testNotificationOrderAfterClosingOne(self): | |
513 """Tests that closing a notification leaves the rest | |
514 of the notifications in the correct order. | |
515 """ | |
516 self._AllowAllOrigins() | |
517 self.NavigateToURL(self.TEST_PAGE_URL) | |
518 self._CreateHTMLNotification(self.NO_SUCH_URL) | |
519 self._CreateHTMLNotification(self.NO_SUCH_URL2) | |
520 self._CreateHTMLNotification(self.NO_SUCH_URL3) | |
521 self.assertEquals(3, len(self.GetActiveNotifications())) | |
522 self.CloseNotification(1) | |
523 self.assertEquals(2, len(self.GetActiveNotifications())) | |
524 notifications = self.GetActiveNotifications() | |
525 self.assertEquals(self.NO_SUCH_URL, notifications[0]['content_url']) | |
526 self.assertEquals(self.NO_SUCH_URL3, notifications[1]['content_url']) | |
527 | |
528 def testNotificationReplacement(self): | |
529 """Test that we can replace a notification using the replaceId.""" | |
530 self._AllowAllOrigins() | |
531 self.NavigateToURL(self.TEST_PAGE_URL) | |
532 self._CreateHTMLNotification(self.NO_SUCH_URL, 'chat') | |
533 self.WaitForNotificationCount(1) | |
534 self._CreateHTMLNotification(self.NO_SUCH_URL2, 'chat') | |
535 notifications = self.GetActiveNotifications() | |
536 self.assertEquals(1, len(notifications)) | |
537 self.assertEquals(self.NO_SUCH_URL2, notifications[0]['content_url']) | |
538 | |
316 | 539 |
317 if __name__ == '__main__': | 540 if __name__ == '__main__': |
318 pyauto_functional.Main() | 541 pyauto_functional.Main() |
OLD | NEW |