80 Commits

Author SHA1 Message Date
edburns%acm.org
e77c9b9105 The problem was in the way the
NativeEventThread's run() method's infinite loop was implemented.  The
  loop looks like this:

    while (null != this.browserControlCanvas) {
        synchronized (this.browserControlCanvas.getTreeLock()) {
            nativeProcessEvents(nativeWebShell);

            if (null != listenersToAdd && !listenersToAdd.isEmpty()) {
                tempEnum = listenersToAdd.elements();
                while (tempEnum.hasMoreElements()) {
                    nativeAddListener(nativeWebShell,
                                          (WebclientEventListener)
                                      tempEnum.nextElement());
                }
                listenersToAdd.clear();
            }
        }
    }

  The problem I was observing was that
  nativeProcessEvents(nativeWebShell) would crash due to the fact that
  the nativeWebShell, which is actually an WebShellInitContext instance,
  had been de-allocated.  This de-allocation happens as a result of the
  WindowControlImpl.delete() method, which looks like this:

public void delete()
{
    Assert.assert(null != eventThread, "eventThread shouldn't be null at delete time");
    eventThread.delete();
    eventThread = null;
    nativeDestroyInitContext(nativeWebShell);
    nativeWebShell = -1;
}

  nativeDestroyInitContext de-allocates the WebShellInitContextInstance.
  You can see that the first thing done is to delete the eventThread().
  NativeEventThread.delete() looks like this:

public void delete()
{
    // setting this to null causes the run thread to exit
    synchronized(this.browserControlCanvas.getTreeLock()) {
        browserControlCanvas = null;
    }
...
}

  If you compare NativeEventThread.delete() with the infinite loop in
  NativeEventThread.run(), you'll see that the fact that they both
  synchronize on the same object doesn't protect us from the following
  case:

    NativeEventThread: The infinite loop checks to see if the
    browserControlCanvas is null, then does synchronize on
    browserControlCanvas.getTreeLock(), then calls processNativeEvents().

meanwhile

    WindowControlImpl thread: delete() calls NativeEventThread.delete(),
    which does synchronize on browserControlCanvas.getTreeLock().
    During NativeEventThread.delete(), synchronized section,
    browserControlCanvas is set to null.

    NativeEventThread: because the check for null browserControlCanvas
    occurrs outside of the synchronized block, it's not recheked, and
    thus, the event loop continues to process when it shouldn't.

  The fix is to change the event loop to look like this:

    while (true) {
        synchronized (this.browserControlCanvas.getTreeLock()) {
            // this has to be inside the synchronized block!
            if (null == this.browserControlCanvas) {
                return;
            }
            nativeProcessEvents(nativeWebShell);

            if (null != listenersToAdd && !listenersToAdd.isEmpty()) {
                tempEnum = listenersToAdd.elements();
                while (tempEnum.hasMoreElements()) {
                    nativeAddListener(nativeWebShell,
                                          (WebclientEventListener)
                                      tempEnum.nextElement());
                }
                listenersToAdd.clear();
            }
        }
    }


git-svn-id: svn://10.0.0.236/trunk@64998 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-03 04:32:27 +00:00
edburns%acm.org
5345939064 Adding this line to the top of the run() method in
NativeEventThread seems to fix the hanging problem.

    this.setPriority(Thread.MIN_PRIORITY);


Looks like it was starvation.


git-svn-id: svn://10.0.0.236/trunk@64830 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-01 01:17:33 +00:00
edburns%acm.org
3f3dd34f18 Thanks to Andi Eades, and Steffen Grarup for finding and fixing this.
Basically, we were storing a local jobject ref and using it on
 another thread without calling NewGlobalRef.

The fix is below:

cvs diff WindowControlImpl.cpp NativeEventThread.cpp (in directory D:\Projects\mozilla\java\webclient\src_moz\)
Index: WindowControlImpl.cpp
===================================================================
RCS file: /cvsroot/mozilla/java/webclient/src_moz/WindowControlImpl.cpp,v
retrieving revision 1.5
diff -r1.5 WindowControlImpl.cpp
131c131,134
<     initContext->nativeEventThread = nsnull;
---
>     if (nsnull != initContext->nativeEventThread) {
>         ::util_DeleteGlobalRef(env, initContext->nativeEventThread);
>         initContext->nativeEventThread = nsnull;
>     }
Index: NativeEventThread.cpp
===================================================================
RCS file: /cvsroot/mozilla/java/webclient/src_moz/NativeEventThread.cpp,v
retrieving revision 1.7
diff -r1.7 NativeEventThread.cpp
213c213,215
<         initContext->nativeEventThread = obj; // VERY IMPORTANT!!
---
>         initContext->nativeEventThread =
>             ::util_NewGlobalRef(env, obj); // VERY IMPORTANT!!
>

*****CVS exited normally with code 1*****


