Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 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 /** | |
| 6 * Return the information of asynchronous script execution. | |
| 7 * | |
| 8 * @return {Object.<string, ?>} Information of asynchronous script execution. | |
| 9 */ | |
| 10 function getAsyncScriptInfo() { | |
| 11 var key = 'chromedriverAsyncScriptInfo'; | |
| 12 if (!(key in document)) | |
| 13 document[key] = {'id': 0, 'finished': false}; | |
| 14 return document[key]; | |
| 15 } | |
| 16 | |
| 17 /** | |
| 18 * Execute the given script and save its asynchronous result. | |
| 19 * | |
| 20 * If script1 finishes after script2 is executed, then script1's result will be | |
| 21 * discarded while script2's will be saved. | |
| 22 * | |
| 23 * @param {!string} script The asynchronous script to be executed. | |
| 24 * @param {Array.<*>} args Arguments to be passed to the script. | |
| 25 * @param {!number} timeout The timeout for the asynchronous script. | |
| 26 */ | |
| 27 function executeAsyncScript(script, args, timeout) { | |
| 28 var info = getAsyncScriptInfo(); | |
| 29 info['id']++; | |
|
kkania
2013/03/08 21:56:50
instead of info['id'] style, do info.id; same for
chrisgao (Use stgao instead)
2013/03/08 23:28:25
Done.
| |
| 30 info['finished'] = false; | |
| 31 delete info['result']; | |
| 32 var id = info['id']; | |
| 33 | |
| 34 function callback(result) { | |
| 35 if (id == info['id']) { | |
| 36 info['result'] = result; | |
|
kkania
2013/03/08 21:56:50
there's still a small bug where this will hold a r
chrisgao (Use stgao instead)
2013/03/08 23:28:25
Done.
| |
| 37 info['finished'] = true; | |
| 38 } | |
| 39 } | |
| 40 args.push(callback); | |
| 41 | |
| 42 try { | |
| 43 new Function(script).apply(null, args); | |
| 44 } catch (error) { | |
| 45 error.code = 17; // Error code for JavaScriptError. | |
| 46 throw error; | |
| 47 } | |
| 48 | |
| 49 // If timeout is 0 and callback is not called synchronously, raise a | |
| 50 // ScriptTimeout error. | |
| 51 if (timeout == 0 && !info['finished']) { | |
|
chrisgao (Use stgao instead)
2013/03/08 23:28:25
Removed, because this failed one java test.
execu
| |
| 52 info['id']++; // Avoid the asynchronous script to set the result. | |
| 53 var error = new Error(); | |
| 54 error.code = 28; // Error code for ScriptTimeout. | |
| 55 throw error; | |
| 56 } | |
| 57 } | |
| OLD | NEW |