Hello mozillaners.
When I try to access nsIWebBrowser::GetContentWindow from my CreateBrowser()
method I get a 0x80004002 (NO_INTERFACE).
This is strange because when I do the same thing from mozembed it works
fine.
This is because the QI of mDocShell to nsIDOMWindow in GetContentWindow
fails.
NS_IMETHODIMP nsWebBrowser::GetContentDOMWindow(nsIDOMWindow **_retval)
{
NS_ENSURE_STATE(mDocShell);
nsresult rv = NS_OK;
nsCOMPtr<nsIDOMWindow> retval = do_GetInterface(mDocShell, &rv);
if (NS_FAILED(rv)) return rv; //<------ FAIL!
*_retval = retval;
NS_ADDREF(*_retval);
return rv;
}
Does anyone have an idea why this is happening?
Thank you!
PS: Following is the entire CreateBrowser() code:
nsresult GeckoApp::CreateBrowser(void* aNativeWindow, PRInt32 x, PRInt32 y,
PRInt32 width, PRInt32 height)
{
nativeWindow = aNativeWindow;
nsresult rv;
//create instance of browser window component
nsCOMPtr<nsIBaseWindow> baseWindow;
webBrowser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID, &rv);
if (NS_FAILED(rv))
{
cerr << "do_CreateInstance webBrowser\n";
}
NS_ENSURE_SUCCESS(rv,rv);
//initialize window
baseWindow = do_QueryInterface(webBrowser);
rv = baseWindow->InitWindow(nativeWindow, 0, x, y, width, height);
if (NS_FAILED(rv))
{
cerr << "InitWindow\n";
}
NS_ENSURE_SUCCESS(rv,rv);
//GeckoApp class contains also chrome functionality
chrome = nsCOMPtr<nsIWebBrowserChrome>((nsIWebBrowserChrome*)this);
chrome.get();
webBrowser->SetContainerWindow(chrome.get());
chrome->SetWebBrowser(webBrowser);
rv = baseWindow->Create();
if (NS_FAILED(rv))
{
cerr << "Create\n";
}
NS_ENSURE_SUCCESS(rv,rv);
rv = baseWindow->SetVisibility(PR_TRUE);
if (NS_FAILED(rv))
{
cerr << "SetVisibility\n";
}
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr<nsIDOMWindow> domWindow;
rv = webBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
if (NS_FAILED(rv))
cerr << "Failed to get the content DOM window." << endl;
NS_ENSURE_SUCCESS(rv,rv);
// we need the pointer to nsIWebNavigation to load data from a URI
webNavigation = do_QueryInterface(webBrowser,&rv);
NS_ENSURE_SUCCESS(rv,rv);
simpleEventListener = new DOMEventListener(this);
RegisterDOMEventListener(nsString(L"simple_event"),simpleEventListener);
// TODO: do I need this? register ourselves as the progress listener
nsCOMPtr<nsIWebProgressListener> listener = do_QueryInterface(chrome);
nsCOMPtr<nsIWeakReference> thisListener(do_GetWeakReference(listener));
nsresult res = webBrowser->AddWebBrowserListener(thisListener,
NS_GET_IID(nsIWebProgressListener));
//SetFocus(true);
return NS_OK;
}
_______________________________________________
dev-embedding mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-embedding