git-svn-id: svn://10.0.0.236/trunk@64778 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-31 17:09:00 +00:00
ashuk%eng.sun.com
035dbecc72 a=ashuk
Made changes to the solaris makefile to include jni_util_export - for webclient-uno stuff

_Ashu


git-svn-id: svn://10.0.0.236/trunk@64389 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-28 21:36:04 +00:00
edburns%acm.org
30a4816649 I really meant to check in this one.
git-svn-id: svn://10.0.0.236/trunk@64235 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-27 20:28:21 +00:00
edburns%acm.org
4287100562 bug=33093
a=edburns
r=ashuk

Force prefs to be read, causing the proxy data to be read.


git-svn-id: svn://10.0.0.236/trunk@63908 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-23 23:08:35 +00:00
edburns%acm.org
b849f414a1 bug=33093
a=edburns
r=ashuk

Force prefs to be read, causing the proxy data to be read.


git-svn-id: svn://10.0.0.236/trunk@63901 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-23 22:57:57 +00:00
edburns%acm.org
8643eb4ce2 r=ashuk
a=edburns
bug=32011
This change enables the current webclient API to be called from native
code.

It adds makefile and conditional compilation logic.

If the user defines BAL_INTERFACE in their environment before building
webclient, -DBAL_INTERFACE is added to LCFLAGS.  This causes code in
jni_util_export.cpp to behave differently due to the conditional
compilation logic.

I've broken out the 8 functions that are necessary to call into the
Webclient JNI methods into jni_util_export.{h,cpp}.

I've created a new pair of files, bal_util.{h,cpp} that contain function
declarations and definitions that are used when src_moz is built with
BAL_INTERFACE.  bal_util.obj is not built, nor added to webclient.dll if
building without BAL_INTERFACE.

See the page
http://www.mozilla.org/projects/blackwood/webclient/design/uno-transition.html
for a design document description of these changes.


git-svn-id: svn://10.0.0.236/trunk@63599 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-21 19:27:13 +00:00
edburns%acm.org
b233b02f87 bug=32011
r=ashuk
a=edburns
This set of changes replaces all occurrences of

env->Func(args...)

with

::util_Func(env, args...)

Except of course, for the implementations of the above mentioned
::util_Func() functions.

This is done to allow the JNI functions to be called from a non JNI
context, such as UNO.


git-svn-id: svn://10.0.0.236/trunk@63190 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-16 23:07:03 +00:00
edburns%acm.org
f4d7081311 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().


git-svn-id: svn://10.0.0.236/trunk@62772 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-13 18:44:32 +00:00
edburns%acm.org
c4a928699e r=ashuk
a=edburns
bug=31253

This change doesn't impact SeaMonkey.

Move the initialization of the nativeWebShell ptr into a superclass.


git-svn-id: svn://10.0.0.236/trunk@62501 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-09 23:22:52 +00:00
edburns%acm.org
508cc90c1c bug=31123
a=edburns
r=bruce

Folks, don't EVER use NULL in your c++ code.  Use nsnull instead.


git-svn-id: svn://10.0.0.236/trunk@62456 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-09 05:12:42 +00:00
edburns%acm.org
f3317f63ad JAVAH generated header files should not be checked in, since they are generated as a result of the build.
git-svn-id: svn://10.0.0.236/trunk@62452 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-09 04:41:43 +00:00
sherry.shen%sun.com
b14df5fa61 Bug #28281, r=leaf, a=leaf,
Add an option for building Java-supplement and
fix the Java building problem about JDIRS.


git-svn-id: svn://10.0.0.236/trunk@62425 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-09 01:14:22 +00:00
edburns%acm.org
5393e638a0 For win32 builds. If you define
WEBCLIENT_SPEC=1

in your environment before building webclient, the spec-compliant
version of webclient will be built.


git-svn-id: svn://10.0.0.236/trunk@62401 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-08 19:17:16 +00:00
edburns%acm.org
57a27f1d50 Changed NULL to nsnull, so it would build with gcc.
.


git-svn-id: svn://10.0.0.236/trunk@62399 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-08 18:54:00 +00:00
ashuk%eng.sun.com
9daf7a540c a=edburns
r=edburns
author=ashuk
bug=28407

Made fix for new BookmarksImpl.java file -- Ashu K.


git-svn-id: svn://10.0.0.236/trunk@62398 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-08 18:49:36 +00:00
ashuk%eng.sun.com
6c6385f95e a=edburns
r=edburns
author=ashuk
bug=28407

Made fix for changed BookmarksImpl.cpp file in the Stubs file -- Ashu K.


git-svn-id: svn://10.0.0.236/trunk@62397 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-08 18:41:01 +00:00
ashuk%eng.sun.com
4ad2fcb8e0 a=edburns
r=edburns
author=ashuk
bug=28407

