diff --git a/dom/ipc/BrowserParent.cpp b/dom/ipc/BrowserParent.cpp index 607c518cabdb..28a603852915 100644 --- a/dom/ipc/BrowserParent.cpp +++ b/dom/ipc/BrowserParent.cpp @@ -2379,22 +2379,11 @@ mozilla::ipc::IPCResult BrowserParent::RecvOnProgressChange( const RequestData& aRequestData, const int32_t aCurSelfProgress, const int32_t aMaxSelfProgress, const int32_t aCurTotalProgress, const int32_t aMaxTotalProgress) { - nsCOMPtr browser = - mFrameElement ? mFrameElement->AsBrowser() : nullptr; - - if (!browser) { - return IPC_OK(); - } - + nsCOMPtr browser; nsCOMPtr manager; - nsresult rv = browser->GetRemoteWebProgressManager(getter_AddRefs(manager)); - NS_ENSURE_SUCCESS(rv, IPC_OK()); - - nsCOMPtr managerAsListener = - do_QueryInterface(manager); - - if (!managerAsListener) { - // We are no longer remote, so we cannot propagate this message. + nsCOMPtr managerAsListener; + if (!GetWebProgressListener(getter_AddRefs(browser), getter_AddRefs(manager), + getter_AddRefs(managerAsListener))) { return IPC_OK(); } @@ -2414,22 +2403,11 @@ mozilla::ipc::IPCResult BrowserParent::RecvOnStatusChange( const Maybe& aWebProgressData, const RequestData& aRequestData, const nsresult aStatus, const nsString& aMessage) { - nsCOMPtr browser = - mFrameElement ? mFrameElement->AsBrowser() : nullptr; - - if (!browser) { - return IPC_OK(); - } - + nsCOMPtr browser; nsCOMPtr manager; - nsresult rv = browser->GetRemoteWebProgressManager(getter_AddRefs(manager)); - NS_ENSURE_SUCCESS(rv, IPC_OK()); - - nsCOMPtr managerAsListener = - do_QueryInterface(manager); - - if (!managerAsListener) { - // We are no longer remote, so we cannot propagate this message. + nsCOMPtr managerAsListener; + if (!GetWebProgressListener(getter_AddRefs(browser), getter_AddRefs(manager), + getter_AddRefs(managerAsListener))) { return IPC_OK(); } @@ -2447,32 +2425,57 @@ mozilla::ipc::IPCResult BrowserParent::RecvOnStatusChange( mozilla::ipc::IPCResult BrowserParent::RecvOnContentBlockingEvent( const Maybe& aWebProgressData, const RequestData& aRequestData, const uint32_t& aEvent) { - nsCOMPtr browser = - mFrameElement ? mFrameElement->AsBrowser() : nullptr; - if (browser) { - nsCOMPtr manager; - nsresult rv = browser->GetRemoteWebProgressManager(getter_AddRefs(manager)); - NS_ENSURE_SUCCESS(rv, IPC_OK()); - - nsCOMPtr managerAsListener = - do_QueryInterface(manager); - if (!managerAsListener) { - // We are no longer remote, so we cannot propagate this message. - return IPC_OK(); - } - - nsCOMPtr webProgress; - nsCOMPtr request; - ReconstructWebProgressAndRequest(manager, aWebProgressData, aRequestData, - webProgress, request); - - Unused << managerAsListener->OnContentBlockingEvent(webProgress, request, - aEvent); + nsCOMPtr browser; + nsCOMPtr manager; + nsCOMPtr managerAsListener; + if (!GetWebProgressListener(getter_AddRefs(browser), getter_AddRefs(manager), + getter_AddRefs(managerAsListener))) { + return IPC_OK(); } + nsCOMPtr webProgress; + nsCOMPtr request; + ReconstructWebProgressAndRequest(manager, aWebProgressData, aRequestData, + webProgress, request); + + Unused << managerAsListener->OnContentBlockingEvent(webProgress, request, + aEvent); + return IPC_OK(); } +bool BrowserParent::GetWebProgressListener( + nsIBrowser** aOutBrowser, nsIWebProgress** aOutManager, + nsIWebProgressListener** aOutListener) { + MOZ_ASSERT(aOutBrowser); + MOZ_ASSERT(aOutManager); + MOZ_ASSERT(aOutListener); + + nsCOMPtr browser = + mFrameElement ? mFrameElement->AsBrowser() : nullptr; + if (!browser) { + return false; + } + + nsCOMPtr manager; + nsresult rv = browser->GetRemoteWebProgressManager(getter_AddRefs(manager)); + if (NS_FAILED(rv)) { + return false; + } + + nsCOMPtr listener = do_QueryInterface(manager); + if (!listener) { + // We are no longer remote so we cannot forward this event. + return false; + } + + browser.forget(aOutBrowser); + manager.forget(aOutManager); + listener.forget(aOutListener); + + return true; +} + void BrowserParent::ReconstructWebProgressAndRequest( nsIWebProgress* aManager, const Maybe& aWebProgressData, const RequestData& aRequestData, nsCOMPtr& aOutWebProgress, diff --git a/dom/ipc/BrowserParent.h b/dom/ipc/BrowserParent.h index d93dc87891e9..0c082fc9b2af 100644 --- a/dom/ipc/BrowserParent.h +++ b/dom/ipc/BrowserParent.h @@ -284,6 +284,10 @@ class BrowserParent final : public PBrowserParent, const Maybe& aWebProgressData, const RequestData& aRequestData, const uint32_t& aEvent); + bool GetWebProgressListener(nsIBrowser** aOutBrowser, + nsIWebProgress** aOutManager, + nsIWebProgressListener** aOutListener); + void ReconstructWebProgressAndRequest( nsIWebProgress* aManager, const Maybe& aWebProgressData, const RequestData& aRequestData,