From 8539e829527754f22f7269c7e6a67d27137ec451 Mon Sep 17 00:00:00 2001 From: "edburns%acm.org" Date: Fri, 25 Jun 2004 13:59:54 +0000 Subject: [PATCH] Ok after this checkin we now have all the functionality of Sun's JDIC WebBrowser , with the following exceptions: - we're based on mozilla 1.6 - it only works on windows - we don't have mouse event support - we only support mozilla, not IE So, webclient still has a ways to go until we reach its former glory, but reach it we will. I'm going to assemble a 2.0 alpha 1 source code only release, including build instructions, from what we have now. I'd love it if someone could get the unit tests working on GNU/Linux again. I think the problem has to do with our old friend GDKSUPERWIN. Next step is to assemble the 2.0 alpha 1 source code release! Ed M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/NavigationImpl.java M webclient/src_moz/NavigationImpl.cpp - re-enable POST M webclient/src_moz/EmbedWindow.cpp M webclient/src_moz/EmbedWindow.h - expose DocShell post method. M webclient/test/automated/src/classes/org/mozilla/util/THTTPD.java M webclient/test/automated/src/classes/org/mozilla/webclient/NavigationTest.java - test code for POST --- java/webclient/build-tests.xml | 30 +- java/webclient/build.xml | 6 + .../impl/wrapper_native/CurrentPageImpl.java | 11 +- java/webclient/src_moz/CurrentPageImpl.cpp | 15 +- java/webclient/src_moz/EmbedWindow.cpp | 29 ++ java/webclient/src_moz/EmbedWindow.h | 1 + .../mozilla/webclient/test/MyStatusBar.java | 62 +++ .../mozilla/webclient/test/TestBrowser.java | 430 ++++++++++++++++++ .../mozilla/webclient/test/images/Back.png | Bin 0 -> 407 bytes .../mozilla/webclient/test/images/Forward.png | Bin 0 -> 390 bytes .../mozilla/webclient/test/images/Reload.png | Bin 0 -> 555 bytes .../mozilla/webclient/test/images/Right.gif | Bin 0 -> 82 bytes .../mozilla/webclient/test/images/Stop.png | Bin 0 -> 765 bytes 13 files changed, 573 insertions(+), 11 deletions(-) create mode 100644 java/webclient/test/manual/src/classes/org/mozilla/webclient/test/MyStatusBar.java create mode 100644 java/webclient/test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java create mode 100644 java/webclient/test/manual/src/classes/org/mozilla/webclient/test/images/Back.png create mode 100644 java/webclient/test/manual/src/classes/org/mozilla/webclient/test/images/Forward.png create mode 100644 java/webclient/test/manual/src/classes/org/mozilla/webclient/test/images/Reload.png create mode 100644 java/webclient/test/manual/src/classes/org/mozilla/webclient/test/images/Right.gif create mode 100644 java/webclient/test/manual/src/classes/org/mozilla/webclient/test/images/Stop.png diff --git a/java/webclient/build-tests.xml b/java/webclient/build-tests.xml index a058da94307d..70e05e747286 100644 --- a/java/webclient/build-tests.xml +++ b/java/webclient/build-tests.xml @@ -65,6 +65,7 @@ + @@ -86,7 +87,7 @@ - + @@ -100,6 +101,7 @@ + @@ -120,6 +122,13 @@ + + + + + + + @@ -130,7 +139,7 @@ - + @@ -160,6 +169,23 @@ + + + + + + + + + + + + + + + + diff --git a/java/webclient/build.xml b/java/webclient/build.xml index 0765384814c4..0f98ad6fdf6d 100644 --- a/java/webclient/build.xml +++ b/java/webclient/build.xml @@ -304,6 +304,12 @@ ${myenv.MOZ_JDKHOME}/bin/java ${debug.options} org.mozilla.webclient.test.Embedd + + + + + + diff --git a/java/webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java b/java/webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java index 4d39f70522d9..dc7ed341e863 100644 --- a/java/webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java +++ b/java/webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/CurrentPageImpl.java @@ -94,9 +94,12 @@ public void copyCurrentSelectionToSystemClipboard() getWrapperFactory().verifyInitialized(); Assert.assert_it(-1 != getNativeBrowserControl()); - synchronized(getBrowserControl()) { - nativeCopyCurrentSelectionToSystemClipboard(getNativeBrowserControl()); - } + NativeEventThread.instance.pushBlockingWCRunnable(new WCRunnable() { + public Object run() { + nativeCopyCurrentSelectionToSystemClipboard(CurrentPageImpl.this.getNativeBrowserControl()); + return null; + } + }); } public Selection getSelection() { @@ -336,7 +339,7 @@ public static void main(String [] args) Assert.setEnabled(true); Log.setApplicationName("CurrentPageImpl"); Log.setApplicationVersion("0.0"); - Log.setApplicationVersionDate("$Id: CurrentPageImpl.java,v 1.4 2004/04/28 14:39:54 edburns%acm.org Exp $"); + Log.setApplicationVersionDate("$Id: CurrentPageImpl.java,v 1.5 2004/06/25 13:59:53 edburns%acm.org Exp $"); } diff --git a/java/webclient/src_moz/CurrentPageImpl.cpp b/java/webclient/src_moz/CurrentPageImpl.cpp index ca3629d3253e..03544700647a 100644 --- a/java/webclient/src_moz/CurrentPageImpl.cpp +++ b/java/webclient/src_moz/CurrentPageImpl.cpp @@ -45,11 +45,16 @@ JNIEXPORT void JNICALL Java_org_mozilla_webclient_impl_wrapper_1native_CurrentPa (JNIEnv *env, jobject obj, jint nativeBCPtr) { NativeBrowserControl* nativeBrowserControl = (NativeBrowserControl *) nativeBCPtr; - - if (nativeBrowserControl->initComplete) { - wsCopySelectionEvent * actionEvent = new wsCopySelectionEvent(nativeBrowserControl); - PLEvent * event = (PLEvent*) *actionEvent; - ::util_PostEvent(nativeBrowserControl, event); + + if (nativeBrowserControl == nsnull) { + ::util_ThrowExceptionToJava(env, "Exception: null nativeBCPtr passed nativeGetSelection"); + return; + } + + nsresult rv = nativeBrowserControl->mWindow->CopySelection(); + if (NS_FAILED(rv)) { + ::util_ThrowExceptionToJava(env, "Exception: Can't get Selection from browser"); + return; } } diff --git a/java/webclient/src_moz/EmbedWindow.cpp b/java/webclient/src_moz/EmbedWindow.cpp index 1579be32e61f..b29ab40ddfdf 100644 --- a/java/webclient/src_moz/EmbedWindow.cpp +++ b/java/webclient/src_moz/EmbedWindow.cpp @@ -29,6 +29,8 @@ #include #include #include +#include "nsIContentViewer.h" +#include "nsIContentViewerEdit.h" #include "nsIDOMWindowInternal.h" #include "nsIDOMWindow.h" #include "nsISelection.h" @@ -270,6 +272,33 @@ EmbedWindow::GetSelection(JNIEnv *env, jobject mSelection) return NS_OK; } +nsresult +EmbedWindow::CopySelection() +{ + nsCOMPtr docShell = do_GetInterface(mWebBrowser); + nsCOMPtr contentViewer = nsnull; + nsCOMPtr contentViewerEdit = nsnull; + nsresult rv = NS_ERROR_FAILURE; + + if (!docShell) { + return NS_ERROR_FAILURE; + } + + rv = docShell->GetContentViewer(getter_AddRefs(contentViewer)); + if (!contentViewer || NS_FAILED(rv)) { + return rv; + } + + contentViewerEdit = do_QueryInterface(contentViewer, &rv); + + if (!contentViewerEdit || NS_FAILED(rv)) { + return rv; + } + + rv = contentViewerEdit->CopySelection(); + return rv; +} + nsresult EmbedWindow::LoadStream(nsIInputStream *aStream, nsIURI * aURI, const nsACString &aContentType, diff --git a/java/webclient/src_moz/EmbedWindow.h b/java/webclient/src_moz/EmbedWindow.h index 7ad8ea127d84..2bd17aa87fbe 100644 --- a/java/webclient/src_moz/EmbedWindow.h +++ b/java/webclient/src_moz/EmbedWindow.h @@ -67,6 +67,7 @@ public: nsresult SelectAll (); nsresult GetSelection (JNIEnv *env, jobject selection); + nsresult CopySelection (); nsresult LoadStream (nsIInputStream *aStream, nsIURI * aURI, const nsACString &aContentType, diff --git a/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/MyStatusBar.java b/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/MyStatusBar.java new file mode 100644 index 000000000000..61527df3e757 --- /dev/null +++ b/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/MyStatusBar.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2004 Sun Microsystems, Inc. All rights reserved. Use is + * subject to license terms. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the Lesser GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA. + */ + +package org.mozilla.webclient.test; + +import javax.swing.*; +import java.awt.*; + + +/** + * JDIC API demo class. + *

+ * The class represents a status bar. + */ + +class MyStatusBar extends Box { + public JLabel lblStatus, lblDesc; + + public MyStatusBar() { + super(BoxLayout.X_AXIS); + + Toolkit kit = Toolkit.getDefaultToolkit(); + Dimension screenSize = kit.getScreenSize(); + + // Add the JLabel displaying the selected object numbers. + lblStatus = new JLabel("Status:", SwingConstants.LEADING); + lblStatus.setPreferredSize(new Dimension((int) (0.7 * screenSize.width), + 22)); + lblStatus.setBorder(BorderFactory.createLoweredBevelBorder()); + this.add(lblStatus, null); + + // Add the JLabel displaying the selected object size. + // lblSize = new JLabel("Size:", SwingConstants.LEADING); + // lblSize.setPreferredSize(new Dimension((int)(0.2*screenSize.width), 22)); + // lblSize.setBorder(BorderFactory.createLoweredBevelBorder()); + // this.add(lblSize, null); + + // Add the JLabel displaying the description. + lblDesc = new JLabel("Description:", SwingConstants.LEADING); + lblDesc.setPreferredSize(new Dimension((int) (0.3 * screenSize.width), + 22)); + lblDesc.setBorder(BorderFactory.createLoweredBevelBorder()); + this.add(lblDesc, null); + } +} diff --git a/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java b/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java new file mode 100644 index 000000000000..f09a2143ebf3 --- /dev/null +++ b/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/TestBrowser.java @@ -0,0 +1,430 @@ +/* + * Copyright (C) 2004 Sun Microsystems, Inc. All rights reserved. Use is + * subject to license terms. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the Lesser GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA. + */ + +package org.mozilla.webclient.test; + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +import javax.swing.border.*; +import javax.swing.SwingConstants; +import java.io.File; +import java.net.URL; +import java.net.MalformedURLException; + +import org.mozilla.webclient.*; + +/** + *

webclient API demo main class.

+ + *

TestBrowser is a GUI application demonstrating the + * usage of the package org.mozilla.webclient

+ + *

This is based on the TestBrowser class in the JDIC project.

+ */ + +public class TestBrowser extends JPanel { + + public void addNotify() { + super.addNotify(); + browserControlCanvas.setVisible(true); + } + + public static ImageIcon browseIcon = new ImageIcon( + TestBrowser.class.getResource("images/Right.gif")); + + BorderLayout borderLayout1 = new BorderLayout(); + + JToolBar jBrowserToolBar = new JToolBar(); + JButton jStopButton = new JButton("Stop", + new ImageIcon(getClass().getResource("images/Stop.png"))); + + JButton jRefreshButton = new JButton("Refresh", + new ImageIcon(getClass().getResource("images/Reload.png"))); + JButton jForwardButton = new JButton("Forward", + new ImageIcon(getClass().getResource("images/Forward.png"))); + JButton jBackButton = new JButton("Back", + new ImageIcon(getClass().getResource("images/Back.png"))); + JButton jCopyButton = new JButton("Copy"); + + JPanel jAddressPanel = new JPanel(); + JLabel jAddressLabel = new JLabel(); + JTextField jAddressTextField = new JTextField(); + JButton jGoButton = new JButton(); + JPanel jAddrToolBarPanel = new JPanel(); + MyStatusBar statusBar = new MyStatusBar(); + JPanel jBrowserPanel = new JPanel(); + + BrowserControl webBrowser; + Navigation navigation; + History history; + EventRegistration eventRegistration; + CurrentPage currentPage; + Canvas browserControlCanvas; + + public TestBrowser() { + try { + jbInit(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + BrowserControlFactory.setAppData(System.getProperty("BROWSER_BIN_DIR")); + } catch (Exception e) {} + + JFrame frame = new JFrame("JDIC API Demo - Browser"); + + Container contentPane = frame.getContentPane(); + + contentPane.setLayout(new GridLayout(1, 1)); + contentPane.add(new TestBrowser()); + + frame.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + System.exit(0); + } + }); + + frame.pack(); + frame.setVisible(true); + } + + private void jbInit() throws Exception { + this.setLayout(borderLayout1); + + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + + this.setPreferredSize(new Dimension(screenSize.width * 9 / 10, + screenSize.height * 8 / 10)); + + ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false); + + jAddressLabel.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 4)); + jAddressLabel.setToolTipText(""); + jAddressLabel.setText(" URL: "); + + jGoButton.setBorder(BorderFactory.createCompoundBorder(new EmptyBorder(0, + 2, 0, 2), + new EtchedBorder())); + jGoButton.setMaximumSize(new Dimension(60, 25)); + jGoButton.setMinimumSize(new Dimension(60, 25)); + jGoButton.setPreferredSize(new Dimension(60, 25)); + jGoButton.setToolTipText("Load the given URL"); + jGoButton.setIcon(browseIcon); + jGoButton.setText("GO"); + jGoButton.addActionListener(new TestBrowser_jGoButton_actionAdapter(this)); + jAddressPanel.setLayout(new BorderLayout()); + + jAddressTextField.addActionListener(new TestBrowser_jAddressTextField_actionAdapter(this)); + jBackButton.setToolTipText("Go back one page"); + jBackButton.setHorizontalTextPosition(SwingConstants.TRAILING); + jBackButton.setEnabled(false); + jBackButton.setMaximumSize(new Dimension(75, 27)); + jBackButton.setPreferredSize(new Dimension(75, 27)); + jBackButton.addActionListener(new TestBrowser_jBackButton_actionAdapter(this)); + + jCopyButton.setToolTipText("Copy current selection"); + jCopyButton.setHorizontalTextPosition(SwingConstants.TRAILING); + jCopyButton.setMaximumSize(new Dimension(75, 27)); + jCopyButton.setPreferredSize(new Dimension(75, 27)); + jCopyButton.addActionListener(new TestBrowser_jCopyButton_actionAdapter(this)); + + jForwardButton.setToolTipText("Go forward one page"); + jForwardButton.setEnabled(false); + jForwardButton.addActionListener(new TestBrowser_jForwardButton_actionAdapter(this)); + jRefreshButton.setToolTipText("Reload current page"); + jRefreshButton.setEnabled(true); + jRefreshButton.setMaximumSize(new Dimension(75, 27)); + jRefreshButton.setMinimumSize(new Dimension(75, 27)); + jRefreshButton.setPreferredSize(new Dimension(75, 27)); + jRefreshButton.addActionListener(new TestBrowser_jRefreshButton_actionAdapter(this)); + jStopButton.setToolTipText("Stop loading this page"); + jStopButton.setVerifyInputWhenFocusTarget(true); + jStopButton.setText("Stop"); + jStopButton.setEnabled(true); + jStopButton.setMaximumSize(new Dimension(75, 27)); + jStopButton.setMinimumSize(new Dimension(75, 27)); + jStopButton.setPreferredSize(new Dimension(75, 27)); + jStopButton.addActionListener(new TestBrowser_jStopButton_actionAdapter(this)); + jAddressPanel.add(jAddressLabel, BorderLayout.WEST); + jAddressPanel.add(jAddressTextField, BorderLayout.CENTER); + jAddressPanel.add(jGoButton, BorderLayout.EAST); + jAddressPanel.setBorder(BorderFactory.createCompoundBorder( + BorderFactory.createEtchedBorder(), + BorderFactory.createEmptyBorder(2, 0, 2, 0))); + + jBrowserToolBar.setFloatable(false); + jBrowserToolBar.add(jBackButton, null); + jBrowserToolBar.add(jForwardButton, null); + jBrowserToolBar.addSeparator(); + jBrowserToolBar.add(jRefreshButton, null); + jBrowserToolBar.add(jStopButton, null); + // jBrowserToolBar.add(jCopyButton, null); + jBrowserToolBar.setBorder(BorderFactory.createCompoundBorder( + BorderFactory.createEtchedBorder(), + BorderFactory.createEmptyBorder(2, 2, 2, 0))); + + jAddrToolBarPanel.setLayout(new BorderLayout()); + jAddrToolBarPanel.add(jAddressPanel, BorderLayout.CENTER); + jAddrToolBarPanel.add(jBrowserToolBar, BorderLayout.WEST); + jAddrToolBarPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 2, 0)); + + statusBar.setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0)); + statusBar.lblDesc.setText("JDIC API Demo - Browser"); + + try { + webBrowser = BrowserControlFactory.newBrowserControl(); + navigation = (Navigation) + webBrowser.queryInterface(BrowserControl.NAVIGATION_NAME); + history = (History) + webBrowser.queryInterface(BrowserControl.HISTORY_NAME); + eventRegistration = (EventRegistration) + webBrowser.queryInterface(BrowserControl.EVENT_REGISTRATION_NAME); + currentPage = (CurrentPage) + webBrowser.queryInterface(BrowserControl.CURRENT_PAGE_NAME); + browserControlCanvas = (Canvas) + webBrowser.queryInterface(BrowserControl.BROWSER_CONTROL_CANVAS_NAME); + // Print out debug messages in the command line. + //myWebBrowser.setDebug(true); + } catch (Exception e) { + System.out.println(e.getMessage()); + return; + } + + eventRegistration.addDocumentLoadListener(new DocumentLoadListener() { + public void eventDispatched(WebclientEvent event) { + if (event instanceof DocumentLoadEvent) { + switch ((int) event.getType()) { + case ((int) DocumentLoadEvent.START_DOCUMENT_LOAD_EVENT_MASK): + updateStatusInfo("Loading started."); + break; + case ((int) DocumentLoadEvent.END_DOCUMENT_LOAD_EVENT_MASK): + jBackButton.setEnabled(history.canBack()); + jForwardButton.setEnabled(history.canForward()); + updateStatusInfo("Loading completed."); + + if (event.getEventData() != null) { + jAddressTextField.setText(event.getEventData().toString()); + } + break; + case ((int) DocumentLoadEvent.PROGRESS_URL_LOAD_EVENT_MASK): + // updateStatusInfo("Loading in progress..."); + break; + case ((int) DocumentLoadEvent.FETCH_INTERRUPT_EVENT_MASK): + updateStatusInfo("Loading error."); + break; + } + } + } + }); + + jBrowserPanel.setLayout(new BorderLayout()); + jBrowserPanel.add(browserControlCanvas, BorderLayout.CENTER); + + this.add(jAddrToolBarPanel, BorderLayout.NORTH); + this.add(statusBar, BorderLayout.SOUTH); + this.add(jBrowserPanel, BorderLayout.CENTER); + } + + void updateStatusInfo(String statusMessage) { + statusBar.lblStatus.setText(statusMessage); + } + + /** + * Check the current input URL string in the address text field, load it, + * and update the status info and toolbar info. + */ + void loadURL() { + String inputValue = jAddressTextField.getText(); + + if (inputValue == null) { + JOptionPane.showMessageDialog(this, "The given URL is NULL:", + "Warning", JOptionPane.WARNING_MESSAGE); + } else { + // Check if the text value is a URL string. + URL curUrl = null; + + try { + // Check if the input string is a local path by checking if it starts + // with a driver name(on Windows) or root path(on Unix). + File[] roots = File.listRoots(); + + for (int i = 0; i < roots.length; i++) { + if (inputValue.toLowerCase().startsWith(roots[i].toString().toLowerCase())) { + File curLocalFile = new File(inputValue); + + curUrl = curLocalFile.toURL(); + break; + } + } + + if (curUrl == null) { + // Check if the text value starts with known protocols. + if (inputValue.toLowerCase().startsWith("http://") + || inputValue.toLowerCase().startsWith("ftp://") + || inputValue.toLowerCase().startsWith("gopher://")) { + curUrl = new URL(inputValue); + } else { + if (inputValue.toLowerCase().startsWith("ftp.")) { + curUrl = new URL("ftp://" + inputValue); + } else if (inputValue.toLowerCase().startsWith("gopher.")) { + curUrl = new URL("gopher://" + inputValue); + } else { + curUrl = new URL("http://" + inputValue); + } + } + } + + navigation.loadURL(curUrl.toString()); + + // Update the address text field, statusbar, and toolbar info. + updateStatusInfo("Loading " + curUrl.toString() + " ......"); + } catch (MalformedURLException mue) { + JOptionPane.showMessageDialog(this, + "The given URL is not valid:" + inputValue, "Warning", + JOptionPane.WARNING_MESSAGE); + } + } + } + + void jGoButton_actionPerformed(ActionEvent e) { + loadURL(); + } + + void jAddressTextField_actionPerformed(ActionEvent e) { + loadURL(); + } + + void jBackButton_actionPerformed(ActionEvent e) { + history.back(); + } + + void jCopyButton_actionPerformed(ActionEvent e) { + currentPage.copyCurrentSelectionToSystemClipboard(); + } + + + void jForwardButton_actionPerformed(ActionEvent e) { + history.forward(); + } + + void jRefreshButton_actionPerformed(ActionEvent e) { + navigation.refresh(Navigation.LOAD_FORCE_RELOAD); + } + + void jStopButton_actionPerformed(ActionEvent e) { + navigation.stop(); + } +} + + +class TestBrowser_jAddressTextField_actionAdapter implements java.awt.event.ActionListener { + TestBrowser adaptee; + + TestBrowser_jAddressTextField_actionAdapter(TestBrowser adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jAddressTextField_actionPerformed(e); + } +} + + +class TestBrowser_jBackButton_actionAdapter implements java.awt.event.ActionListener { + TestBrowser adaptee; + + TestBrowser_jBackButton_actionAdapter(TestBrowser adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jBackButton_actionPerformed(e); + } +} + +class TestBrowser_jCopyButton_actionAdapter implements java.awt.event.ActionListener { + TestBrowser adaptee; + + TestBrowser_jCopyButton_actionAdapter(TestBrowser adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jCopyButton_actionPerformed(e); + } +} + + +class TestBrowser_jForwardButton_actionAdapter implements java.awt.event.ActionListener { + TestBrowser adaptee; + + TestBrowser_jForwardButton_actionAdapter(TestBrowser adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jForwardButton_actionPerformed(e); + } +} + + +class TestBrowser_jRefreshButton_actionAdapter implements java.awt.event.ActionListener { + TestBrowser adaptee; + + TestBrowser_jRefreshButton_actionAdapter(TestBrowser adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jRefreshButton_actionPerformed(e); + } +} + + +class TestBrowser_jStopButton_actionAdapter implements java.awt.event.ActionListener { + TestBrowser adaptee; + + TestBrowser_jStopButton_actionAdapter(TestBrowser adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jStopButton_actionPerformed(e); + } +} + + +class TestBrowser_jGoButton_actionAdapter implements java.awt.event.ActionListener { + TestBrowser adaptee; + + TestBrowser_jGoButton_actionAdapter(TestBrowser adaptee) { + this.adaptee = adaptee; + } + + public void actionPerformed(ActionEvent e) { + adaptee.jGoButton_actionPerformed(e); + } +} diff --git a/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/images/Back.png b/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/images/Back.png new file mode 100644 index 0000000000000000000000000000000000000000..e1bcdbefb9b2dc1c5cfaa61752d98c25be9c35a1 GIT binary patch literal 407 zcmV;I0cie-P)004R=004l4008;_004mK004C`008P>0026d000+nm#LZ50003Z zNkl*6Rm?+W>1ONeq)c{6D#v&m89~T$*g^&RN0mK0E0x|}IG$8)J z_WD{7=RdkUItB|$W}Q~3wvaz=mvVj@{H8UP3& zkO9?T=jhUX1`LC5KqvLHFt9K%xFMWL2mtlT0R#|oEMx=mf0lL@a4djm z2K=$m1=0r)KrArRfSjp76Mq9;G860)gg7G>o5g|RFF|a80K%3MlVC1kAR;9K1Q2#X z28KA0=GfTSuY?Q$2p~pW*%|0ePyqiS6p#P`1^{8-@8Y9s>T&=8002ovPDHLkV1k?D BiWvX^ literal 0 HcmV?d00001 diff --git a/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/images/Forward.png b/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/images/Forward.png new file mode 100644 index 0000000000000000000000000000000000000000..2d160916c7f6a3d969afa5d260c7ef07904d52aa GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`)Ym%P6qN7l0AZa z85pWm85kOx85n;42huMX7)lKo7+xhXFj!4zU=YurzH;Uj1_nk!PZ!6KiaAMt{{OdU zR%K9Vn4xirmxY1RR22g74}KECM>~c1tLH?2%pm{9pPE3sEQMBbyRm z0{t;TxW{5$3(K{R3q6x&Ffetjn9{Mtk~3CLp@Bn6KuW4gc9kU`*jqxA=Qc8)WeWMu fK3m42fsvt!?dz)_`k4oT0mgTe~DWM4f28)C3 literal 0 HcmV?d00001 diff --git a/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/images/Reload.png b/java/webclient/test/manual/src/classes/org/mozilla/webclient/test/images/Reload.png new file mode 100644 index 0000000000000000000000000000000000000000..96423ba9870e7e9c91bdeaaf638574501fd31fa7 GIT binary patch literal 555 zcmV+`0@VG9P)004R=004l4008;_004mK004C`008P>0026d000+nm#LZ50005D zNkl*6RSg;8)GBOGPDSafNOF)a>V^a$dKnx%kAY&kyM$@aD_468esahxAoP^D31r@Z4rP>-SRF2goV1T2>j4NLY0r5dH3{09m{VPw;eIV5k=o@wZXl3z} h*2_v=VUl($maj|RoyMr0zp3!004R=004l4008;_004mK004C`008P>0026d000+nm#LZ50007r zNkl{28@i15qyk{%MZ4-GcYnS zGB7bQG5q`Xje+6sKZdtoJ~ISQoW$_q?;mfVo^3Ea009Iy0H`?)sCnkW_BMt~?VSwF zEX)inEG!JHtZYEc%D~FT%JA&pe}<9=_Zi;*{tY(-Ab^;lnkxmtn%fyJb#wqVGBdEU zurjbgHL`&)&>&S_K8AixO$Kpx_N_oYZXmq?0mKNz-BOH9C0oHZcK|iAFfg;iY=+Wo zY(PU0^!0Dw8Hz7oWO(u8hb=$=F&Z#4|6kDB%5V{EGYiDIK-*bZAvUwHv4b^%TmUl! zgs%d_B>DJp27mx!x%clMFu<6=8o>sDG_ylAu!0SNX=I0b2PDVNpeVo$3}i+IfB<3v z`UM=?5L+QmW@AOz1abvPGdq+9iv!iN|6^ic2I>U}AQn(SfT9Ydk%f%~VjGgb*`PKf zy8z@e=HGw7u?G-9ETB+i{QDQ82<~(s&CZ5!J}bgCEI=CURiN#_=wko~AQokI4hDvw zzu+3cHi7-lj_M6)n6R+0g6TJ3z5>(NKL&sR0y)4&kcH)No02kvfuJC2lp)&;H-LrV z<&Pf>?iwzik?(bg=?Ck7d*RX@4kDVRi1*q*WfBa-{ zTDJzQ8K`#_KmdVLB9O7`)vsUP#n-MeJOUa5c0M~ICcps