1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#!/usr/bin/env python
# Copyright (c) 2012 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 pyauto_functional
import pyauto
class IndexedDBTest(pyauto.PyUITest):
"""Test of IndexedDB."""
def _CrashBrowser(self):
"""Crashes the browser by navigating to special URL"""
crash_url = 'about:inducebrowsercrashforrealz'
self.NavigateToURL(crash_url)
def testIndexedDBNullKeyPathPersistence(self):
"""Verify null key path persists after restarting browser."""
url = self.GetHttpURLForDataPath('indexeddb', 'bug_90635.html')
self.NavigateToURL(url + '#part1')
self.assertTrue(self.WaitUntil(self.GetActiveTabTitle,
expect_retval='pass - first run'),
msg='Key paths had unexpected values')
self.RestartBrowser(clear_profile=False)
self.NavigateToURL(url + '#part2')
self.assertTrue(self.WaitUntil(self.GetActiveTabTitle,
expect_retval='pass - second run'),
msg='Key paths had unexpected values')
def testVersionChangeCrashResilience(self):
"""Verify that a VERSION_CHANGE transaction is rolled back
after a renderer/browser crash"""
url = self.GetHttpURLForDataPath('indexeddb', 'version_change_crash.html')
self.NavigateToURL(url + '#part1')
self.assertTrue(self.WaitUntil(self.GetActiveTabTitle,
expect_retval='pass - part1 - complete'),
msg='Failed to prepare database')
self.RestartBrowser(clear_profile=False)
self.NavigateToURL(url + '#part2')
self.assertTrue(self.WaitUntil(self.GetActiveTabTitle,
expect_retval='pass - part2 - crash me'),
msg='Failed to start transaction')
self._CrashBrowser()
self.RestartBrowser(clear_profile=False)
self.NavigateToURL(url + '#part3')
self.assertTrue(self.WaitUntil(self.GetActiveTabTitle,
expect_retval='pass - part3 - rolled back'),
msg='VERSION_CHANGE not completely aborted')
def testConnectionsClosedOnTabClose(self):
"""Verify that open DB connections are closed when a tab is destroyed."""
url = self.GetHttpURLForDataPath('indexeddb', 'version_change_blocked.html')
self.NavigateToURL(url + '#tab1')
pid = self.GetBrowserInfo()['windows'][0]['tabs'][0]['renderer_pid']
self.assertTrue(self.WaitUntil(self.GetActiveTabTitle,
expect_retval='setVersion(1) complete'),
msg='Version change failed')
# Start to a different URL to force a new renderer process
self.AppendTab(pyauto.GURL('about:blank'))
self.NavigateToURL(url + '#tab2')
self.assertTrue(self.WaitUntil(self.GetActiveTabTitle,
expect_retval='setVersion(2) blocked'),
msg='Version change not blocked as expected')
self.KillRendererProcess(pid)
self.assertTrue(self.WaitUntil(self.GetActiveTabTitle,
expect_retval='setVersion(2) complete'),
msg='Version change never unblocked')
if __name__ == '__main__':
pyauto_functional.Main()
|