Bug 823789 - Pass enableHighAccuracy geolocation changes to the chrome process. r=dougt

This commit is contained in:
Josh Matthews 2012-12-24 15:14:34 -05:00
parent 64b42e81b1
commit 2f408047ad
8 changed files with 90 additions and 0 deletions

View File

@ -80,6 +80,7 @@
#include "StructuredCloneUtils.h" #include "StructuredCloneUtils.h"
#include "TabParent.h" #include "TabParent.h"
#include "URIUtils.h" #include "URIUtils.h"
#include "nsGeolocation.h"
#ifdef ANDROID #ifdef ANDROID
# include "gfxAndroidPlatform.h" # include "gfxAndroidPlatform.h"
@ -1910,6 +1911,15 @@ ContentParent::RecvRemoveGeolocationListener()
return true; return true;
} }
bool
ContentParent::RecvSetGeolocationHigherAccuracy(const bool& aEnable)
{
nsRefPtr<nsGeolocationService> geoSvc =
nsGeolocationService::GetGeolocationService();
geoSvc->SetHigherAccuracy(aEnable);
return true;
}
NS_IMETHODIMP NS_IMETHODIMP
ContentParent::HandleEvent(nsIDOMGeoPosition* postion) ContentParent::HandleEvent(nsIDOMGeoPosition* postion)
{ {

View File

@ -288,6 +288,7 @@ private:
virtual bool RecvAddGeolocationListener(); virtual bool RecvAddGeolocationListener();
virtual bool RecvRemoveGeolocationListener(); virtual bool RecvRemoveGeolocationListener();
virtual bool RecvSetGeolocationHigherAccuracy(const bool& aEnable);
virtual bool RecvConsoleMessage(const nsString& aMessage); virtual bool RecvConsoleMessage(const nsString& aMessage);
virtual bool RecvScriptError(const nsString& aMessage, virtual bool RecvScriptError(const nsString& aMessage,

View File

@ -81,6 +81,7 @@ LOCAL_INCLUDES += \
-I$(topsrcdir)/uriloader/exthandler \ -I$(topsrcdir)/uriloader/exthandler \
-I$(srcdir)/../../netwerk/base/src \ -I$(srcdir)/../../netwerk/base/src \
-I$(srcdir)/../src/base \ -I$(srcdir)/../src/base \
-I$(srcdir)/../src/geolocation \
-I$(srcdir)/../src/storage \ -I$(srcdir)/../src/storage \
-I$(srcdir)/../../xpcom/base \ -I$(srcdir)/../../xpcom/base \
-I$(topsrcdir)/dom/indexedDB \ -I$(topsrcdir)/dom/indexedDB \

View File

@ -397,6 +397,7 @@ parent:
AddGeolocationListener(); AddGeolocationListener();
RemoveGeolocationListener(); RemoveGeolocationListener();
SetGeolocationHigherAccuracy(bool enable);
ConsoleMessage(nsString message); ConsoleMessage(nsString message);
ScriptError(nsString message, nsString sourceName, nsString sourceLine, ScriptError(nsString message, nsString sourceName, nsString sourceLine,

View File

@ -996,6 +996,12 @@ nsGeolocationService::SetDisconnectTimer()
void void
nsGeolocationService::SetHigherAccuracy(bool aEnable) nsGeolocationService::SetHigherAccuracy(bool aEnable)
{ {
if (XRE_GetProcessType() == GeckoProcessType_Content) {
ContentChild* cpc = ContentChild::GetSingleton();
cpc->SendSetGeolocationHigherAccuracy(aEnable);
return;
}
if (!mHigherAccuracy && aEnable) { if (!mHigherAccuracy && aEnable) {
for (int32_t i = 0; i < mProviders.Count(); i++) { for (int32_t i = 0; i < mProviders.Count(); i++) {
mProviders[i]->SetHighAccuracy(true); mProviders[i]->SetHighAccuracy(true);

View File

@ -0,0 +1,60 @@
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const Cr = Components.results;
Cu.import("resource://testing-common/httpd.js");
var httpserver = null;
var geolocation = null;
var success = false;
var watchId = -1;
function geoHandler(metadata, response)
{
var georesponse = {
status: "OK",
location: {
lat: 42,
lng: 42,
},
accuracy: 42,
};
var position = JSON.stringify(georesponse);
response.processAsync();
response.setStatusLine("1.0", 200, "OK");
response.setHeader("Cache-Control", "no-cache", false);
response.setHeader("Content-Type", "aplication/x-javascript", false);
do_timeout(5000, function() {
response.write(position);
response.finish();
});
}
function successCallback() {
do_check_true(false);
do_test_finished();
}
function errorCallback() {
do_check_true(true);
do_test_finished();
}
function run_test()
{
do_test_pending();
httpserver = new HttpServer();
httpserver.registerPathHandler("/geo", geoHandler);
httpserver.start(4444);
if (Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime)
.processType == Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT) {
var prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
prefs.setCharPref("geo.wifi.uri", "http://localhost:4444/geo");
}
geolocation = Cc["@mozilla.org/geolocation;1"].getService(Ci.nsIDOMGeoGeolocation);
geolocation.getCurrentPosition(successCallback, errorCallback, {timeout: 2000});
}

View File

@ -0,0 +1,8 @@
const Cc = Components.classes;
const Ci = Components.interfaces;
function run_test() {
var prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
prefs.setCharPref("geo.wifi.uri", "http://localhost:4444/geo");
run_test_in_child("./test_geolocation_timeout.js");
}

View File

@ -5,5 +5,8 @@ tail =
[test_bug319968.js] [test_bug319968.js]
[test_bug465752.js] [test_bug465752.js]
[test_geolocation_provider.js] [test_geolocation_provider.js]
[test_geolocation_timeout.js]
[test_geolocation_timeout_wrap.js]
skip-if = os == "mac"
# Bug 684962: test hangs consistently on Android # Bug 684962: test hangs consistently on Android
skip-if = os == "android" skip-if = os == "android"