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

Reply via email to