diff -r 000000000000 -r 6474c204b198 browser/metro/components/PromptService.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/metro/components/PromptService.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,103 @@ +// -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*- +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +const Ci = Components.interfaces; +const Cc = Components.classes; +const Cr = Components.results; +const Cu = Components.utils; + +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource://gre/modules/Services.jsm"); + +function PromptService() { + +} + +PromptService.prototype = { + classID: Components.ID("{9a61149b-2276-4a0a-b79c-be994ad106cf}"), + + QueryInterface: XPCOMUtils.generateQI([Ci.nsIPromptFactory, Ci.nsIPromptService, Ci.nsIPromptService2]), + + /* ---------- nsIPromptFactory ---------- */ + + getPrompt: function getPrompt(domWin, iid) { + if (!domWin) { + let chromeWin = Services.wm.getMostRecentWindow("navigator:browser"); + if (!chromeWin) { + let msg = "PromptService.js: Attempted create a prompt but no DOM Window specified and failed to find one"; + Cu.reportError(msg); + throw(msg); + } + domWin = chromeWin.getBrowser().contentWindow; + } + + let factory = + Components.classesByID["{1c978d25-b37f-43a8-a2d6-0c7a239ead87}"] + .createInstance(Ci.nsIPromptFactory); + + let prompt = factory.getPrompt(domWin, iid); + try { + let bag = prompt.QueryInterface(Ci.nsIWritablePropertyBag2); + bag.setPropertyAsBool("allowTabModal", true); + } catch(e) { + } + return prompt; + }, + + /* ---------- private memebers ---------- */ + + callProxy: function(aName, aArgs) { + let domWin = aArgs[0]; + let prompt = this.getPrompt(domWin, Ci.nsIPrompt); + if (aName == 'promptAuth' || aName == 'promptAuthAsync') { + let adapterFactory = + Components.classesByID["{6e134924-6c3a-4d86-81ac-69432dd971dc}"] + .createInstance(Ci.nsIAuthPromptAdapterFactory); + prompt = adapterFactory.createAdapter(prompt); + } + + return prompt[aName].apply(prompt, Array.prototype.slice.call(aArgs, 1)); + }, + + /* ---------- nsIPromptService ---------- */ + + alert: function() { + return this.callProxy("alert", arguments); + }, + alertCheck: function() { + return this.callProxy("alertCheck", arguments); + }, + confirm: function() { + return this.callProxy("confirm", arguments); + }, + confirmCheck: function() { + return this.callProxy("confirmCheck", arguments); + }, + confirmEx: function() { + return this.callProxy("confirmEx", arguments); + }, + prompt: function() { + return this.callProxy("prompt", arguments); + }, + promptUsernameAndPassword: function() { + return this.callProxy("promptUsernameAndPassword", arguments); + }, + promptPassword: function() { + return this.callProxy("promptPassword", arguments); + }, + select: function() { + return this.callProxy("select", arguments); + }, + + /* ---------- nsIPromptService2 ---------- */ + + promptAuth: function() { + return this.callProxy("promptAuth", arguments); + }, + asyncPromptAuth: function() { + return this.callProxy("asyncPromptAuth", arguments); + } +}; + +this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PromptService]);