[Httpunit-commit] CVS: httpunit/src/com/meterware/httpunit WebWindowListener.java,NONE,1.1 WebClient
Brought to you by:
russgold
From: Russell G. <rus...@us...> - 2002-10-04 15:19:28
|
Update of /cvsroot/httpunit/httpunit/src/com/meterware/httpunit In directory usw-pr-cvs1:/tmp/cvs-serv27236/src/com/meterware/httpunit Modified Files: WebClient.java WebWindow.java Added Files: WebWindowListener.java Log Message: Added listener support for window opening ***** Error reading new file[Errno 2] No such file or directory: 'WebWindowListener.java' Index: WebClient.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/httpunit/WebClient.java,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- WebClient.java 4 Oct 2002 00:40:28 -0000 1.35 +++ WebClient.java 4 Oct 2002 15:19:25 -0000 1.36 @@ -316,6 +316,26 @@ /** + * Adds a listener to watch for window openings and closings. + */ + public void addWindowListener( WebWindowListener listener ) { + synchronized (_windowListeners) { + if (listener != null && !_windowListeners.contains( listener )) _windowListeners.add( listener ); + } + } + + + /** + * Removes a listener to watch for window openings and closings. + */ + public void removeWindowListener( WebWindowListener listener ) { + synchronized (_windowListeners) { + _windowListeners.remove( listener ); + } + } + + + /** * Returns the next javascript alert without removing it from the queue. */ public String getNextAlert() { @@ -410,17 +430,38 @@ } - WebWindow getTargetWindow( WebWindow requestWindow, String target ) { - if (WebRequest.NEW_WINDOW.equalsIgnoreCase( target )) { - WebWindow window = new WebWindow( this ); - _openWindows.add( window ); - return window; + void updateFrameContents( WebWindow requestWindow, String requestTarget, WebResponse response ) throws IOException, SAXException { + WebWindow window = getTargetWindow( requestWindow, requestTarget ); + if (window != null) { + window.updateFrameContents( response ); } else { - return requestWindow; + window = new WebWindow( this ); + window.updateFrameContents( response ); + _openWindows.add( window ); + reportWindowOpened( window ); } } + private WebWindow getTargetWindow( WebWindow requestWindow, String target ) { + return WebRequest.NEW_WINDOW.equalsIgnoreCase( target ) ? null : requestWindow; + } + + + private void reportWindowOpened( WebWindow window ) { + List listeners; + + synchronized (_windowListeners) { + listeners = new ArrayList( _windowListeners ); + } + + for (Iterator i = listeners.iterator(); i.hasNext();) { + ((WebWindowListener) i.next()).windowOpened( this, window ); + } + } + + + //------------------------------------------ package members ------------------------------------ @@ -453,6 +494,8 @@ private boolean _exceptionsThrownOnErrorStatus = HttpUnitOptions.getExceptionsThrownOnErrorStatus(); private List _clientListeners = new ArrayList(); + + private List _windowListeners = new ArrayList(); private DialogResponder _dialogResponder = new DialogAdapter(); Index: WebWindow.java =================================================================== RCS file: /cvsroot/httpunit/httpunit/src/com/meterware/httpunit/WebWindow.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- WebWindow.java 4 Oct 2002 00:40:28 -0000 1.2 +++ WebWindow.java 4 Oct 2002 15:19:25 -0000 1.3 @@ -116,7 +116,7 @@ delay( HttpUnitOptions.getRedirectDelay() ); getResponse( new RedirectWebRequest( response ) ); } else { - _client.getTargetWindow( this, requestTarget ).updateFrameContents( response ); + _client.updateFrameContents( this, requestTarget, response ); } } @@ -130,7 +130,7 @@ } - private void updateFrameContents( WebResponse response ) throws IOException, SAXException { + void updateFrameContents( WebResponse response ) throws IOException, SAXException { response.setWindow( this ); _frameContents.updateFrames( response, response.getTarget() ); } |