| 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 | 
|---|