diff --git a/dom/geolocation/nsGeolocation.cpp b/dom/geolocation/nsGeolocation.cpp index 487ca6a4e7f1..ce0b55e468d9 100644 --- a/dom/geolocation/nsGeolocation.cpp +++ b/dom/geolocation/nsGeolocation.cpp @@ -18,20 +18,15 @@ #include "nsContentUtils.h" #include "nsContentPermissionHelper.h" #include "nsIDocument.h" -#include "nsIDOMEvent.h" #include "nsIObserverService.h" #include "nsPIDOMWindow.h" #include "nsThreadUtils.h" -#include "mozilla/HalWakeLock.h" -#include "mozilla/Hal.h" #include "mozilla/Services.h" #include "mozilla/Unused.h" #include "mozilla/Preferences.h" #include "mozilla/ClearOnShutdown.h" -#include "mozilla/dom/Event.h" #include "mozilla/WeakPtr.h" #include "mozilla/dom/PermissionMessageUtils.h" -#include "mozilla/dom/WakeLock.h" class nsIPrincipal; @@ -63,7 +58,6 @@ class nsIPrincipal; using mozilla::Unused; // using namespace mozilla; using namespace mozilla::dom; -using namespace mozilla::hal; class nsGeolocationRequest final : public nsIContentPermissionRequest @@ -487,10 +481,6 @@ nsGeolocationRequest::Allow(JS::HandleValue aChoices) return NS_OK; } - if (mLocator->ContainsRequest(this)) { - return NS_OK; - } - if (mIsWatchPositionRequest || !canUseCache) { // let the locator know we're pending // we will now be owned by the locator @@ -833,9 +823,9 @@ nsGeolocationService::StartDevice(nsIPrincipal *aPrincipal) return NS_ERROR_NOT_AVAILABLE; } - // we do not want to keep the geolocation devices online - // indefinitely. Close them down after a reasonable period of - // inactivivity + // We do not want to keep the geolocation devices online + // indefinitely. + // Close them down after a reasonable period of inactivivity. SetDisconnectTimer(); if (XRE_IsContentProcess()) { @@ -871,15 +861,6 @@ nsGeolocationService::StartDevice(nsIPrincipal *aPrincipal) return NS_OK; } -void -nsGeolocationService::StopDisconnectTimer() -{ - if (mDisconnectTimer) { - mDisconnectTimer->Cancel(); - mDisconnectTimer = nullptr; - } -} - void nsGeolocationService::SetDisconnectTimer() { @@ -927,7 +908,10 @@ nsGeolocationService::UpdateAccuracy(bool aForceHigh) void nsGeolocationService::StopDevice() { - StopDisconnectTimer(); + if (mDisconnectTimer) { + mDisconnectTimer->Cancel(); + mDisconnectTimer = nullptr; + } if (XRE_IsContentProcess()) { ContentChild* cpc = ContentChild::GetSingleton(); @@ -1037,14 +1021,6 @@ Geolocation::Init(nsPIDOMWindowInner* aContentDom) mPrincipal = doc->NodePrincipal(); - if (Preferences::GetBool("dom.wakelock.enabled") && - XRE_IsContentProcess()) { - doc->AddSystemEventListener(NS_LITERAL_STRING("visibilitychange"), - /* listener */ this, - /* use capture */ true, - /* wants untrusted */ false); - } - nsCOMPtr uri; nsresult rv = mPrincipal->GetURI(getter_AddRefs(uri)); NS_ENSURE_SUCCESS(rv, rv); @@ -1078,66 +1054,6 @@ Geolocation::Init(nsPIDOMWindowInner* aContentDom) return NS_OK; } -bool -Geolocation::ContainsRequest(nsGeolocationRequest* aRequest) -{ - if (aRequest->IsWatch() && mWatchingCallbacks.Contains(aRequest)) { - return true; - } - - if (mPendingCallbacks.Contains(aRequest)) { - return true; - } - - return false; -} - - -NS_IMETHODIMP -Geolocation::HandleEvent(nsIDOMEvent* aEvent) -{ - - nsAutoString type; - aEvent->GetType(type); - if (!type.EqualsLiteral("visibilitychange")) { - return NS_OK; - } - - nsCOMPtr doc = do_QueryInterface(aEvent->InternalDOMEvent()->GetTarget()); - MOZ_ASSERT(doc); - - if (doc->Hidden()) { - WakeLockInformation info; - GetWakeLockInfo(NS_LITERAL_STRING("gps"), &info); - - MOZ_ASSERT(XRE_IsContentProcess()); - ContentChild* cpc = ContentChild::GetSingleton(); - - if (!info.lockingProcesses().Contains(cpc->GetID())) { - cpc->SendRemoveGeolocationListener(); - mService->StopDisconnectTimer(); - } - - return NS_OK; - } - - mService->SetDisconnectTimer(); - - // We will unconditionally allow all the requests in the callbacks - // because if a request is put into either of these two callbacks, - // it means that it has been allowed before. - // That's why when we resume them, we unconditionally allow them again. - for (uint32_t i = 0, length = mWatchingCallbacks.Length(); i < length; ++i) { - mWatchingCallbacks[i]->Allow(JS::UndefinedHandleValue); - } - - for (uint32_t i = 0, length = mPendingCallbacks.Length(); i < length; ++i) { - mPendingCallbacks[i]->Allow(JS::UndefinedHandleValue); - } - - return NS_OK; -} - void Geolocation::Shutdown() { @@ -1145,18 +1061,6 @@ Geolocation::Shutdown() mPendingCallbacks.Clear(); mWatchingCallbacks.Clear(); - if (Preferences::GetBool("dom.wakelock.enabled") && - XRE_IsContentProcess()) { - if (nsCOMPtr window = do_QueryReferent(mOwner)) { - nsCOMPtr doc = window->GetExtantDoc(); - if (doc) { - doc->RemoveSystemEventListener(NS_LITERAL_STRING("visibilitychange"), - this, - /* aUseCapture = */ true); - } - } - } - if (mService) { mService->RemoveLocator(this); mService->UpdateAccuracy(); diff --git a/dom/geolocation/nsGeolocation.h b/dom/geolocation/nsGeolocation.h index bb1f165e5dab..f82c10cb3afc 100644 --- a/dom/geolocation/nsGeolocation.h +++ b/dom/geolocation/nsGeolocation.h @@ -21,7 +21,6 @@ #include "nsCycleCollectionParticipant.h" #include "nsGeoPosition.h" -#include "nsIDOMEventListener.h" #include "nsIDOMGeoGeolocation.h" #include "nsIDOMGeoPosition.h" #include "nsIDOMGeoPositionError.h" @@ -87,7 +86,6 @@ public: // create, or reinitalize the callback timer void SetDisconnectTimer(); - void StopDisconnectTimer(); // Update the accuracy and notify the provider if changed void UpdateAccuracy(bool aForceHigh = false); @@ -125,8 +123,7 @@ namespace dom { */ class Geolocation final : public nsIDOMGeoGeolocation, public nsIGeolocationUpdate, - public nsWrapperCache, - public nsIDOMEventListener + public nsWrapperCache { public: @@ -136,8 +133,6 @@ public: NS_DECL_NSIGEOLOCATIONUPDATE NS_DECL_NSIDOMGEOGEOLOCATION - NS_DECL_NSIDOMEVENTLISTENER - Geolocation(); nsresult Init(nsPIDOMWindowInner* aContentDom = nullptr); @@ -154,9 +149,6 @@ public: // Register an allowed request void NotifyAllowedRequest(nsGeolocationRequest* aRequest); - // Check if callbacks arrays already contain this request - bool ContainsRequest(nsGeolocationRequest* aRequest); - // Remove request from all callbacks arrays void RemoveRequest(nsGeolocationRequest* request);