mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-25 11:15:34 +00:00
128f95aa9b
Revising nsIChannel to allow for overlapped i/o. This consists of three parts: 1. Factoring nsIChannel into a protocol specific part, the nsIChannel, and a socket specific, the nsITransport. 2. Derive the nsIChannel from a nsIRequest. 2. Changes the notification system from necko and the URILoader to pass the nsIRequest interface instead of nsIChannel interface. This goal stems from wanting to be able to have active AsyncRead and AsyncWrite operations on nsSocketTransport. This is desired because it would greatly simplify the task of maintaining persistent/reusable socket connections for FTP, HTTP, and Imap (and potentially other protocols). The problem with the existing nsIChannel interface is that it does not allow one to selectively suspend just one of the read or write operations while keeping the other active. r=darin@netscape.com sr=rpotts@netscape.com
173 lines
5.8 KiB
C++
173 lines
5.8 KiB
C++
#ifndef webshell____h
|
|
#define webshell____h
|
|
|
|
#include "nsIWebShellServices.h"
|
|
#include "nsIWebShell.h"
|
|
#include "nsILinkHandler.h"
|
|
#include "nsIClipboardCommands.h"
|
|
#include "nsDocShell.h"
|
|
|
|
class nsIController;
|
|
|
|
typedef enum {
|
|
eCharsetReloadInit,
|
|
eCharsetReloadRequested,
|
|
eCharsetReloadStopOrigional
|
|
} eCharsetReloadState;
|
|
|
|
class nsWebShell : public nsDocShell,
|
|
public nsIWebShell,
|
|
public nsIWebShellContainer,
|
|
public nsIWebShellServices,
|
|
public nsILinkHandler,
|
|
public nsIClipboardCommands
|
|
{
|
|
public:
|
|
nsWebShell();
|
|
virtual ~nsWebShell();
|
|
|
|
NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW
|
|
|
|
NS_DECL_ISUPPORTS_INHERITED
|
|
NS_DECL_NSIINTERFACEREQUESTOR
|
|
NS_DECL_NSICLIPBOARDCOMMANDS
|
|
NS_DECL_NSIWEBSHELLSERVICES
|
|
|
|
NS_IMETHOD SetupNewViewer(nsIContentViewer* aViewer);
|
|
|
|
// nsIContentViewerContainer
|
|
NS_IMETHOD Embed(nsIContentViewer* aDocViewer,
|
|
const char* aCommand,
|
|
nsISupports* aExtraInfo);
|
|
|
|
// nsIWebShell
|
|
NS_IMETHOD SetContainer(nsIWebShellContainer* aContainer);
|
|
NS_IMETHOD GetContainer(nsIWebShellContainer*& aResult);
|
|
NS_IMETHOD GetTopLevelWindow(nsIWebShellContainer** aWebShellWindow);
|
|
NS_IMETHOD GetRootWebShell(nsIWebShell*& aResult);
|
|
/*NS_IMETHOD SetParent(nsIWebShell* aParent);
|
|
NS_IMETHOD GetParent(nsIWebShell*& aParent);*/
|
|
NS_IMETHOD GetReferrer(nsIURI **aReferrer);
|
|
|
|
// Document load api's
|
|
NS_IMETHOD GetDocumentLoader(nsIDocumentLoader*& aResult);
|
|
|
|
/* NS_IMETHOD LoadURL(const PRUnichar *aURLSpec,
|
|
const char* aCommand,
|
|
nsIInputStream* aPostDataStream=nsnull,
|
|
PRBool aModifyHistory=PR_TRUE,
|
|
nsLoadFlags aType = nsIChannel::LOAD_NORMAL,
|
|
nsISupports * aHistoryState=nsnull,
|
|
const PRUnichar* aReferrer=nsnull,
|
|
const char * aWindowTarget = nsnull);
|
|
|
|
NS_IMETHOD LoadURI(nsIURI * aUri,
|
|
const char * aCommand,
|
|
nsIInputStream* aPostDataStream=nsnull,
|
|
PRBool aModifyHistory=PR_TRUE,
|
|
nsLoadFlags aType = nsIChannel::LOAD_NORMAL,
|
|
nsISupports * aHistoryState=nsnull,
|
|
const PRUnichar* aReferrer=nsnull,
|
|
const char * aWindowTarget = nsnull);
|
|
*/
|
|
void SetReferrer(const PRUnichar* aReferrer);
|
|
|
|
// History api's
|
|
NS_IMETHOD GoTo(PRInt32 aHistoryIndex);
|
|
NS_IMETHOD GetHistoryLength(PRInt32& aResult);
|
|
NS_IMETHOD GetHistoryIndex(PRInt32& aResult);
|
|
NS_IMETHOD GetURL(PRInt32 aHistoryIndex, const PRUnichar** aURLResult);
|
|
|
|
// nsIWebShellContainer
|
|
NS_IMETHOD SetHistoryState(nsISupports* aLayoutHistoryState);
|
|
NS_IMETHOD FireUnloadEvent(void);
|
|
|
|
// nsILinkHandler
|
|
NS_IMETHOD OnLinkClick(nsIContent* aContent,
|
|
nsLinkVerb aVerb,
|
|
const PRUnichar* aURLSpec,
|
|
const PRUnichar* aTargetSpec,
|
|
nsIInputStream* aPostDataStream = 0,
|
|
nsIInputStream* aHeadersDataStream = 0);
|
|
NS_IMETHOD OnOverLink(nsIContent* aContent,
|
|
const PRUnichar* aURLSpec,
|
|
const PRUnichar* aTargetSpec);
|
|
NS_IMETHOD GetLinkState(const char* aLinkURI, nsLinkState& aState);
|
|
|
|
|
|
NS_IMETHOD FindNext(const PRUnichar * aSearchStr, PRBool aMatchCase, PRBool aSearchDown, PRBool &aIsFound);
|
|
|
|
// nsIBaseWindow
|
|
NS_IMETHOD SetPositionAndSize(PRInt32 x, PRInt32 y, PRInt32 cx,
|
|
PRInt32 cy, PRBool fRepaint);
|
|
NS_IMETHOD GetPositionAndSize(PRInt32* x, PRInt32* y,
|
|
PRInt32* cx, PRInt32* cy);
|
|
NS_IMETHOD Create();
|
|
NS_IMETHOD Destroy();
|
|
|
|
// nsWebShell
|
|
nsIEventQueue* GetEventQueue(void);
|
|
void HandleLinkClickEvent(nsIContent *aContent,
|
|
nsLinkVerb aVerb,
|
|
const PRUnichar* aURLSpec,
|
|
const PRUnichar* aTargetSpec,
|
|
nsIInputStream* aPostDataStream = 0,
|
|
nsIInputStream* aHeadersDataStream = 0);
|
|
|
|
static nsEventStatus PR_CALLBACK HandleEvent(nsGUIEvent *aEvent);
|
|
|
|
NS_IMETHOD SetURL(const PRUnichar* aURL);
|
|
|
|
// XXX: Temporary - until I can get rid of SetDocLoaderObserver :-)
|
|
NS_IMETHOD OnStateChange(nsIWebProgress *aProgress,
|
|
nsIRequest *aRequest,
|
|
PRInt32 aStateFlags,
|
|
nsresult aStatus);
|
|
|
|
protected:
|
|
void GetRootWebShellEvenIfChrome(nsIWebShell** aResult);
|
|
void InitFrameData();
|
|
|
|
// helpers for executing commands
|
|
virtual nsresult GetControllerForCommand ( const nsAReadableString & inCommand, nsIController** outController ) ;
|
|
virtual nsresult IsCommandEnabled ( const nsAReadableString & inCommand, PRBool* outEnabled ) ;
|
|
virtual nsresult DoCommand ( const nsAReadableString & inCommand ) ;
|
|
|
|
//
|
|
// Helper method that is called when a new document (including any
|
|
// sub-documents - ie. frames) has been completely loaded.
|
|
//
|
|
virtual nsresult EndPageLoad(nsIWebProgress *aProgress,
|
|
nsIChannel* channel,
|
|
nsresult aStatus);
|
|
|
|
nsIEventQueue* mThreadEventQueue;
|
|
|
|
nsIWebShellContainer* mContainer;
|
|
nsIDocumentLoader* mDocLoader;
|
|
|
|
PRBool mFiredUnloadEvent;
|
|
|
|
nsRect mBounds;
|
|
|
|
eCharsetReloadState mCharsetReloadState;
|
|
|
|
nsISupports* mHistoryState; // Weak reference. Session history owns this.
|
|
|
|
nsresult FireUnloadForChildren();
|
|
|
|
nsresult CreateViewer(nsIRequest* request,
|
|
const char* aContentType,
|
|
const char* aCommand,
|
|
nsIStreamListener** aResult);
|
|
|
|
#ifdef DEBUG
|
|
private:
|
|
// We're counting the number of |nsWebShells| to help find leaks
|
|
static unsigned long gNumberOfWebShells;
|
|
#endif /* DEBUG */
|
|
};
|
|
|
|
#endif /* webshell____h */
|
|
|