Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 var embedder = {}; | |
| 6 embedder.tests = {}; | |
| 7 embedder.baseGuestURL = ''; | |
| 8 embedder.guestURL = ''; | |
| 9 | |
| 10 window.runTest = function(testName) { | |
| 11 if (!embedder.test.testList[testName]) { | |
| 12 console.log('Incorrect testName: ' + testName); | |
| 13 embedder.test.fail(); | |
| 14 return; | |
| 15 } | |
| 16 | |
| 17 // Run the test. | |
| 18 embedder.test.testList[testName](); | |
| 19 }; | |
| 20 // window.* exported functions end. | |
| 21 | |
| 22 /** @private */ | |
| 23 embedder.setUpGuest_ = function() { | |
| 24 document.querySelector('#webview-tag-container').innerHTML = | |
| 25 '<webview style="width: 100px; height: 100px;"></webview>'; | |
| 26 var webview = document.querySelector('webview'); | |
| 27 if (!webview) { | |
| 28 embedder.test.fail('No <webview> element created'); | |
| 29 } | |
| 30 return webview; | |
| 31 }; | |
| 32 | |
| 33 embedder.getHTMLForGuestWithTitle_ = function(title) { | |
| 34 var html = | |
| 35 'data:text/html,' + | |
| 36 '<html><head><title>%s</title></head>' + | |
| 37 '<body>hello world</body>' + | |
| 38 '</html>'; | |
| 39 return html.replace('%s', title); | |
| 40 }; | |
| 41 | |
| 42 embedder.test = {}; | |
| 43 embedder.test.succeed = function() { | |
| 44 chrome.test.sendMessage('DoneDialogTest.PASSED'); | |
| 45 }; | |
| 46 | |
| 47 embedder.test.fail = function() { | |
| 48 chrome.test.sendMessage('DoneDialogTest.FAILED'); | |
| 49 }; | |
| 50 | |
| 51 embedder.test.assertEq = function(a, b) { | |
| 52 if (a != b) { | |
| 53 console.log('assertion failed: ' + a + ' != ' + b); | |
| 54 embedder.test.fail(); | |
| 55 } | |
| 56 }; | |
| 57 | |
| 58 embedder.test.assertTrue = function(condition) { | |
| 59 if (!condition) { | |
| 60 console.log('assertion failed: true != ' + condition); | |
| 61 embedder.test.fail(); | |
| 62 } | |
| 63 }; | |
| 64 | |
| 65 embedder.test.assertFalse = function(condition) { | |
| 66 if (condition) { | |
| 67 console.log('assertion failed: false != ' + condition); | |
| 68 embedder.test.fail(); | |
| 69 } | |
| 70 }; | |
| 71 | |
| 72 function setupDialogTest(messageCallback, dialogHandler) { | |
|
lazyboy
2013/07/23 18:45:01
nit: setUp...
Fady Samuel
2013/07/23 19:40:52
Done.
| |
| 73 var guestUrl = 'data:text/html,guest'; | |
| 74 var webview = document.createElement('webview'); | |
| 75 | |
| 76 var onLoadStop = function(e) { | |
| 77 console.log('webview has loaded.'); | |
| 78 webview.executeScript( | |
| 79 {file: 'inject_dialog.js'}, | |
| 80 function(results) { | |
| 81 console.log('Script has been injected into webview.'); | |
| 82 // Establish a communication channel with the guest. | |
| 83 var msg = ['connect']; | |
| 84 webview.contentWindow.postMessage(JSON.stringify(msg), '*'); | |
| 85 }); | |
| 86 }; | |
| 87 webview.addEventListener('loadstop', onLoadStop); | |
| 88 | |
| 89 window.addEventListener('message', function(e) { | |
| 90 var data = JSON.parse(e.data); | |
| 91 if (data[0] == 'connected') { | |
| 92 console.log('A communication channel has been established with webview.'); | |
|
lazyboy
2013/07/23 18:45:01
It seems all tests below calls
webview.contentWind
Fady Samuel
2013/07/23 19:40:52
I like having the console message about the test s
lazyboy
2013/07/23 20:13:24
Sure.
| |
| 93 } | |
| 94 | |
| 95 messageCallback(webview, data); | |
| 96 }); | |
| 97 | |
| 98 webview.addEventListener('dialog', function(e) { | |
| 99 dialogHandler(e); | |
| 100 }); | |
| 101 | |
| 102 webview.setAttribute('src', guestUrl); | |
| 103 document.body.appendChild(webview); | |
| 104 } | |
| 105 | |
| 106 // Tests begin. | |
| 107 | |
| 108 function testAlertDialog() { | |
| 109 var messageText = '1337h@x0r'; | |
| 110 | |
| 111 var messageCallback = function(webview, data) { | |
| 112 if (data[0] == 'connected') { | |
| 113 console.log('The alert dialog test has started.'); | |
| 114 var msg = ['start-alert-dialog-test', messageText]; | |
| 115 webview.contentWindow.postMessage(JSON.stringify(msg), '*'); | |
| 116 return; | |
| 117 } | |
| 118 | |
| 119 if (data[0] == 'alert-dialog-requested') { | |
| 120 console.log( | |
| 121 'webview has been unblocked after requesting an alert dialog.'); | |
| 122 embedder.test.succeed(); | |
| 123 return; | |
| 124 } | |
| 125 }; | |
| 126 | |
| 127 var dialogHandler = function(e) { | |
| 128 console.log('webview has requested a dialog.'); | |
| 129 embedder.test.assertEq('alert', e.messageType); | |
| 130 embedder.test.assertEq(messageText, e.messageText); | |
| 131 e.dialog.ok(); | |
| 132 console.log('The app has responded to the dialog request.'); | |
| 133 }; | |
| 134 | |
| 135 setupDialogTest(messageCallback, dialogHandler); | |
| 136 } | |
| 137 | |
| 138 function testConfirmDialog() { | |
| 139 var messageText = 'foobar'; | |
| 140 | |
| 141 var messageCallback = function(webview, data) { | |
| 142 if (data[0] == 'connected') { | |
| 143 console.log('The confirm dialog test has started.'); | |
| 144 var msg = ['start-confirm-dialog-test', messageText]; | |
| 145 webview.contentWindow.postMessage(JSON.stringify(msg), '*'); | |
| 146 return; | |
| 147 } | |
| 148 | |
| 149 if (data[0] == 'confirm-dialog-result') { | |
| 150 console.log('webview has reported a result for its confirm dialog.'); | |
| 151 embedder.test.assertEq(true, data[1]); | |
| 152 embedder.test.succeed(); | |
| 153 return; | |
| 154 } | |
| 155 }; | |
| 156 | |
| 157 var dialogHandler = function(e) { | |
| 158 console.log('webview has requested a dialog.'); | |
| 159 embedder.test.assertEq('confirm', e.messageType); | |
| 160 embedder.test.assertEq(messageText, e.messageText); | |
| 161 e.dialog.ok(); | |
| 162 console.log('The app has responded to the dialog request.'); | |
| 163 }; | |
| 164 | |
| 165 setupDialogTest(messageCallback, dialogHandler); | |
| 166 } | |
| 167 | |
| 168 function testConfirmDialogCancel() { | |
| 169 var messageText = 'foobar'; | |
| 170 | |
| 171 var messageCallback = function(webview, data) { | |
| 172 if (data[0] == 'connected') { | |
| 173 console.log('The confirm dialog test has started.'); | |
| 174 var msg = ['start-confirm-dialog-test', messageText]; | |
| 175 webview.contentWindow.postMessage(JSON.stringify(msg), '*'); | |
| 176 return; | |
| 177 } | |
| 178 | |
| 179 if (data[0] == 'confirm-dialog-result') { | |
| 180 console.log('webview has reported a result for its confirm dialog.'); | |
| 181 embedder.test.assertEq(false, data[1]); | |
| 182 embedder.test.succeed(); | |
| 183 return; | |
| 184 } | |
| 185 }; | |
| 186 | |
| 187 var dialogHandler = function(e) { | |
| 188 console.log('webview has requested a dialog.'); | |
| 189 embedder.test.assertEq('confirm', e.messageType); | |
| 190 embedder.test.assertEq(messageText, e.messageText); | |
| 191 e.dialog.cancel(); | |
| 192 console.log('The app has responded to the dialog request.'); | |
| 193 }; | |
| 194 | |
| 195 setupDialogTest(messageCallback, dialogHandler); | |
| 196 } | |
| 197 | |
| 198 function testConfirmDialogDefaultCancel() { | |
| 199 var messageText = 'foobar'; | |
| 200 | |
| 201 var messageCallback = function(webview, data) { | |
| 202 if (data[0] == 'connected') { | |
| 203 console.log('The confirm dialog test has started.'); | |
| 204 var msg = ['start-confirm-dialog-test', messageText]; | |
| 205 webview.contentWindow.postMessage(JSON.stringify(msg), '*'); | |
| 206 return; | |
| 207 } | |
| 208 | |
| 209 if (data[0] == 'confirm-dialog-result') { | |
| 210 console.log('webview has reported a result for its confirm dialog.'); | |
| 211 embedder.test.assertEq(false, data[1]); | |
| 212 embedder.test.succeed(); | |
| 213 return; | |
| 214 } | |
| 215 }; | |
| 216 | |
| 217 var dialogHandler = function(e) { | |
| 218 console.log('webview has requested a dialog.'); | |
| 219 embedder.test.assertEq('confirm', e.messageType); | |
| 220 embedder.test.assertEq(messageText, e.messageText); | |
| 221 }; | |
| 222 | |
| 223 setupDialogTest(messageCallback, dialogHandler); | |
| 224 } | |
| 225 | |
| 226 function testConfirmDialogDefaultGCCancel() { | |
| 227 var messageText = 'foobar'; | |
| 228 | |
| 229 var messageCallback = function(webview, data) { | |
| 230 if (data[0] == 'connected') { | |
| 231 console.log('The confirm dialog test has started.'); | |
| 232 var msg = ['start-confirm-dialog-test', messageText]; | |
| 233 webview.contentWindow.postMessage(JSON.stringify(msg), '*'); | |
| 234 return; | |
| 235 } | |
| 236 | |
| 237 if (data[0] == 'confirm-dialog-result') { | |
| 238 console.log('webview has reported a result for its confirm dialog.'); | |
| 239 embedder.test.assertEq(false, data[1]); | |
| 240 embedder.test.succeed(); | |
| 241 return; | |
| 242 } | |
| 243 }; | |
| 244 | |
| 245 var dialogHandler = function(e) { | |
| 246 console.log('webview has requested a dialog.'); | |
| 247 embedder.test.assertEq('confirm', e.messageType); | |
| 248 embedder.test.assertEq(messageText, e.messageText); | |
| 249 // Prevent default to leave cleanup in the GC's hands. | |
| 250 e.preventDefault(); | |
| 251 }; | |
| 252 | |
| 253 setupDialogTest(messageCallback, dialogHandler); | |
| 254 } | |
| 255 | |
| 256 function testPromptDialog() { | |
| 257 var messageText = 'bleep'; | |
| 258 var defaultPromptText = 'bloop'; | |
| 259 var returnPromptText = 'blah'; | |
| 260 | |
| 261 var messageCallback = function(webview, data) { | |
| 262 if (data[0] == 'connected') { | |
| 263 console.log('The prompt dialog test has started.'); | |
| 264 var msg = ['start-prompt-dialog-test', messageText, defaultPromptText]; | |
| 265 webview.contentWindow.postMessage(JSON.stringify(msg), '*'); | |
| 266 return; | |
| 267 } | |
| 268 | |
| 269 if (data[0] == 'prompt-dialog-result') { | |
| 270 console.log('webview has reported a result for its prompt dialog.'); | |
| 271 embedder.test.assertEq(returnPromptText, data[1]); | |
| 272 embedder.test.succeed(); | |
| 273 return; | |
| 274 } | |
| 275 }; | |
| 276 | |
| 277 var dialogHandler = function(e) { | |
| 278 console.log('webview has requested a dialog.'); | |
| 279 embedder.test.assertEq('prompt', e.messageType); | |
| 280 embedder.test.assertEq(messageText, e.messageText); | |
| 281 embedder.test.assertEq(defaultPromptText, e.defaultPromptText); | |
| 282 e.dialog.ok(returnPromptText); | |
| 283 console.log('The app has responded to the dialog request.'); | |
| 284 }; | |
| 285 | |
| 286 setupDialogTest(messageCallback, dialogHandler); | |
| 287 } | |
| 288 | |
| 289 embedder.test.testList = { | |
| 290 'testAlertDialog': testAlertDialog, | |
| 291 'testConfirmDialog': testConfirmDialog, | |
| 292 'testConfirmDialogDefaultCancel': testConfirmDialogDefaultCancel, | |
| 293 'testConfirmDialogDefaultGCCancel': testConfirmDialogDefaultGCCancel, | |
| 294 'testConfirmDialogCancel': testConfirmDialogCancel, | |
| 295 'testPromptDialog': testPromptDialog | |
| 296 }; | |
| 297 | |
| 298 onload = function() { | |
| 299 chrome.test.getConfig(function(config) { | |
| 300 chrome.test.sendMessage("Launched"); | |
|
lazyboy
2013/07/23 18:45:01
nit: single quotes
Fady Samuel
2013/07/23 19:40:52
Done.
| |
| 301 }); | |
| 302 }; | |
| OLD | NEW |