uint32_t TabContext::BrowserOwnerAppId() const { if (IsMozBrowserElement()) { return mContainingAppId; } return NO_APP_ID; }
already_AddRefed<mozIApplication> TabContext::GetBrowserOwnerApp() const { nsCOMPtr<mozIApplication> ownerApp; if (IsMozBrowserElement()) { ownerApp = mContainingApp; } return ownerApp.forget(); }
bool nsIContentParent::CanOpenBrowser(const IPCTabContext& aContext) { // (PopupIPCTabContext lets the child process prove that it has access to // the app it's trying to open.) // On e10s we also allow UnsafeTabContext to allow service workers to open // windows. This is enforced in MaybeInvalidTabContext. if (aContext.type() != IPCTabContext::TPopupIPCTabContext && aContext.type() != IPCTabContext::TUnsafeIPCTabContext) { ASSERT_UNLESS_FUZZING("Unexpected IPCTabContext type. Aborting AllocPBrowserParent."); return false; } if (aContext.type() == IPCTabContext::TPopupIPCTabContext) { const PopupIPCTabContext& popupContext = aContext.get_PopupIPCTabContext(); if (popupContext.opener().type() != PBrowserOrId::TPBrowserParent) { ASSERT_UNLESS_FUZZING("Unexpected PopupIPCTabContext type. Aborting AllocPBrowserParent."); return false; } auto opener = TabParent::GetFrom(popupContext.opener().get_PBrowserParent()); if (!opener) { ASSERT_UNLESS_FUZZING("Got null opener from child; aborting AllocPBrowserParent."); return false; } // Popup windows of isMozBrowserElement frames must be isMozBrowserElement if // the parent isMozBrowserElement. Allocating a !isMozBrowserElement frame with // same app ID would allow the content to access data it's not supposed to. if (!popupContext.isMozBrowserElement() && opener->IsMozBrowserElement()) { ASSERT_UNLESS_FUZZING("Child trying to escalate privileges! Aborting AllocPBrowserParent."); return false; } } MaybeInvalidTabContext tc(aContext); if (!tc.IsValid()) { NS_ERROR(nsPrintfCString("Child passed us an invalid TabContext. (%s) " "Aborting AllocPBrowserParent.", tc.GetInvalidReason()).get()); return false; } return true; }
bool TabContext::IsMozBrowserOrApp() const { return HasOwnApp() || IsMozBrowserElement(); }