work on the dom viewer in the TestBrowser.
M webclient/classes_spec/org/mozilla/webclient/EventRegistration.java
M webclient/classes_spec/org/mozilla/webclient/EventRegistration2.java
- add javadocs.
bytes, including whitespace, that is being shown in the BrowserControl.
The source actually comes from the browser's cache, and is not
re-fetched over the network unless the browser doesn't have an entry in
the cache.
Next step is to fix up the TestBrowser to show off this feature.
A src_moz/LoadCompleteProgressListener.cpp
A src_moz/LoadCompleteProgressListener.h
* Simple nsIWebProgressListener that offers a "loadComplete" property
* that can be queried to determine if the load has completed.
A test/manual/src/classes/org/mozilla/webclient/test/DOMAccessPanel.java
A test/manual/src/classes/org/mozilla/webclient/test/DOMCellRenderer.java
A test/manual/src/classes/org/mozilla/webclient/test/DOMTreeDumper.java
A test/manual/src/classes/org/mozilla/webclient/test/DOMTreeModel.java
A test/manual/src/classes/org/mozilla/webclient/test/DOMTreeNotifier.java
A test/manual/src/classes/org/mozilla/webclient/test/DOMViewerFrame.java
- move over from Old test browser. Produces some thread issues.
M src_moz/CurrentPageImpl.cpp
- Leverage LoadCompleteProgressListener to discover when it's safe to
call "selectAll" on the window.
M src_moz/Makefile.in
- add LoadCompleteProgressListener
M test/automated/src/classes/org/mozilla/webclient/CurrentPageTest.java
- re-enable GetSource test
M test/automated/src/test/ViewSourceTest.html
- re-edit for ease of comparison in CurrentPageTest
M test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java
- Hack: viewSource button. A menu would be better.
problem is that selectAll isn't working due to the window not being
realized. We'll see. Next step is to get it working!
M classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java
- rewrite getSource() to call native code, instead of using the DOM.
M src_moz/CurrentPageImpl.cpp
- re-enable nativeGetSource().
M src_moz/EmbedWindow.cpp
M src_moz/EmbedWindow.h
- fill out dtor
- add InitNoChrome.
M test/automated/src/classes/org/mozilla/webclient/CurrentPageTest.java
- comment out test
classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java src_moz/CurrentPageImpl.cpp src_moz/EmbedWindow.cpp src_moz/EmbedWindow.h test/automated/src/classes/org/mozilla/webclient/CurrentPageTest.java
the whitespace formatting of the current page, which is a big problem.
Next step is to get the DOMViewer working with the TestBrowser.
M build.xml
- exclude test from the default build
A classes_spec/org/mozilla/webclient/impl/DOMTreeDumper.java
- Copy this over from test.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java
- leverage DOMTreeDumper to print the current source.
M test/automated/src/classes/org/mozilla/webclient/CurrentPageTest.java
A test/automated/src/test/ViewSourceTest.html
- exercise new methods.
This change-bundle implements the FULL proposal for this, as well as
covering some corner-cases not in the initial proposal.
I have yet to get the last stamp of approval from the EG, but I'm
confident we'll get it, so I'm checking it in now.
r=visvan.
SECTION: API Changes
M jsf-api/src/javax/faces/application/StateManager.java
- reword the class description for readability
- saveSerializedView
Deprecate this. Make it no-longer abstract. Provide default impl
that returns null.
- saveView
new method. Replaces saveSerializedView. Provide default impl that
calls through to saveSerializedView().
- writeState that takes Object
new method. Provide default impl:
+ * <p>For backwards compatability with existing
+ * <code>StateManager</code> implementations, the default
+ * implementation of this method checks if the argument is an
+ * instance of <code>Object []</code> of length greater than or
+ * equal to two. If so, it creates a <code>SerializedView</code>
+ * instance with the tree structure coming frome element zero and
+ * the component state coming from element one and calls through to
+ * {@link
+ * #writeState(javax.faces.context.FacesContext,javax.faces.application.StateManager.SerializedView}.
+ * If not, does nothing.</p>
- getTreeStructureToSave
- getComponentStateToSave
- restoreTreeStructure
- restoreComponentState
Deprecate these. Provide default impl that returns null or no-ops.
- SerializedView
Deprecate this.
M jsf-api/src/javax/faces/application/StateManagerWrapper.java
- add new methods.
M jsf-api/src/javax/faces/render/ResponseStateManager.java
- writeState that takes Object
new method.
+ * <p>For backwards compatability with existing
+ * <code>ResponseStateManager</code> implementations, the default
+ * implementation of this method checks if the argument is an
+ * instance of <code>SerializedView</code>. If so, it calls through
+ * to {@link
+ * #writeState(javax.faces.context.FacesContext,javax.faces.application.StateManager.SerializedView}.
+ * If not, does nothing.</p>
- writeState that takes SerializedView
+ * @deprecated This method has been replaced by {@link
+ * #writeState(javax.faces.context.FacesContext,java.lang.Object)}.
+ * The default implementation of this method does nothing.
+ *
- getState
new method.
- getTreeStructureToRestore
- getComponentStateToRestore
Deprecate these. Provide default impl that returns null or no-ops.
SECTION: RI Changes
M jsf-ri/src/com/sun/faces/application/StateManagerImpl.java
Provide implementations for deprecated methods that will be called by
the default implementations of the new methods in StateManager.
- saveSerializedView(): no functional change since last version
M jsf-ri/src/com/sun/faces/application/ViewHandlerImpl.java
- move the responsibility for doing the redirect to createView() from
renderView(), since it was only designed to catch the initial request.
M jsf-ri/src/com/sun/faces/lifecycle/RestoreViewPhase.java
- introduce private isPostback() method.
+ * @return true if the request method is POST or PUT, or the method
+ * is GET but there are query parameters, or the request is not an
+ * instance of HttpServletRequest.
Only call restoreView() if isPostback(), otherwise call createView().
M jsf-ri/src/com/sun/faces/renderkit/ResponseStateManagerImpl.java
- modify getTreeStructureToRestore() so it knows the value of the hidden
field is only a string, not a base64 encoded object tree, if the
stateSavingMethod is server.
- modify writeState() to not encode the view if we're saving state in
the server, just write out the id.
- remove unused replaceMarkers method.
M jsf-ri/src/com/sun/faces/taglib/jsf_core/ViewTag.java
- leverage new APIs and rely on impl to delegate to deprecated APIs for
backwards compatability.
M jsf-ri/systest/build-tests.xml
M jsf-ri/systest/src/com/sun/faces/htmlunit/AbstractTestCase.java
M jsf-ri/systest/src/com/sun/faces/jsptest/JspIntegrationTestCase.java
M jsf-ri/test/com/sun/faces/FacesTestCaseService.java
M jsf-ri/test/com/sun/faces/lifecycle/TestApplyRequestValuesPhase.java
M jsf-ri/test/com/sun/faces/lifecycle/TestLifecycleImpl_initial.java
M jsf-ri/test/com/sun/faces/lifecycle/TestPhase.java
M jsf-ri/test/com/sun/faces/lifecycle/TestProcessValidationsPhase.java
M jsf-ri/test/com/sun/faces/lifecycle/TestRestoreViewPhase.java
M jsf-ri/web/test/RenderResponse_correct
M jsf-ri/web/test/TestLifecycleImpl_initial_correct
M jsf-ri/web/test/TestViewHandlerImpl_correct
- Oof, mondo changes here.
haven't been touched since 1998!
A dom/classes/org/mozilla/dom/package.html
A dom/classes/org/mozilla/dom/util/package.html
A util/classes/org/mozilla/util/package.html
A webclient/classes_spec/org/mozilla/webclient/overview.html
A webclient/classes_spec/org/mozilla/webclient/package.html
M dist/build.xml
M util/classes/org/mozilla/util/Debug.java
M util/classes/org/mozilla/util/Log.java
M util/classes/org/mozilla/util/Range.java
M util/classes/org/mozilla/util/Utilities.java
M webclient/classes_spec/org/mozilla/webclient/BrowserControl.java
M webclient/classes_spec/org/mozilla/webclient/BrowserControlFactory.java
M webclient/classes_spec/org/mozilla/webclient/ImplObject.java
M webclient/classes_spec/org/mozilla/webclient/Navigation2.java
M webclient/classes_spec/org/mozilla/webclient/WebclientFactory.java
M dom/classes/org/mozilla/dom/events/MouseEventImpl.java
- Changes to allow generation of javadocs from full tree.
haven't been touched since 1998!
A dom/classes/org/mozilla/dom/package.html
A dom/classes/org/mozilla/dom/util/package.html
A util/classes/org/mozilla/util/package.html
A webclient/classes_spec/org/mozilla/webclient/overview.html
A webclient/classes_spec/org/mozilla/webclient/package.html
M dist/build.xml
M util/classes/org/mozilla/util/Debug.java
M util/classes/org/mozilla/util/Log.java
M util/classes/org/mozilla/util/Range.java
M util/classes/org/mozilla/util/Utilities.java
M webclient/classes_spec/org/mozilla/webclient/BrowserControl.java
M webclient/classes_spec/org/mozilla/webclient/BrowserControlFactory.java
M webclient/classes_spec/org/mozilla/webclient/ImplObject.java
M webclient/classes_spec/org/mozilla/webclient/Navigation2.java
M webclient/classes_spec/org/mozilla/webclient/WebclientFactory.java
- Start refresh of javadocs
M src_moz/EmbedProgress.cpp
- remove PageInfoListener meta-data from END_DOCUMENT_LOAD. Didn't
belong there.
M test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java
- print out the request method and response code.
of a URL_LOAD event. I'm still working on getting the request body via
the nsIUploadChannel interface. Next step will be to get that working.
I'm currently running into problems where the END_URL event for a POST
doesn't have a status. I think this is because I'm using the
Navigation.post() method rather than simulating a user post by pressing
a form submit button.
A classes_spec/org/mozilla/webclient/impl/wrapper_native/NativeInputStream.java
A src_moz/NativeInputStreamImpl.cpp
- Class to enable reading the post body from the request.
M build.xml
- add NativeInputStream to JNI generation
M classes_spec/org/mozilla/webclient/PageInfoListener.java
* <p>This {@link DocumentLoadListener} subclass adds the ability to get
* detailed information on each event. </p>
*
* <p>The <code>eventData</code> property of the
* <code>DocumentLoadEvent</code> instance will be a
* <code>java.util.Map</code>. The following entries may be present in
* this map for the following <code>*_EVENT_MASK</code> types in
* <code>DocumentLoadEvent</code>.</p>
*
* <dl>
*
* <dt>For all <code>*_EVENT_MASK</code> types</dt>
*
* <dd><p>the map will contain an entry under the key "<code>URI</code>"
* without the quotes. This will be the fully qualified URI for the
* event. </p></dd>
*
* <dt>For <code>START_URL_LOAD</code> type</dt>
*
* <dd><p>The map will contain an entry under the key
* "<code>method</code>" without the quotes. This will be the request
* method for this event. The map will also contain an entry under the
* key "<code>headers</code>". This entry will be a
* <code>java.util.Map</code> of all the request headers.</p></dd>
*
* <dt>For <code>END_URL_LOAD</code> type</dt>
*
* <dd><p>The map will contain an entry under the key
* "<code>method</code>" without the quotes. This will be the request
* method for this event. The map will contain an entry under the key
* "<code>status</code>" without the quotes. This will be the response
* status string from the server, such as "<code>200 OK</code>". The
* map will also contain an entry under the key "<code>headers</code>".
* This entry will be a <code>java.util.Map</code> of all the response
* headers.</p></dd>
*
* </dl>
M src_moz/EmbedProgress.cpp
- leverage nsIHttpChannel methods to get request method, response
status, and post body.
M src_moz/Makefile.in
- add NativeInputStream
M src_share/jni_util.cpp
M src_share/jni_util.h
- new constants
- add variant of ThrowExceptionToJava that takes the exception class name.
M test/automated/src/classes/org/mozilla/webclient/DocumentLoadListenerTest.java
- new test content. Post related content commented out.
Next step is to take a step back and see what's best to do next!
M classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java
- call through to print related methods
M src_moz/CurrentPageImpl.cpp
- Copy from CurrentPageActionEvents.cpp
M test/automated/src/classes/org/mozilla/webclient/CurrentPageTest.java
- add test stub for print preview.
will work.
A test/automated/src/test/DOMSelectionTest.html
- test CurrentPage.highlightSelection and clearAllSelections().
M classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java
- send all native methods through the event thread
M classes_spec/org/mozilla/webclient/impl/wrapper_native/SelectionImpl.java
- never return null from toString(). Return "" instead.
M src_moz/CurrentPageImpl.cpp
- copy from CurrentPageActionEvents.cpp
M test/automated/src/classes/org/mozilla/webclient/CurrentPageTest.java
M test/automated/src/classes/org/mozilla/webclient/DOMTest.java
- new test conent
find command.
Next step will be to add more tests.
M classes_spec/org/mozilla/webclient/CurrentPage2.java
- add find and findNext methods which return boolean.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java
- implement these methods
M src_moz/CurrentPageImpl.cpp
- change native methods to accomodate
M test/automated/src/classes/org/mozilla/webclient/CurrentPageTest.java
- minimal test of new content.
to provide a way to return result of the find, by defining methods on
the CurrentPage2 interface.
A test/automated/src/test/FindTest0.html
- fodder for find
M src_moz/CurrentPageImpl.cpp
- copy content from CurrentPageActionEvents
M test/automated/src/classes/org/mozilla/webclient/CurrentPageTest.java
- basic test. Needs more robustness.
CurrentPage.copyCurrentSelectionToSystemClipboard() and provides a unit
test for it.
Next step is getCurrentURL.
A test/automated/src/classes/org/mozilla/webclient/CurrentPageTest.java
- new test suite for CurrentPage. Currently only has
testCopyCurrentSelectionToSystemClipboard().
M build-tests.xml
- add CurrentPage TestSuite with one test.
M src_moz/CurrentPageImpl.cpp
- re-implement nativeCopyCurrentSelectionToSystemClipboard()
<http://lxr.mozilla.org/mozilla/source/java/webclient/test/automated/src/classes/org/mozilla/webclient/DOMTest.java>
for a trivial usage example.
Next step is to continue to flesh out CurrentPage methods.
Ed
A test/automated/src/classes/org/mozilla/webclient/DOMTest.java
- show basic DOM functionality
M build-tests.xml
- Add new DOM test
M src_moz/CurrentPageImpl.cpp
- re-expose DOM functionality
M test/automated/src/test/HistoryTest0.html
- Add an ID to the anchor so we can do getElementById() on it.
re-implemented using the new event model. It's a bit cleaner.
Next step is to uncomment the selection check at the end of
WindowCreatorTest.java. This code currently causes the VM to crash. I
also plan to do some testing on the chrome flags.
M classes_spec/org/mozilla/webclient/EventRegistration2.java
- deprecate {add,remove}NewWindowListener(), replace with
setNewWindowListener().
M classes_spec/org/mozilla/webclient/NewWindowEvent.java
- added BrowserControl property, which the user sets into the event.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java
- change newWindowListeners List ivar to newWindowListener ivar.
- fix {add,remove}NewWindowListener() to leverage setNewWindowListener()
- change nativeEventOccurred() to return an int instead of void.
- add boolean property nativeSetNewWindowListenerAttached()
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NativeEventThread.java
- modify pushBlockingWCRunnable() to execute the runnable right away if
we're already on the NativeEventThread. This is necessary to allow
re-entrancy.
M src_moz/EmbedEventListener.cpp
M src_moz/EmbedEventListener.h
- expose the mEventRegistration ivar via a getter.
M src_moz/EventRegistrationImpl.cpp
M src_moz/NativeBrowserControl.cpp
M src_moz/NativeBrowserControl.h
- add nativeSetNewWindowListenerAttached(), which calls through and sets
it on the NativeBrowserControl.
M src_moz/WindowCreator.cpp
- implement CreateChromeWindow2, which is called when the browser needs
a new window.
M src_share/jni_util.cpp
M src_share/jni_util.h
- change util_SendEventToJava() to return int.
M test/automated/src/classes/org/mozilla/webclient/WindowCreatorTest.java
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.
+ */
between mozilla concepts and java concepts wrong before. The correct
mapping is:
Mozilla concept Java concept
KeyDown keyPressed
KeyUp keyReleased
KeyPress keyTyped
KeyCode keyCode
CharCode keyChar
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java
- Force the keyCode to be VK_UNDEFINED if this is a KEY_TYPED event.
- For security, log any exceptions thrown during ctor of KeyEvent.
M webclient/src_moz/EmbedEventListener.cpp
- remove unused automatic vars.
M webclient/src_moz/NavigationImpl.cpp
- roll back change done by Brian Ryner, since it doesn't make sense
under mozilla 1.7.
M webclient/src_share/jni_util.cpp
- reverse mapping of CHAR_CODE and KEY_CODE to their java counterparts.
M webclient/test/automated/src/classes/org/mozilla/webclient/KeyListenerTest.java
- Add in some code to make it easier to run this testcase in a manual
fashion.
A webclient/test/automated/src/classes/org/mozilla/webclient/KeyListenerTest.java
A webclient/test/automated/src/test/KeyListenerTest1.html
M webclient/build-tests.xml
- add new testcase
M webclient/classes_spec/org/mozilla/webclient/BrowserControlCanvas.java
M webclient/classes_spec/org/mozilla/webclient/EventRegistration2.java
- allow KeyListeners to be added and removed.
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java
- Lazily create listener lists.
- Change the contract of queueEvent() to discard null events silently.
- Add createKeyEvent() method.
M webclient/src_moz/EmbedEventListener.cpp
- new mask names and values, DOMDOMKeyListener_maskNames,
DOMKeyListener_maskValues.
- flesh out Key*() events.
- add addKeyEventDataToProperties.
- use eventType to discern how to populate the properties, with either key or
mouse data.
M webclient/src_moz/EmbedEventListener.h
- key event includes and support methods.
M webclient/src_moz/EmbedProgress.cpp
- honor new last argument to util_InitializeEventMaskValuesFromClass().
M webclient/src_share/jni_util.cpp
M webclient/src_share/jni_util.h
- new constants
+jobject CHAR_CODE;
+jobject KEY_CODE;
+jstring KEY_LISTENER_CLASSNAME;
+char *DOMKeyListener_maskNames[] = {
M webclient/src_share/jni_util_export.cpp
M webclient/src_share/jni_util_export.h
- new last argument to
util_InitializeEventMaskValuesFromClass(const char *className,
char *maskNames[],
- jlong maskValues[])
+ jlong maskValuesLong[],
+ jint maskValuesInt[])
Used when the maskValues are ints, otherwise null.
keyboard controls on the embedded browser. Next step is to re-activate
the keyboard listener features.
M webclient/src_moz/EmbedProgress.cpp
- call TopLevelFocusIn to make sure we get the input focus
M webclient/src_moz/NativeBrowserControl.cpp
M webclient/src_moz/NativeBrowserControl.h
- copy TopLevelFocus{In,Out}() from EmbedPrivate.
run webclient at the same time mozilla was running. It does this by
introducing a new startup command, which must be called before the first
call to BrowserControlFactory.setAppData(), like this:
BrowserControlFactory.setProfile(startupProfile);
BrowserControlFactory.setAppData(getBrowserBinDir());
This will cause the startupProfile to be created (if necessary) and used
as webclient's mozilla profile. If not specified, a "webclient" profile
is created and used. This profile sticks around on your system.
SECTION: CHANGES
M classes_spec/org/mozilla/webclient/BrowserControlFactory.java
M classes_spec/org/mozilla/webclient/WebclientFactory.java
M classes_spec/org/mozilla/webclient/impl/WebclientFactoryImpl.java
- add setProfile().
M classes_spec/org/mozilla/webclient/impl/WrapperFactory.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImpl.java
- add setProfile() and getProfile().
M classes_spec/org/mozilla/webclient/impl/wrapper_native/ProfileManagerImpl.java
- pass the wrapperFactory's profile property to the nativeStartup().
M src_moz/ProfileManagerImpl.cpp
- logic to implement above changes
M test/automated/src/classes/org/mozilla/webclient/ProfileManagerTest.java
- test that the startupProfile feature works.
MouseListenerTest. Next step will be to solve the problem where you
can't type in text fields in forms, then to implement the key listener
functionality.
M webclient/test/automated/src/classes/org/mozilla/webclient/MouseListenerTest.java
- at least make sure that all the events do occcur
MouseListener to the EventRegistration or BrowserControlCanvas and be
notified of events on the browser canvas. You can snoop for onMouseOver
information such as links. Next step is to cvs remove unused classes
relating to mouse events, for example WCMouseListenerImpl and
WCEventListenerWrapper.
A webclient/test/automated/src/classes/org/mozilla/webclient/MouseListenerTest.java
- exercise mouseListener added to BrowserControlCanvas and to
EventRegistration.
M webclient/build-tests.xml
- hook up new test
M webclient/classes_spec/org/mozilla/webclient/BrowserControlCanvas.java
- enable adding the MouseListener from here.
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java
- absorb the functionality of WCMouseListenerImpl. Also need to remove
WCEventListenerWrapper.
- deal with MouseEvents.
- refactor BrowserToJavaEventPump.run() to handle mouse listeners
M webclient/src_moz/EmbedEventListener.cpp
M webclient/src_moz/EmbedEventListener.h
- absorb functionality from CBrowserContainer relating to mouse events.
M webclient/src_moz/NativeBrowserControl.cpp
- set the EventRegistration into the EmbedEventListener instance.
M webclient/test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java
- add mouseover url updating to status bar.
behavior. Next step is to enable the java side in test-first design
fashion.
A webclient/src_moz/EmbedEventListener.cpp
A webclient/src_moz/EmbedEventListener.h
- carried over directly from GtkMozEmbed, minus GTK code.
M webclient/src_moz/EmbedProgress.cpp
- call to NativeBrowserControl::ContentStateChange() to hook up listeners.
M webclient/src_moz/Makefile.in
- add new EmbedEventListener.cpp file
M webclient/src_moz/NativeBrowserControl.cpp
M webclient/src_moz/NativeBrowserControl.h
- new methods for hooking up listeners.
but I wanted it for completeness with respect to response header
sniffing.
M webclient/src_moz/EmbedProgress.cpp
- visit request headers on startUrlLoad.
M webclient/test/automated/src/classes/org/mozilla/webclient/DocumentLoadListenerTest.java
M webclient/test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java
- exercise new code.
M dist/webclient-dist.xml
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImpl.java
- rollback 2.0 alpha b changes. Thanks to Annie Lau.
The Preferences unit test currently fails, but the test browser runs.
Next step is to make all the unit tests run, then produce the source and
binary distribution for 2.0 alpha 2.
M dom/jni/javaDOMEventsGlobals.cpp
- use nsString.get() instead of nsString.GetBufferHandle()
M webclient/src_moz/NavigationActionEvents.cpp
- don't use ctor initializer for nsString
M webclient/src_moz/ns_util.cpp
- nsString2.h is gone.
distribution of webclient.
Next step is to get mozilla 1.7 building on my machine, then get
webclient to compile with it, then do a 2.0a2 release.
M build.xml
- incorporate re-added dist directory
A dist/build.xml
- create a binary distribution
A dist/webclient-dist.xml
- build.xml file for the test browser in the distribution
I have changed the usage contract of the DocumentLoadListener slightly.
Prior to this checkin, calling getEventData() on the DocumentLoadEvent
passed in to your eventDispatched() method returned the URI to which the
event applies.
Now the getEventData() returns a Map. You must look up the "URI" key to
find the URI to which the event applies. If your listener is an
instance of PageInfoListener, and your event mask is
END_URL_LOAD_EVENT_MASK, your Map will have an additional entry under
the key "headers". This entry is another Map representing the response
headers.
DocumentLoadListener:
* <p>The <code>eventDispatched()</code> method is passed a {@link
* DocumentLoadEvent} instance. The <code>type</code> property of the
* event will be one of the types defined as a <code>public static final
* int</code> in <code>DocumentLoadEvent</code>.</p>
*
* <p>The <code>eventData</code> property of the
* <code>DocumentLoadEvent</code> instance will be a
* <code>java.util.Map</code>. For all <code>EVENT_MASK</code> types in
* <code>DocumentLoadEvent</code> the map will contain an entry under
* the key "<code>URI</code>" without the quotes. This will be the
* fully qualified URI for the event.</p>
*
* <p>For the <code>PROGRESS_URL_LOAD_EVENT_MASK</code> there will be an
* entry in the map for the key "<code>message</code>". This will be
* the progress message from the browser.</p>
PageInfoListener:
* <p>This {@link DocumentLoadListener} subclass adds the ability to get
* detailed information on each event. </p>
*
* <p>The <code>eventDispatched()</code> method is passed the same thing
* as in the {@link DocumentLoadListener}.</p>
*
* <p>The <code>eventData</code> property of the
* <code>DocumentLoadEvent</code> instance will be a
* <code>java.util.Map</code>. For the
* <code>END_URL_LOAD_EVENT_MASK</code> type in
* <code>DocumentLoadEvent</code> the map will contain an entry under
* the key "<code>URI</code>" without the quotes. This will be the
* fully qualified URI for the event. The map will also contain an
* entry under the key "<code>headers</code>". This entry will be a
* <code>Map</code> of all the response headers.</p>
The next step will be to allow the same procedure to work to discover
the request headers.
Ed
A classes_spec/org/mozilla/webclient/PageInfoListener.java
- marker class for listenening for high fidelity page information.
A src_moz/EventRegistrationImpl.cpp
- add boolean property, capturePageInfo to turn on or off high fidelity
page information collection.
M build-tests.xml
- add new test, DocumentLoadListenerTest
M build.xml
- added new JNI class, EventRegistrationImpl
M classes_spec/org/mozilla/webclient/CurrentPage2.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java
- rollback previous API for headers discovery
M classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java
- pass thru the capturePageInfo property
- add URIToStringMap, currently not working.
M classes_spec/org/mozilla/webclient/test/EMWindow.java
- call toString() on the eventData, don't cast it to a String.
M src_moz/EmbedProgress.cpp
M src_moz/EmbedProgress.h
- leverage the nsIHttpHeaderVisitor interface to discover the response
headers.
- add boolean property capturePageInfo
A src_moz/HttpHeaderVisitorImpl.cpp
A src_moz/HttpHeaderVisitorImpl.h
- copy the headers to a Properties object.
M src_moz/Makefile.in
- compile two new files:
+ EventRegistrationImpl.cpp \
+ HttpHeaderVisitorImpl.cpp \
M src_moz/NativeBrowserControl.cpp
M src_moz/NativeBrowserControl.h
- pass the NativeWrapperFactory to our Init() method
- add wrapperFactory getter.
M src_moz/WrapperFactoryImpl.cpp
- pass the nativeWrapperFactory to the NativeBrowserControl's Init method.
M src_share/jni_util.cpp
M src_share/jni_util.h
- new constants: URI, headers
R test/automated/src/classes/org/mozilla/webclient/CurrentPageTest.java
- not yet time for this one
A test/automated/src/classes/org/mozilla/webclient/DocumentLoadListenerTest.java
- exercise bare minimum functionality of PageInfoListener
M test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java
- print out headers.
Currently, I'm trying to discover what is the best way to expose this
API in documents that include frames.
I think I'll need more than those two new methods on CurrentPage2. I'll
probably have some way to get a list of all URLs that comprise the
frameset, including nested framesets. It's true that you could use the
DOM to derive this, but that's very complicated. I need something more
lightweight. In the meantime, I'll check in what I have.
M build-tests.xml
- add commented out CurrentPageTest
M build.xml
- add clean.test target
M classes_spec/org/mozilla/webclient/CurrentPage2.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java
- new methods and no-op impls, so test-first test fails.
+ public Map getRequestHeaders();
+
+ public Map getResponseHeaders();
M classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java
- swallow exceptions thrown by listeners.
M src_moz/EmbedProgress.cpp
- test for existence of httpChannel, so we can visit the headers
M test/automated/src/classes/org/mozilla/util/THTTPD.java
- return a "Server: " header that I can test in the testcase.
M test/automated/src/classes/org/mozilla/webclient/DocumentLoadListenerImpl.java
- add doStartCheck() method.
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
M test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java
- push THTTPD stuff to superclass.
A test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- new testcase, fails.
M dom/jni/org_mozilla_dom_NodeImpl.cpp
- code around the absence of LowerCaseEqualsLiteral in nsTAString.h.
I'm surprised the unit tests worked for me all aloung though.
M webclient/build.xml
- make run.test.browser depend on "main"
M webclient/src_moz/EmbedProgress.cpp
- deal with null URL passed to ::OnStateChange
M webclient/src_moz/HistoryImpl.cpp
- Don't cast to PRBool* when you don't need to.
M webclient/test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java
- don't swallow the exception from setAppData().
WebBrowser
<https://jdic.dev.java.net/nonav/documentation/javadoc/jdic/org/jdesktop/jdic/browser/WebBrowser.html>, with the following exceptions:
- we're based on mozilla 1.6
- it only works on windows
- we don't have mouse event support
- we only support mozilla, not IE
So, webclient still has a ways to go until we reach its former glory,
but reach it we will.
I'm going to assemble a 2.0 alpha 1 source code only release, including
build instructions, from what we have now.
I'd love it if someone could get the unit tests working on GNU/Linux
again. I think the problem has to do with our old friend GDKSUPERWIN.
Next step is to assemble the 2.0 alpha 1 source code release!
Ed
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java
M webclient/src_moz/NavigationImpl.cpp
- re-enable POST
M webclient/src_moz/EmbedWindow.cpp
M webclient/src_moz/EmbedWindow.h
- expose DocShell post method.
M webclient/test/automated/src/classes/org/mozilla/util/THTTPD.java
M webclient/test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- test code for POST
WebBrowser
<https://jdic.dev.java.net/nonav/documentation/javadoc/jdic/org/jdesktop/jdic/browser/WebBrowser.html>, with the following exceptions:
- we're based on mozilla 1.6
- it only works on windows
- we don't have mouse event support
- we only support mozilla, not IE
So, webclient still has a ways to go until we reach its former glory.
However, I'm going to get together a 2.0 alpha release, including build
instructions, from what we have now.
I'd love it if someone could get the unit tests working on GNU/Linux
again. I think the problem has to do with our old friend GDKSUPERWIN.
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java
M webclient/src_moz/NavigationImpl.cpp
- re-enable POST
M webclient/src_moz/EmbedWindow.cpp
M webclient/src_moz/EmbedWindow.h
- expose DocShell post method.
M webclient/test/automated/src/classes/org/mozilla/util/THTTPD.java
M webclient/test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- test code for POST
A test/automated/src/classes/org/mozilla/webclient/DocumentLoadListenerImpl.java
- Forgot to add this.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/HistoryImpl.java
M src_moz/HistoryImpl.cpp
- push through can{back,forward}(), forward().
M test/automated/src/classes/org/mozilla/webclient/HistoryTest.java
- exercise new methods.
A test/automated/src/classes/org/mozilla/webclient/DocumentLoadListenerImpl.java
A test/automated/src/classes/org/mozilla/webclient/HistoryTest.java
A test/automated/src/test/HistoryTest0.html
A test/automated/src/test/HistoryTest1.html
A test/automated/src/test/HistoryTest2.html
A test/automated/src/test/HistoryTest3.html
- new test content.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/HistoryImpl.java
M src_moz/HistoryImpl.cpp
- expose back() method
M src_moz/Makefile.in
M test/automated/src/classes/org/mozilla/util/THTTPD.java
- added way for the server to return the content type of the document
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- pulled out DocumentLoadListener into a separate class.
back.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java
M src_moz/NavigationImpl.cpp
- push thru "refresh" behavior.
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- move test HTTPD server out so it can be used by all tests in suite.
M test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java
- make getBrowserBinDir() static.
expected.
M src_moz/Makefile.in
- added WindowWatcher to compilation
M src_moz/NativeBrowserControl.cpp
- turn on our WindowWatcher. Still need to flesh this out, but it
seemed to be necessary for http to work.
M src_moz/WindowCreator.cpp
M src_moz/WindowCreator.h
- return to compilation
M src_moz/WrapperFactoryImpl.cpp
- hack to workaround bug posted to n.p.m.e by me today regarding
nsIOService::SetOffline(TRUE) being called. The workaround is to
manually call nsIOService::SetOffline(FALSE) *after* the point in time
where the "TRUE" call is made.
M test/automated/src/classes/org/mozilla/util/THTTPD.java
- tweaks to make this suitable for JUnit testing.
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- all navigation tests work.
know, I find that selection doesn't work. Hmm. Well, let's hear it for
test first.
Naturally, the next step is to fix the new NavigationTest.testHttpLoad().
A test/automated/src/test/HttpNavigationTest.txt
- data file for testHttpLoad().
A test/automated/src/classes/org/mozilla/util/THTTPD.java
- trivial HTTP server that suits my needs.
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- added commented out testHttpLoad(). It breaks.
M test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java
- remove emacs mode line.
I'm working towards getting equivalent functionality to
<https://jdic.dev.java.net/nonav/documentation/javadoc/jdic/org/jdesktop/jdic/browser/WebBrowser.html>
working by JavaOne SF 2004. At this point, all that remains are
refresh(), back(), forward(), and post(). All but post() are trivial.
M classes_spec/org/mozilla/webclient/Navigation2.java
- remove "blocking" methods since we don't need them now that we have
DocumentLoadListener working again.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java
- remove "blocking" methods since we don't need them now that we have
DocumentLoadListener working again.
- implement stop().
M classes_spec/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImpl.java
- throw IllegalStateException if you try to get a BrowserControl
instance after appTerminate() has been called.
- throw IllegalStateException if appTerminate() is called more than
once.
M src_moz/NavigationImpl.cpp
- call through to stop
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- test first test for stop.
file:/// and LoadFromStream cases. There were some problems:
1. RandomHTMLInputStream was never returning -1 from available, even
when there was no more data to be read.
2. the available ivars in InputStreamShim were PRUint32, and needed to
be PRInt32 to accomodate the -1.
3. InputStreamShim wasn't looking for the -1 from java, and it was
incorrectly returning NS_ERROR_NOT_AVAILABLE in that case, when it
should have been returning NS_OK if there was more data for Mozilla.
4. The testcase had a deadlock: it tried to remove the
DocumentLoadListener from the DocumentLoadListener callback. I had
to move this outside of the listener callback.
M src_moz/InputStreamShim.cpp
M src_moz/InputStreamShim.h
- make available be a signed int.
- correctly handle the case when java says, "no more data available".
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- avoid deadlock by moving the call to removeDocumentLoadListener()
outside of the listener itself.
M test/automated/src/classes/org/mozilla/webclient/RandomHTMLInputStream.java
- make sure to return -1 from available() when we have no more data.
- Major enhancement of this class. Framework for all
WebclientEventListener subclasses now in place. This includes a
separate Theard event queue to send events from mozilla to java so
that the listener can call back into webclient without fear of
deadlock. I had to use semaphores! Thank you Michael Faiman
<http://www.cs.uiuc.edu/people/faculty/faiman2.html> who taught my
operating systems class where I learned semaphores.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NativeEventThread.java
- use notifyAll() instead of notify, for best practice.
M src_moz/EmbedProgress.cpp
- flesh out rest of DocumentLoadListener code.
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- comment out code because I can't seem to get the END_DOCUMENT_LOAD
event to come from mozilla on the LoadFromStream case. Top men are
working on it.
Next step is to uncomment the rest of NavigationTest.
the DocumentLoadListener events will be trivial.
Next step: flesh out the rest of the DocumentLoadListener events.
Modify NavigationTest so that it does its selection checking inside the
listeners. This will probably require creating a Thread, managed by
EventRegistrationImpl, that is used to process callbacks from mozilla
into Java, so that we don't get deadlock.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java
- remove all dependencies on NativeEventThread
- introduce dependency on BrowserControlCanvas (needed for future
MouseListener) work.
- {add,remove}DocumentLoadListener() now just a matter of
adding/removing to List.
- add nativeEventOccurred() method, called from native code
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NativeEventThread.java
- remove dependency on BrowserControlCanvas
- removed nativeEventOccurred
M src_moz/EmbedProgress.cpp
- delete the global ref in the dtor.
- create the global ref in SetEventRegistration().
- call back to Java on startDocumentLoad.
M src_moz/NativeBrowserControl.cpp
- initialize our string constants.
M src_share/jni_util.cpp
M src_share/jni_util.h
- alter the signature of util_SendEventToJava
-void util_SendEventToJava(JNIEnv *yourEnv, jobject nativeEventThread,
- jobject webclientEventListener,
+void util_SendEventToJava(JNIEnv *yourEnv, jobject eventRegistrationImpl,
jstring eventListenerClassName,
jlong eventType, jobject eventData)
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- show that the DocumentLoadListener gets called.
I now have the new architecture for pumping events from mozilla back
into java. I've added a sequence diagram to
<http://www.mozilla.org/projects/blackwood/webclient/design/20040306-webclient-2_0.zargo>
and updated the private API class diagram.
The next step will be to have the EmbedProgress::On* methods call back
to EventRegistration.nativeEventOccured.
M src_moz/EmbedProgress.cpp
M src_moz/EmbedProgress.h
- make this class maintain a reference to the java EventRegistration
instance for this BrowserControl
M src_moz/NativeBrowserControl.cpp
M src_moz/NativeBrowserControl.h
- make this class maintain a reference to the java BrowserControl instance.
M src_moz/WindowControlImpl.cpp
- push the java BrowserControl to the NativeBrowserControl on Realize().
M src_moz/WrapperFactoryImpl.cpp
M src_moz/ns_globals.h
- expose gImplementedInterfaces in ns_globals.h
again. It provides the native class that implements
nsIWebProgressListener, which I've copied form gtk_moz_embed, so it's
gotta be good. The next step will be to hook this up to the java side.
A src_moz/EmbedProgress.h
A src_moz/EmbedProgress.cpp
- mostly copied from GTKMOZEMBED
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NativeEventThread.java
- remove javadoc reference to non-existing method
M src_moz/EmbedWindow.cpp
M src_moz/EmbedWindow.h
- expose AddWebBrowserListener method.
M src_moz/InputStreamShim.cpp
- make FileInputStream testcase run
M src_moz/Makefile.in
M src_moz/NativeBrowserControl.cpp
M src_moz/NativeBrowserControl.h
- add EmbedProgress
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- Make this test run
version 1.9 of InputStreamShim.cpp didn't correctly implement
QueryInterface. Fixing that allowed me to discover that the system
wants to call ::ReadSegments, so I had to implement that. Now the
RandomHTMLInputStream case works, but the garden variety FileInputStream
case does not. Since the FileInputStream case is generally easier to
debug, I'll check in what I have now and continue with this last case
tomorrow.
M src_moz/InputStreamShim.cpp
M src_moz/InputStreamShim.h
- made this correctly implement nsIAsyncInputStream.
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- comment out the FileInputStream case.
least in the case of a FileInputStream. I still can't get the
RandomHTMLInputStream to work. I'm still waiting on a response from
Darin Fisher on that one.
M build-tests.xml
- comment in all tests
M classes_spec/org/mozilla/webclient/Navigation2.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java
- add loadFromStreamBlocking, until we have DocumentLoadListener working
M src_moz/InputStreamShim.cpp
M src_moz/InputStreamShim.h
- rollback the nsIAsyncInputStream changes.
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- test from a FileInputStream
M test/automated/src/classes/org/mozilla/webclient/RandomHTMLInputStream.java
- Allow notification when read completes.
- comment in all tests
M classes_spec/org/mozilla/webclient/Navigation2.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java
- add loadFromStreamBlocking, until we have DocumentLoadListener working
M src_moz/InputStreamShim.cpp
M src_moz/InputStreamShim.h
- rollback the nsIAsyncInputStream changes.
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- test from a FileInputStream
M test/automated/src/classes/org/mozilla/webclient/RandomHTMLInputStream.java
- Allow notification when read completes.
only able to load the first burst from the RandomHTMLInputStream,
because for some reason the native stream is getting closed prematurely.
Need to investigate more.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java
- remove loadFromStreamBlocking. No point in implementing this since
the loadFromStream() impl is inherently multi-threaded.
M src_moz/EmbedWindow.cpp
M src_moz/EmbedWindow.h
- expose LoadStream() method that wraps same on nsIDocShell.
M src_moz/InputStreamShim.cpp
- Do a lock around our buffer deletion in or dtor.
M src_moz/Makefile.in
- activate nsActions and NavigationActionEvents
M src_moz/NavigationActionEvents.cpp
M src_moz/NavigationActionEvents.h
- comment out everything but wsLoadFromStreamEvent.
- fix it to work with the NativeBrowserControl.
M src_moz/NavigationImpl.cpp
- activate nativeLoadFromStream. This is the first *new* version method
to use the old native event queue.
M src_moz/ns_util.cpp
M src_moz/ns_util.h
- remove unused first arg from Post*Event methods.
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- activate loadFromStream test.
M test/automated/src/classes/org/mozilla/webclient/RandomHTMLInputStream.java
- add a randomExceptions param to the ctor to enable or disable randomly
thrown exceptions.
be to verify that loadFromStream works as expected.
M build-tests.xml
- win32 gtk stuff. I can't figure out why this file in particular gets
messed up when I move from Unix to Windows and back. Can anyone tell me
why?
M classes_spec/org/mozilla/webclient/Navigation2.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java
- added method loadURLBlocking().
M classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java
M src_moz/CurrentPageImpl.cpp
- activated selectAll() and getSelection()
M src_moz/EmbedWindow.cpp
M src_moz/EmbedWindow.h
- imbued this class with selection related methods selectAll and
getSelection()
M src_moz/Makefile.in
- activated CurrentPageImpl.cpp
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- new test content.
- rework exclusion patterns to prevent compilation of platform specific
classes
A classes_spec/org/mozilla/webclient/impl/wrapper_native/GtkBrowserControlCanvas.java
R classes_spec/org/mozilla/webclient/impl/wrapper_native/gtk/GtkBrowserControlCanvas.java
- moved GtkBrowserControlCanvas.java up one level, for access to package
private classes.
M src_moz/gtk/GtkBrowserControlCanvas.cpp
- package name changes
M test/automated/src/classes/org/mozilla/webclient/CompareFiles.java
- rework this logic to account for files that end in a different number
of ignorable conditions.
A test/automated/src/classes/org/mozilla/webclient/impl/wrapper_native/TestGtkBrowserControlCanvas.java
R test/automated/src/classes/org/mozilla/webclient/impl/wrapper_native/gtk/TestGtkBrowserControlCanvas.java
- moved this test up one level.
CurrentPage working so that I can "selectAll" the page, and verify
that the contents are loaded correctly.
Ed
M build-tests.xml
- enable all tests
M build.xml
- added compile.test passthru target
M classes_spec/org/mozilla/webclient/impl/wrapper_native/WindowControlImpl.java
- unpack the Rectangle into final ints
M src_moz/WindowControlImpl.cpp
- this was causing the deadlock: the package name was wrong. The
UnsatisfiedLinkError was not caught, and vanished into nowhere.
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- we must independently make the canvas visible. Hmm. Shouldn't it
automatically receive setVisible() when its parent is made visible?
- do cleanup
- make NavigationTest not run
M build.xml
- Move Win32BrowserControlCanvas up to parent package
M classes_spec/org/mozilla/webclient/BrowserControlCanvas.java
- You can't resize until you're initialized
- pass visibility through to native layer
M classes_spec/org/mozilla/webclient/impl/BrowserControlImpl.java
- Use WrapperFactory to create the BrowserControlCanvas impl.
A classes_spec/org/mozilla/webclient/impl/wrapper_native/Win32BrowserControlCanvas.java
- moved up from child package
M classes_spec/org/mozilla/webclient/impl/wrapper_native/WindowControlImpl.java
- use the new thread model for nativeSetBounds(), nativeRealize(),
nativeSetVisible().
M classes_spec/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImpl.java
- make this create the BrowserControlCanvas instance.
- honor the new package name for Win32BrowserControlCanvas.
R classes_spec/org/mozilla/webclient/impl/wrapper_native/win32/Win32BrowserControlCanvas.java
- moved up one level.
M src_moz/EmbedWindow.cpp
M src_moz/EmbedWindow.h
- Take size parameters to CreateWindow_
M src_moz/Makefile.in
- add WindowControlImpl.cpp
M src_moz/NativeBrowserControl.cpp
M src_moz/NativeBrowserControl.h
- add size parameters to Realize().
M src_moz/WindowControlImpl.cpp
- reactivate nativeRealize(), nativeSetVisible(), nativesetBounds(),
M src_moz/win32/Win32BrowserControlCanvas.cpp
- new package name
M test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- we have to create a Canvas to load a URL. Mozilla limitation.
M test/automated/src/classes/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImplTest.java
- remove unneeded test metdod
M classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/ImplObjectNative.java
- remove getNativeEventThread(). I've decided to expose the singleton
NativeEventThread instance via a package private class var.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/BookmarksImpl.java
- run the necessary native methods on the event thread to avoid thread
safety assertions.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NativeEventThread.java
- rename pushNotifyRunnable() to pushBlockingWCRunnable. Make it block
the caller until the argument WCRunnable has been run on the
NativeEventThread. Implement this by using wait/notify between
pushBlockingWCRunnable() and run().
- add package private NativeEventThread class variable.
- rename runnablesWithNotify ivar to blockingRunnables.
- remove the exception storage mechanism.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/PreferencesImpl.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/ProfileManagerImpl.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/RDFEnumeration.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImpl.java
- levarage NativeEventThread.instance.pushBlockingWCRunnable().
A classes_spec/org/mozilla/webclient/impl/wrapper_native/WCRunnable.java
- Just like runnable, except return Object, not void.
M src_moz/PreferencesImpl.cpp
- remove unused automatic variable.
M webclient/src_moz/EmbedWindow.cpp
M webclient/src_moz/NativeWrapperFactory.cpp
M webclient/src_moz/gtk/Makefile.in
- fixes for building under GNU/Linux
runs, but nothing else does.
As you all probably already know, all mozilla API calls have to happen
on the same thread. For webclient, this will be the NativeEventThread.
This change-bundle does many many things, here are the main ones.
These changes are in concert with the checkin I just did to the diagram
at
<http://www.mozilla.org/projects/blackwood/webclient/design/20040306-webclient-2_0.zargo>.
M classes_spec/org/mozilla/webclient/impl/WrapperFactory.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImpl.java
* <p>This class is the hub of the startup and shutdown sequence for
* Webclient. It is a singleton and owns references to other app
* singletons:</p>
*
* <ul>
* <li><p>{@link NativeEventThread}</p></li>
*
* <li><p>{@link Bookmarks}</p></li>
*
* <li><p>{@link Preferences}</p></li>
*
* <li><p>{@link ProfileManager}</p></li>
* <li><p>the native object singleton corresponding to this java
* object (if necessary)</p></li>
*
* </ul>
*
* <p>It maintains a set of {@link BrowserControlImpl} instances so that
* we may return the native pointer for each one.</p>
*
* <p>This class is responsible for creating and initializing and
* deleting {@link BrowserControlImpl} instances, as well as ensuring
* that the native counterpart is proprely maintained in kind.</p>
*
* <p>This class has a tight contract with {@link
* NativeEventThread}.</p>
- make BrowserControl creation and deletion part of this classes
responsibilities.
- introduce NativeWrapperFactory concept.
- own the one and only NativeEventThread.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NativeEventThread.java
- make this a singleton.
- remove dependencies on BrowserControl and nativeBrowserControl
* <p>This is a singleton class. All native events pass thru this class
* by virtue of the {@link #pushRunnable} or {@link pushNotifyRunnable}
* methods.</p>
- remove listener logic. This'll go into EventRegistration, where it
belongs.
A src_moz/NativeWrapperFactory.cpp
A src_moz/NativeWrapperFactory.h
- takes the place of the old WebclientContext
- is now a class
M classes_spec/org/mozilla/webclient/impl/BrowserControlImpl.java
- this no longer destroys the nativeBrowserControl. That is now done by
WrapperFactoryImpl.
M classes_spec/org/mozilla/webclient/impl/WebclientFactoryImpl.java
- no longer maintain browserControlCount.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/BookmarksImpl.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/PreferencesImpl.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/ProfileManagerImpl.java
- rename NativeContext to NativeWrapperFactory, to illustrate its
singletonness.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java
- comment out a bunch of stuff in anticipation of the new threading
model, currently being fleshed out.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/ImplObjectNative.java
- NativeEventThread is singleton
M src_moz/BookmarksImpl.cpp
M src_moz/PreferencesImpl.cpp
M src_moz/ProfileManagerImpl.cpp
M src_moz/RDFEnumeration.cpp
M src_moz/RDFTreeNode.cpp
- rename WebclientContext to NativeWrapperFactory.
M src_moz/EmbedWindow.cpp
- mBaseWindow->Destroy();
+ if (mBaseWindow) {
+ mBaseWindow->Destroy();
+ }
M src_moz/Makefile.in
- Bring back NavigationImpl
- add NativeWrapperFactory.
M src_moz/NativeBrowserControl.cpp
M src_moz/NativeBrowserControl.h
- move event queue and java related stuff to NativeWrapperFactory. This
class is now essentially a copy of EmbedPrivate in GtkEmbed.
M src_moz/NativeEventThread.cpp
- remove methods, most of it has moved to
WrapperFactoryImpl/NativeWrapperFactory.
M src_moz/NavigationImpl.cpp
- comment out all methods but LoadURI.
M src_moz/WrapperFactoryImpl.cpp
- take functionality over from NativeEventThread.
M src_moz/ns_util.cpp
M src_moz/ns_util.h
- the eventQueue is owned by NativeWrapperFactory now.
M src_moz/rdf_util.cpp
M src_share/jni_util.cpp
- make all exceptions RuntimeExceptions, so they can be thrown from a
Runnable.
M test/automated/src/classes/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImplTest.java
- comment out the meat of this test until I figure out how to test it.
M test/automated/src/test/BrowserControlFactoryTest_correct
- new content.
A src_moz/EmbedWindow.cpp
- copied from GtkEmbed, but modified for our purposes.
M src_moz/Makefile.in
- compile EmbedWindow
M src_moz/NativeBrowserControl.cpp
M src_moz/NativeBrowserControl.h
- hook EmbedWindow to our object hierarchy
- re-activate some tests
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/PreferencesImpl.java
- Make null an acceptable argument for prefValue. Make it mean, remove
the pref.
M webclient/src_moz/PreferencesImpl.cpp
- make a null prefValue argument to nativeSetUnicharPref mean, ClearPref().
java layers.
- Rework NativeEventThread to be usable without having the
browserControl window realized.
- change who owns the NativEventThread to be the BrowserControl, by
proxy through WrapperFactoryImpl. Again, this is with a view toward
using webclient without the browserControl window realized.
A webclient/src_moz/NativeBrowserControl.h
A webclient/src_moz/NativeBrowserControl.cpp
- Centerpiece of native Object hierarchy. Owned by NativeEventThread.
M webclient/build-tests.xml
- reformat
- add new test, currently failing, for Navigation.
M webclient/classes_spec/org/mozilla/webclient/impl/BrowserControlImpl.java
- destroy our nativeBrowserControl.
M webclient/classes_spec/org/mozilla/webclient/impl/WrapperFactory.java
- Added API for obtaining the NativeEventThread for a BrowserControl.
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/BookmarksImpl.java
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/HistoryImpl.java
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java
- rename nativeWebShell to nativeBrowserControl
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/ImplObjectNative.java
- rename nativeWebShell to nativeBrowserControl
- add method to get the NativeEventThread for this instance.
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/NativeEventThread.java
- remove dependency on WindowControl
- make this class be the owner of the nativeBrowserControl instance.
- rename nativeWebShell to nativeBrowserControl
- renamed nativeInitialize to nativeStartup
- added nativeShutdown
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/WindowControlImpl.java
- remove delete() method.
- no longer owns NativeEventThread
- no longer owns nativeBrowserControl
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImpl.java
- Take over NativeEventThread ownership responsibilities from
WindowControlImpl (by proxy for BrowserControl).
M webclient/src_moz/CBrowserContainer.cpp
M webclient/src_moz/CBrowserContainer.h
M webclient/src_moz/CurrentPageActionEvents.cpp
M webclient/src_moz/CurrentPageActionEvents.h
M webclient/src_moz/CurrentPageImpl.cpp
M webclient/src_moz/HistoryActionEvents.cpp
M webclient/src_moz/HistoryActionEvents.h
M webclient/src_moz/HistoryImpl.cpp
M webclient/src_moz/NativeEventThreadActionEvents.cpp
M webclient/src_moz/NativeEventThreadActionEvents.h
M webclient/src_moz/NavigationActionEvents.cpp
M webclient/src_moz/NavigationActionEvents.h
M webclient/src_moz/NavigationImpl.cpp
M webclient/src_moz/PromptActionEvents.cpp
M webclient/src_moz/PromptActionEvents.h
M webclient/src_moz/WindowControlActionEvents.cpp
M webclient/src_moz/WindowControlActionEvents.h
M webclient/src_moz/WindowCreator.cpp
M webclient/src_moz/WindowCreator.h
- rename nativeWebShell to nativeBrowserControl
M webclient/src_moz/Makefile.in
- comment out not yet fixed per-window sources
- add NativeBrowserControl.cpp
M webclient/src_moz/NativeEventThread.cpp
- major refactoring. Much of the work is now being done in
NativeBrowserControl.cpp
M webclient/src_moz/WindowControlImpl.cpp
- remove functionality now located in NativeEventThread and
NativeBrowserControl.
M webclient/src_moz/WrapperFactoryImpl.cpp
- flesh out native{Create,Destroy}BrowserControl.
M webclient/src_moz/ns_globals.h
- remove gActionQueue and gEmbeddedThread. Moved into class
NativeBrowserControl.
M webclient/src_moz/ns_util.cpp
- rename initContext to NativeBrowserControl
- get action queue from NativeBrowserControl
M webclient/src_moz/ns_util.h
- remove WebShellInitContext! It's finally a class now, called
NativeBrowserControl.
M webclient/test/automated/src/classes/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImplTest.java
- added new testcase to show create/deleteBrowserControl works.
be WindowControl, and now it's BrowserControl. I'm hoping this allows
us to operate Webclient in a "headless" fashion. For example, you can
imagine a web-crawler app that leverages DOM.
A test/automated/src/test/NavigationTest.txt
- fodder for testcase
M build-tests.xml
- reformat
- add NavigationTest (fails)
M classes_spec/org/mozilla/webclient/ImplObject.java
- Refactoring: remove public ivars. Make them private, provide
accessor.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/ImplObjectNative.java
- Refactoring: remove public ivars. Make them private, provide
accessor.
- Remove dependence on WindowControl
- leverage new method on WrapperFactory: getNativeBrowserControl().
M classes_spec/org/mozilla/webclient/impl/BrowserControlImpl.java
- Make BrowserControlImpl the owner of the nativeWebShell pointer. I'd
like to see if it's possible for webclient to operate "headless" for
certain applications, therefore, you may not have a WindowControl
instance, which used to own the nativeWebShell pointer.
M classes_spec/org/mozilla/webclient/impl/WrapperFactory.java
- reformatting
- Software Practice: avoid downcasting to implementation class. Since BrowserControlImpl is the owner of the nativeWebShell, but there
is no mention of that in the public API, we modify the WrapperFactory
contract to maintain a data structure of BrowserControl to
nativeWebShell mappings.
- add native{Create,Destroy}BrowserControl(), which is called from
ImplObjectNative.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/BookmarksImpl.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/HistoryImpl.java
M classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java
- refactoring for removing public ivars.
M classes_spec/org/mozilla/webclient/impl/wrapper_native/WindowControlImpl.java
- refactoring for removing public ivars.
- comment out nativeCreateInitContext temporarily
M classes_spec/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImpl.java
- implement new methods:
- add native{Create,Destroy}BrowserControl(), which is called from
ImplObjectNative.
M classes_spec/org/mozilla/webclient/wrapper_nonnative/WrapperFactoryImpl.java
- remove vertigo test
M src_moz/ProfileManagerImpl.cpp
- shutdown the current profile
M src_moz/WrapperFactoryImpl.cpp
- Spinup and Spindown the Appshell
A test/automated/src/classes/org/mozilla/webclient/NavigationTest.java
- new test
M test/automated/src/test/BrowserControlFactoryTest_correct
- new test content
successfully. We are now ready to continue with webclient 2.0
development.
M build-tests.xml
- formatting
M build.xml
- added target that skips the "main" dependency.
M src_moz/ProfileManagerImpl.cpp
- correct error messages
M test/automated/src/classes/org/mozilla/webclient/ProfileManagerTest.java
- reset the system to the original profile before deleting the new one.
- remove log line that isn't guaranteed to be encountered
M test/automated/src/classes/org/mozilla/webclient/CompareFiles.java
- change "new" to "actual" and "old" to expected
- skip "WARNING:" lines in the expected file as well.
M test/automated/src/test/BrowserControlFactoryTest_correct
- remove log line that isn't guaranteed to be encountered.
still seeing non-ignorable differences in the golden file, which I
must address.
M README
- remove quotes from env vars
M webclient/src_moz/WrapperFactoryImpl.cpp
- make the native.waitForDebugger mechanism work on Win32.
M webclient/test/automated/src/classes/org/mozilla/webclient/CompareFiles.java
- Tweaks to optionally ignore WARNING: messages
- Tweaks to ignore lines containing keywords, such as nativeBinDir,
which changes from platform to platform and user to user
M webclient/test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java
- formatting
M README
- update instructions for building and running source and unit tests
M build.properties.sample
- you need junit.jar
M webclient/build-tests.xml
- reformat
M webclient/build.xml
- add "prepare" target to set the PATH_SEP
M webclient/src_ie/BookmarksImpl.cpp
M webclient/src_ie/CurrentPageImpl.cpp
M webclient/src_ie/HistoryImpl.cpp
- Account for new javah header names
M webclient/src_moz/Makefile.in
- account for new location of jawt.lib in J2SDK 1.4.2
M webclient/src_moz/NativeEventThread.cpp
+#include "nsEmbedAPI.h" // for NS_HandleEmbeddingEvent
M webclient/src_moz/NavigationActionEvents.cpp
- result is an nsIInputStream
M webclient/src_moz/WrapperFactoryImpl.cpp
+#include <nsDependentString.h> // for nsDependentCString
and the compile is more strict now.
M webclient/src_moz/dom_util.cpp
- signature change