mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 968031: Remove threadsafe refcounting from ContentParent and add it to the cycle collector graph. r=bent,mccr8
This commit is contained in:
parent
bbc6a87d98
commit
b3d1f15c57
@ -778,11 +778,6 @@ ContentParent::Init()
|
||||
}
|
||||
}
|
||||
Preferences::AddStrongObserver(this, "");
|
||||
nsCOMPtr<nsIThreadInternal>
|
||||
threadInt(do_QueryInterface(NS_GetCurrentThread()));
|
||||
if (threadInt) {
|
||||
threadInt->AddObserver(this);
|
||||
}
|
||||
if (obs) {
|
||||
obs->NotifyObservers(static_cast<nsIObserver*>(this), "ipc:content-created", nullptr);
|
||||
}
|
||||
@ -1137,8 +1132,7 @@ ContentParent::ActorDestroy(ActorDestroyReason why)
|
||||
CHILD_PROCESS_SHUTDOWN_MESSAGE, false,
|
||||
nullptr, nullptr, nullptr, nullptr);
|
||||
}
|
||||
nsCOMPtr<nsIThreadObserver>
|
||||
kungFuDeathGrip(static_cast<nsIThreadObserver*>(this));
|
||||
nsRefPtr<ContentParent> kungFuDeathGrip(this);
|
||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||
if (obs) {
|
||||
size_t length = ArrayLength(sObserverTopics);
|
||||
@ -1171,11 +1165,6 @@ ContentParent::ActorDestroy(ActorDestroyReason why)
|
||||
|
||||
mConsoleService = nullptr;
|
||||
|
||||
nsCOMPtr<nsIThreadInternal>
|
||||
threadInt(do_QueryInterface(NS_GetCurrentThread()));
|
||||
if (threadInt)
|
||||
threadInt->RemoveObserver(this);
|
||||
|
||||
MarkAsDead();
|
||||
|
||||
if (obs) {
|
||||
@ -1961,10 +1950,18 @@ ContentParent::RecvAddNewProcess(const uint32_t& aPid,
|
||||
#endif
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS3(ContentParent,
|
||||
nsIObserver,
|
||||
nsIThreadObserver,
|
||||
nsIDOMGeoPositionCallback)
|
||||
// We want ContentParent to show up in CC logs for debugging purposes, but we
|
||||
// don't actually cycle collect it.
|
||||
NS_IMPL_CYCLE_COLLECTION_0(ContentParent)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(ContentParent)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(ContentParent)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ContentParent)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIObserver)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMGeoPositionCallback)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIObserver)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMETHODIMP
|
||||
ContentParent::Observe(nsISupports* aSubject,
|
||||
@ -2857,32 +2854,6 @@ ContentParent::RecvLoadURIExternal(const URIParams& uri)
|
||||
return true;
|
||||
}
|
||||
|
||||
/* void onDispatchedEvent (in nsIThreadInternal thread); */
|
||||
NS_IMETHODIMP
|
||||
ContentParent::OnDispatchedEvent(nsIThreadInternal *thread)
|
||||
{
|
||||
NS_NOTREACHED("OnDispatchedEvent unimplemented");
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
/* void onProcessNextEvent (in nsIThreadInternal thread, in boolean mayWait, in unsigned long recursionDepth); */
|
||||
NS_IMETHODIMP
|
||||
ContentParent::OnProcessNextEvent(nsIThreadInternal *thread,
|
||||
bool mayWait,
|
||||
uint32_t recursionDepth)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* void afterProcessNextEvent (in nsIThreadInternal thread, in unsigned long recursionDepth); */
|
||||
NS_IMETHODIMP
|
||||
ContentParent::AfterProcessNextEvent(nsIThreadInternal *thread,
|
||||
uint32_t recursionDepth,
|
||||
bool eventWasProcessed)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool
|
||||
ContentParent::RecvShowAlertNotification(const nsString& aImageUrl, const nsString& aTitle,
|
||||
const nsString& aText, const bool& aTextClickable,
|
||||
|
@ -60,7 +60,6 @@ class TabContext;
|
||||
|
||||
class ContentParent : public PContentParent
|
||||
, public nsIObserver
|
||||
, public nsIThreadObserver
|
||||
, public nsIDOMGeoPositionCallback
|
||||
, public mozilla::dom::ipc::MessageManagerCallback
|
||||
, public mozilla::LinkedListElement<ContentParent>
|
||||
@ -112,9 +111,10 @@ public:
|
||||
static void GetAll(nsTArray<ContentParent*>& aArray);
|
||||
static void GetAllEvenIfDead(nsTArray<ContentParent*>& aArray);
|
||||
|
||||
NS_DECL_THREADSAFE_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(ContentParent, nsIObserver)
|
||||
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_NSIOBSERVER
|
||||
NS_DECL_NSITHREADOBSERVER
|
||||
NS_DECL_NSIDOMGEOPOSITIONCALLBACK
|
||||
|
||||
/**
|
||||
|
@ -710,12 +710,19 @@ static NS_CYCLE_COLLECTION_INNERCLASS NS_CYCLE_COLLECTION_INNERNAME;
|
||||
tmp->_unroot_function(); \
|
||||
}
|
||||
|
||||
// NS_IMPL_CYCLE_COLLECTION_0 is not defined because most of the time it doesn't
|
||||
// make sense to add something to the CC that doesn't traverse to anything.
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
_class::NS_CYCLE_COLLECTION_INNERCLASS _class::NS_CYCLE_COLLECTION_INNERNAME;
|
||||
|
||||
// NB: This is not something you usually want to use. It is here to allow
|
||||
// adding things to the CC graph to help debugging via CC logs, but it does not
|
||||
// traverse or unlink anything, so it is useless for anything else.
|
||||
#define NS_IMPL_CYCLE_COLLECTION_0(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
#define NS_IMPL_CYCLE_COLLECTION_1(_class, _f) \
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \
|
||||
|
Loading…
Reference in New Issue
Block a user