This checkin provides a sketch of how I plan to re-implement the

NewWindowListener mechanism.  Next step will be to continue to try to
get it working.

A test/automated/src/classes/org/mozilla/webclient/WindowCreatorTest.java
A test/automated/src/test/WindowCreatorTest0.html
A test/automated/src/test/WindowCreatorTest1.html

- new test, currently fails.

M build-tests.xml

- add new test, non-running

M classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java

- prep for NewWindowListener

M src_moz/WindowCreator.cpp

- sketch implementation plan.  In WindowCreator.CreateChromeWindow2:

+        /*
+          Block this thread.
+
+          Call back into java and ask the user to create a top level
+          window and hand it, or an added child of it, to us.  Call this
+          thing the userWindow.
+
+          Create a new BrowserControl, get its BrowserControlCanvas and
+          make it be a child of the userWindow.
+
+          Set the userWindow and the BrowserControlCanvas to visible ==
+          true.  This is necessary to get the cause the underlying
+          mozilla window to be created.
+
+          java returns the C++ nativeBrowserControl to us.  Cast it to a
+          native NativeBrowserControl C++ object instance.  If the
+          nsIURI is non-null, cause the new window to navigate to that
+          URI.  Return the NativeBrowserControl's EmbedWindow instance,
+          which is an impl of nsIWebBrowserChrome.
+
+          I'm not sure if it's safe to do all this on the same thread on
+          which mozilla calls us.  I hope so.
+        */


git-svn-id: svn://10.0.0.236/trunk@167522 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
edburns%acm.org
2005-01-11 07:02:12 +00:00
parent 9e9f44f657
commit 0176a48d48
6 changed files with 247 additions and 22 deletions

View File

@@ -21,6 +21,8 @@
*/
#include "nsIWebBrowserChrome.h"
#include "nsIBaseWindow.h"
#include "nsIWebBrowser.h"
#include "WindowCreator.h"
NativeBrowserControl* gNewWindowNativeBCPtr;
@@ -85,5 +87,38 @@ WindowCreator::CreateChromeWindow2(nsIWebBrowserChrome *parent,
nsIURI *uri, PRBool *cancel,
nsIWebBrowserChrome **_retval)
{
nsCOMPtr<nsIWebBrowser> webBrowser;
parent->GetWebBrowser(getter_AddRefs(webBrowser));
nsCOMPtr<nsIBaseWindow> baseWindow(do_QueryInterface(webBrowser));
if (nsnull != baseWindow) {
/*
Block this thread.
Call back into java and ask the user to create a top level
window and hand it, or an added child of it, to us. Call this
thing the userWindow.
Create a new BrowserControl, get its BrowserControlCanvas and
make it be a child of the userWindow.
Set the userWindow and the BrowserControlCanvas to visible ==
true. This is necessary to get the cause the underlying
mozilla window to be created.
java returns the C++ nativeBrowserControl to us. Cast it to a
native NativeBrowserControl C++ object instance. If the
nsIURI is non-null, cause the new window to navigate to that
URI. Return the NativeBrowserControl's EmbedWindow instance,
which is an impl of nsIWebBrowserChrome.
I'm not sure if it's safe to do all this on the same thread on
which mozilla calls us. I hope so.
*/
printf("debug: edburns: can QI to baseWindow\n\n");
}
return NS_OK;
}