mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 748214 - Cannot use the Geolocation API within the desktop web runtime [r=myk]
Show a prompt asking the user to share or not geolocation info with the option to remember. --HG-- extra : rebase_source : f6fdf84a3d675ad52e973cd5f4b4d1cf84394fb1
This commit is contained in:
parent
10977c4e9d
commit
6e85d10954
@ -647,6 +647,7 @@ bin/components/@DLL_PREFIX@nkgnomevfs@DLL_SUFFIX@
|
||||
@BINPATH@/webapprt/chrome/webapprt@JAREXT@
|
||||
@BINPATH@/webapprt/chrome/webapprt.manifest
|
||||
@BINPATH@/webapprt/components/CommandLineHandler.js
|
||||
@BINPATH@/webapprt/components/ContentPermission.js
|
||||
@BINPATH@/webapprt/components/ContentPolicy.js
|
||||
@BINPATH@/webapprt/components/DirectoryProvider.js
|
||||
@BINPATH@/webapprt/components/components.manifest
|
||||
|
@ -15,3 +15,11 @@ quitApplicationCmdMac.label=Quit %S
|
||||
# LOCALIZATION NOTE (hideApplicationCmdMac.label): %S will be replaced with
|
||||
# the name of the webapp.
|
||||
hideApplicationCmdMac.label=Hide %S
|
||||
|
||||
# LOCALIZATION NOTE (geolocation.title): %S will be replaced with the name of
|
||||
# the webapp.
|
||||
geolocation.title=%S - Share Location
|
||||
geolocation.description=Do you want to share your location?
|
||||
geolocation.sharelocation=Share Location
|
||||
geolocation.dontshare=Don't Share
|
||||
geolocation.remember=Remember my choice
|
||||
|
89
webapprt/ContentPermission.js
Normal file
89
webapprt/ContentPermission.js
Normal file
@ -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/. */
|
||||
|
||||
const Cc = Components.classes;
|
||||
const Ci = Components.interfaces;
|
||||
const Cu = Components.utils;
|
||||
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://webapprt/modules/WebappRT.jsm");
|
||||
|
||||
function ContentPermission() {}
|
||||
|
||||
ContentPermission.prototype = {
|
||||
classID: Components.ID("{07ef5b2e-88fb-47bd-8cec-d3b0bef11ac4}"),
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentPermissionPrompt]),
|
||||
|
||||
prompt: function(request) {
|
||||
// Only handle geolocation requests for now
|
||||
if (request.type != "geolocation") {
|
||||
return;
|
||||
}
|
||||
|
||||
// Reuse any remembered permission preferences
|
||||
let result = Services.perms.testExactPermission(request.uri, "geo");
|
||||
if (result == Ci.nsIPermissionManager.ALLOW_ACTION) {
|
||||
request.allow();
|
||||
return;
|
||||
}
|
||||
else if (result == Ci.nsIPermissionManager.DENY_ACTION) {
|
||||
request.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
function getChromeWindow(aWindow) {
|
||||
var chromeWin = aWindow
|
||||
.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIWebNavigation)
|
||||
.QueryInterface(Ci.nsIDocShellTreeItem)
|
||||
.rootTreeItem
|
||||
.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindow)
|
||||
.QueryInterface(Ci.nsIDOMChromeWindow);
|
||||
return chromeWin;
|
||||
}
|
||||
|
||||
// Display a prompt at the top level
|
||||
let {name} = WebappRT.config.app.manifest;
|
||||
let requestingWindow = request.window.top;
|
||||
let chromeWin = getChromeWindow(requestingWindow);
|
||||
let bundle = Services.strings.createBundle("chrome://webapprt/locale/webapp.properties");
|
||||
|
||||
// Construct a prompt with share/don't and remember checkbox
|
||||
let remember = {value: false};
|
||||
let choice = Services.prompt.confirmEx(
|
||||
chromeWin,
|
||||
bundle.formatStringFromName("geolocation.title", [name], 1),
|
||||
bundle.GetStringFromName("geolocation.description"),
|
||||
// Set both buttons to strings with the cancel button being default
|
||||
Ci.nsIPromptService.BUTTON_POS_1_DEFAULT |
|
||||
Ci.nsIPromptService.BUTTON_TITLE_IS_STRING * Ci.nsIPromptService.BUTTON_POS_0 |
|
||||
Ci.nsIPromptService.BUTTON_TITLE_IS_STRING * Ci.nsIPromptService.BUTTON_POS_1,
|
||||
bundle.GetStringFromName("geolocation.sharelocation"),
|
||||
bundle.GetStringFromName("geolocation.dontshare"),
|
||||
null,
|
||||
bundle.GetStringFromName("geolocation.remember"),
|
||||
remember);
|
||||
|
||||
// Persist the choice if the user wants to remember
|
||||
if (remember.value) {
|
||||
let action = Ci.nsIPermissionManager.ALLOW_ACTION;
|
||||
if (choice != 0) {
|
||||
action = Ci.nsIPermissionManager.DENY_ACTION;
|
||||
}
|
||||
Services.perms.add(request.uri, "geo", action);
|
||||
}
|
||||
|
||||
// Trigger the selected choice
|
||||
if (choice == 0) {
|
||||
request.allow();
|
||||
}
|
||||
else {
|
||||
request.cancel();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const NSGetFactory = XPCOMUtils.generateNSGetFactory([ContentPermission]);
|
@ -29,6 +29,7 @@ endif # windows
|
||||
EXTRA_PP_COMPONENTS = \
|
||||
components.manifest \
|
||||
CommandLineHandler.js \
|
||||
ContentPermission.js \
|
||||
ContentPolicy.js \
|
||||
DirectoryProvider.js \
|
||||
$(NULL)
|
||||
|
@ -3,6 +3,10 @@ component {6d69c782-40a3-469b-8bfd-3ee366105a4a} CommandLineHandler.js applicati
|
||||
contract @mozilla.org/webapprt/clh;1 {6d69c782-40a3-469b-8bfd-3ee366105a4a} application=webapprt@mozilla.org
|
||||
category command-line-handler x-default @mozilla.org/webapprt/clh;1 application=webapprt@mozilla.org
|
||||
|
||||
# ContentPermission.js
|
||||
component {07ef5b2e-88fb-47bd-8cec-d3b0bef11ac4} ContentPermission.js
|
||||
contract @mozilla.org/content-permission/prompt;1 {07ef5b2e-88fb-47bd-8cec-d3b0bef11ac4}
|
||||
|
||||
# ContentPolicy.js
|
||||
component {75acd178-3d5a-48a7-bd92-fba383520ae6} ContentPolicy.js application=webapprt@mozilla.org
|
||||
contract @mozilla.org/webapprt/content-policy;1 {75acd178-3d5a-48a7-bd92-fba383520ae6} application=webapprt@mozilla.org
|
||||
|
Loading…
Reference in New Issue
Block a user