New native code for spec-compliant impl ported to solaris -- Ashu K.


git-svn-id: svn://10.0.0.236/trunk@62345 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-07 22:45:37 +00:00
ashuk%eng.sun.com
06ad7dc35e a=edburns
r=edburns
author=ashuk
bug=28407

Moved this file to java/webclient/classes_new/org/mozilla/webclient/wrapper_native -- Ashu K.


git-svn-id: svn://10.0.0.236/trunk@62344 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-07 22:39:11 +00:00
ashuk%eng.sun.com
dbbd9a87d7 a=edburns
r=edburns
author=ashuk
bug=28407

New native code for spec-compliant impl ported to solaris -- Ashu K.


git-svn-id: svn://10.0.0.236/trunk@62342 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-07 22:33:38 +00:00
edburns%acm.org
57c1e905c2 NOT IN SeaMonkey
Added // PENDING comment


git-svn-id: svn://10.0.0.236/trunk@62341 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-07 22:32:27 +00:00
ashuk%eng.sun.com
d60410b769 a=edburns
r=edburns
author=ashuk
bug=28407

New run script for spec-compliant impl -- Ashu K.


git-svn-id: svn://10.0.0.236/trunk@62339 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-07 22:19:20 +00:00
ashuk%eng.sun.com
0e1f237edc a=edburns
r=edburns
author=ashuk
bug=28407

New solaris Makefile for spec-compliant impl -- Ashu K.


git-svn-id: svn://10.0.0.236/trunk@62338 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-07 22:18:17 +00:00
ashuk%eng.sun.com
f746427b55 a=edburns
r=edburns
author=ashuk
bug=28407

New java code for spec-compliant impl ported to solaris -- Ashu K.


git-svn-id: svn://10.0.0.236/trunk@62337 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-07 22:16:07 +00:00
ashuk%eng.sun.com
7c6e50cbd3 a=edburns
r=edburns
author=ashuk
bug=28407

New java code for spec-compliant impl ported to solaris -- Ashu K.


git-svn-id: svn://10.0.0.236/trunk@62336 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-07 22:10:08 +00:00
ashuk%eng.sun.com
ccd51ccc8c a=edburns
r=edburns
author=ashuk
bug=28407

makefile for Java code - spec compliant impl -- Ashu K


git-svn-id: svn://10.0.0.236/trunk@62334 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-07 22:03:57 +00:00
edburns%acm.org
2471024921 a=edburns
r=ashuk
bug=2069

Native code for spec compliant webclient impl.


git-svn-id: svn://10.0.0.236/trunk@62196 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-04 01:37:20 +00:00
edburns%acm.org
530e00a191 a=edburns
r=ashuk
bug=2069

Java classes for spec compliant webclient impl.


git-svn-id: svn://10.0.0.236/trunk@62193 18797224-902f-48f8-a5cc-f745e15eee43
2000-03-04 01:10:58 +00:00
edburns%acm.org
cdc1a79633 Put #include <unistd.h> inside #ifdef XP_UNIX
git-svn-id: svn://10.0.0.236/trunk@61308 18797224-902f-48f8-a5cc-f745e15eee43
2000-02-18 19:33:28 +00:00
edburns%acm.org
df661e89b7 Removed import org.mozilla.webclient.motif.*
git-svn-id: svn://10.0.0.236/trunk@61307 18797224-902f-48f8-a5cc-f745e15eee43
2000-02-18 19:32:22 +00:00
edburns%acm.org
b31ba12625 author=Ashutosh Kulkarni
r=edburns
approver=edburns
bug=28407

THIS CODE IS NOT MOZILLA CODE!

This code change allows webclient to work with GTKSUPERWIN.


git-svn-id: svn://10.0.0.236/trunk@61306 18797224-902f-48f8-a5cc-f745e15eee43
2000-02-18 19:16:27 +00:00
edburns%acm.org
14721ab401 More simple name change changes.
git-svn-id: svn://10.0.0.236/trunk@57051 18797224-902f-48f8-a5cc-f745e15eee43
2000-01-07 00:44:24 +00:00
edburns%acm.org
381c6da070 Changed MozillaEventThread.h to NativeEventThread.h
git-svn-id: svn://10.0.0.236/trunk@57025 18797224-902f-48f8-a5cc-f745e15eee43
2000-01-06 22:52:03 +00:00
edburns%acm.org
4c728af02b Change to new NS_InitXPCOM argument.
r=dp
b=23157
a=edburns


git-svn-id: svn://10.0.0.236/trunk@57023 18797224-902f-48f8-a5cc-f745e15eee43
2000-01-06 22:45:48 +00:00
edburns%acm.org
71e39eedd5 account for nsIDocumentLoaderObserver API changes.
git-svn-id: svn://10.0.0.236/trunk@56853 18797224-902f-48f8-a5cc-f745e15eee43
2000-01-05 20:25:29 +00:00
edburns%acm.org
275101c967 r=marklin
a=edburns

