diff -r 000000000000 -r 6474c204b198 browser/metro/base/content/helperui/IndexedDB.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/metro/base/content/helperui/IndexedDB.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,89 @@ +/* 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/. */ + +/** + * Helper class for IndexedDB, parent part. Listens to + * messages from the child and shows prompts for them. + */ +let IndexedDB = { + _permissionsPrompt: "indexedDB-permissions-prompt", + _permissionsResponse: "indexedDB-permissions-response", + + _quotaPrompt: "indexedDB-quota-prompt", + _quotaResponse: "indexedDB-quota-response", + _quotaCancel: "indexedDB-quota-cancel", + + _notificationIcon: "indexedDB-notification-icon", + + receiveMessage: function(aMessage) { + switch (aMessage.name) { + case "IndexedDB:Prompt": + this.showPrompt(aMessage); + } + }, + + showPrompt: function(aMessage) { + let browser = aMessage.target; + let payload = aMessage.json; + let host = payload.host; + let topic = payload.topic; + let type; + + if (topic == this._permissionsPrompt) { + type = "indexedDB"; + payload.responseTopic = this._permissionsResponse; + } else if (topic == this._quotaPrompt) { + type = "indexedDBQuota"; + payload.responseTopic = this._quotaResponse; + } else if (topic == this._quotaCancel) { + payload.permission = Ci.nsIPermissionManager.UNKNOWN_ACTION; + browser.messageManager.sendAsyncMessage("IndexedDB:Response", payload); + // XXX Need to actually save this? + return; + } + + let prompt = Cc["@mozilla.org/content-permission/prompt;1"].createInstance(Ci.nsIContentPermissionPrompt); + let types = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray); + let promptType = { + type: type, + access: "unused", + QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentPermissionType]) + }; + types.appendElement(promptType, false); + + // If the user waits a long time before responding, we default to UNKNOWN_ACTION. + let timeoutId = setTimeout(function() { + payload.permission = Ci.nsIPermissionManager.UNKNOWN_ACTION; + browser.messageManager.sendAsyncMessage("IndexedDB:Response", payload); + timeoutId = null; + }, 30000); + + function checkTimeout() { + if (timeoutId === null) return true; + clearTimeout(timeoutId); + timeoutId = null; + return false; + } + + prompt.prompt({ + types: types, + uri: Services.io.newURI(payload.location, null, null), + window: null, + element: aMessage.target, + + cancel: function() { + if (checkTimeout()) return; + payload.permission = Ci.nsIPermissionManager.DENY_ACTION; + browser.messageManager.sendAsyncMessage("IndexedDB:Response", payload); + }, + + allow: function() { + if (checkTimeout()) return; + payload.permission = Ci.nsIPermissionManager.ALLOW_ACTION; + browser.messageManager.sendAsyncMessage("IndexedDB:Response", payload); + }, + }); + }, +}; +