Examples of nsIObserverService


Examples of org.mozilla.interfaces.nsIObserverService

  {
    public void run()
    {
      final Mozilla mozilla = Mozilla.getInstance();
      nsIServiceManager serviceManager = mozilla.getServiceManager();
      nsIObserverService observerService = ( nsIObserverService )serviceManager.getServiceByContractID(
          "@mozilla.org/observer-service;1", nsIObserverService.NS_IOBSERVERSERVICE_IID );

      final nsIBinaryInputStream in = XPCOMManager.getInstance().newComponent( "@mozilla.org/binaryinputstream;1",
          nsIBinaryInputStream.class );

      nsIObserver httpObserver = new nsIObserver()
      {
        public void observe( nsISupports subject, String sTopic, String sData )
        {
          try
          {
            if( EVENT_HTTP_ON_MODIFY_REQUEST.equals( sTopic ) )
            {
              nsIHttpChannel httpChannel = ( nsIHttpChannel )subject
                  .queryInterface( nsIHttpChannel.NS_IHTTPCHANNEL_IID );

              if( httpChannel.getNotificationCallbacks() == null )
                return;

              nsIInterfaceRequestor interfaceRequestor = ( nsIInterfaceRequestor )httpChannel
                  .getNotificationCallbacks()
                  .queryInterface( nsIInterfaceRequestor.NS_IINTERFACEREQUESTOR_IID );

              nsIDOMWindow window = ( nsIDOMWindow )interfaceRequestor
                  .getInterface( nsIDOMWindow.NS_IDOMWINDOW_IID );

              BrowserComponent browserComponent = browserMap.get( window );
              if( browserComponent != null && browserRecordingMap.containsKey( browserComponent ) )
              {
                RecordedRequest rr = new RecordedRequest( dumpUri( httpChannel.getURI() ),
                    httpChannel.getRequestMethod() );

                nsIUploadChannel upload = ( nsIUploadChannel )httpChannel
                    .queryInterface( nsIUploadChannel.NS_IUPLOADCHANNEL_IID );

                byte[] requestData = null;
                if( upload != null )
                {
                  nsIInputStream uploadStream = upload.getUploadStream();

                  if( uploadStream != null && uploadStream.available() > 0 )
                  {
                    nsISeekableStream seekable = ( nsISeekableStream )uploadStream
                        .queryInterface( nsISeekableStream.NS_ISEEKABLESTREAM_IID );

                    long pos = seekable.tell();
                    long available = uploadStream.available();

                    if( available > 0 )
                    {
                      try
                      {
                        synchronized( mozilla )
                        {
                          in.setInputStream( uploadStream );
                          requestData = in.readByteArray( available );
                          String requestBody = getRequestBody( requestData );
                          if( requestBody != null && requestBody.length() > 0 )
                          {
                            rr.setContent( requestBody );
                            String contentType = getContentType( requestData );
                            if( StringUtils.hasContent( contentType ) )
                              rr.setContentType( contentType );
                          }
                        }
                      }
                      catch( Throwable e )
                      {
                        e.printStackTrace();
                      }
                      finally
                      {
                        seekable.seek( nsISeekableStream.NS_SEEK_SET, pos );
                      }
                    }
                  }
                }

                final StringToStringsMap headersMap = new StringToStringsMap();
                httpChannel.visitRequestHeaders( new nsIHttpHeaderVisitor()
                {

                  public void visitHeader( String header, String value )
                  {
                    if( !isHeaderExcluded( header ) )
                    {
                      headersMap.put( header, value );
                    }
                  }

                  public nsISupports queryInterface( String sIID )
                  {
                    return Mozilla.queryInterface( this, sIID );
                  }
                } );

                rr.setHeaders( headersMap );

                browserRecordingMap.get( browserComponent ).put( rr.getUrl(), rr );
              }
            }
            else
            {
              System.out.println( "HTTPObserver: Unknown event '" + sTopic + "'" );
            }
          }
          catch( Throwable e )
          {
            // ignore errors related to the querying of unsupported
            // interfaces
            if( e.getMessage().indexOf( "0x80004002" ) == -1 )
              SoapUI.logError( e );
          }
        }

        public nsISupports queryInterface( String sIID )
        {
          return Mozilla.queryInterface( this, sIID );
        }
      };

      boolean blnObserverIsWeakReference = false;
      observerService.addObserver( httpObserver, EVENT_HTTP_ON_MODIFY_REQUEST, blnObserverIsWeakReference );
    }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.