This checkin extracts the thread coordination mechanism used within

webclient into an internal contract so it can be used by dom.

M dom/classes/org/mozilla/dom/DOMAccessor.java

- use RunnableRunner and ReturnRunnable to do internal thread
  coordination.

M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/BookmarksImpl.java
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/CocoaBrowserControlCanvas.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/GtkBrowserControlCanvas.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
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/PreferencesImpl.java
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/ProfileManagerImpl.java
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/RDFEnumeration.java
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/Win32BrowserControlCanvas.java
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/WindowControlImpl.java
M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/WrapperFactoryImpl.java

- Refactor to rename WCRunnable to ReturnRunnable.

M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/NativeEventThread.java
A util/classes/org/mozilla/util/ReturnRunnable.java

- Implement new RunnableRunner interface.

R webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/WCRunnable.java
A util/classes/org/mozilla/util/RunnableRunner.java

- moved class
This commit is contained in:
edburns%acm.org 2007-03-12 20:39:22 +00:00
parent e527f01925
commit edde7a98f2
17 changed files with 190 additions and 72 deletions

View File

@ -80,22 +80,72 @@ package org.mozilla.dom;
import java.util.Vector;
import java.util.Enumeration;
import org.mozilla.util.ReturnRunnable;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import java.security.AccessController;
import org.mozilla.util.RunnableRunner;
public final class DOMAccessor {
private static final String JAVADOM_LOADED_PROPERTY_NAME =
"org.mozilla.webclient.impl.wrapper_native.javadomjni.loaded";
private static RunnableRunner runnableRunner = null;
private static Vector documentLoadListeners = new Vector();
private static JavaDOMPermission permission = new JavaDOMPermission("JavaDOM");
static {
System.loadLibrary("javadomjni");
private static boolean isNativeLibraryLoaded = false;
private static boolean isNativeLibraryLoadedPropertySet = false;
public static boolean isNativeLibraryLoaded() {
if (isNativeLibraryLoadedPropertySet) {
return isNativeLibraryLoaded;
}
boolean result = false;
String propValue = System.getProperty(JAVADOM_LOADED_PROPERTY_NAME);
if (null != propValue) {
try {
result = Boolean.valueOf(propValue).booleanValue();
}
catch (Exception e) {
result = isNativeLibraryLoaded;
}
}
else {
result = isNativeLibraryLoaded;
}
return result;
}
public static void setNativeLibraryLoaded(boolean newState) {
isNativeLibraryLoaded = newState;
isNativeLibraryLoadedPropertySet = true;
}
private void DOMAccessorImpl() {}
static {
if (!isNativeLibraryLoaded()) {
System.loadLibrary("javadomjni");
setNativeLibraryLoaded(true);
}
}
private void DOMAccessorImpl() {
if (null == runnableRunner) {
runnableRunner = new SameThreadRunnableRunner();
}
}
public static void setRunner(RunnableRunner runner) {
runnableRunner = runner;
}
public static RunnableRunner getRunner() {
return runnableRunner;
}
private static void register() {
nativeRegister();
@ -218,4 +268,20 @@ public final class DOMAccessor {
}
doGC();
}
}
class SameThreadRunnableRunner implements RunnableRunner {
SameThreadRunnableRunner() {}
public void pushRunnable(Runnable toInvoke) {
toInvoke.run();
}
public Object pushBlockingReturnRunnable(ReturnRunnable toInvoke) throws RuntimeException {
toInvoke.run();
return toInvoke.getResult();
}
}

View File

@ -22,7 +22,7 @@
* Louis-Philippe Gagnon <louisphilippe@macadamian.com>
*/
package org.mozilla.webclient.impl.wrapper_native;
package org.mozilla.util;
/**
* <p>Extend the concept of <code>java.lang.Runnable</code> to allow for
@ -30,7 +30,7 @@ package org.mozilla.webclient.impl.wrapper_native;
*
*/
public abstract class WCRunnable {
public abstract class ReturnRunnable {
public abstract Object run();

View File

@ -0,0 +1,26 @@
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is RaptorCanvas.
*
* Contributor(s): Ed Burns <edburns@acm.org>
*/
package org.mozilla.util;
/**
*
* @author edburns
*/
public interface RunnableRunner {
Object pushBlockingReturnRunnable(ReturnRunnable toInvoke) throws RuntimeException;
void pushRunnable(Runnable toInvoke);
}

View File

@ -26,6 +26,7 @@ package org.mozilla.webclient.impl.wrapper_native;
import org.mozilla.util.Assert;
import org.mozilla.util.Log;
import org.mozilla.util.ParameterCheck;
import org.mozilla.util.ReturnRunnable;
import org.mozilla.webclient.Bookmarks;
import org.mozilla.webclient.BookmarkEntry;
@ -155,7 +156,7 @@ public TreeModel getBookmarks() throws IllegalStateException
if (null == bookmarksTree) {
TreeNode root;
Integer nativeBookmarks = (Integer)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Integer result =
new Integer(nativeGetBookmarks(getWrapperFactory().
@ -199,7 +200,7 @@ public BookmarkEntry newBookmarkEntry(String url)
final String finalUrl = new String(url);
getBookmarks();
Integer newNode = (Integer)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Integer result =
new Integer(nativeNewRDFNode(getNativeBrowserControl(),

View File

@ -28,7 +28,7 @@ package org.mozilla.webclient.impl.wrapper_native;
import org.mozilla.webclient.BrowserControlCanvas;
import org.mozilla.webclient.impl.wrapper_native.WCRunnable;
import org.mozilla.util.ReturnRunnable;
import org.mozilla.webclient.impl.wrapper_native.NativeEventThread;
import java.awt.*;
@ -55,7 +55,7 @@ public class CocoaBrowserControlCanvas extends BrowserControlCanvas {
*/
protected int getWindow() {
Integer result = (Integer)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable(){
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable(){
public Object run() {
Integer result =
new Integer(CocoaBrowserControlCanvas.this.getHandleToPeer());

View File

@ -29,6 +29,7 @@ import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import org.mozilla.util.Assert;
import org.mozilla.util.ParameterCheck;
import org.mozilla.util.ReturnRunnable;
import org.mozilla.webclient.BrowserControl;
import org.mozilla.webclient.CurrentPage2;
@ -87,7 +88,7 @@ public CurrentPageImpl(WrapperFactory yourFactory,
super(yourFactory, yourBrowserControl);
// force the class to be loaded, thus loading the JNI library
if (!domInitialized) {
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
DOMAccessor.initialize();
return null;
@ -118,7 +119,7 @@ public void copyCurrentSelectionToSystemClipboard()
Assert.assert_it(-1 != getNativeBrowserControl());
plainTextSelection = null;
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeCopyCurrentSelectionToSystemClipboard(CurrentPageImpl.this.getNativeBrowserControl());
return null;
@ -155,7 +156,7 @@ public void copyCurrentSelectionHtmlToSystemClipboard()
Assert.assert_it(-1 != getNativeBrowserControl());
htmlSelection = null;
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeCopyCurrentSelectionToSystemClipboard(CurrentPageImpl.this.getNativeBrowserControl());
return null;
@ -190,7 +191,7 @@ public Selection getSelection() {
getWrapperFactory().verifyInitialized();
final Selection selection = new SelectionImpl();
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeGetSelection(CurrentPageImpl.this.getNativeBrowserControl(),
selection);
@ -212,7 +213,7 @@ public void highlightSelection(Selection selection) {
final int startOffset = selection.getStartOffset();
final int endOffset = selection.getEndOffset();
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeHighlightSelection(CurrentPageImpl.this.getNativeBrowserControl(),
startContainer, endContainer,
@ -228,7 +229,7 @@ public void highlightSelection(Selection selection) {
}
public void clearAllSelections() {
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeClearAllSelections(CurrentPageImpl.this.getNativeBrowserControl());
return null;
@ -253,7 +254,7 @@ public boolean find(String toFind, boolean dir, boolean doCase)
Boolean result = Boolean.FALSE;
result = (Boolean)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable(){
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable(){
public Object run() {
boolean rc = nativeFind(CurrentPageImpl.this.getNativeBrowserControl(),
stringToFind, forward, matchCase);
@ -277,7 +278,7 @@ public boolean findNext()
Boolean result = Boolean.FALSE;
result = (Boolean)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable(){
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable(){
public Object run() {
boolean rc = nativeFindNext(CurrentPageImpl.this.getNativeBrowserControl());
return rc ? Boolean.TRUE : Boolean.FALSE;
@ -305,7 +306,7 @@ public Document getDOM()
{
final Document[] resultHolder = new Document[1];
resultHolder[0] = null;
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Document result = nativeGetDOM(getNativeBrowserControl());
if (LOGGER.isLoggable((Level.INFO))) {
@ -345,7 +346,7 @@ public String getSource()
String HTMLContent = null;
final Selection selection = new SelectionImpl();
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeGetSource(CurrentPageImpl.this.getNativeBrowserControl(),
selection);
@ -385,7 +386,7 @@ public void resetFind()
public void selectAll() {
getWrapperFactory().verifyInitialized();
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeSelectAll(CurrentPageImpl.this.getNativeBrowserControl());
return null;

View File

@ -39,6 +39,7 @@ import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.Component;
import org.mozilla.dom.DOMAccessor;
import org.mozilla.util.ReturnRunnable;
import org.mozilla.webclient.BrowserControl;
import org.mozilla.webclient.BrowserControlCanvas;
@ -154,7 +155,7 @@ public void addDocumentLoadListener(DocumentLoadListener listener)
synchronized(documentLoadListeners) {
if (listener instanceof PageInfoListener) {
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable(){
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable(){
public Object run() {
nativeSetCapturePageInfo(getNativeBrowserControl(),
true);
@ -186,7 +187,7 @@ public void removeDocumentLoadListener(DocumentLoadListener listener)
documentLoadListeners.remove(listener);
if (0 == documentLoadListeners.size()) {
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable(){
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable(){
public Object run() {
nativeSetCapturePageInfo(getNativeBrowserControl(),
false);
@ -264,7 +265,7 @@ public void setNewWindowListener(NewWindowListener listener)
getWrapperFactory().verifyInitialized();
final boolean doClear = null == listener;
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable(){
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable(){
public Object run() {
if (doClear) {
nativeSetNewWindowListenerAttached(getNativeBrowserControl(),

View File

@ -25,6 +25,7 @@ package org.mozilla.webclient.impl.wrapper_native;
import org.mozilla.util.Assert;
import org.mozilla.util.Log;
import org.mozilla.util.ParameterCheck;
import org.mozilla.util.ReturnRunnable;
import org.mozilla.webclient.BrowserControlCanvas;
@ -41,7 +42,7 @@ import java.awt.Dimension;
* There is one instance of GtkBrowserControlCanvas per top level awt Frame.
* @version $Id: GtkBrowserControlCanvas.java,v 1.2 2005/11/25 08:16:32 timeless%mozdev.org Exp $
* @version $Id: GtkBrowserControlCanvas.java,v 1.3 2007/03/12 20:39:22 edburns%acm.org Exp $
*
* @see org.mozilla.webclient.BrowserControlCanvasFactory
*
@ -87,7 +88,7 @@ public class GtkBrowserControlCanvas extends BrowserControlCanvas /* implements
//Use the AWT Native Peer interface to get the handle
//of this Canvas's native peer
Integer canvasWin = (Integer)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Integer result =
new Integer(GtkBrowserControlCanvas.this.getHandleToPeer());
@ -97,7 +98,7 @@ public class GtkBrowserControlCanvas extends BrowserControlCanvas /* implements
canvasWinID = canvasWin.intValue();
//Set our canvas as a parent of the top-level gtk widget
//which contains Mozilla.
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
GtkBrowserControlCanvas.this.reparentWindow(GtkBrowserControlCanvas.this.gtkWinID, GtkBrowserControlCanvas.this.canvasWinID);
return null;
@ -114,7 +115,7 @@ public class GtkBrowserControlCanvas extends BrowserControlCanvas /* implements
final int finalHeight = height;
synchronized(getTreeLock()) {
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
GtkBrowserControlCanvas.this.setGTKWindowSize(GtkBrowserControlCanvas.this.gtkTopWindow,
finalWidth, finalHeight);
@ -141,7 +142,7 @@ public class GtkBrowserControlCanvas extends BrowserControlCanvas /* implements
protected int getWindow() {
synchronized(getTreeLock()) {
Integer topWindow = (Integer)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Integer result =
new Integer(GtkBrowserControlCanvas.this.createTopLevelWindow());
@ -152,7 +153,7 @@ public class GtkBrowserControlCanvas extends BrowserControlCanvas /* implements
final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Integer winPtr = (Integer)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Integer result =
new Integer(GtkBrowserControlCanvas.this.createContainerWindow(GtkBrowserControlCanvas.this.gtkTopWindow, screenSize.width, screenSize.height));
@ -162,7 +163,7 @@ public class GtkBrowserControlCanvas extends BrowserControlCanvas /* implements
this.gtkWinPtr = winPtr.intValue();
Integer winId = (Integer)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Integer result = new Integer(GtkBrowserControlCanvas.this.getGTKWinID(GtkBrowserControlCanvas.this.gtkWinPtr));
return result;

View File

@ -25,6 +25,7 @@ package org.mozilla.webclient.impl.wrapper_native;
import org.mozilla.util.Assert;
import org.mozilla.util.Log;
import org.mozilla.util.ParameterCheck;
import org.mozilla.util.ReturnRunnable;
import org.mozilla.webclient.BrowserControl;
import org.mozilla.webclient.History;
@ -79,7 +80,7 @@ public void back()
getWrapperFactory().verifyInitialized();
Assert.assert_it(-1 != getNativeBrowserControl());
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeBack(getNativeBrowserControl());
return null;
@ -97,7 +98,7 @@ public boolean canBack()
Assert.assert_it(-1 != getNativeBrowserControl());
Boolean result = (Boolean)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
boolean canBack = nativeCanBack(getNativeBrowserControl());
return new Boolean(canBack);
@ -144,7 +145,7 @@ public void forward()
getWrapperFactory().verifyInitialized();
Assert.assert_it(-1 != getNativeBrowserControl());
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeForward(getNativeBrowserControl());
return null;
@ -162,7 +163,7 @@ public boolean canForward()
Assert.assert_it(-1 != getNativeBrowserControl());
Boolean result = (Boolean)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
boolean canForward = nativeCanForward(getNativeBrowserControl());
return new Boolean(canForward);

View File

@ -31,6 +31,8 @@ import java.util.logging.Logger;
import org.mozilla.util.Assert;
import org.mozilla.util.Log;
import org.mozilla.util.ParameterCheck;
import org.mozilla.util.ReturnRunnable;
import org.mozilla.util.RunnableRunner;
import org.mozilla.webclient.impl.WrapperFactory;
@ -40,7 +42,7 @@ import org.mozilla.webclient.impl.WrapperFactory;
* methods.</p>
*/
public class NativeEventThread extends Thread {
public class NativeEventThread extends Thread implements RunnableRunner {
//
// Class variables
@ -63,7 +65,7 @@ public class NativeEventThread extends Thread {
private WrapperFactory wrapperFactory;
private int nativeWrapperFactory;
private Queue<WCRunnable> blockingRunnables;
private Queue<ReturnRunnable> blockingRunnables;
private Queue<Runnable> runnables;
@ -85,7 +87,7 @@ public class NativeEventThread extends Thread {
ParameterCheck.nonNull(yourFactory);
wrapperFactory = yourFactory;
blockingRunnables = new ConcurrentLinkedQueue<WCRunnable>();
blockingRunnables = new ConcurrentLinkedQueue<ReturnRunnable>();
runnables = new ConcurrentLinkedQueue<Runnable>();
}
@ -162,7 +164,7 @@ public void run()
}
public void runUntilEventOfType(Class wcRunnableClass) {
WCRunnable result = null;
ReturnRunnable result = null;
while (doEventLoopOnce(wcRunnableClass)) {
}
}
@ -173,7 +175,7 @@ public void runUntilEventOfType(Class wcRunnableClass) {
private boolean doEventLoopOnce(Class... wcRunnableClass) {
Runnable runnable;
WCRunnable wcRunnable;
ReturnRunnable wcRunnable;
boolean result = true;
try {
Thread.sleep(1);
@ -252,13 +254,13 @@ public void runUntilEventOfType(Class wcRunnableClass) {
// Package methods
//
void pushRunnable(Runnable toInvoke) {
public void pushRunnable(Runnable toInvoke) {
synchronized (this) {
runnables.add(toInvoke);
}
}
Object pushBlockingWCRunnable(WCRunnable toInvoke) throws RuntimeException {
public Object pushBlockingReturnRunnable(ReturnRunnable toInvoke) throws RuntimeException {
Object result = null;
if (Thread.currentThread().getName().equals(instance.getName())){

View File

@ -27,6 +27,7 @@ import org.mozilla.util.Assert;
import org.mozilla.util.Log;
import org.mozilla.util.ParameterCheck;
import org.mozilla.util.RangeException;
import org.mozilla.util.ReturnRunnable;
import org.mozilla.webclient.BrowserControl;
import org.mozilla.webclient.Navigation;
@ -136,7 +137,7 @@ public void refresh(long loadFlags)
final long finalLoadFlags = loadFlags;
Assert.assert_it(-1 != getNativeBrowserControl());
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeRefresh(NavigationImpl.this.getNativeBrowserControl(),
finalLoadFlags);
@ -154,7 +155,7 @@ public void stop()
getWrapperFactory().verifyInitialized();
Assert.assert_it(-1 != getNativeBrowserControl());
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeStop(getNativeBrowserControl());
return null;
@ -275,7 +276,7 @@ public static void main(String [] args)
Log.setApplicationName("NavigationImpl");
Log.setApplicationVersion("0.0");
Log.setApplicationVersionDate("$Id: NavigationImpl.java,v 1.12 2007/01/17 11:43:43 edburns%acm.org Exp $");
Log.setApplicationVersionDate("$Id: NavigationImpl.java,v 1.13 2007/03/12 20:39:22 edburns%acm.org Exp $");
try {
org.mozilla.webclient.BrowserControlFactory.setAppData(args[0]);

View File

@ -24,6 +24,7 @@ package org.mozilla.webclient.impl.wrapper_native;
import org.mozilla.util.Assert;
import org.mozilla.util.Log;
import org.mozilla.util.ParameterCheck;
import org.mozilla.util.ReturnRunnable;
import org.mozilla.webclient.impl.WrapperFactory;
import org.mozilla.webclient.impl.Service;
@ -109,7 +110,7 @@ public void setPref(String prefName, String prefValue)
// determine the type of pref value: String, boolean, integer
try {
final Integer intVal = Integer.valueOf(prefValue);
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeSetIntPref(getWrapperFactory().getNativeWrapperFactory(), finalName, intVal.intValue());
return null;
@ -124,7 +125,7 @@ public void setPref(String prefName, String prefValue)
if (null != prefValue &&
(prefValue.equals("true") || prefValue.equals("false"))) {
final Boolean boolVal = Boolean.valueOf(prefValue);
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable(){
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable(){
public Object run() {
nativeSetBoolPref(getWrapperFactory().getNativeWrapperFactory(),
finalName, boolVal.booleanValue());
@ -140,7 +141,7 @@ public void setPref(String prefName, String prefValue)
// it must be a string
final String finalValue = (null != prefValue) ?
new String(prefValue) : null;
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable(){
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable(){
public Object run() {
nativeSetUnicharPref(getWrapperFactory().getNativeWrapperFactory(), finalName, finalValue);
return null;
@ -157,7 +158,7 @@ public void setPref(String prefName, String prefValue)
public Properties getPrefs()
{
props = (Properties)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Properties result =
nativeGetPrefs(getWrapperFactory().getNativeWrapperFactory(),

View File

@ -26,6 +26,7 @@ package org.mozilla.webclient.impl.wrapper_native;
import org.mozilla.util.Assert;
import org.mozilla.util.Log;
import org.mozilla.util.ParameterCheck;
import org.mozilla.util.ReturnRunnable;
import org.mozilla.webclient.ProfileManager;
import org.mozilla.webclient.impl.WrapperFactory;
@ -59,7 +60,7 @@ public void shutdown() {
public int getProfileCount()
{
Integer result = (Integer)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Integer count = new Integer(nativeGetProfileCount(getWrapperFactory().getNativeWrapperFactory()));
return count;
@ -71,7 +72,7 @@ public int getProfileCount()
public String [] getProfileList()
{
String [] list =
(String []) NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
(String []) NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Object result = nativeGetProfileList(getWrapperFactory().getNativeWrapperFactory());
return result;
@ -84,7 +85,7 @@ public boolean profileExists(String profileName)
{
ParameterCheck.nonNull(profileName);
final String finalStr = new String(profileName);
Boolean exists = (Boolean) NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
Boolean exists = (Boolean) NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Boolean result = new Boolean(nativeProfileExists(getWrapperFactory().getNativeWrapperFactory(),
finalStr));
@ -97,7 +98,7 @@ public boolean profileExists(String profileName)
public String getCurrentProfile()
{
String currProfile = (String)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Object result = nativeGetCurrentProfile(getWrapperFactory().getNativeWrapperFactory());
return result;
@ -110,7 +111,7 @@ public void setCurrentProfile(String profileName)
{
ParameterCheck.nonNull(profileName);
final String finalStr = new String(profileName);
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeSetCurrentProfile(getWrapperFactory().getNativeWrapperFactory(),
finalStr);
@ -131,7 +132,7 @@ public void createNewProfile(String profileName,
final String finalLangcode = (null != langcode) ?
new String(langcode) : null;
final boolean finalExistingDir = useExistingDir;
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeCreateNewProfile(getWrapperFactory().getNativeWrapperFactory(),
finalProfileName, finalProfileDir,
@ -147,7 +148,7 @@ public void renameProfile(String currName, String newName)
ParameterCheck.nonNull(newName);
final String finalCurrName = new String(currName);
final String finalNewName = new String(newName);
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeRenameProfile(getWrapperFactory().getNativeWrapperFactory(),
finalCurrName, finalNewName);
@ -161,7 +162,7 @@ public void deleteProfile(String profileName, boolean canDeleteFiles)
ParameterCheck.nonNull(profileName);
final String finalProfileName = new String(profileName);
final boolean finalCanDeleteFiles = canDeleteFiles;
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeDeleteProfile(getWrapperFactory().getNativeWrapperFactory(),
finalProfileName, finalCanDeleteFiles);

View File

@ -26,6 +26,7 @@ import org.mozilla.util.Log;
import org.mozilla.util.ParameterCheck;
import java.util.Enumeration;
import org.mozilla.util.ReturnRunnable;
public class RDFEnumeration extends Object implements Enumeration
{
@ -102,7 +103,7 @@ public RDFEnumeration(int yourNativeContext,
protected void finalize() throws Throwable
{
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeFinalize(RDFEnumeration.this.nativeContext);
return null;
@ -123,7 +124,7 @@ public boolean hasMoreElements()
{
Assert.assert_it(-1 != nativeRDFNode);
Boolean result = (Boolean)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Boolean result =
new Boolean(nativeHasMoreElements(RDFEnumeration.this.nativeContext,
@ -143,7 +144,7 @@ public Object nextElement()
Assert.assert_it(null != parent);
Object result = null;
Integer nextNativeRDFNode = (Integer)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Integer result =
new Integer(nativeNextElement(RDFEnumeration.this.nativeContext,

View File

@ -27,7 +27,7 @@ import org.mozilla.util.Assert;
import org.mozilla.util.Log;
import org.mozilla.util.ParameterCheck;
import org.mozilla.webclient.impl.wrapper_native.WCRunnable;
import org.mozilla.util.ReturnRunnable;
import org.mozilla.webclient.impl.wrapper_native.NativeEventThread;
/**
@ -39,7 +39,7 @@ import org.mozilla.webclient.impl.wrapper_native.NativeEventThread;
* There is one instance of the BrowserControlCanvas per top level awt Frame.
* @version $Id: Win32BrowserControlCanvas.java,v 1.2 2007/01/17 11:43:43 edburns%acm.org Exp $
* @version $Id: Win32BrowserControlCanvas.java,v 1.3 2007/03/12 20:39:22 edburns%acm.org Exp $
*
* @see org.mozilla.webclient.BrowserControlCanvasFactory
*
@ -68,7 +68,7 @@ public class Win32BrowserControlCanvas extends BrowserControlCanvas {
*/
protected int getWindow() {
Integer result = (Integer)
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable(){
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable(){
public Object run() {
Integer result =
new Integer(Win32BrowserControlCanvas.this.getHandleToPeer());

View File

@ -24,6 +24,7 @@ package org.mozilla.webclient.impl.wrapper_native;
import org.mozilla.util.Assert;
import org.mozilla.util.Log;
import org.mozilla.util.ParameterCheck;
import org.mozilla.util.ReturnRunnable;
import org.mozilla.webclient.BrowserControl;
import org.mozilla.webclient.WindowControl;
@ -84,7 +85,7 @@ public void setBounds(Rectangle rect)
getWrapperFactory().verifyInitialized();
Assert.assert_it(-1 != getNativeBrowserControl());
final Rectangle newBounds = rect;
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeSetBounds(getNativeBrowserControl(),
newBounds.x, newBounds.y,
@ -111,7 +112,7 @@ public void createWindow(int nativeWindow, Rectangle rect)
final int finalWidth = rect.width;
final int finalHeight = rect.height;
NativeEventThread.instance.pushBlockingWCRunnable(new NativeRealizeWCRunnable(nativeWin,
NativeEventThread.instance.pushBlockingReturnRunnable(new NativeRealizeWCRunnable(nativeWin,
nativeBc, rect, bc));
}
@ -152,7 +153,7 @@ public void setVisible(boolean newState)
{
getWrapperFactory().verifyInitialized();
final boolean finalBool = newState;
NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() {
NativeEventThread.instance.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
nativeSetVisible(getNativeBrowserControl(), finalBool);
return null;
@ -171,7 +172,7 @@ public void setFocus()
throw new UnimplementedException("\nUnimplementedException -----\n API Function WindowControl::setFocus has not yet been implemented.\n");
}
public class NativeRealizeWCRunnable extends WCRunnable {
public class NativeRealizeWCRunnable extends ReturnRunnable {
final private int nativeWin;
final private int nativeBc;
@ -235,7 +236,7 @@ public static void main(String [] args)
Log.setApplicationName("WindowControlImpl");
Log.setApplicationVersion("0.0");
Log.setApplicationVersionDate("$Id: WindowControlImpl.java,v 1.7 2007/01/22 12:35:14 edburns%acm.org Exp $");
Log.setApplicationVersionDate("$Id: WindowControlImpl.java,v 1.8 2007/03/12 20:39:22 edburns%acm.org Exp $");
try {
org.mozilla.webclient.BrowserControlFactory.setAppData(args[0]);

View File

@ -24,6 +24,7 @@ package org.mozilla.webclient.impl.wrapper_native;
import org.mozilla.util.Assert;
import org.mozilla.util.Log;
import org.mozilla.util.ParameterCheck;
import org.mozilla.util.ReturnRunnable;
import org.mozilla.webclient.BrowserControl;
import org.mozilla.webclient.BrowserControlCanvas;
@ -36,6 +37,8 @@ import org.mozilla.webclient.ImplObject;
import org.mozilla.webclient.impl.WrapperFactory;
import org.mozilla.webclient.impl.Service;
import org.mozilla.dom.DOMAccessor;
import java.util.Map;
import java.util.HashMap;
@ -71,8 +74,11 @@ import java.util.HashMap;
public class WrapperFactoryImpl extends Object implements WrapperFactory {
//
// Protected Constants
// Constants
//
public static final String JAVADOM_LOADED_PROPERTY_NAME =
"org.mozilla.webclient.impl.wrapper_native.javadomjni.loaded";
//
// Class Variables
@ -145,7 +151,7 @@ public class WrapperFactoryImpl extends Object implements WrapperFactory {
BrowserControl result = new BrowserControlImpl(this);
final int nativeBrowserControl = nativeCreateBrowserControl();
eventThread.pushBlockingWCRunnable(new WCRunnable() {
eventThread.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
WrapperFactoryImpl.this.nativeInitBrowserControl(nativeWrapperFactory, nativeBrowserControl);
return null;
@ -166,7 +172,7 @@ public class WrapperFactoryImpl extends Object implements WrapperFactory {
if (null != (nativeBc = (Integer) browserControls.get(toDelete))) {
final int nativeBrowserControl = nativeBc.intValue();
eventThread.pushBlockingWCRunnable(new WCRunnable() {
eventThread.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
WrapperFactoryImpl.this.nativeDestroyBrowserControl(nativeBrowserControl);
return null;
@ -279,6 +285,14 @@ public class WrapperFactoryImpl extends Object implements WrapperFactory {
public int loadNativeLibraryIfNecessary() {
System.loadLibrary("webclient");
System.setProperty(JAVADOM_LOADED_PROPERTY_NAME, "true");
try {
System.loadLibrary("javadomjni");
DOMAccessor.setNativeLibraryLoaded(true);
}
catch (Exception ex) {
System.setProperty(JAVADOM_LOADED_PROPERTY_NAME, "false");
}
nativeWrapperFactory = nativeCreateNativeWrapperFactory();
Assert.assert_it(-1 != nativeWrapperFactory);
@ -335,7 +349,7 @@ public class WrapperFactoryImpl extends Object implements WrapperFactory {
initialized = true;
try {
eventThread.pushBlockingWCRunnable(new WCRunnable() {
eventThread.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
((Service)WrapperFactoryImpl.this.profileManager).startup();
@ -372,7 +386,7 @@ public void terminate() throws Exception
throw new IllegalStateException("Already terminated");
}
eventThread.pushBlockingWCRunnable(new WCRunnable() {
eventThread.pushBlockingReturnRunnable(new ReturnRunnable() {
public Object run() {
Assert.assert_it(null != bookmarks);
// PENDING(edburns): 20070130 XULRunner has no bookmarks ((Service)bookmarks).shutdown();