Changes to complete the transition from BrowserControlMozillaShim to BrowserControlNativeShim.


git-svn-id: svn://10.0.0.236/trunk@56519 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-24 00:03:28 +00:00
edburns%acm.org
57d571d62e r=marklin
a=edburns

Get webclient working againg with tbogard's help on what has changed with webshell.


git-svn-id: svn://10.0.0.236/trunk@56517 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-23 23:40:57 +00:00
edburns%acm.org
46a1420a6e r=marklin
Change BrowserControlMozillaShim to BrowserControlNativeShim.


git-svn-id: svn://10.0.0.236/trunk@56477 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-23 04:09:40 +00:00
mark.lin%eng.sun.com
653b840af8 Fixed webclient on Unix bustage.
git-svn-id: svn://10.0.0.236/trunk@56301 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-21 22:20:19 +00:00
edburns%acm.org
2050d69f72 This change is not related to SeaMonkey, so it can't break the build.
r=marklin
a=edburns
bug=20659

added #ifdef XP_UNIX for GTK_MOZAREA stuff.


git-svn-id: svn://10.0.0.236/trunk@55506 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-07 01:51:54 +00:00
edburns%acm.org
23db9bcbb7 Changed comment in initialize.
git-svn-id: svn://10.0.0.236/trunk@55481 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-06 23:42:13 +00:00
edburns%acm.org
f861dab0c8 r=marklin
a=edburns
bug=20659

Changes to bring webclient sort of up to working shape on unix.


git-svn-id: svn://10.0.0.236/trunk@55476 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-06 23:31:11 +00:00
edburns%acm.org
34adf9eb4a r=marklin%eng.sun.com
a=edburns
bug=20659

Make BrowserControl vend a Canvas instead of
BrowserControlCanvas vending a BrowserControl.

This change has nothing to do with mozilla.  It's pure java.


git-svn-id: svn://10.0.0.236/trunk@55151 18797224-902f-48f8-a5cc-f745e15eee43
1999-12-03 01:55:31 +00:00
dmose%mozilla.org
fe6a96903d updated license boilerplated to xPL 1.1, a=chofmann@netscape.com,r=endico@mozilla.org
git-svn-id: svn://10.0.0.236/trunk@52899 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-06 02:24:22 +00:00
edburns%acm.org
31ca3266f1 r=marklin
#17358
approver=edburns
author=edburns

This fix enables webclient to work with the latest mozilla.  For now.


git-svn-id: svn://10.0.0.236/trunk@52284 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-29 22:51:06 +00:00
edburns%acm.org
25735aa125 bug: 16842
reviewer: edburns
approver: edburns

Changed raptor to gk in makefile as appropriate.


git-svn-id: svn://10.0.0.236/trunk@51304 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-20 22:02:34 +00:00
edburns%acm.org
8af706c11b Added Swing webclient test code and windows makefile mods.
Author=Ann Sunhachawee
r=edburns@acm.org
Approver=edburns@acm.org
Bug=http://bugzilla.mozilla.org/show_bug.cgi?id=16842


git-svn-id: svn://10.0.0.236/trunk@51239 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-20 00:49:28 +00:00
edburns%acm.org
d6eb736cf5 1999-10-07 <Ed Burns <ed.burns@sun.com>>
* This change fixes
 	http://bugzilla.mozilla.org/show_bug.cgi?id=15793 which caused one
 	to have to copy the component.reg and components directory.  It
 	also causes webclient to do autoregistration.  It also adds a
 	debugging method to BrowserControlMozillaShim.java
 	nativeDebugBreak().

	This changes makes webclient depend on having mozilla sources from
 	10/5/99 or later.

	Reviewed by Mark Lin <marklin@eng.sun.com>
	Approved by Ed Burns <edburns@acm.org>, module owner


git-svn-id: svn://10.0.0.236/trunk@50183 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 00:52:53 +00:00
edburns%acm.org
f0ebe3333d 1999-10-07 <Ed Burns <ed.burns@sun.com>>
* This change fixes
 	http://bugzilla.mozilla.org/show_bug.cgi?id=15793 which caused one
 	to have to copy the component.reg and components directory.  It
 	also causes webclient to do autoregistration.  It also adds a
 	debugging method to BrowserControlMozillaShim.java
 	nativeDebugBreak().

	This changes makes webclient depend on having mozilla sources from
 	10/5/99 or later.

	Reviewed by Mark Lin <marklin@eng.sun.com>
	Approved by Ed Burns <edburns@acm.org>, module owner


git-svn-id: svn://10.0.0.236/trunk@50182 18797224-902f-48f8-a5cc-f745e15eee43
1999-10-08 00:48:01 +00:00