Bug 452834 - Add geolocation to the cycle collector. r/sr=dbaron

This commit is contained in:
Doug Turner 2009-01-14 17:10:46 -08:00
parent 6cc200565f
commit a02192e467
2 changed files with 32 additions and 10 deletions

View File

@ -166,15 +166,16 @@ nsGeolocationRequest::Init()
return NS_OK;
}
NS_INTERFACE_MAP_BEGIN(nsGeolocationRequest)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsGeolocationRequest)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIGeolocationRequest)
NS_INTERFACE_MAP_ENTRY(nsIGeolocationRequest)
NS_INTERFACE_MAP_ENTRY(nsITimerCallback)
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF(nsGeolocationRequest)
NS_IMPL_RELEASE(nsGeolocationRequest)
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsGeolocationRequest)
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsGeolocationRequest)
NS_IMPL_CYCLE_COLLECTION_3(nsGeolocationRequest, mCallback, mErrorCallback, mOptions)
void
@ -528,14 +529,29 @@ nsGeolocationService::RemoveLocator(nsGeolocation* aLocator)
// nsGeolocation
////////////////////////////////////////////////////
NS_INTERFACE_MAP_BEGIN(nsGeolocation)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsGeolocation)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMGeoGeolocation)
NS_INTERFACE_MAP_ENTRY(nsIDOMGeoGeolocation)
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(GeoGeolocation)
NS_INTERFACE_MAP_END
NS_IMPL_ADDREF(nsGeolocation)
NS_IMPL_RELEASE(nsGeolocation)
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsGeolocation)
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsGeolocation)
NS_IMPL_CYCLE_COLLECTION_CLASS(nsGeolocation)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsGeolocation)
tmp->mPendingCallbacks.Clear();
tmp->mWatchingCallbacks.Clear();
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsGeolocation)
PRUint32 i;
for (i = 0; i < tmp->mPendingCallbacks.Length(); ++i)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR_AMBIGUOUS(mPendingCallbacks[i], nsIGeolocationRequest)
for (i = 0; i < tmp->mWatchingCallbacks.Length(); ++i)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR_AMBIGUOUS(mWatchingCallbacks[i], nsIGeolocationRequest)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
nsGeolocation::nsGeolocation(nsIDOMWindow* aContentDom)
: mUpdateInProgress(PR_FALSE)

View File

@ -43,6 +43,8 @@
#include "nsIObserver.h"
#include "nsIURI.h"
#include "nsCycleCollectionParticipant.h"
#include "nsIDOMGeoGeolocation.h"
#include "nsIDOMGeoPosition.h"
#include "nsIDOMGeoPositionError.h"
@ -61,10 +63,12 @@ class nsGeolocation;
class nsGeolocationRequest : public nsIGeolocationRequest, public nsITimerCallback
{
public:
NS_DECL_ISUPPORTS
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_NSIGEOLOCATIONREQUEST
NS_DECL_NSITIMERCALLBACK
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsGeolocationRequest, nsIGeolocationRequest)
nsGeolocationRequest(nsGeolocation* locator,
nsIDOMGeoPositionCallback* callback,
nsIDOMGeoPositionErrorCallback* errorCallback,
@ -164,9 +168,11 @@ class nsGeolocation : public nsIDOMGeoGeolocation
{
public:
NS_DECL_ISUPPORTS
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_NSIDOMGEOGEOLOCATION
NS_DECL_CYCLE_COLLECTION_CLASS(nsGeolocation)
nsGeolocation(nsIDOMWindow* contentDom);
// Called by the geolocation device to notify that a location has changed.