mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
147 lines
4.6 KiB
JavaScript
147 lines
4.6 KiB
JavaScript
// defines for prompt - button position
|
|
const ACCEPT = 0;
|
|
const ACCEPT_FUZZ = 1;
|
|
const DECLINE = 2;
|
|
|
|
// set if there should be a delay before prompt is accepted
|
|
var DELAYED_PROMPT = 0;
|
|
|
|
var prompt_delay = timeout * 2;
|
|
|
|
// the prompt that was registered at runtime
|
|
var old_prompt;
|
|
|
|
// whether the prompt was accepted
|
|
var prompted = 0;
|
|
|
|
// which prompt option to select when prompt is fired
|
|
var promptOption;
|
|
|
|
// number of position changes for testLocationProvider to make
|
|
var num_pos_changes = 3;
|
|
|
|
// based on testLocationProvider's interval
|
|
var timer_interval = 500;
|
|
var slack = 500;
|
|
|
|
// time needed for provider to make position changes
|
|
var timeout = num_pos_changes * timer_interval + slack;
|
|
|
|
function check_geolocation(location) {
|
|
|
|
ok(location, "Check to see if this location is non-null");
|
|
|
|
ok("timestamp" in location, "Check to see if there is a timestamp");
|
|
|
|
// eventually, coords may be optional (eg, when civic addresses are supported)
|
|
ok("coords" in location, "Check to see if this location has a coords");
|
|
|
|
var coords = location.coords;
|
|
|
|
ok("latitude" in coords, "Check to see if there is a latitude");
|
|
ok("longitude" in coords, "Check to see if there is a longitude");
|
|
ok("altitude" in coords, "Check to see if there is a altitude");
|
|
ok("accuracy" in coords, "Check to see if there is a accuracy");
|
|
ok("altitudeAccuracy" in coords, "Check to see if there is a alt accuracy");
|
|
ok("heading" in coords, "Check to see if there is a heading");
|
|
ok("speed" in coords, "Check to see if there is a speed");
|
|
}
|
|
|
|
//TODO: test for fuzzed location when this is implemented
|
|
function check_fuzzed_geolocation(location) {
|
|
check_geolocation(location);
|
|
}
|
|
|
|
function check_no_geolocation(location) {
|
|
ok(!location, "Check to see if this location is null");
|
|
}
|
|
|
|
function success_callback(position) {
|
|
if(prompted == 0)
|
|
ok(0, "Should not call success callback before prompt accepted");
|
|
if(position == null)
|
|
ok(1, "No geolocation available");
|
|
else {
|
|
switch(promptOption) {
|
|
case ACCEPT:
|
|
check_geolocation(position);
|
|
break;
|
|
case ACCEPT_FUZZ:
|
|
check_fuzzed_geolocation(position);
|
|
break;
|
|
case DECLINE:
|
|
check_no_geolocation(position);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function geolocation_prompt(request) {
|
|
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
|
|
prompted = 1;
|
|
switch(promptOption) {
|
|
case ACCEPT:
|
|
request.allow();
|
|
break;
|
|
case ACCEPT_FUZZ:
|
|
request.allowButFuzz();
|
|
break;
|
|
case DECLINE:
|
|
request.cancel();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
function delayed_prompt(request) {
|
|
setTimeout(geolocation_prompt, prompt_delay, request);
|
|
}
|
|
|
|
var TestPromptFactory = {
|
|
QueryInterface: function(iid) {
|
|
if (iid.equals(Components.interfaces.nsISupports) || iid.equals(Components.interfaces.nsIFactory))
|
|
return this;
|
|
throw Components.results.NS_ERROR_NO_INTERFACE;
|
|
},
|
|
|
|
createInstance: function(outer, iid) {
|
|
if (outer)
|
|
throw Components.results.NS_ERROR_NO_AGGREGATION;
|
|
|
|
if(DELAYED_PROMPT)
|
|
return delayed_prompt;
|
|
else
|
|
return geolocation_prompt;
|
|
},
|
|
|
|
lockFactory: function(lock) {
|
|
throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
|
|
},
|
|
};
|
|
|
|
function attachPrompt() {
|
|
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
|
|
old_prompt = Components.manager.nsIComponentRegistrar.contractIDToCID("@mozilla.org/geolocation/prompt;1");
|
|
old_factory = Components.manager.getClassObjectByContractID("@mozilla.org/geolocation/prompt;1", Components.interfaces.nsIFactory)
|
|
|
|
const testing_prompt_cid = Components.ID("{20C27ECF-A22E-4022-9757-2CFDA88EAEAA}");
|
|
Components.manager.nsIComponentRegistrar.registerFactory(testing_prompt_cid,
|
|
"Test Geolocation Prompt",
|
|
"@mozilla.org/geolocation/prompt;1",
|
|
TestPromptFactory);
|
|
}
|
|
|
|
function removePrompt() {
|
|
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
|
|
const testing_prompt_cid = Components.ID("{20C27ECF-A22E-4022-9757-2CFDA88EAEAA}");
|
|
Components.manager.nsIComponentRegistrar.unregisterFactory(testing_prompt_cid, TestPromptFactory);
|
|
Components.manager.nsIComponentRegistrar.registerFactory(old_prompt,
|
|
"Geolocation Prompt restored!",
|
|
"@mozilla.org/geolocation/prompt;1",
|
|
old_factory);
|
|
}
|