Throb, baby, throb

This commit is contained in:
law%netscape.com 1999-03-13 03:51:22 +00:00
parent 53ac660970
commit 3af600d45f
2 changed files with 134 additions and 61 deletions

View File

@ -60,18 +60,14 @@ static NS_DEFINE_IID(kBrowserAppCoreCID, NS_BROWSERAPPCORE_CID);
/* Define Interface IDs */ /* Define Interface IDs */
static NS_DEFINE_IID(kIAppShellServiceIID, NS_IAPPSHELL_SERVICE_IID); static NS_DEFINE_IID(kIAppShellServiceIID, NS_IAPPSHELL_SERVICE_IID);
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
static NS_DEFINE_IID(kIBrowserAppCoreIID, NS_IDOMBROWSERAPPCORE_IID); static NS_DEFINE_IID(kIBrowserAppCoreIID, NS_IDOMBROWSERAPPCORE_IID);
static NS_DEFINE_IID(kIDOMDocumentIID, nsIDOMDocument::GetIID()); static NS_DEFINE_IID(kIDOMDocumentIID, nsIDOMDocument::GetIID());
static NS_DEFINE_IID(kIDocumentIID, nsIDocument::GetIID()); static NS_DEFINE_IID(kIDocumentIID, nsIDocument::GetIID());
static NS_DEFINE_IID(kINetSupportIID, NS_INETSUPPORT_IID); static NS_DEFINE_IID(kINetSupportIID, NS_INETSUPPORT_IID);
static NS_DEFINE_IID(kIStreamObserverIID, NS_ISTREAMOBSERVER_IID); static NS_DEFINE_IID(kIStreamObserverIID, NS_ISTREAMOBSERVER_IID);
static NS_DEFINE_IID(kIWebShellWindowIID, NS_IWEBSHELL_WINDOW_IID); static NS_DEFINE_IID(kIWebShellWindowIID, NS_IWEBSHELL_WINDOW_IID);
static NS_DEFINE_IID(kIURLListenerIID, NS_IURL_LISTENER_IID);
#define APP_DEBUG 0 #define APP_DEBUG 0
@ -90,6 +86,7 @@ nsBrowserAppCore::nsBrowserAppCore()
mContentScriptContext = nsnull; mContentScriptContext = nsnull;
mWebShellWin = nsnull; mWebShellWin = nsnull;
mWebShell = nsnull; mWebShell = nsnull;
mContentAreaWebShell = nsnull;
IncInstanceCount(); IncInstanceCount();
NS_INIT_REFCNT(); NS_INIT_REFCNT();
@ -103,6 +100,7 @@ nsBrowserAppCore::~nsBrowserAppCore()
NS_IF_RELEASE(mContentScriptContext); NS_IF_RELEASE(mContentScriptContext);
NS_IF_RELEASE(mWebShellWin); NS_IF_RELEASE(mWebShellWin);
NS_IF_RELEASE(mWebShell); NS_IF_RELEASE(mWebShell);
NS_IF_RELEASE(mContentAreaWebShell);
DecInstanceCount(); DecInstanceCount();
} }
@ -136,6 +134,11 @@ nsBrowserAppCore::QueryInterface(REFNSIID aIID,void** aInstancePtr)
NS_ADDREF_THIS(); NS_ADDREF_THIS();
return NS_OK; return NS_OK;
} }
if (aIID.Equals(kIURLListenerIID)) {
*aInstancePtr = (void*) ((nsIURLListener*)this);
NS_ADDREF_THIS();
return NS_OK;
}
return nsBaseAppCore::QueryInterface(aIID, aInstancePtr); return nsBaseAppCore::QueryInterface(aIID, aInstancePtr);
@ -227,6 +230,17 @@ nsBrowserAppCore::SetEnableCallback(const nsString& aScript)
NS_IMETHODIMP NS_IMETHODIMP
nsBrowserAppCore::LoadUrl(const nsString& aUrl) nsBrowserAppCore::LoadUrl(const nsString& aUrl)
{ {
char * urlstr = nsnull;
urlstr = aUrl.ToNewCString();
if (!urlstr)
return NS_OK;
printf("URL to load in nsBrowserAppCore is %s\n", urlstr);
/* Ask nsWebShell to load the URl */
mContentAreaWebShell->LoadURL(nsString(urlstr), nsnull, nsnull);
return NS_OK; return NS_OK;
} }
@ -254,13 +268,19 @@ nsBrowserAppCore::SetContentWindow(nsIDOMWindow* aWin)
nsIWebShell * webShell; nsIWebShell * webShell;
globalObj->GetWebShell(&webShell); globalObj->GetWebShell(&webShell);
if (nsnull != webShell) { if (nsnull != webShell) {
mContentAreaWebShell = webShell;
NS_ADDREF(webShell);
webShell->SetObserver(this); webShell->SetObserver(this);
const PRUnichar * name; const PRUnichar * name;
webShell->GetName( &name); webShell->GetName( &name);
nsAutoString str(name); nsAutoString str(name);
if (APP_DEBUG) printf("Attaching to Content WebShell [%s]\n", str.ToNewCString()); // this leaks if (APP_DEBUG) {
NS_RELEASE(webShell); char *name = str.ToNewCString();
printf("Attaching to Content WebShell [%s]\n", name);
delete [] name;
}
mContentAreaWebShell->SetURLListener(this);
} }
return NS_OK; return NS_OK;
@ -301,6 +321,89 @@ nsBrowserAppCore::SetWebShellWindow(nsIDOMWindow* aWin)
return NS_OK; return NS_OK;
} }
// nsIURLListener methods
NS_IMETHODIMP
nsBrowserAppCore::WillLoadURL(nsIWebShell* aShell, const PRUnichar* aURL,
nsLoadType aReason)
{
// Notify the AppCore
return NS_OK;
}
static nsresult setAttribute( nsIWebShell *shell,
const char *id,
const char *name,
const nsString &value ) {
nsresult rv = NS_OK;
nsCOMPtr<nsIContentViewer> cv;
rv = shell->GetContentViewer(getter_AddRefs(cv));
if ( cv ) {
// Up-cast.
nsCOMPtr<nsIDocumentViewer> docv(do_QueryInterface(cv));
if ( docv ) {
// Get the document from the doc viewer.
nsCOMPtr<nsIDocument> doc;
rv = docv->GetDocument(*getter_AddRefs(doc));
if ( doc ) {
// Up-cast.
nsCOMPtr<nsIDOMXULDocument> xulDoc( do_QueryInterface(doc) );
if ( xulDoc ) {
// Find specified element.
nsCOMPtr<nsIDOMElement> elem;
rv = xulDoc->GetElementById( id, getter_AddRefs(elem) );
if ( elem ) {
// Set the text attribute.
rv = elem->SetAttribute( name, value );
if ( APP_DEBUG ) {
char *p = value.ToNewCString();
delete [] p;
}
if ( rv != NS_OK ) {
if (APP_DEBUG) printf("SetAttribute failed, rv=0x%X\n",(int)rv);
}
} else {
if (APP_DEBUG) printf("GetElementByID failed, rv=0x%X\n",(int)rv);
}
} else {
if (APP_DEBUG) printf("Upcast to nsIDOMXULDocument failed\n");
}
} else {
if (APP_DEBUG) printf("GetDocument failed, rv=0x%X\n",(int)rv);
}
} else {
if (APP_DEBUG) printf("Upcast to nsIDocumentViewer failed\n");
}
} else {
if (APP_DEBUG) printf("GetContentViewer failed, rv=0x%X\n",(int)rv);
}
return rv;
}
NS_IMETHODIMP
nsBrowserAppCore::BeginLoadURL(nsIWebShell* aShell, const PRUnichar* aURL)
{
setAttribute( mWebShell, "Browser:Throbber", "busy", "true" );
return NS_OK;
}
NS_IMETHODIMP
nsBrowserAppCore::ProgressLoadURL(nsIWebShell* aShell, const PRUnichar* aURL,
PRInt32 aProgress, PRInt32 aProgressMax)
{
return NS_OK;
}
NS_IMETHODIMP
nsBrowserAppCore::EndLoadURL(nsIWebShell* aWebShell, const PRUnichar* aURL,
PRInt32 aStatus)
{
setAttribute( mWebShell, "Browser:Throbber", "busy", "false" );
return NS_OK;
}
NS_IMETHODIMP NS_IMETHODIMP
nsBrowserAppCore::NewWindow() nsBrowserAppCore::NewWindow()
{ {
@ -557,57 +660,6 @@ done:
return NS_OK; return NS_OK;
} }
static nsresult setAttribute( nsIWebShell *shell,
const char *id,
const char *name,
const nsString &value ) {
nsresult rv = NS_OK;
nsCOMPtr<nsIContentViewer> cv;
rv = shell->GetContentViewer(getter_AddRefs(cv));
if ( cv ) {
// Up-cast.
nsCOMPtr<nsIDocumentViewer> docv(do_QueryInterface(cv));
if ( docv ) {
// Get the document from the doc viewer.
nsCOMPtr<nsIDocument> doc;
rv = docv->GetDocument(*getter_AddRefs(doc));
if ( doc ) {
// Up-cast.
nsCOMPtr<nsIDOMXULDocument> xulDoc( do_QueryInterface(doc) );
if ( xulDoc ) {
// Find specified element.
nsCOMPtr<nsIDOMElement> elem;
rv = xulDoc->GetElementById( id, getter_AddRefs(elem) );
if ( elem ) {
// Set the text attribute.
rv = elem->SetAttribute( name, value );
if ( APP_DEBUG ) {
char *p = value.ToNewCString();
//printf( "Set %s %s=\"%s\", rv=0x%08X\n", id, name, p, (int)rv );
delete [] p;
}
if ( rv != NS_OK ) {
if (APP_DEBUG) printf("SetAttribute failed, rv=0x%X\n",(int)rv);
}
} else {
if (APP_DEBUG) printf("GetElementByID failed, rv=0x%X\n",(int)rv);
}
} else {
if (APP_DEBUG) printf("Upcast to nsIDOMXULDocument failed\n");
}
} else {
if (APP_DEBUG) printf("GetDocument failed, rv=0x%X\n",(int)rv);
}
} else {
if (APP_DEBUG) printf("Upcast to nsIDocumentViewer failed\n");
}
} else {
if (APP_DEBUG) printf("GetContentViewer failed, rv=0x%X\n",(int)rv);
}
return rv;
}
NS_IMETHODIMP NS_IMETHODIMP
nsBrowserAppCore::OnStartBinding(nsIURL* aURL, const char *aContentType) nsBrowserAppCore::OnStartBinding(nsIURL* aURL, const char *aContentType)
{ {

View File

@ -28,6 +28,7 @@
#include "nsBaseAppCore.h" #include "nsBaseAppCore.h"
#include "nsINetSupport.h" #include "nsINetSupport.h"
#include "nsIStreamObserver.h" #include "nsIStreamObserver.h"
#include "nsIURLListener.h"
class nsIBrowserWindow; class nsIBrowserWindow;
class nsIWebShell; class nsIWebShell;
@ -36,6 +37,7 @@ class nsIDOMWindow;
class nsIURL; class nsIURL;
class nsIWebShellWindow; class nsIWebShellWindow;
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// nsBrowserAppCore: // nsBrowserAppCore:
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -43,7 +45,8 @@ class nsIWebShellWindow;
class nsBrowserAppCore : public nsBaseAppCore, class nsBrowserAppCore : public nsBaseAppCore,
public nsIDOMBrowserAppCore, public nsIDOMBrowserAppCore,
public nsINetSupport, public nsINetSupport,
public nsIStreamObserver public nsIStreamObserver,
public nsIURLListener
{ {
public: public:
@ -55,7 +58,6 @@ class nsBrowserAppCore : public nsBaseAppCore,
NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject); NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
NS_IMETHOD Init(const nsString& aId); NS_IMETHOD Init(const nsString& aId);
NS_IMETHOD GetId(nsString& aId) { return nsBaseAppCore::GetId(aId); } NS_IMETHOD GetId(nsString& aId) { return nsBaseAppCore::GetId(aId); }
NS_IMETHOD SetDocumentCharset(const nsString& aCharset);
NS_IMETHOD Back(); NS_IMETHOD Back();
NS_IMETHOD Forward(); NS_IMETHOD Forward();
@ -69,7 +71,7 @@ class nsBrowserAppCore : public nsBaseAppCore,
NS_IMETHOD PrintPreview(); NS_IMETHOD PrintPreview();
NS_IMETHOD Close(); NS_IMETHOD Close();
NS_IMETHOD Exit(); NS_IMETHOD Exit();
NS_IMETHOD SetDocumentCharset(const nsString& aCharset);
// nsIStreamObserver // nsIStreamObserver
NS_IMETHOD OnStartBinding(nsIURL* aURL, const char *aContentType); NS_IMETHOD OnStartBinding(nsIURL* aURL, const char *aContentType);
@ -77,6 +79,24 @@ class nsBrowserAppCore : public nsBaseAppCore,
NS_IMETHOD OnStatus(nsIURL* aURL, const PRUnichar* aMsg); NS_IMETHOD OnStatus(nsIURL* aURL, const PRUnichar* aMsg);
NS_IMETHOD OnStopBinding(nsIURL* aURL, nsresult aStatus, const PRUnichar* aMsg); NS_IMETHOD OnStopBinding(nsIURL* aURL, nsresult aStatus, const PRUnichar* aMsg);
// nsIURlListener methods
NS_IMETHOD WillLoadURL(nsIWebShell* aShell,
const PRUnichar* aURL,
nsLoadType aReason);
NS_IMETHOD BeginLoadURL(nsIWebShell* aShell,
const PRUnichar* aURL);
NS_IMETHOD ProgressLoadURL(nsIWebShell* aShell,
const PRUnichar* aURL,
PRInt32 aProgress,
PRInt32 aProgressMax);
NS_IMETHOD EndLoadURL(nsIWebShell* aShell,
const PRUnichar* aURL,
PRInt32 aStatus);
// nsINetSupport // nsINetSupport
NS_IMETHOD_(void) Alert(const nsString &aText); NS_IMETHOD_(void) Alert(const nsString &aText);
@ -109,6 +129,7 @@ class nsBrowserAppCore : public nsBaseAppCore,
nsIWebShellWindow *mWebShellWin; nsIWebShellWindow *mWebShellWin;
nsIWebShell * mWebShell; nsIWebShell * mWebShell;
nsIWebShell * mContentAreaWebShell;
}; };