icecat: add release icecat-140.8.0-2 for aramo
This commit is contained in:
parent
d9a6c0aa96
commit
d570f39e11
616 changed files with 39955 additions and 33937 deletions
|
|
@ -4049,6 +4049,10 @@ bool IPDLParamTraits<dom::MaybeDiscarded<dom::BrowsingContext>>::Read(
|
|||
if (id == 0) {
|
||||
*aResult = nullptr;
|
||||
} else if (RefPtr<dom::BrowsingContext> bc = dom::BrowsingContext::Get(id)) {
|
||||
if (!bc->Group()->IsKnownForMessageReader(aReader)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
*aResult = std::move(bc);
|
||||
} else {
|
||||
aResult->SetDiscarded(id);
|
||||
|
|
|
|||
|
|
@ -251,6 +251,42 @@ ContentParent* BrowsingContextGroup::GetHostProcess(
|
|||
return mHosts.GetWeak(aRemoteType);
|
||||
}
|
||||
|
||||
bool BrowsingContextGroup::IsKnownForMessageReader(
|
||||
IPC::MessageReader* aReader) {
|
||||
if (!aReader->GetActor()) {
|
||||
aReader->FatalError(
|
||||
"No actor for BrowsingContextGroup::IsKnownForMessageReader");
|
||||
return false;
|
||||
}
|
||||
|
||||
mozilla::ipc::IToplevelProtocol* topActor =
|
||||
aReader->GetActor()->ToplevelProtocol();
|
||||
switch (topActor->GetProtocolId()) {
|
||||
case PInProcessMsgStart:
|
||||
// PInProcess always exists only within a single process, so we don't need
|
||||
// to do any validation on it.
|
||||
return true;
|
||||
|
||||
case PContentMsgStart:
|
||||
// The process should only be able to name this BCG if it is
|
||||
// subscribed, or if the BCG has been destroyed (and has therefore
|
||||
// stopped tracking subscribers).
|
||||
if (topActor->GetSide() == mozilla::ipc::ParentSide && !mDestroyed &&
|
||||
!mSubscribers.Contains(static_cast<ContentParent*>(topActor))) {
|
||||
aReader->FatalError(
|
||||
"Process is not subscribed to this BrowsingContextGroup");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
default:
|
||||
aReader->FatalError(
|
||||
"Unsupported toplevel actor for "
|
||||
"BrowsingContextGroup::IsKnownForMessageReader");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void BrowsingContextGroup::UpdateToplevelsSuspendedIfNeeded() {
|
||||
if (!StaticPrefs::dom_suspend_inactive_enabled()) {
|
||||
return;
|
||||
|
|
@ -296,8 +332,8 @@ void BrowsingContextGroup::Destroy() {
|
|||
!sBrowsingContextGroups->Contains(Id()) ||
|
||||
*sBrowsingContextGroups->Lookup(Id()) != this);
|
||||
}
|
||||
mDestroyed = true;
|
||||
#endif
|
||||
mDestroyed = true;
|
||||
|
||||
// Make sure to call `RemoveBrowsingContextGroup` for every entry in both
|
||||
// `mHosts` and `mSubscribers`. This will visit most entries twice, but
|
||||
|
|
|
|||
|
|
@ -87,6 +87,12 @@ class BrowsingContextGroup final : public nsWrapperCache {
|
|||
// BrowsingContextGroup, if possible.
|
||||
ContentParent* GetHostProcess(const nsACString& aRemoteType);
|
||||
|
||||
// Check if the process which sent the message being read from aReader is
|
||||
// aware of this BrowsingContextGroup's existence.
|
||||
// If this returns false, it will first set a fatal error on aReader with more
|
||||
// details.
|
||||
bool IsKnownForMessageReader(IPC::MessageReader* aReader);
|
||||
|
||||
// When a BrowsingContext is being discarded, we may want to keep the
|
||||
// corresponding BrowsingContextGroup alive until the other process
|
||||
// acknowledges that the BrowsingContext has been discarded. A `KeepAlive`
|
||||
|
|
@ -260,9 +266,7 @@ class BrowsingContextGroup final : public nsWrapperCache {
|
|||
|
||||
uint32_t mKeepAliveCount = 0;
|
||||
|
||||
#ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
|
||||
bool mDestroyed = false;
|
||||
#endif
|
||||
|
||||
// A BrowsingContextGroup contains a series of {Browsing,Window}Context
|
||||
// objects. They are addressed using a hashtable to avoid linear lookup when
|
||||
|
|
|
|||
|
|
@ -764,6 +764,10 @@ bool IPDLParamTraits<dom::MaybeDiscarded<dom::WindowContext>>::Read(
|
|||
if (id == 0) {
|
||||
*aResult = nullptr;
|
||||
} else if (RefPtr<dom::WindowContext> wc = dom::WindowContext::GetById(id)) {
|
||||
if (!wc->Group()->IsKnownForMessageReader(aReader)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
*aResult = std::move(wc);
|
||||
} else {
|
||||
aResult->SetDiscarded(id);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue