Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: lib/utils.js

Issue 13077005: Fix first-run page in Opera (Closed)
Patch Set: Created Oct. 16, 2013, 11:55 a.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/localstorage/io.js ('k') | metadata.opera » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/utils.js
===================================================================
--- a/lib/utils.js
+++ b/lib/utils.js
@@ -10,29 +10,31 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
*/
+let runAsyncQueue = [];
+
var Utils = exports.Utils = {
systemPrincipal: null,
getString: function(id)
{
return id;
},
runAsync: function(callback, thisPtr)
{
- var params = Array.prototype.slice.call(arguments, 2);
- window.setTimeout(function()
- {
- callback.apply(thisPtr, params);
- }, 0);
+ callback = callback.bind.apply(callback, Array.prototype.slice.call(arguments, 1));
+ if (runAsyncQueue)
+ runAsyncQueue.push(callback);
+ else
+ window.setTimeout(callback, 0);
},
get appLocale()
{
var locale = chrome.i18n.getMessage("@@ui_locale").replace(/_/g, "-");
this.__defineGetter__("appLocale", function() {return locale});
return this.appLocale;
},
generateChecksum: function(lines)
@@ -99,8 +101,30 @@ var Utils = exports.Utils = {
getDocLink: function(linkID)
{
var Prefs = require("prefs").Prefs;
var docLink = Prefs.documentation_link;
return docLink.replace(/%LINK%/g, linkID).replace(/%LANG%/g, Utils.appLocale);
}
};
+
+Utils.runAsync.enable = function()
+{
+ // Hack: Opera will happily run asynchronous actions while scripts are
+ // loading, queue them until Utils.runAsync.enable() is called.
+ if (!runAsyncQueue)
+ return;
+
+ let queue = runAsyncQueue;
+ runAsyncQueue = null;
+ for each (let callback in queue)
+ {
+ try
+ {
+ callback();
+ }
+ catch(e)
+ {
+ Cu.reportError(e);
+ }
+ }
+}
« no previous file with comments | « lib/localstorage/io.js ('k') | metadata.opera » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld