зеркало из https://github.com/mozilla/gecko-dev.git
113476328b
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(); } |
||
---|---|---|
.. | ||
build | ||
config | ||
dom | ||
external | ||
pluggable-jvm | ||
plugins | ||
util | ||
webclient | ||
xpcom | ||
.cvsignore | ||
README | ||
README.commercial | ||
build.properties.sample | ||
build.xml | ||
changelo | ||
makefiles |
README
20030713 This README documents the Java Enhancers to the Mozilla web browser. Currently, the only active sub-project is the Webclient Java API to the Mozilla web browser. This project also leverages the JavaDOM sub-project. Requirements: * J2SDK 1.3.1 or later * Apache ant * Successfully built debug enabled Mozilla 1.4 tree How To Build: * cd to the directory above your top level mozilla directory and cvs checkout the Webclient module. * Modify mozilla/allmakefiles.sh and prepend the contents of the file "makefiles", in this directory, to add_makefiles section after the "Common makfiles used by everyone" comment. * re-run ./configure to generate the java makefiles * put the "mozilla/dist/bin" directory in your LD_LIBRARY_PATH on Unix, or PATH on Win32. * set the value of the environment var MOZ_JDKHOME to be your J2SDK directory. * Create a build.properties file in the mozilla/java directory with the following contents. ###### build.unix.classes=true build.home=/home/edburns/Projects/mozilla/MOZILLA_1_4/mozilla/dist/classes compile.debug=true ###### Of course, set the values of the above properties correctly according to your system. * run "ant" in the mozilla/java directory. This will build webclient and all dependent libraries. * cd to mozilla/java/webclient/src_moz and run the "runem" batch file to run the test browser. Problems? * post to netscape.public.mozilla.java newsgroup