SECTION: Changes
M build-tests.xml - changes to make unit tests run again. M build.xml - updated version - create the services definition for the webclient implementation M classes_spec/org/mozilla/webclient/BrowserControlCanvas.java M classes_spec/org/mozilla/webclient/BrowserControlImpl.java - temporary hacks until we have everything migrated to the new package structure. M classes_spec/org/mozilla/webclient/BrowserControlFactory.java - Make this class be a shim to the implementation specific instance. A classes_spec/org/mozilla/webclient/BrowserControlFactoryInterface.java - Interface to be implemented by the webclient implementor A classes_spec/org/mozilla/webclient/impl/BrowserControlFactoryImpl.java - concrete implementation of BrowserControlFactoryInterface A test/automated/src/classes/org/mozilla/webclient/BrowserControlFactoryTest.java - test that the factory can be instantiated. M test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java - Make sure we have our bin dir set. Index: build-tests.xml =================================================================== RCS file: /cvsroot/mozilla/java/webclient/build-tests.xml,v retrieving revision 1.1 diff -u -r1.1 build-tests.xml --- build-tests.xml 1 Oct 2002 00:39:18 -0000 1.1 +++ build-tests.xml 6 Sep 2003 06:22:05 -0000 @@ -3,7 +3,7 @@ SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. --> -<project name="Webclient Unit Tests" default="test.local" basedir="."> +<project name="Webclient Unit Tests" default="run.test" basedir="."> <!-- This is a generic build.xml file for Ant that is used to run the @@ -75,7 +75,7 @@ <path id="test.classpath"> <pathelement location="${junit.jar}"/> - <pathelement location="${build.home}/classes"/> + <pathelement location="${build.home}"/> <pathelement location="${out.test.dir}/classes"/> </path> @@ -87,6 +87,8 @@ --> <target name="compile.test"> + <echo message="${build.home}"/> + <mkdir dir="${out.test.dir}/classes"/> <javac srcdir="${src.test.dir}" @@ -125,6 +127,7 @@ <jvmarg value="-Djava.library.path=${myenv.MOZILLA_FIVE_HOME}:${myenv.MOZILLA_FIVE_HOME}/components"/> <jvmarg value="-DNSPR_LOG_MODULES=${myenv.NSPR_LOG_MODULES}"/> <jvmarg value="-DNSPR_LOG_FILE=${myenv.NSPR_LOG_FILE}"/> + <jvmarg value="-DBROWSER_BIN_DIR=${myenv.MOZILLA_FIVE_HOME}"/> <jvmarg line="${debug.jvm.args}"/> @@ -132,7 +135,11 @@ <formatter type="plain" usefile="false"/> + <test name="org.mozilla.webclient.BrowserControlFactoryTest"/> +<!-- non-running tests + <test name="org.mozilla.webclient.wrapper_native.gtk.TestGtkBrowserControlCanvas"/> +--> </junit> Index: build.xml =================================================================== RCS file: /cvsroot/mozilla/java/webclient/build.xml,v retrieving revision 1.15 diff -u -r1.15 build.xml --- build.xml 9 Jun 2003 20:05:33 -0000 1.15 +++ build.xml 6 Sep 2003 06:22:06 -0000 @@ -30,7 +30,7 @@ <property name="Name" value="webclient"/> <property name="name" value="webclient"/> - <property name="version" value="20020916"/> + <property name="version" value="20030906"/> <!-- ************ Per user local properties ******************************* --> @@ -85,8 +85,12 @@ <include name="org/mozilla/webclient/*"/> <include name="org/mozilla/webclient/wrapper_native/*"/> + <include name="org/mozilla/webclient/impl/**"/> <include name="org/mozilla/webclient/test/*"/> </javac> + + <mkdir dir="${build.home}/META-INF/services"/> + <echo file="${build.home}/META-INF/services/org.mozilla.webclient.BrowserControlFactoryInterface">org.mozilla.webclient.impl.BrowserControlFactoryImpl</echo> </target> Index: classes_spec/org/mozilla/webclient/BrowserControlCanvas.java =================================================================== RCS file: /cvsroot/mozilla/java/webclient/classes_spec/org/mozilla/webclient/BrowserControlCanvas.java,v retrieving revision 1.5 diff -u -r1.5 BrowserControlCanvas.java --- classes_spec/org/mozilla/webclient/BrowserControlCanvas.java 9 Apr 2003 17:42:30 -0000 1.5 +++ classes_spec/org/mozilla/webclient/BrowserControlCanvas.java 6 Sep 2003 06:22:06 -0000 @@ -114,7 +114,8 @@ } // BrowserControlCanvas() ctor -protected void initialize(BrowserControl controlImpl) +// PENDING(edburns): make this protected again +public void initialize(BrowserControl controlImpl) { ParameterCheck.nonNull(controlImpl); webShell = controlImpl; Index: classes_spec/org/mozilla/webclient/BrowserControlFactory.java =================================================================== RCS file: /cvsroot/mozilla/java/webclient/classes_spec/org/mozilla/webclient/BrowserControlFactory.java,v retrieving revision 1.7 diff -u -r1.7 BrowserControlFactory.java --- classes_spec/org/mozilla/webclient/BrowserControlFactory.java 1 Oct 2002 00:39:20 -0000 1.7 +++ classes_spec/org/mozilla/webclient/BrowserControlFactory.java 6 Sep 2003 06:22:06 -0000 @@ -35,22 +35,38 @@ import java.io.File; import java.io.FileNotFoundException; -/** - * - * <B>BrowserControlFactory</B> creates concrete instances of BrowserControl - - * <B>Lifetime And Scope</B> <P> +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.Properties; - * This is a static class, it is neven instantiated. +/** + * + * <p><B>BrowserControlFactory</B> uses a discovery algorithm to find + * an implementation of {@link BrowserControlFactoryInterface}. All of + * the public static methods in this class simply call through to this + * implemenatation instance.</p> + * + * <p>The discovery mechanism used is to look try to load a resource + * called + * <code>META-INF/services/org.mozilla.webclient.BrowserControlFactoryInterface</code>. + * If the resource is found, interpret it as a <code>Properties</code> + * file and read out its first line. Interpret the first line as the + * fully qualified class name of a class that implements {@link + * BrowserControlFactoryInterface}. The named class must have a public + * no-arg constructor.</p> + * * * @version $Id: BrowserControlFactory.java,v 1.7 2002/10/01 00:39:20 edburns%acm.org Exp $ * - * @see org.mozilla.webclient.test.EmbeddedMozilla - + * */ -public class BrowserControlFactory extends Object +public class BrowserControlFactory extends Object { // // Protected Constants @@ -60,24 +76,13 @@ // Class Variables // - private static boolean appDataHasBeenSet = false; - private static Class browserControlCanvasClass = null; - private static String platformCanvasClassName = null; - private static String browserType = null; - -// -// Instance Variables -// - -// Attribute Instance Variables - -// Relationship Instance Variables +private static BrowserControlFactoryInterface instance = null; // // Constructors and Initializers // -public BrowserControlFactory() +private BrowserControlFactory() { Assert.assert_it(false, "This class shouldn't be constructed."); } @@ -88,179 +93,97 @@ public static void setAppData(String absolutePathToNativeBrowserBinDir) throws FileNotFoundException, ClassNotFoundException { - BrowserControlFactory.setAppData(BrowserControl.BROWSER_TYPE_NATIVE, absolutePathToNativeBrowserBinDir); + getInstance().setAppData(BrowserControl.BROWSER_TYPE_NATIVE, absolutePathToNativeBrowserBinDir); } - - /** - - * This method is used to set per-application instance data, such as - * the location of the browser binary. - - * @param myBrowserType. Either "native" or "nonnative" - - * @param absolutePathToNativeBrowserBinDir the path to the bin dir - * of the native browser, including the bin. ie: - * "D:\Projects\mozilla\dist\win32_d.obj\bin" - - */ - public static void setAppData(String myBrowserType, String absolutePathToNativeBrowserBinDir) throws FileNotFoundException, ClassNotFoundException { - browserType = myBrowserType; - if (!appDataHasBeenSet) { - // figure out the correct value for platformCanvasClassName - if (browserType.equals(BrowserControl.BROWSER_TYPE_NON_NATIVE)) { - platformCanvasClassName = "org.mozilla.webclient.wrapper_nonnative.JavaBrowserControlCanvas"; - } - else { - ParameterCheck.nonNull(absolutePathToNativeBrowserBinDir); - - // verify that the directory exists: - File binDir = new File(absolutePathToNativeBrowserBinDir); - if (!binDir.exists()) { - throw new FileNotFoundException("Directory " + absolutePathToNativeBrowserBinDir + " is not found."); - } - - // This hack is necessary for Sun Bug #4303996 - java.awt.Canvas c = new java.awt.Canvas(); - platformCanvasClassName = determinePlatformCanvasClassName(); - } - // end of figuring out the correct value for platformCanvasClassName - if (platformCanvasClassName != null) { - browserControlCanvasClass = Class.forName(platformCanvasClassName); - } - else { - throw new ClassNotFoundException("Could not determine BrowserControlCanvas class to load\n"); - } - - try { - BrowserControlImpl.appInitialize(browserType, absolutePathToNativeBrowserBinDir); - } - catch (Exception e) { - throw new ClassNotFoundException("Can't initialize native browser: " + - e.getMessage()); - } - appDataHasBeenSet = true; - } + getInstance().setAppData(myBrowserType, absolutePathToNativeBrowserBinDir); } public static void appTerminate() throws Exception { - BrowserControlImpl.appTerminate(); + getInstance().appTerminate(); } public static BrowserControl newBrowserControl() throws InstantiationException, IllegalAccessException, IllegalStateException { - if (!appDataHasBeenSet) { - throw new IllegalStateException("Can't create BrowserControl instance: setAppData() has not been called."); - } - Assert.assert_it(null != browserControlCanvasClass); - - BrowserControlCanvas newCanvas = null; - BrowserControl result = null; - newCanvas = (BrowserControlCanvas) browserControlCanvasClass.newInstance(); - if (null != newCanvas && - null != (result = new BrowserControlImpl(browserType, newCanvas))) { - newCanvas.initialize(result); - } - + BrowserControl result = null; + result = getInstance().newBrowserControl(); return result; } -/** - - * BrowserControlFactory.deleteBrowserControl is called with a - * BrowserControl instance obtained from - * BrowserControlFactory.newBrowserControl. This method renders the - * argument instance completely un-usable. It should be called when the - * BrowserControl instance is no longer needed. This method simply - * calls through to the non-public BrowserControlImpl.delete() method. - - * @see org.mozilla.webclient.ImplObject#delete - - */ - public static void deleteBrowserControl(BrowserControl toDelete) { - ParameterCheck.nonNull(toDelete); - ((BrowserControlImpl)toDelete).delete(); + getInstance().deleteBrowserControl(toDelete); } // -// General Methods -// - -/** +// helper methods +// - * Called from setAppData() in the native case. This method simply - * figures out the proper name for the class that is the - * BrowserControlCanvas. - - * @return "org.mozilla.webclient.wrapper_native.win32.Win32BrowserControlCanvas" or "org.mozilla.webclient.wrapper_native.gtk.GtkBrowserControlCanvas" - - */ - -private static String determinePlatformCanvasClassName() +protected static BrowserControlFactoryInterface getInstance() { - String result = null; - // cause the native library to be loaded - // PENDING(edburns): do some magic to determine the right kind of - // MozWebShellCanvas to instantiate - - // How about this: - // I try loading sun.awt.windows.WDrawingSurfaceInfo. If it doesn't - // load, then I try loading sun.awt.motif.MDrawingSufaceInfo. If - // none loads, then I return a error message. - // If you think up of a better way, let me know. - // -- Mark - // Here is what I think is a better way: query the os.name property. - // This works in JDK1.4, as well. - // -- edburns + if (null != instance) { + return instance; + } - String osName = System.getProperty("os.name"); - - if (null != osName) { - if (-1 != osName.indexOf("indows")) { - result = "org.mozilla.webclient.wrapper_native.win32.Win32BrowserControlCanvas"; - } - else { - result = "org.mozilla.webclient.wrapper_native.gtk.GtkBrowserControlCanvas"; - } + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + if (classLoader == null) { + throw new RuntimeException("Context ClassLoader"); } - return result; -} - -// ----UNIT_TEST_START - -// -// Test methods -// - -public static void main(String [] args) -{ - System.out.println("doing asserts"); - Assert.setEnabled(true); - Log.setApplicationName("BrowserControlFactory"); - Log.setApplicationVersion("0.0"); - Log.setApplicationVersionDate("$Id: BrowserControlFactory.java,v 1.7 2002/10/01 00:39:20 edburns%acm.org Exp $"); - - BrowserControlCanvas canvas = null; - BrowserControl control = null; + BufferedReader reader = null; + InputStream stream = null; + String + className = null, + resourceName = "META-INF/services/org.mozilla.webclient.BrowserControlFactoryInterface"; try { - BrowserControlFactory.setAppData("nonnative", args[0]); - control = BrowserControlFactory.newBrowserControl(); - Assert.assert_it(control != null); - canvas = (BrowserControlCanvas) control.queryInterface("webclient.BrowserControlCanvas"); - Assert.assert_it(canvas != null); + stream = classLoader.getResourceAsStream(resourceName); + if (stream != null) { + // Deal with systems whose native encoding is possibly + // different from the way that the services entry was created + try { + reader = + new BufferedReader(new InputStreamReader(stream, + "UTF-8")); + } catch (UnsupportedEncodingException e) { + reader = new BufferedReader(new InputStreamReader(stream)); + } + className = reader.readLine(); + reader.close(); + reader = null; + stream = null; + } + } catch (IOException e) { + } catch (SecurityException e) { + } finally { + if (reader != null) { + try { + reader.close(); + } catch (Throwable t) { + ; + } + reader = null; + stream = null; + } + if (stream != null) { + try { + stream.close(); + } catch (Throwable t) { + ; + } + stream = null; + } } - catch (Exception e) { - System.out.println("\n BrowserControl not getting created \n"); - System.out.println(e.getMessage()); + if (null != className) { + try { + Class clazz = classLoader.loadClass(className); + instance = (BrowserControlFactoryInterface) (clazz.newInstance()); + } catch (Exception e) { + } } + return instance; } - -// ----UNIT_TEST_END } // end of class BrowserControlFactory Index: classes_spec/org/mozilla/webclient/BrowserControlImpl.java =================================================================== RCS file: /cvsroot/mozilla/java/webclient/classes_spec/org/mozilla/webclient/BrowserControlImpl.java,v retrieving revision 1.7 diff -u -r1.7 BrowserControlImpl.java --- classes_spec/org/mozilla/webclient/BrowserControlImpl.java 27 Jul 2001 20:57:52 -0000 1.7 +++ classes_spec/org/mozilla/webclient/BrowserControlImpl.java 6 Sep 2003 06:22:07 -0000 @@ -30,8 +30,8 @@ import org.mozilla.util.Utilities; - -class BrowserControlImpl extends Object implements BrowserControl +// PENDING(edburns); move this inside impl package +public class BrowserControlImpl extends Object implements BrowserControl { // // Protected Constants @@ -145,8 +145,8 @@ // // Class methods // - -static void appInitialize(String myBrowserType, String verifiedBinDirAbsolutePath) throws Exception +// PENDING(edburns): make this package private again +public static void appInitialize(String myBrowserType, String verifiedBinDirAbsolutePath) throws Exception { browserType = myBrowserType; if (null == wrapperFactory) { @@ -157,7 +157,8 @@ wrapperFactory.initialize(verifiedBinDirAbsolutePath); } -static void appTerminate() throws Exception +// PENDING(edburns): make this package private again +public static void appTerminate() throws Exception { Assert.assert_it(null != wrapperFactory); Index: test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java =================================================================== RCS file: /cvsroot/mozilla/java/webclient/test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java,v retrieving revision 1.1 diff -u -r1.1 WebclientTestCase.java --- test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java 1 Oct 2002 00:39:28 -0000 1.1 +++ test/automated/src/classes/org/mozilla/webclient/WebclientTestCase.java 6 Sep 2003 06:22:08 -0000 @@ -133,6 +133,16 @@ } +protected void verifyBinDirSet() +{ + assertTrue("BROWSER_BIN_DIR is not set", + null != System.getProperty("BROWSER_BIN_DIR")); +} + +protected String getBrowserBinDir() { + return System.getProperty("BROWSER_BIN_DIR"); +} + /** * assertTrue that NSPR_LOG_FILE is set. @@ -162,6 +172,7 @@ // make sure we have at least PR_LOG_DEBUG set verifyLogModuleValueIsAtLeastN(WEBCLIENTSTUB_LOG_MODULE, 4); verifyLogModuleValueIsAtLeastN(WEBCLIENT_LOG_MODULE, 4); + verifyBinDirSet(); if (sendOutputToFile()) { verifyOutputFileIsSet(); }
This commit is contained in:
Родитель
fc0873c197
Коммит
e508b23f4e
|
@ -3,7 +3,7 @@
|
|||
SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||
-->
|
||||
|
||||
<project name="Webclient Unit Tests" default="test.local" basedir=".">
|
||||
<project name="Webclient Unit Tests" default="run.test" basedir=".">
|
||||
|
||||
<!--
|
||||
This is a generic build.xml file for Ant that is used to run the
|
||||
|
@ -75,7 +75,7 @@
|
|||
|
||||
<path id="test.classpath">
|
||||
<pathelement location="${junit.jar}"/>
|
||||
<pathelement location="${build.home}/classes"/>
|
||||
<pathelement location="${build.home}"/>
|
||||
<pathelement location="${out.test.dir}/classes"/>
|
||||
</path>
|
||||
|
||||
|
@ -87,6 +87,8 @@
|
|||
-->
|
||||
<target name="compile.test">
|
||||
|
||||
<echo message="${build.home}"/>
|
||||
|
||||
<mkdir dir="${out.test.dir}/classes"/>
|
||||
|
||||
<javac srcdir="${src.test.dir}"
|
||||
|
@ -125,6 +127,7 @@
|
|||
<jvmarg value="-Djava.library.path=${myenv.MOZILLA_FIVE_HOME}:${myenv.MOZILLA_FIVE_HOME}/components"/>
|
||||
<jvmarg value="-DNSPR_LOG_MODULES=${myenv.NSPR_LOG_MODULES}"/>
|
||||
<jvmarg value="-DNSPR_LOG_FILE=${myenv.NSPR_LOG_FILE}"/>
|
||||
<jvmarg value="-DBROWSER_BIN_DIR=${myenv.MOZILLA_FIVE_HOME}"/>
|
||||
<jvmarg line="${debug.jvm.args}"/>
|
||||
|
||||
|
||||
|
@ -132,7 +135,11 @@
|
|||
|
||||
<formatter type="plain" usefile="false"/>
|
||||
|
||||
<test name="org.mozilla.webclient.BrowserControlFactoryTest"/>
|
||||
<!-- non-running tests
|
||||
|
||||
<test name="org.mozilla.webclient.wrapper_native.gtk.TestGtkBrowserControlCanvas"/>
|
||||
-->
|
||||
|
||||
</junit>
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
<property name="Name" value="webclient"/>
|
||||
<property name="name" value="webclient"/>
|
||||
<property name="version" value="20020916"/>
|
||||
<property name="version" value="20030906"/>
|
||||
|
||||
<!-- ************ Per user local properties ******************************* -->
|
||||
|
||||
|
@ -85,9 +85,13 @@
|
|||
|
||||
<include name="org/mozilla/webclient/*"/>
|
||||
<include name="org/mozilla/webclient/wrapper_native/*"/>
|
||||
<include name="org/mozilla/webclient/impl/**"/>
|
||||
<include name="org/mozilla/webclient/test/*"/>
|
||||
</javac>
|
||||
|
||||
<mkdir dir="${build.home}/META-INF/services"/>
|
||||
<echo file="${build.home}/META-INF/services/org.mozilla.webclient.BrowserControlFactoryInterface">org.mozilla.webclient.impl.BrowserControlFactoryImpl</echo>
|
||||
|
||||
</target>
|
||||
|
||||
<target name="compile.src_share" depends="compile.javah.headers">
|
||||
|
|
|
@ -52,7 +52,7 @@ import java.awt.*;
|
|||
|
||||
* See concrete subclasses for scope info.
|
||||
|
||||
* @version $Id: BrowserControlCanvas.java,v 1.5 2003-04-09 17:42:30 edburns%acm.org Exp $
|
||||
* @version $Id: BrowserControlCanvas.java,v 1.6 2003-09-06 06:26:45 edburns%acm.org Exp $
|
||||
|
||||
* @see org.mozilla.webclient.win32.Win32BrowserControlCanvas
|
||||
|
||||
|
@ -114,7 +114,8 @@ protected BrowserControlCanvas ()
|
|||
|
||||
} // BrowserControlCanvas() ctor
|
||||
|
||||
protected void initialize(BrowserControl controlImpl)
|
||||
// PENDING(edburns): make this protected again
|
||||
public void initialize(BrowserControl controlImpl)
|
||||
{
|
||||
ParameterCheck.nonNull(controlImpl);
|
||||
webShell = controlImpl;
|
||||
|
|
|
@ -35,22 +35,38 @@ import org.mozilla.util.ParameterCheck;
|
|||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Properties;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* <B>BrowserControlFactory</B> creates concrete instances of BrowserControl
|
||||
|
||||
* <B>Lifetime And Scope</B> <P>
|
||||
|
||||
* This is a static class, it is neven instantiated.
|
||||
|
||||
* <p><B>BrowserControlFactory</B> uses a discovery algorithm to find
|
||||
* an implementation of {@link BrowserControlFactoryInterface}. All of
|
||||
* the public static methods in this class simply call through to this
|
||||
* implemenatation instance.</p>
|
||||
*
|
||||
* @version $Id: BrowserControlFactory.java,v 1.7 2002-10-01 00:39:20 edburns%acm.org Exp $
|
||||
* <p>The discovery mechanism used is to look try to load a resource
|
||||
* called
|
||||
* <code>META-INF/services/org.mozilla.webclient.BrowserControlFactoryInterface</code>.
|
||||
* If the resource is found, interpret it as a <code>Properties</code>
|
||||
* file and read out its first line. Interpret the first line as the
|
||||
* fully qualified class name of a class that implements {@link
|
||||
* BrowserControlFactoryInterface}. The named class must have a public
|
||||
* no-arg constructor.</p>
|
||||
*
|
||||
*
|
||||
* @version $Id: BrowserControlFactory.java,v 1.8 2003-09-06 06:26:45 edburns%acm.org Exp $
|
||||
*
|
||||
* @see org.mozilla.webclient.test.EmbeddedMozilla
|
||||
|
||||
*
|
||||
*/
|
||||
|
||||
public class BrowserControlFactory extends Object
|
||||
public class BrowserControlFactory extends Object
|
||||
{
|
||||
//
|
||||
// Protected Constants
|
||||
|
@ -60,24 +76,13 @@ public class BrowserControlFactory extends Object
|
|||
// Class Variables
|
||||
//
|
||||
|
||||
private static boolean appDataHasBeenSet = false;
|
||||
private static Class browserControlCanvasClass = null;
|
||||
private static String platformCanvasClassName = null;
|
||||
private static String browserType = null;
|
||||
|
||||
//
|
||||
// Instance Variables
|
||||
//
|
||||
|
||||
// Attribute Instance Variables
|
||||
|
||||
// Relationship Instance Variables
|
||||
private static BrowserControlFactoryInterface instance = null;
|
||||
|
||||
//
|
||||
// Constructors and Initializers
|
||||
//
|
||||
|
||||
public BrowserControlFactory()
|
||||
private BrowserControlFactory()
|
||||
{
|
||||
Assert.assert_it(false, "This class shouldn't be constructed.");
|
||||
}
|
||||
|
@ -88,179 +93,97 @@ public BrowserControlFactory()
|
|||
|
||||
public static void setAppData(String absolutePathToNativeBrowserBinDir) throws FileNotFoundException, ClassNotFoundException
|
||||
{
|
||||
BrowserControlFactory.setAppData(BrowserControl.BROWSER_TYPE_NATIVE, absolutePathToNativeBrowserBinDir);
|
||||
getInstance().setAppData(BrowserControl.BROWSER_TYPE_NATIVE, absolutePathToNativeBrowserBinDir);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
* This method is used to set per-application instance data, such as
|
||||
* the location of the browser binary.
|
||||
|
||||
* @param myBrowserType. Either "native" or "nonnative"
|
||||
|
||||
* @param absolutePathToNativeBrowserBinDir the path to the bin dir
|
||||
* of the native browser, including the bin. ie:
|
||||
* "D:\Projects\mozilla\dist\win32_d.obj\bin"
|
||||
|
||||
*/
|
||||
|
||||
public static void setAppData(String myBrowserType, String absolutePathToNativeBrowserBinDir) throws FileNotFoundException, ClassNotFoundException
|
||||
{
|
||||
browserType = myBrowserType;
|
||||
if (!appDataHasBeenSet) {
|
||||
// figure out the correct value for platformCanvasClassName
|
||||
if (browserType.equals(BrowserControl.BROWSER_TYPE_NON_NATIVE)) {
|
||||
platformCanvasClassName = "org.mozilla.webclient.wrapper_nonnative.JavaBrowserControlCanvas";
|
||||
}
|
||||
else {
|
||||
ParameterCheck.nonNull(absolutePathToNativeBrowserBinDir);
|
||||
|
||||
// verify that the directory exists:
|
||||
File binDir = new File(absolutePathToNativeBrowserBinDir);
|
||||
if (!binDir.exists()) {
|
||||
throw new FileNotFoundException("Directory " + absolutePathToNativeBrowserBinDir + " is not found.");
|
||||
}
|
||||
|
||||
// This hack is necessary for Sun Bug #4303996
|
||||
java.awt.Canvas c = new java.awt.Canvas();
|
||||
platformCanvasClassName = determinePlatformCanvasClassName();
|
||||
}
|
||||
// end of figuring out the correct value for platformCanvasClassName
|
||||
if (platformCanvasClassName != null) {
|
||||
browserControlCanvasClass = Class.forName(platformCanvasClassName);
|
||||
}
|
||||
else {
|
||||
throw new ClassNotFoundException("Could not determine BrowserControlCanvas class to load\n");
|
||||
}
|
||||
|
||||
try {
|
||||
BrowserControlImpl.appInitialize(browserType, absolutePathToNativeBrowserBinDir);
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new ClassNotFoundException("Can't initialize native browser: " +
|
||||
e.getMessage());
|
||||
}
|
||||
appDataHasBeenSet = true;
|
||||
}
|
||||
getInstance().setAppData(myBrowserType, absolutePathToNativeBrowserBinDir);
|
||||
}
|
||||
|
||||
public static void appTerminate() throws Exception
|
||||
{
|
||||
BrowserControlImpl.appTerminate();
|
||||
getInstance().appTerminate();
|
||||
}
|
||||
|
||||
public static BrowserControl newBrowserControl() throws InstantiationException, IllegalAccessException, IllegalStateException
|
||||
{
|
||||
if (!appDataHasBeenSet) {
|
||||
throw new IllegalStateException("Can't create BrowserControl instance: setAppData() has not been called.");
|
||||
}
|
||||
Assert.assert_it(null != browserControlCanvasClass);
|
||||
|
||||
BrowserControlCanvas newCanvas = null;
|
||||
BrowserControl result = null;
|
||||
newCanvas = (BrowserControlCanvas) browserControlCanvasClass.newInstance();
|
||||
if (null != newCanvas &&
|
||||
null != (result = new BrowserControlImpl(browserType, newCanvas))) {
|
||||
newCanvas.initialize(result);
|
||||
}
|
||||
|
||||
BrowserControl result = null;
|
||||
result = getInstance().newBrowserControl();
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
* BrowserControlFactory.deleteBrowserControl is called with a
|
||||
* BrowserControl instance obtained from
|
||||
* BrowserControlFactory.newBrowserControl. This method renders the
|
||||
* argument instance completely un-usable. It should be called when the
|
||||
* BrowserControl instance is no longer needed. This method simply
|
||||
* calls through to the non-public BrowserControlImpl.delete() method.
|
||||
|
||||
* @see org.mozilla.webclient.ImplObject#delete
|
||||
|
||||
*/
|
||||
|
||||
public static void deleteBrowserControl(BrowserControl toDelete)
|
||||
{
|
||||
ParameterCheck.nonNull(toDelete);
|
||||
((BrowserControlImpl)toDelete).delete();
|
||||
getInstance().deleteBrowserControl(toDelete);
|
||||
}
|
||||
|
||||
//
|
||||
// General Methods
|
||||
//
|
||||
// helper methods
|
||||
//
|
||||
|
||||
/**
|
||||
|
||||
* Called from setAppData() in the native case. This method simply
|
||||
* figures out the proper name for the class that is the
|
||||
* BrowserControlCanvas.
|
||||
|
||||
* @return "org.mozilla.webclient.wrapper_native.win32.Win32BrowserControlCanvas" or "org.mozilla.webclient.wrapper_native.gtk.GtkBrowserControlCanvas"
|
||||
|
||||
*/
|
||||
|
||||
private static String determinePlatformCanvasClassName()
|
||||
protected static BrowserControlFactoryInterface getInstance()
|
||||
{
|
||||
String result = null;
|
||||
// cause the native library to be loaded
|
||||
// PENDING(edburns): do some magic to determine the right kind of
|
||||
// MozWebShellCanvas to instantiate
|
||||
|
||||
// How about this:
|
||||
// I try loading sun.awt.windows.WDrawingSurfaceInfo. If it doesn't
|
||||
// load, then I try loading sun.awt.motif.MDrawingSufaceInfo. If
|
||||
// none loads, then I return a error message.
|
||||
// If you think up of a better way, let me know.
|
||||
// -- Mark
|
||||
// Here is what I think is a better way: query the os.name property.
|
||||
// This works in JDK1.4, as well.
|
||||
// -- edburns
|
||||
if (null != instance) {
|
||||
return instance;
|
||||
}
|
||||
|
||||
String osName = System.getProperty("os.name");
|
||||
|
||||
if (null != osName) {
|
||||
if (-1 != osName.indexOf("indows")) {
|
||||
result = "org.mozilla.webclient.wrapper_native.win32.Win32BrowserControlCanvas";
|
||||
}
|
||||
else {
|
||||
result = "org.mozilla.webclient.wrapper_native.gtk.GtkBrowserControlCanvas";
|
||||
}
|
||||
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
|
||||
if (classLoader == null) {
|
||||
throw new RuntimeException("Context ClassLoader");
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// ----UNIT_TEST_START
|
||||
|
||||
//
|
||||
// Test methods
|
||||
//
|
||||
|
||||
public static void main(String [] args)
|
||||
{
|
||||
System.out.println("doing asserts");
|
||||
Assert.setEnabled(true);
|
||||
Log.setApplicationName("BrowserControlFactory");
|
||||
Log.setApplicationVersion("0.0");
|
||||
Log.setApplicationVersionDate("$Id: BrowserControlFactory.java,v 1.7 2002-10-01 00:39:20 edburns%acm.org Exp $");
|
||||
|
||||
BrowserControlCanvas canvas = null;
|
||||
BrowserControl control = null;
|
||||
BufferedReader reader = null;
|
||||
InputStream stream = null;
|
||||
String
|
||||
className = null,
|
||||
resourceName = "META-INF/services/org.mozilla.webclient.BrowserControlFactoryInterface";
|
||||
try {
|
||||
BrowserControlFactory.setAppData("nonnative", args[0]);
|
||||
control = BrowserControlFactory.newBrowserControl();
|
||||
Assert.assert_it(control != null);
|
||||
canvas = (BrowserControlCanvas) control.queryInterface("webclient.BrowserControlCanvas");
|
||||
Assert.assert_it(canvas != null);
|
||||
stream = classLoader.getResourceAsStream(resourceName);
|
||||
if (stream != null) {
|
||||
// Deal with systems whose native encoding is possibly
|
||||
// different from the way that the services entry was created
|
||||
try {
|
||||
reader =
|
||||
new BufferedReader(new InputStreamReader(stream,
|
||||
"UTF-8"));
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
reader = new BufferedReader(new InputStreamReader(stream));
|
||||
}
|
||||
className = reader.readLine();
|
||||
reader.close();
|
||||
reader = null;
|
||||
stream = null;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
} catch (SecurityException e) {
|
||||
} finally {
|
||||
if (reader != null) {
|
||||
try {
|
||||
reader.close();
|
||||
} catch (Throwable t) {
|
||||
;
|
||||
}
|
||||
reader = null;
|
||||
stream = null;
|
||||
}
|
||||
if (stream != null) {
|
||||
try {
|
||||
stream.close();
|
||||
} catch (Throwable t) {
|
||||
;
|
||||
}
|
||||
stream = null;
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("\n BrowserControl not getting created \n");
|
||||
System.out.println(e.getMessage());
|
||||
if (null != className) {
|
||||
try {
|
||||
Class clazz = classLoader.loadClass(className);
|
||||
instance = (BrowserControlFactoryInterface) (clazz.newInstance());
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
// ----UNIT_TEST_END
|
||||
|
||||
} // end of class BrowserControlFactory
|
||||
|
|
|
@ -30,8 +30,8 @@ import org.mozilla.util.ParameterCheck;
|
|||
import org.mozilla.util.Utilities;
|
||||
|
||||
|
||||
|
||||
class BrowserControlImpl extends Object implements BrowserControl
|
||||
// PENDING(edburns); move this inside impl package
|
||||
public class BrowserControlImpl extends Object implements BrowserControl
|
||||
{
|
||||
//
|
||||
// Protected Constants
|
||||
|
@ -145,8 +145,8 @@ void delete()
|
|||
//
|
||||
// Class methods
|
||||
//
|
||||
|
||||
static void appInitialize(String myBrowserType, String verifiedBinDirAbsolutePath) throws Exception
|
||||
// PENDING(edburns): make this package private again
|
||||
public static void appInitialize(String myBrowserType, String verifiedBinDirAbsolutePath) throws Exception
|
||||
{
|
||||
browserType = myBrowserType;
|
||||
if (null == wrapperFactory) {
|
||||
|
@ -157,7 +157,8 @@ static void appInitialize(String myBrowserType, String verifiedBinDirAbsolutePat
|
|||
wrapperFactory.initialize(verifiedBinDirAbsolutePath);
|
||||
}
|
||||
|
||||
static void appTerminate() throws Exception
|
||||
// PENDING(edburns): make this package private again
|
||||
public static void appTerminate() throws Exception
|
||||
{
|
||||
Assert.assert_it(null != wrapperFactory);
|
||||
|
||||
|
@ -334,7 +335,7 @@ public static void main(String [] args)
|
|||
Assert.setEnabled(true);
|
||||
Log.setApplicationName("BrowserControlImpl");
|
||||
Log.setApplicationVersion("0.0");
|
||||
Log.setApplicationVersionDate("$Id: BrowserControlImpl.java,v 1.7 2001-07-27 20:57:52 ashuk%eng.sun.com Exp $");
|
||||
Log.setApplicationVersionDate("$Id: BrowserControlImpl.java,v 1.8 2003-09-06 06:26:45 edburns%acm.org Exp $");
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* $Id: BrowserControlFactoryTest.java,v 1.1 2003-09-06 06:26:50 edburns%acm.org Exp $
|
||||
*/
|
||||
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* 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 mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Sun
|
||||
* Microsystems, Inc. Portions created by Sun are
|
||||
* Copyright (C) 1999 Sun Microsystems, Inc. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s): Ed Burns <edburns@acm.org>
|
||||
*/
|
||||
|
||||
package org.mozilla.webclient;
|
||||
|
||||
import junit.framework.TestSuite;
|
||||
import junit.framework.Test;
|
||||
|
||||
// BrowserControlFactoryTest.java
|
||||
|
||||
public class BrowserControlFactoryTest extends WebclientTestCase {
|
||||
|
||||
public BrowserControlFactoryTest(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
public static Test suite() {
|
||||
return (new TestSuite(BrowserControlFactoryTest.class));
|
||||
}
|
||||
|
||||
//
|
||||
// Testcases
|
||||
//
|
||||
|
||||
public void testFactoryLocator() {
|
||||
try {
|
||||
BrowserControlFactory.setAppData(getBrowserBinDir());
|
||||
}
|
||||
catch (Throwable e) {
|
||||
assertTrue(e.getMessage() + " " + e, false);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* $Id: WebclientTestCase.java,v 1.1 2002-10-01 00:39:28 edburns%acm.org Exp $
|
||||
* $Id: WebclientTestCase.java,v 1.2 2003-09-06 06:26:50 edburns%acm.org Exp $
|
||||
*/
|
||||
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
|
@ -43,7 +43,7 @@ import junit.framework.TestCase;
|
|||
*
|
||||
* <B>Lifetime And Scope</B> <P>
|
||||
*
|
||||
* @version $Id: WebclientTestCase.java,v 1.1 2002-10-01 00:39:28 edburns%acm.org Exp $
|
||||
* @version $Id: WebclientTestCase.java,v 1.2 2003-09-06 06:26:50 edburns%acm.org Exp $
|
||||
*
|
||||
* @see Blah
|
||||
* @see Bloo
|
||||
|
@ -133,6 +133,16 @@ protected void verifyLogModuleValueIsAtLeastN(String logModuleName, int n)
|
|||
|
||||
}
|
||||
|
||||
protected void verifyBinDirSet()
|
||||
{
|
||||
assertTrue("BROWSER_BIN_DIR is not set",
|
||||
null != System.getProperty("BROWSER_BIN_DIR"));
|
||||
}
|
||||
|
||||
protected String getBrowserBinDir() {
|
||||
return System.getProperty("BROWSER_BIN_DIR");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
* assertTrue that NSPR_LOG_FILE is set.
|
||||
|
@ -162,6 +172,7 @@ protected void verifyPreconditions()
|
|||
// make sure we have at least PR_LOG_DEBUG set
|
||||
verifyLogModuleValueIsAtLeastN(WEBCLIENTSTUB_LOG_MODULE, 4);
|
||||
verifyLogModuleValueIsAtLeastN(WEBCLIENT_LOG_MODULE, 4);
|
||||
verifyBinDirSet();
|
||||
if (sendOutputToFile()) {
|
||||
verifyOutputFileIsSet();
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче