Diff for /chimera/NSBrowserView.mm between versions 1.2 and 1.35

version 1.2, 2002/02/03 05:53:12 version 1.35, 2002/04/20 00:44:56
Line 37 Line 37
   
 #import "NSBrowserView.h"  #import "NSBrowserView.h"
 #import "ProgressDlgController.h"  #import "ProgressDlgController.h"
   #import "FindDlgController.h"
 #import "nsCocoaBrowserService.h"  #import "nsCocoaBrowserService.h"
   
 // Embedding includes  // Embedding includes
Line 56 Line 57
 #include "nsXPIDLString.h"  #include "nsXPIDLString.h"
 #include "nsCOMPtr.h"  #include "nsCOMPtr.h"
   
   // Printing
   #include "nsIWebBrowserPrint.h"
   #include "nsIPrintSettings.h"
   
   // Saving of links/images/docs
 #include "nsIWebBrowserFocus.h"  #include "nsIWebBrowserFocus.h"
 #include "nsIDOMHTMLDocument.h"  #include "nsIDOMHTMLDocument.h"
#include "nsIDocument.h"#include "nsIDOMNSDocument.h"
 #include "nsIDOMLocation.h"
 #include "nsIURL.h"  #include "nsIURL.h"
 #include "nsIWebBrowserPersist.h"  #include "nsIWebBrowserPersist.h"
 #include "nsIProperties.h"  #include "nsIProperties.h"
Line 69 Line 76
 #include "nsIMIMEService.h"  #include "nsIMIMEService.h"
 #include "nsIMIMEInfo.h"  #include "nsIMIMEInfo.h"
 #include "nsISHistory.h"  #include "nsISHistory.h"
   #include "nsIHistoryEntry.h"
   #include "nsISHEntry.h"
   #include "nsNetUtil.h"
   #include "nsIContextMenuListener.h"
   
   // Cut/copy/paste
   #include "nsIClipboardCommands.h"
   #include "nsIInterfaceRequestorUtils.h"
   
   const char* persistContractID = "@mozilla.org/embedding/browser/nsWebBrowserPersist;1";
   const char* dirServiceContractID = "@mozilla.org/file/directory_service;1";
   
 class nsCocoaBrowserListener : public nsSupportsWeakReference,  class nsCocoaBrowserListener : public nsSupportsWeakReference,
                                public nsIInterfaceRequestor,                                 public nsIInterfaceRequestor,
                               public nsIWebBrowserChrome,                                                 public nsIWebBrowserChrome,
                               public nsIEmbeddingSiteWindow,                               public nsIWindowCreator,
                               public nsIWebProgressListener                                                 public nsIEmbeddingSiteWindow,
                                public nsIWebProgressListener,
                                public nsIContextMenuListener
 {  {
 public:  public:
   nsCocoaBrowserListener(NSBrowserView* aView);    nsCocoaBrowserListener(NSBrowserView* aView);
Line 83  public: Line 103  public:
   NS_DECL_ISUPPORTS    NS_DECL_ISUPPORTS
   NS_DECL_NSIINTERFACEREQUESTOR    NS_DECL_NSIINTERFACEREQUESTOR
   NS_DECL_NSIWEBBROWSERCHROME    NS_DECL_NSIWEBBROWSERCHROME
     NS_DECL_NSIWINDOWCREATOR
   NS_DECL_NSIEMBEDDINGSITEWINDOW    NS_DECL_NSIEMBEDDINGSITEWINDOW
   NS_DECL_NSIWEBPROGRESSLISTENER    NS_DECL_NSIWEBPROGRESSLISTENER
  NS_DECL_NSICONTEXTMENULISTENER
     
   void AddListener(id <NSBrowserListener> aListener);    void AddListener(id <NSBrowserListener> aListener);
   void RemoveListener(id <NSBrowserListener> aListener);    void RemoveListener(id <NSBrowserListener> aListener);
   void SetContainer(id <NSBrowserContainer> aContainer);    void SetContainer(id <NSBrowserContainer> aContainer);
Line 114  nsCocoaBrowserListener::~nsCocoaBrowserL Line 136  nsCocoaBrowserListener::~nsCocoaBrowserL
   }    }
 }  }
   
NS_IMPL_ISUPPORTS5(nsCocoaBrowserListener,NS_IMPL_ISUPPORTS7(nsCocoaBrowserListener,
                   nsIInterfaceRequestor,                               nsIInterfaceRequestor,
                   nsIWebBrowserChrome,                               nsIWebBrowserChrome,
                   nsIEmbeddingSiteWindow,                   nsIWindowCreator,
                   nsIWebProgressListener,                               nsIEmbeddingSiteWindow,
                   nsISupportsWeakReference)                               nsIWebProgressListener,
                    nsISupportsWeakReference,
                    nsIContextMenuListener)
   
 // Implementation of nsIInterfaceRequestor  // Implementation of nsIInterfaceRequestor
 NS_IMETHODIMP   NS_IMETHODIMP 
Line 134  nsCocoaBrowserListener::GetInterface(con Line 158  nsCocoaBrowserListener::GetInterface(con
   return QueryInterface(aIID, aInstancePtr);    return QueryInterface(aIID, aInstancePtr);
 }  }
   
   // Implementation of nsIWindowCreator.  The CocoaBrowserService forwards requests
   // for a new window that have a parent to us, and we take over from there.  
   /* nsIWebBrowserChrome createChromeWindow (in nsIWebBrowserChrome parent, in PRUint32 chromeFlags); */
   NS_IMETHODIMP 
   nsCocoaBrowserListener::CreateChromeWindow(nsIWebBrowserChrome *parent, 
                                              PRUint32 chromeFlags, 
                                              nsIWebBrowserChrome **_retval)
   {
     if (parent != this) {
       printf("Mismatch in nsCocoaBrowserListener::CreateChromeWindow.  We should be the owning parent.\n");
       return NS_ERROR_FAILURE;
     }
     
     NSBrowserView* childView = [mContainer createBrowserWindow: chromeFlags];
     if (!childView) {
       printf("No NSBrowserView hooked up for a newly created window yet.\n");
       return NS_ERROR_FAILURE;
     }
     
     nsCocoaBrowserListener* listener = [childView getCocoaBrowserListener];
     if (!listener) {
       printf("Uh-oh! No listener yet for a newly created window (nsCocoaBrowserlistener)\n");
       return NS_ERROR_FAILURE;
     }
     
     printf("made a chrome window.\n");
     
     *_retval = listener;
     NS_IF_ADDREF(*_retval);
     return NS_OK;
   }
   
   // Implementation of nsIContextMenuListener
   NS_IMETHODIMP
   nsCocoaBrowserListener::OnShowContextMenu(PRUint32 aContextFlags, nsIDOMEvent* aEvent, nsIDOMNode* aNode)
   {
     [mContainer onShowContextMenu: aContextFlags domEvent: aEvent domNode: aNode];
     return NS_OK;
   }
   
 // Implementation of nsIWebBrowserChrome  // Implementation of nsIWebBrowserChrome
 /* void setStatus (in unsigned long statusType, in wstring status); */  /* void setStatus (in unsigned long statusType, in wstring status); */
 NS_IMETHODIMP   NS_IMETHODIMP 
Line 239  nsCocoaBrowserListener::ShowAsModal() Line 303  nsCocoaBrowserListener::ShowAsModal()
   }    }
   
   mIsModal = PR_TRUE;    mIsModal = PR_TRUE;
  int result = [NSApp runModalForWindow:window];  //int result = [NSApp runModalForWindow:window];
   mIsModal = PR_FALSE;    mIsModal = PR_FALSE;
   
  return (nsresult)result;  return NS_OK;
 }  }
   
 /* boolean isWindowModal (); */  /* boolean isWindowModal (); */
Line 260  nsCocoaBrowserListener::IsWindowModal(PR Line 324  nsCocoaBrowserListener::IsWindowModal(PR
 NS_IMETHODIMP   NS_IMETHODIMP 
 nsCocoaBrowserListener::ExitModalEventLoop(nsresult aStatus)  nsCocoaBrowserListener::ExitModalEventLoop(nsresult aStatus)
 {  {
  [NSApp stopModalWithCode:(int)aStatus];//  [NSApp stopModalWithCode:(int)aStatus];
   
   return NS_OK;    return NS_OK;
 }  }
Line 519  nsCocoaBrowserListener::OnLocationChange Line 583  nsCocoaBrowserListener::OnLocationChange
                                          nsIRequest *aRequest,                                            nsIRequest *aRequest, 
                                          nsIURI *location)                                           nsIURI *location)
 {  {
  nsXPIDLCString spec;  if (!location)
   
  location->GetSpec(getter_Copies(spec)); 
  if (!spec) { 
     return NS_ERROR_FAILURE;      return NS_ERROR_FAILURE;
  }    
  nsCAutoString spec;
   location->GetSpec(spec);
   const char* cstr = spec.get();    const char* cstr = spec.get();
   NSString* str = [NSString stringWithCString:cstr];    NSString* str = [NSString stringWithCString:cstr];
   NSURL* url = [NSURL URLWithString:str];    NSURL* url = [NSURL URLWithString:str];
Line 547  nsCocoaBrowserListener::OnStatusChange(n Line 609  nsCocoaBrowserListener::OnStatusChange(n
                                        nsresult aStatus,                                          nsresult aStatus, 
                                        const PRUnichar *aMessage)                                         const PRUnichar *aMessage)
 {  {
     nsCAutoString msg; msg.AssignWithConversion(aMessage);
     
     NSString* str = [NSString stringWithCString:msg.get()];
     
     NSEnumerator* enumerator = [mListeners objectEnumerator];
     id obj;
    
     while ((obj = [enumerator nextObject])) {
       [obj onStatusChange: str];
     }
   
   return NS_OK;    return NS_OK;
 }  }
   
Line 586  class nsHeaderSniffer :  public nsIWebPr Line 659  class nsHeaderSniffer :  public nsIWebPr
 {  {
 public:  public:
     nsHeaderSniffer(nsIWebBrowserPersist* aPersist, nsIFile* aFile, nsIURI* aURL,      nsHeaderSniffer(nsIWebBrowserPersist* aPersist, nsIFile* aFile, nsIURI* aURL,
                    nsIDOMDocument* aDocument, PRBool aBypassCache,                    nsIDOMDocument* aDocument, nsIInputStream* aPostData,
                     const nsCString& aSuggestedFilename, PRBool aBypassCache,
                     NSView* aFilterView, NSPopUpButton* aFilterList)                      NSView* aFilterView, NSPopUpButton* aFilterList)
     {      {
         NS_INIT_REFCNT();          NS_INIT_REFCNT();
Line 594  public: Line 668  public:
         mTmpFile = aFile;          mTmpFile = aFile;
         mURL = aURL;          mURL = aURL;
         mDocument = aDocument;          mDocument = aDocument;
           mPostData = aPostData;
           mDefaultFilename = aSuggestedFilename;
         mBypassCache = aBypassCache;          mBypassCache = aBypassCache;
         mFilterView = aFilterView;          mFilterView = aFilterView;
         mFilterList = aFilterList;          mFilterList = aFilterList;
     }      }
                                       
    virtual ~nsHeaderSniffer() {};    virtual ~nsHeaderSniffer() 
     {
     };
   
     NS_DECL_ISUPPORTS      NS_DECL_ISUPPORTS
     NS_DECL_NSIWEBPROGRESSLISTENER      NS_DECL_NSIWEBPROGRESSLISTENER
Line 612  private: Line 690  private:
     nsCOMPtr<nsIFile> mTmpFile;      nsCOMPtr<nsIFile> mTmpFile;
     nsCOMPtr<nsIURI> mURL;      nsCOMPtr<nsIURI> mURL;
     nsCOMPtr<nsIDOMDocument> mDocument;      nsCOMPtr<nsIDOMDocument> mDocument;
       nsCOMPtr<nsIInputStream> mPostData;
       nsCString mDefaultFilename;
     PRBool mBypassCache;      PRBool mBypassCache;
     nsCString mContentType;      nsCString mContentType;
     nsCString mContentDisposition;      nsCString mContentDisposition;
Line 631  nsHeaderSniffer::OnStateChange(nsIWebPro Line 711  nsHeaderSniffer::OnStateChange(nsIWebPro
 {  {
     if (aStateFlags & nsIWebProgressListener::STATE_START) {      if (aStateFlags & nsIWebProgressListener::STATE_START) {
         nsCOMPtr<nsIChannel> channel(do_QueryInterface(aRequest));          nsCOMPtr<nsIChannel> channel(do_QueryInterface(aRequest));
        nsXPIDLCString contentType;        channel->GetContentType(mContentType);
        channel->GetContentType(getter_Copies(contentType));       
        mContentType = contentType; 
         
         // Get the content-disposition if we're an HTTP channel.          // Get the content-disposition if we're an HTTP channel.
         nsCOMPtr<nsIHttpChannel> httpChannel(do_QueryInterface(channel));          nsCOMPtr<nsIHttpChannel> httpChannel(do_QueryInterface(channel));
        if (httpChannel) {        if (httpChannel)
            nsXPIDLCString disp;            httpChannel->GetResponseHeader(nsCAutoString("content-disposition"), mContentDisposition);
            httpChannel->GetResponseHeader("content-disposition", getter_Copies(disp)); 
            mContentDisposition = disp; 
        } 
                   
         mPersist->CancelSave();          mPersist->CancelSave();
         PRBool exists;          PRBool exists;
Line 679  void nsHeaderSniffer::PerformSave() Line 754  void nsHeaderSniffer::PerformSave()
                   
     // We need to figure out what file name to use.      // We need to figure out what file name to use.
     nsCAutoString defaultFileName;      nsCAutoString defaultFileName;
       
     if (!mContentDisposition.IsEmpty()) {      if (!mContentDisposition.IsEmpty()) {
         // (1) Use the HTTP header suggestion.          // (1) Use the HTTP header suggestion.
         PRInt32 index = mContentDisposition.Find("filename=");          PRInt32 index = mContentDisposition.Find("filename=");
Line 694  void nsHeaderSniffer::PerformSave() Line 768  void nsHeaderSniffer::PerformSave()
           
     if (defaultFileName.IsEmpty()) {      if (defaultFileName.IsEmpty()) {
         nsCOMPtr<nsIURL> url(do_QueryInterface(mURL));          nsCOMPtr<nsIURL> url(do_QueryInterface(mURL));
        if (url) {        if (url)
            nsXPIDLCString fileName;            url->GetFileName(defaultFileName); // (2) For file URLs, use the file name.
            url->GetFileName(getter_Copies(fileName)); 
            defaultFileName = fileName; // (2) For file URLs, use the file name. 
        } 
     }      }
           
     if (defaultFileName.IsEmpty() && mDocument && isHTML) {      if (defaultFileName.IsEmpty() && mDocument && isHTML) {
Line 710  void nsHeaderSniffer::PerformSave() Line 781  void nsHeaderSniffer::PerformSave()
     }      }
           
     if (defaultFileName.IsEmpty()) {      if (defaultFileName.IsEmpty()) {
        // (4) Use the caller provided name. XXXdwh        // (4) Use the caller provided name.
         defaultFileName = mDefaultFilename;
     }      }
   
    if (defaultFileName.IsEmpty()) {    if (defaultFileName.IsEmpty())
         // (5) Use the host.          // (5) Use the host.
        nsXPIDLCString host;        mURL->GetHost(defaultFileName);
        mURL->GetHost(getter_Copies(host)); 
        defaultFileName = host; 
    } 
           
     // One last case to handle about:blank and other fruity untitled pages.      // One last case to handle about:blank and other fruity untitled pages.
     if (defaultFileName.IsEmpty())      if (defaultFileName.IsEmpty())
Line 734  void nsHeaderSniffer::PerformSave() Line 803  void nsHeaderSniffer::PerformSave()
     nsCOMPtr<nsIURL> fileURL(do_QueryInterface(fileURI));      nsCOMPtr<nsIURL> fileURL(do_QueryInterface(fileURI));
     if (!fileURL)      if (!fileURL)
         return;          return;
    fileURL->SetFilePath(defaultFileName.get());    fileURL->SetFilePath(defaultFileName);
           
    nsXPIDLCString fileEx;    nsCAutoString fileExtension;
    fileURL->GetFileExtension(getter_Copies(fileEx));    fileURL->GetFileExtension(fileExtension);
    nsDependentCString fileExtension(fileEx.get()); 
           
     PRBool setExtension = PR_FALSE;      PRBool setExtension = PR_FALSE;
     if (mContentType.Equals("text/html")) {      if (mContentType.Equals("text/html")) {
Line 796  void nsHeaderSniffer::PerformSave() Line 864  void nsHeaderSniffer::PerformSave()
     else      else
         sourceData = do_QueryInterface(mURL);          sourceData = do_QueryInterface(mURL);
                   
       nsCOMPtr<nsIWebBrowserPersist> webPersist(do_CreateInstance(persistContractID));
     ProgressDlgController* progressDialog = [[ProgressDlgController alloc] initWithWindowNibName: @"ProgressDialog"];      ProgressDlgController* progressDialog = [[ProgressDlgController alloc] initWithWindowNibName: @"ProgressDialog"];
  /*  [progressDialog setWebPersist: mPersist     [progressDialog setWebPersist: webPersist 
                     source: sourceData.get()                      source: sourceData.get()
                     destination: [savePanel filename]                      destination: [savePanel filename]
                     contentType: mContentType.get()                      contentType: mContentType.get()
                    postData: postData                    postData: mPostData
    */                                    bypassCache: mBypassCache];
                        
     [progressDialog showWindow: progressDialog];      [progressDialog showWindow: progressDialog];
 }  }
   
Line 850  nsHeaderSniffer::OnSecurityChange(nsIWeb Line 919  nsHeaderSniffer::OnSecurityChange(nsIWeb
   
 @implementation NSBrowserView  @implementation NSBrowserView
   
   - (id)initWithFrame:(NSRect)frame andWindow:(NSWindow*)aWindow
   {
     mWindow = aWindow;
     return [self initWithFrame:frame];
   }
   
 - (id)initWithFrame:(NSRect)frame  - (id)initWithFrame:(NSRect)frame
 {  {
  [super initWithFrame:frame];    if ( (self = [super initWithFrame:frame]) ) {
   
  nsresult rv = nsCocoaBrowserService::InitEmbedding();        nsresult rv = nsCocoaBrowserService::InitEmbedding();
  if (NS_FAILED(rv)) {        if (NS_FAILED(rv)) {
     // XXX need to throw      // XXX need to throw
  }        }
   
  _listener = new nsCocoaBrowserListener(self); 
  NS_ADDREF(_listener); 
   
           _listener = new nsCocoaBrowserListener(self);
           NS_ADDREF(_listener);
           
   // Create the web browser instance    // Create the web browser instance
  nsCOMPtr<nsIWebBrowser> browser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID, &rv);        nsCOMPtr<nsIWebBrowser> browser = do_CreateInstance(NS_WEBBROWSER_CONTRACTID, &rv);
  if (NS_FAILED(rv)) {        if (NS_FAILED(rv)) {
     // XXX need to throw      // XXX need to throw
  }        }
 
  _webBrowser = browser; 
  NS_ADDREF(_webBrowser); 
   
           _webBrowser = browser;
           NS_ADDREF(_webBrowser);
           
   // Set the container nsIWebBrowserChrome    // Set the container nsIWebBrowserChrome
  _webBrowser->SetContainerWindow(NS_STATIC_CAST(nsIWebBrowserChrome *,         _webBrowser->SetContainerWindow(NS_STATIC_CAST(nsIWebBrowserChrome *,
                                                 _listener));                                                       _listener));
          
   // Register as a listener for web progress    // Register as a listener for web progress
  nsCOMPtr<nsIWeakReference> weak = do_GetWeakReference(NS_STATIC_CAST(nsIWebProgressListener*, _listener));        nsCOMPtr<nsIWeakReference> weak = do_GetWeakReference(NS_STATIC_CAST(nsIWebProgressListener*, _listener));
  _webBrowser->AddWebBrowserListener(weak, NS_GET_IID(nsIWebProgressListener));        _webBrowser->AddWebBrowserListener(weak, NS_GET_IID(nsIWebProgressListener));
        
   // Hook up the widget hierarchy with us as the parent    // Hook up the widget hierarchy with us as the parent
  nsCOMPtr<nsIBaseWindow> baseWin = do_QueryInterface(_webBrowser);        nsCOMPtr<nsIBaseWindow> baseWin = do_QueryInterface(_webBrowser);
  baseWin->InitWindow((NSView*)self, nsnull, 0, 0,         baseWin->InitWindow((NSView*)self, nsnull, 0, 0,
                      frame.size.width, frame.size.height);                            frame.size.width, frame.size.height);
  baseWin->Create();        baseWin->Create();
    }
   return self;    return self;
 }  }
   
   - (void)destroyWebBrowser
   {
     nsCOMPtr<nsIBaseWindow> baseWin = do_QueryInterface(_webBrowser);
     baseWin->Destroy();
   }
   
 - (void)dealloc   - (void)dealloc 
 {  {
     [super dealloc];
     
   NS_RELEASE(_listener);    NS_RELEASE(_listener);
   NS_IF_RELEASE(_webBrowser);    NS_IF_RELEASE(_webBrowser);
  nsCocoaBrowserService::TermEmbedding();  
  nsCocoaBrowserService::BrowserClosed();
  [super dealloc];  
   printf("NSBrowserView died.\n");
 }  }
   
 - (void)setFrame:(NSRect)frameRect   - (void)setFrame:(NSRect)frameRect 
Line 1049  nsHeaderSniffer::OnSecurityChange(nsIWeb Line 1133  nsHeaderSniffer::OnSecurityChange(nsIWeb
     return nsnull;      return nsnull;
   }    }
   
  nsXPIDLCString spec;  nsCAutoString spec;
  uri->GetSpec(getter_Copies(spec));  uri->GetSpec(spec);
       
   const char* cstr = spec.get();    const char* cstr = spec.get();
   NSString* str = [NSString stringWithCString:cstr];    NSString* str = [NSString stringWithCString:cstr];
Line 1059  nsHeaderSniffer::OnSecurityChange(nsIWeb Line 1143  nsHeaderSniffer::OnSecurityChange(nsIWeb
   return url;    return url;
 }  }
   
   - (nsCocoaBrowserListener*)getCocoaBrowserListener
   {
     return _listener;
   }
   
 - (nsIWebBrowser*)getWebBrowser  - (nsIWebBrowser*)getWebBrowser
 {  {
   NS_IF_ADDREF(_webBrowser);    NS_IF_ADDREF(_webBrowser);
Line 1085  nsHeaderSniffer::OnSecurityChange(nsIWeb Line 1174  nsHeaderSniffer::OnSecurityChange(nsIWeb
   
 }  }
   
 const char* persistContractID = "@mozilla.org/embedding/browser/nsWebBrowserPersist;1";  
 const char* dirServiceContractID = "@mozilla.org/file/directory_service;1";  
   
 -(void) saveInternal: (nsIURI*)aURI  -(void) saveInternal: (nsIURI*)aURI
         withDocument: (nsIDOMDocument*)aDocument          withDocument: (nsIDOMDocument*)aDocument
           suggestedFilename: (const char*)aFilename
         bypassCache: (BOOL)aBypassCache          bypassCache: (BOOL)aBypassCache
         filterView: (NSView*)aFilterView          filterView: (NSView*)aFilterView
         filterList: (NSPopUpButton*)aFilterList          filterList: (NSPopUpButton*)aFilterList
Line 1108  const char* dirServiceContractID = "@moz Line 1195  const char* dirServiceContractID = "@moz
     nsCOMPtr<nsIFile> tmpFile;      nsCOMPtr<nsIFile> tmpFile;
     dirService->Get("TmpD", NS_GET_IID(nsIFile), getter_AddRefs(tmpFile));      dirService->Get("TmpD", NS_GET_IID(nsIFile), getter_AddRefs(tmpFile));
     static short unsigned int tmpRandom = 0;      static short unsigned int tmpRandom = 0;
    nsCAutoString tmpNo; tmpNo.AssignWithConversion(tmpRandom++);    nsCAutoString tmpNo; tmpNo.AppendInt(tmpRandom++);
     nsCAutoString saveFile("-sav");      nsCAutoString saveFile("-sav");
     saveFile += tmpNo;      saveFile += tmpNo;
     saveFile += "tmp";      saveFile += "tmp";
     tmpFile->Append(saveFile.get());       tmpFile->Append(saveFile.get()); 
           
     // Get the post data if we're an HTML doc.      // Get the post data if we're an HTML doc.
    nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(_webBrowser));    nsCOMPtr<nsIInputStream> postData;
    nsCOMPtr<nsISHistory> sessionHistory;    if (aDocument) {
    webNav->GetSessionHistory(getter_AddRefs(sessionHistory));      nsCOMPtr<nsIWebNavigation> webNav(do_QueryInterface(_webBrowser));
       nsCOMPtr<nsISHistory> sessionHistory;
       webNav->GetSessionHistory(getter_AddRefs(sessionHistory));
       nsCOMPtr<nsIHistoryEntry> entry;
       PRInt32 sindex;
       sessionHistory->GetIndex(&sindex);
       sessionHistory->GetEntryAtIndex(sindex, PR_FALSE, getter_AddRefs(entry));
       nsCOMPtr<nsISHEntry> shEntry(do_QueryInterface(entry));
       if (shEntry)
           shEntry->GetPostData(getter_AddRefs(postData));
     }
   
       nsCAutoString fileName(aFilename);
     nsHeaderSniffer* sniffer = new nsHeaderSniffer(webPersist, tmpFile, aURI,       nsHeaderSniffer* sniffer = new nsHeaderSniffer(webPersist, tmpFile, aURI, 
                                                   aDocument, aBypassCache,                                                   aDocument, postData, fileName, aBypassCache,
                                                    aFilterView, aFilterList);                                                     aFilterView, aFilterList);
     if (!sniffer)      if (!sniffer)
         return;          return;
Line 1128  const char* dirServiceContractID = "@moz Line 1226  const char* dirServiceContractID = "@moz
     webPersist->SaveURI(aURI, nsnull, tmpFile);      webPersist->SaveURI(aURI, nsnull, tmpFile);
 }  }
   
-(void)saveDocument: (NSView*)aFilterView filterList: (NSPopUpButton*)aFilterList-(void)printDocument
 {
     nsCOMPtr<nsIDOMWindow> domWindow;
     _webBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
     nsCOMPtr<nsIInterfaceRequestor> ir(do_QueryInterface(domWindow));
     nsCOMPtr<nsIWebBrowserPrint> print;
     ir->GetInterface(NS_GET_IID(nsIWebBrowserPrint), getter_AddRefs(print));
     print->Print(nsnull, nsnull);
 }
 
 -(BOOL)findInPage:(NSString*)inText
 {
     PRBool found =  PR_FALSE;
     
     nsCOMPtr<nsIWebBrowserFocus> wbf(do_QueryInterface(_webBrowser));
     nsCOMPtr<nsIDOMWindow> rootWindow;
     nsCOMPtr<nsIDOMWindow> focusedWindow;
     _webBrowser->GetContentDOMWindow(getter_AddRefs(rootWindow));
     wbf->GetFocusedWindow(getter_AddRefs(focusedWindow));
     if (!focusedWindow)
         focusedWindow = rootWindow;
     nsCOMPtr<nsIWebBrowserFind> webFind(do_GetInterface(_webBrowser));
     if ( webFind ) {
       nsCOMPtr<nsIWebBrowserFindInFrames> framesFind(do_QueryInterface(webFind));
       framesFind->SetRootSearchFrame(rootWindow);
       framesFind->SetCurrentSearchFrame(focusedWindow);
       
       PRUnichar* text = (PRUnichar*)nsMemory::Alloc(([inText length]+1)*sizeof(PRUnichar));
       if ( text ) {
         [inText getCharacters:text];
         text[[inText length]] = 0;
         webFind->SetSearchString(text);
         webFind->FindNext(&found);
         nsMemory::Free(text);
       }
     }
     return found;
 }
 
 - (void)saveURL: (NSView*)aFilterView filterList: (NSPopUpButton*)aFilterList
             url: (NSURL*)aURL suggestedFilename: (NSString*)aFilename
 {
   nsCOMPtr<nsIURI> url;
   nsresult rv = NS_NewURI(getter_AddRefs(url), [[aURL absoluteString] cString]);
   if (NS_FAILED(rv))
     return;
   
   [self saveInternal: url.get()
         withDocument: nsnull
    suggestedFilename: [aFilename cString]
          bypassCache: YES
           filterView: aFilterView
           filterList: aFilterList];
 }
 
 - (void)saveDocument: (NSView*)aFilterView filterList: (NSPopUpButton*)aFilterList
 {  {
     nsCOMPtr<nsIWebBrowserFocus> wbf(do_QueryInterface(_webBrowser));      nsCOMPtr<nsIWebBrowserFocus> wbf(do_QueryInterface(_webBrowser));
     nsCOMPtr<nsIDOMWindow> domWindow;      nsCOMPtr<nsIDOMWindow> domWindow;
Line 1142  const char* dirServiceContractID = "@moz Line 1295  const char* dirServiceContractID = "@moz
     domWindow->GetDocument(getter_AddRefs(domDocument));      domWindow->GetDocument(getter_AddRefs(domDocument));
     if (!domDocument)      if (!domDocument)
         return;          return;
    nsCOMPtr<nsIDocument> doc(do_QueryInterface(domDocument));    nsCOMPtr<nsIDOMNSDocument> nsDoc(do_QueryInterface(domDocument));
    if (!doc)    if (!nsDoc)
         return;          return;
       nsCOMPtr<nsIDOMLocation> location;
       nsDoc->GetLocation(getter_AddRefs(location));
       if (!location)
           return;
       nsAutoString urlStr;
       location->GetHref(urlStr);
       nsCAutoString urlCStr; urlCStr.AssignWithConversion(urlStr);
     nsCOMPtr<nsIURI> url;      nsCOMPtr<nsIURI> url;
    doc->GetDocumentURL(getter_AddRefs(url));    nsresult rv = NS_NewURI(getter_AddRefs(url), urlCStr.get());
         if (NS_FAILED(rv))
         return;
     
     [self saveInternal: url.get()      [self saveInternal: url.get()
           withDocument: domDocument            withDocument: domDocument
             suggestedFilename: ""
           bypassCache: NO            bypassCache: NO
           filterView: aFilterView            filterView: aFilterView
           filterList: aFilterList];            filterList: aFilterList];
 }  }
   
   
   -(IBAction)cut:(id)aSender
   {
       nsCOMPtr<nsIClipboardCommands> clipboard(do_GetInterface(_webBrowser));
       clipboard->CutSelection();
   }
   
   -(IBAction)copy:(id)aSender
   {
       nsCOMPtr<nsIClipboardCommands> clipboard(do_GetInterface(_webBrowser));
       clipboard->CopySelection();
   }
   
   -(IBAction)paste:(id)aSender
   {
       nsCOMPtr<nsIClipboardCommands> clipboard(do_GetInterface(_webBrowser));
       clipboard->Paste();
   }
   
   -(IBAction)clear:(id)aSender
   {
       nsCOMPtr<nsIClipboardCommands> clipboard(do_GetInterface(_webBrowser));
       clipboard->SelectNone();
   }
   
   -(IBAction)selectAll:(id)aSender
   {
       nsCOMPtr<nsIClipboardCommands> clipboard(do_GetInterface(_webBrowser));
       clipboard->SelectAll();
   }
   
   -(IBAction)undo:(id)aSender
   {
     NSLog(@"Undo not yet implemented");
   }
   
   -(NSString*)getCurrentURLSpec
   {
       NSString* empty = @"";
       nsCOMPtr<nsIDOMWindow> domWindow;
       _webBrowser->GetContentDOMWindow(getter_AddRefs(domWindow));
       if (!domWindow)
           return empty;
       
       nsCOMPtr<nsIDOMDocument> domDocument;
       domWindow->GetDocument(getter_AddRefs(domDocument));
       if (!domDocument)
           return empty;
       nsCOMPtr<nsIDOMNSDocument> nsDoc(do_QueryInterface(domDocument));
       if (!nsDoc)
           return empty;
       nsCOMPtr<nsIDOMLocation> location;
       nsDoc->GetLocation(getter_AddRefs(location));
       if (!location)
           return empty;
       nsAutoString urlStr;
       location->GetHref(urlStr);
       nsCAutoString urlCStr; urlCStr.AssignWithConversion(urlStr);
       
       return [NSString stringWithCString: urlCStr.get()];
   }
   
   - (void)setActive: (BOOL)aIsActive
   {
       nsCOMPtr<nsIWebBrowserFocus> wbf(do_QueryInterface(_webBrowser));
       if (aIsActive)
           wbf->Activate();
       else
           wbf->Deactivate();
   }
   
   -(NSMenu*)getContextMenu
   {
     return [[self superview] getContextMenu];
   }
   
   -(NSWindow*)getNativeWindow
   {
     NSWindow* result = [self window];
     if (result)
       return result; // We're visible.  Just hand the window back.
     else {
       // We're invisible.  It's likely that we're in a Cocoa tab view.
       // First see if we have a cached window.
       if (mWindow)
         return mWindow;
       
       // Finally, see if our parent responds to the getNativeWindow selector,
       // and if they do, let them handle it.
       return [[self superview] getNativeWindow];
     }
   }
   
 @end  @end
   

Removed from v.1.2  
changed lines
  Added in v.1.35


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>