pjs/java/webclient
edburns%acm.org 8f986c0f07 This checkin adds API to cleanly destroy a BrowserControl instance. It
also modifies EmbeddedMozilla so this code is exercised.

I have changed EmbeddedMozilla to be a stub-like class that simply
displays a Frame with a single Button, titled "New Window".  Pressing
this button causes an EMWindow to be created and displayed.  EMWindow is
basically the former EmbeddedMozilla renamed, with modifications to the
WindowListener implementation to call the BrowserControl deallocation
method.

I've added a delete() method to ImplObect:

 * I know Java has automatic garbage collection and all, but explicitly
 * adding a delete method helps the gc algorithm out. <P>

 * Subclasses should override this and call super.delete() at the end of
 * their overridden delete() method.

 * @see org.mozilla.webclient.wrapper_native.ImplObjectNative#delete

and ImplObjectNative:

 * Note how we call super.delete() at the end.  THIS IS VERY IMPORTANT. <P>

 * Also, note how we don't de-allocate nativeWebShell, that is done in
 * the class that owns the nativeWebShell reference, WindowControlImpl.

 * ImplObjectNative subclasses that further override delete() are <P>

<CODE><PRE>
BookmarksImpl.java
EventRegistrationImpl.java
NativeEventThread.java
WindowControlImpl.java
</PRE><CODE> <P>

 * All other ImplObject subclasses don't have any local Ivars and thus
 * don't need to override delete().

I've added a delete() method to BrowserControlImpl:

 * Called from BrowserControlFactory.deleteBrowserControl() <P>

 * The order of deletion of objects is very important! <P>

 * We don't allow deletion if the Canvas is showing. <P>

In BrowserControlImpl's delete(), the important delete()s is for
WindowControlImpl:

 * First, we delete our eventThread, which causes the eventThread to
 * stop running.  Then we call nativeDestroyInitContext(), which
 * deallocates native resources for this window.

As stated above, NativeEventThread.delete() is called:

 * This is a very delicate method, and possibly subject to race
 * condition problems.  To combat this, our first step is to set our
 * browserControlCanvas to null, within a synchronized block which
 * synchronizes on the same object used in the run() method's event
 * loop.  By setting the browserControlCanvas ivar to null, we cause the
 * run method to return.

After all of this deleting, we return from
BrowserControlFactory.delete().
2000-03-13 18:44:32 +00:00
..
classes Bug #28281, r=leaf, a=leaf, 2000-03-09 01:14:22 +00:00
classes_spec This checkin adds API to cleanly destroy a BrowserControl instance. It 2000-03-13 18:44:32 +00:00
src Bug #28281, r=leaf, a=leaf, 2000-03-09 01:14:22 +00:00
src_moz This checkin adds API to cleanly destroy a BrowserControl instance. It 2000-03-13 18:44:32 +00:00
Makefile.in Bug #28281, r=leaf, a=leaf, 2000-03-09 01:14:22 +00:00
Makefile.win For win32 builds. If you define 2000-03-08 19:17:16 +00:00
README 1999-10-07 <Ed Burns <ed.burns@sun.com>> 1999-10-08 00:48:01 +00:00
changelo 1999-10-07 <Ed Burns <ed.burns@sun.com>> 1999-10-08 00:52:53 +00:00

README

Here lies the MozWebShell java wrapper to mozilla M8.

Authors: Kirk Baker <kbaker@eb.com>
         Ian Wilkinson <iw@ennoble.co>

Build hacking and packaging: Ed Burns <edburns@acm.org>

Unix port: Mark Lin <mark.lin@eng.sun.com>

========================================================================
Win32 Build Directions:
========================================================================
Requirements:

* built mozilla with source code from after 10/5/99

* JDK1.1.7 or greater

* built org.mozilla.util java classes (see NOTE_UTIL)

* Perl 5 perl.exe must be in your path

How To Build:

* Follow the directions in ..\README

* type "nmake /f makefile.win all" and hope for the best

How to Run:

* once the build has successfully completed, run this batch file:

  .\src\WIN32_D.OBJ\runem.bat <opt: YOUR_URL>

  Note that YOUR_URL is probably necessary since firewall support wasn't
  working in M8.


Problems:

* clobber_all doesn't remove the .class files from dist\classes.  You
  have to do this manually.

* post to netscape.public.mozilla.java newsgroup

========================================================================
Unix Build Directions (currently only Linux, 
Solaris support is coming soon):
========================================================================
Requirements:

* built mozilla tree for some variant of Linux

* JDK1.2 with native threads support from http://www.blackdown.org 
(JDK1.1 doesn't seem to work)

* built org.mozilla.util java classes (see NOTE_UTIL)

How To Build:

* Follow the directions in ../util/README

* set JDKHOME to where your JDK install directory resides 
	-> setenv JDKHOME /usr/local/jdk1.2

* cd to 'classes' and type "make -f makefile.unix" and hope for the best
	-> cd classes; make -f Makefile.unix

* then cd to 'src' and type "make -f makefile.unix" and hope for the best
	-> cd src; make -f Makefile.unix

How to Run:

* once the build has successfully completed, run 'runem.unix' in your
'src' directory:
	-> cd src; ./runem.unix <YOUR_URL>

  Note that YOUR_URL is probably necessary since firewall support wasn't
  working in M8.

Problems? Email mark.lin@eng.sun.com or post to netscape.public.mozilla.java.

========================================================================
NOTE_UTIL:
========================================================================
* this package depends on the org.mozilla.util classes, which can be
  found in the mozilla tree under mozilla\java\util.  They are a
  separate checkout and build.  Once you check out the org.mozilla.util
  classes, see the README in the mozilla\java\util\README.

General notes:

* Please update the ChangeLog (changelo) when you make changes.