Bug 1597508: Use WidgetUtils::DOMWindowToWidget to determine native window during reopen of Firefox on macOS. r=farre

Differential Revision: https://phabricator.services.mozilla.com/D71408
This commit is contained in:
Stephen A Pohl 2020-04-21 12:31:51 +00:00
Родитель de93efb3ba
Коммит 832f0ee2ae
1 изменённых файлов: 10 добавлений и 18 удалений

Просмотреть файл

@ -15,38 +15,30 @@
#include "nsIBaseWindow.h"
#include "nsCommandLine.h"
#include "mozIDOMWindow.h"
#include "nsIDocShellTreeItem.h"
#include "nsIDocShellTreeOwner.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsIWebNavigation.h"
#include "nsIWidget.h"
#include "nsIWindowMediator.h"
#include "nsPIDOMWindow.h"
#include "WidgetUtils.h"
// This must be included last:
#include "nsObjCExceptions.h"
using mozilla::widget::WidgetUtils;
nsresult GetNativeWindowPointerFromDOMWindow(mozIDOMWindowProxy* a_window,
NSWindow** a_nativeWindow) {
*a_nativeWindow = nil;
if (!a_window) return NS_ERROR_INVALID_ARG;
nsCOMPtr<nsIWebNavigation> mruWebNav(do_GetInterface(a_window));
if (mruWebNav) {
nsCOMPtr<nsIDocShellTreeItem> mruTreeItem(do_QueryInterface(mruWebNav));
nsCOMPtr<nsIDocShellTreeOwner> mruTreeOwner = nullptr;
mruTreeItem->GetTreeOwner(getter_AddRefs(mruTreeOwner));
if (mruTreeOwner) {
nsCOMPtr<nsIBaseWindow> mruBaseWindow(do_QueryInterface(mruTreeOwner));
if (mruBaseWindow) {
nsCOMPtr<nsIWidget> mruWidget = nullptr;
mruBaseWindow->GetMainWidget(getter_AddRefs(mruWidget));
if (mruWidget) {
*a_nativeWindow = (NSWindow*)mruWidget->GetNativeData(NS_NATIVE_WINDOW);
}
}
}
nsPIDOMWindowOuter* win = nsPIDOMWindowOuter::From(a_window);
nsCOMPtr<nsIWidget> widget = WidgetUtils::DOMWindowToWidget(win);
if (!widget) {
return NS_ERROR_FAILURE;
}
*a_nativeWindow = (NSWindow*)widget->GetNativeData(NS_NATIVE_WINDOW);
return NS_OK;
}