OLD | NEW |
1 <!--- | 1 <!--- |
2 Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 2 Copyright (c) 2010 The Chromium OS 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 | 6 |
7 <html> | 7 <html> |
8 <script src='/urls.js'> | 8 <script src='/urls.js'> |
9 </script> | 9 </script> |
10 | 10 |
11 <script src='/params.js'> | 11 <script src='/params.js'> |
12 </script> | 12 </script> |
13 | 13 |
14 <script> | 14 <script> |
15 | 15 |
16 // Test normally takes 60 mins. Set time_ratio to 10 to | |
17 // speed up the test 10x. This reduces the amount of time | |
18 // spent on each task. | |
19 var cycle_tabs = {}; | 16 var cycle_tabs = {}; |
20 var failed_loads = [0]; | 17 var cycles = {}; |
21 var successful_loads = [0]; | |
22 var time_ratio = 3600 * 1000 / test_time_ms; // default test time is 1 hour | 18 var time_ratio = 3600 * 1000 / test_time_ms; // default test time is 1 hour |
23 var preexisting_windows = []; | 19 var preexisting_windows = []; |
24 | 20 |
25 chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { | 21 chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { |
26 if (sender.tab.id in cycle_tabs) { | 22 if (sender.tab.id in cycle_tabs) { |
27 successful_loads[0]++; | 23 cycle = cycle_tabs[sender.tab.id]; |
28 if (request.action == "should_scroll") { | 24 cycle.successful_loads++; |
| 25 if (request.action == "should_scroll" && cycle.focus) { |
29 sendResponse({"should_scroll": should_scroll, | 26 sendResponse({"should_scroll": should_scroll, |
30 "should_scroll_up": should_scroll_up, | 27 "should_scroll_up": should_scroll_up, |
31 "scroll_loop": scroll_loop, | 28 "scroll_loop": scroll_loop, |
32 "scroll_interval": scroll_interval_ms, | 29 "scroll_interval": scroll_interval_ms, |
33 "scroll_by": scroll_by_pixels}); | 30 "scroll_by": scroll_by_pixels}); |
34 } | 31 } |
35 delete cycle_tabs[sender.tab.id]; | 32 delete cycle_tabs[sender.tab.id]; |
36 } | 33 } |
37 }); | 34 }); |
38 | 35 |
39 function close_preexisting_windows() { | 36 function close_preexisting_windows() { |
40 for (var i = 0; i < preexisting_windows.length; i++) { | 37 for (var i = 0; i < preexisting_windows.length; i++) { |
41 chrome.windows.remove(preexisting_windows[i].id); | 38 chrome.windows.remove(preexisting_windows[i].id); |
42 } | 39 } |
43 preexisting_windows.length = 0; | 40 preexisting_windows.length = 0; |
44 } | 41 } |
45 | 42 |
| 43 function cycle_navigate(cycle) { |
| 44 cycle_tabs[cycle.id] = cycle; |
| 45 var url = cycle.urls[cycle.idx]; |
| 46 chrome.tabs.update(cycle.id, {'url': url, 'selected': true}); |
| 47 cycle.idx = (cycle.idx + 1) % cycle.urls.length; |
| 48 if (cycle.timeout < cycle.delay && cycle.timeout > 0) { |
| 49 cycle.timer = setTimeout(cycle_check_timeout, cycle.timeout, cycle); |
| 50 } else { |
| 51 cycle.timer = setTimeout(cycle_navigate, cycle.delay, cycle); |
| 52 } |
| 53 } |
| 54 |
| 55 function cycle_check_timeout(cycle) { |
| 56 if (cycle.id in cycle_tabs) { |
| 57 cycle.failed_loads++; |
| 58 cycle_navigate(cycle); |
| 59 } else { |
| 60 cycle.timer = setTimeout(cycle_navigate, cycle.delay - cycle.timeout, |
| 61 cycle); |
| 62 } |
| 63 } |
| 64 |
46 function launch_task(task) { | 65 function launch_task(task) { |
47 if (task.type == 'window' && task.tabs) { | 66 if (task.type == 'window' && task.tabs) { |
48 var url = task.tabs[0]; | 67 var url = task.tabs[0]; |
49 chrome.windows.create({'url': url}, function (win) { | 68 chrome.windows.create({'url': url}, function (win) { |
50 close_preexisting_windows(); | 69 close_preexisting_windows(); |
51 for (var i = 1; i < task.tabs.length; i++) { | 70 for (var i = 1; i < task.tabs.length; i++) { |
52 chrome.tabs.create({'windowId': win.id, url: task.tabs[i]}); | 71 chrome.tabs.create({'windowId': win.id, url: task.tabs[i]}); |
53 } | 72 } |
54 setTimeout(chrome.windows.remove, task.duration / time_ratio, win.id); | 73 setTimeout(chrome.windows.remove, task.duration / time_ratio, win.id); |
55 }) | 74 }); |
56 } else if (task.type == 'cycle' && task.urls) { | 75 } else if (task.type == 'cycle' && task.urls) { |
57 var url = task.urls[0]; | 76 chrome.windows.create({'url': 'about:blank'}, function (win) { |
58 var idx = 0; | |
59 chrome.windows.create({'url': url}, function (win) { | |
60 close_preexisting_windows(); | 77 close_preexisting_windows(); |
61 chrome.tabs.getSelected(win.id, function(tab) { | 78 chrome.tabs.getSelected(win.id, function(tab) { |
62 cycle_tabs[tab.id] = task.scroll_interval; | 79 var cycle = { |
63 var cycleTask = setInterval(function(urls, tab_id) { | 80 'timeout': task.timeout, |
64 if (tab_id in cycle_tabs && urls.length > 1) { | 81 'name': task.name, |
65 failed_loads[0] += 1; | 82 'delay': task.delay, |
66 } | 83 'urls': task.urls, |
67 console.log('suc/fail: ' + successful_loads[0] + '/' + | 84 'id': tab.id, |
68 failed_loads[0]); | 85 'idx': 0, |
69 cycle_tabs[tab_id] = task.scroll_interval; | 86 'timer': null, |
70 idx = (idx + 1) % urls.length; | 87 'focus': !!task.focus, |
71 chrome.tabs.update(tab_id, {'url': urls[idx], 'selected': true}) | 88 'successful_loads': 0, |
72 }, task.delay, task.urls, tab.id); | 89 'failed_loads': 0 |
73 setTimeout(function(win_id) { | 90 }; |
74 clearInterval(cycleTask); | 91 cycles[task.name] = cycle; |
| 92 cycle_navigate(cycle); |
| 93 setTimeout(function(cycle, win_id) { |
| 94 clearTimeout(cycle.timer); |
75 chrome.windows.remove(win_id); | 95 chrome.windows.remove(win_id); |
76 }, task.duration / time_ratio, win.id); | 96 }, task.duration / time_ratio, cycle, win.id); |
77 }); | 97 }); |
78 }); | 98 }); |
79 } | 99 } |
80 } | 100 } |
81 | 101 |
82 function close_browser() { | 102 function close_browser() { |
83 chrome.windows.getAll(null, function(windows) { | 103 chrome.windows.getAll(null, function(windows) { |
84 for (var i = 0; i < windows.length; i++) { | 104 for (var i = 0; i < windows.length; i++) { |
85 chrome.windows.remove(windows[i].id); | 105 chrome.windows.remove(windows[i].id); |
86 } | 106 } |
87 }); | 107 }); |
88 } | 108 } |
89 | 109 |
90 function send_status() { | 110 function send_status() { |
| 111 var post = ["status=good"]; |
| 112 |
| 113 for (var name in cycles) { |
| 114 var cycle = cycles[name]; |
| 115 post.push(name + "_successful_loads=" + cycle.successful_loads); |
| 116 post.push(name + "_failed_loads=" + cycle.failed_loads); |
| 117 } |
| 118 |
91 var log_url = 'http://localhost:8001/status'; | 119 var log_url = 'http://localhost:8001/status'; |
92 var req = new XMLHttpRequest(); | 120 var req = new XMLHttpRequest(); |
93 req.open('POST', log_url, true); | 121 req.open('POST', log_url, true); |
94 req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); | 122 req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); |
95 req.send("status=good&succeeded=" + successful_loads[0] + "&failed=" | 123 req.send(post.join("&")); |
96 + failed_loads[0]); | 124 console.log(post.join("&")); |
97 } | 125 } |
98 | 126 |
99 | 127 |
100 chrome.windows.getAll(null, function(windows) { | 128 chrome.windows.getAll(null, function(windows) { |
101 preexisting_windows = windows; | 129 preexisting_windows = windows; |
102 var end = 0; | 130 var end = 0; |
103 for (var i = 0; i < tasks.length; i++) { | 131 for (var i = 0; i < tasks.length; i++) { |
104 end = Math.max(end, (tasks[i].start + tasks[i].duration) / time_ratio); | 132 end = Math.max(end, (tasks[i].start + tasks[i].duration) / time_ratio); |
105 setTimeout(launch_task, tasks[i].start / time_ratio, tasks[i]); | 133 setTimeout(launch_task, tasks[i].start / time_ratio, tasks[i]); |
106 } | 134 } |
107 setTimeout(send_status, end); | 135 setTimeout(send_status, end); |
108 | 136 |
109 // Add a 5sec delay between sending the status back and closing browser | 137 // Add a 5sec delay between sending the status back and closing browser |
110 // so that status message can reach autotest safely | 138 // so that status message can reach autotest safely |
111 setTimeout(close_browser, end + 5 * 1000); | 139 setTimeout(close_browser, end + 5 * 1000); |
112 }); | 140 }); |
113 | 141 |
114 | 142 |
115 </script> | 143 </script> |
116 | 144 |
117 <body> | 145 <body> |
118 </body> | 146 </body> |
119 </html> | 147 </html> |
OLD | NEW |