Chromium Code Reviews| Index: chrome/test/chromedriver/js/execute_async_script.js |
| diff --git a/chrome/test/chromedriver/js/execute_async_script.js b/chrome/test/chromedriver/js/execute_async_script.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..59d53c0f5c2457ea18cc028e88aedd9e770d7193 |
| --- /dev/null |
| +++ b/chrome/test/chromedriver/js/execute_async_script.js |
| @@ -0,0 +1,41 @@ |
| +// Copyright (c) 2013 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. |
| + |
| +/** |
| +* Execute the given script and save its result. |
|
kkania
2013/03/08 17:25:12
saves its asynchronous result
chrisgao (Use stgao instead)
2013/03/08 21:06:24
Done.
|
| +* |
| +* A callback function {function(*) : null} will be appended to the end of |
| +* <code>args</code>. |
| +* The script should call this callback when it is completed. The value passed to |
| +* this callback will be saved in window.chromedriverAsyncScriptResult. Variable |
|
kkania
2013/03/08 17:25:12
try not to include unnecessary implementation deta
chrisgao (Use stgao instead)
2013/03/08 21:06:24
Done.
|
| +* window.chromedriverAsyncScriptFinsished indicates whether the script |
| +* is completed. |
| +* |
| +* If script1 is executed before script2, but script1 completes after script2, |
| +* then script1's result will be discarded while script2's will be saved. |
| +* |
| +* @param {!string} script The asynchronous script to be executed. |
| +* @param {Array.<*>} args Arguments to be passed to the script. |
| +*/ |
| +function executeAsyncScript(script, args) { |
| + var idName = 'chromedriverAsyncScriptId'; |
|
kkania
2013/03/08 17:25:12
how about:
function getAsyncScriptInfo() {
var
chrisgao (Use stgao instead)
2013/03/08 21:06:24
Done.
|
| + var finishFlagName = 'chromedriverAsyncScriptFinsished'; |
|
kkania
2013/03/08 17:25:12
i think technically you don't need the finish flag
chrisgao (Use stgao instead)
2013/03/08 21:06:24
ok.
|
| + var resultName = 'chromedriverAsyncScriptResult'; |
| + if (!(idName in document)) |
| + document[idName] = 0; |
| + document[idName] ++; |
|
kkania
2013/03/08 17:25:12
style says no space i thnik
chrisgao (Use stgao instead)
2013/03/08 21:06:24
Done.
|
| + document[resultName] = null; |
|
kkania
2013/03/08 17:25:12
what's the point of this?
chrisgao (Use stgao instead)
2013/03/08 21:06:24
If last script timeout, its result might still be
|
| + document[finishFlagName] = false; |
| + var id = document[idName]; |
| + |
| + function callback(result) { |
| + if (id == document[idName]) { |
|
kkania
2013/03/08 17:25:12
i can think of two improvements here:
1) if the us
chrisgao (Use stgao instead)
2013/03/08 21:06:24
1) Raise Timeout error below if this case happens.
|
| + document[resultName] = result; |
| + document[finishFlagName] = true; |
| + } |
| + } |
| + args.push(callback); |
| + |
| + new window['Function'](script).apply(null, args); |
|
kkania
2013/03/08 17:25:12
I don't think you need the window. new Function(
chrisgao (Use stgao instead)
2013/03/08 21:06:24
Done.
Also set error code here.
|
| +} |