mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
82 lines
3.1 KiB
JavaScript
82 lines
3.1 KiB
JavaScript
/* 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/. */
|
|
|
|
/*
|
|
* Provide supports for Offline Applications
|
|
*/
|
|
var OfflineApps = {
|
|
offlineAppRequested: function(aRequest, aTarget) {
|
|
if (!Services.prefs.getBoolPref("browser.offline-apps.notify"))
|
|
return;
|
|
|
|
let currentURI = Services.io.newURI(aRequest.location, aRequest.charset, null);
|
|
|
|
// don't bother showing UI if the user has already made a decision
|
|
if (Services.perms.testExactPermission(currentURI, "offline-app") != Ci.nsIPermissionManager.UNKNOWN_ACTION)
|
|
return;
|
|
|
|
try {
|
|
if (Services.prefs.getBoolPref("offline-apps.allow_by_default")) {
|
|
// all pages can use offline capabilities, no need to ask the user
|
|
return;
|
|
}
|
|
} catch(e) {
|
|
// this pref isn't set by default, ignore failures
|
|
}
|
|
|
|
let host = currentURI.asciiHost;
|
|
let notificationID = "offline-app-requested-" + host;
|
|
let notificationBox = Browser.getNotificationBox(aTarget);
|
|
|
|
let notification = notificationBox.getNotificationWithValue(notificationID);
|
|
let strings = Strings.browser;
|
|
if (notification) {
|
|
notification.documents.push(aRequest);
|
|
} else {
|
|
let buttons = [{
|
|
label: strings.GetStringFromName("offlineApps.allow"),
|
|
accessKey: "",
|
|
callback: function() {
|
|
for (let i = 0; i < notification.documents.length; i++)
|
|
OfflineApps.allowSite(notification.documents[i], aTarget);
|
|
}
|
|
},{
|
|
label: strings.GetStringFromName("contentPermissions.neverForSite"),
|
|
accessKey: "",
|
|
callback: function() {
|
|
for (let i = 0; i < notification.documents.length; i++)
|
|
OfflineApps.disallowSite(notification.documents[i]);
|
|
}
|
|
}];
|
|
|
|
const priority = notificationBox.PRIORITY_INFO_LOW;
|
|
let message = strings.formatStringFromName("offlineApps.wantsTo", [host], 1);
|
|
notification = notificationBox.appendNotification(message, notificationID, "", priority, buttons);
|
|
notification.documents = [aRequest];
|
|
}
|
|
},
|
|
|
|
allowSite: function(aRequest, aTarget) {
|
|
let currentURI = Services.io.newURI(aRequest.location, aRequest.charset, null);
|
|
Services.perms.add(currentURI, "offline-app", Ci.nsIPermissionManager.ALLOW_ACTION);
|
|
|
|
// When a site is enabled while loading, manifest resources will start
|
|
// fetching immediately. This one time we need to do it ourselves.
|
|
// The update must be started on the content process.
|
|
aTarget.messageManager.sendAsyncMessage("Browser:MozApplicationCache:Fetch", aRequest);
|
|
},
|
|
|
|
disallowSite: function(aRequest) {
|
|
let currentURI = Services.io.newURI(aRequest.location, aRequest.charset, null);
|
|
Services.perms.add(currentURI, "offline-app", Ci.nsIPermissionManager.DENY_ACTION);
|
|
},
|
|
|
|
receiveMessage: function receiveMessage(aMessage) {
|
|
if (aMessage.name == "Browser:MozApplicationManifest") {
|
|
this.offlineAppRequested(aMessage.json, aMessage.target);
|
|
}
|
|
}
|
|
};
|
|
|