mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-08 05:52:32 +00:00
79 lines
2.4 KiB
JavaScript
79 lines
2.4 KiB
JavaScript
/**
|
|
* 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);
|
|
|
|
// 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({
|
|
type: type,
|
|
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);
|
|
},
|
|
});
|
|
},
|
|
};
|
|
|