Update the GtkMozilla widget so it works. Also updated the streaming interface

so that it works with Necko. Small cleanups.
Fixes 16576 and 14975. r=shaver
This commit is contained in:
alla%lysator.liu.se 1999-10-19 21:46:33 +00:00
parent 24633793d5
commit 9436a61696
6 changed files with 92 additions and 118 deletions

View File

@ -94,7 +94,7 @@ static void stream_clicked(GtkWidget *button,
size = sizeof(buf);
i = 0;
while (size>0) {
c = gtk_mozilla_stream_write(moz, &buf[i], 0, size );
c = gtk_mozilla_stream_write(moz, &buf[i], 0, size-1);
size -= c;
i += c;
}

View File

@ -19,9 +19,9 @@
#include "nsRepository.h"
#include "nsIWebShell.h"
#include "nsIURL.h"
#ifdef NECKO
#include "nsIIOService.h"
#include "nsIServiceManager.h"
#include "nsNeckoUtil.h"
#endif // NECKO
#include "nsFileSpec.h"
#include "nsIDocumentLoader.h"
#include "nsIContentViewer.h"
@ -29,17 +29,8 @@
#include "nsIPref.h"
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
static NS_DEFINE_IID(kIWebShellIID, NS_IWEB_SHELL_IID);
static NS_DEFINE_IID(kWebShellCID, NS_WEB_SHELL_CID);
static NS_DEFINE_IID(kIWebShellContainerIID, NS_IWEB_SHELL_CONTAINER_IID);
static NS_DEFINE_IID(kIDocumentLoaderFactoryIID, NS_IDOCUMENTLOADERFACTORY_IID);
// static NS_DEFINE_IID(kIPrefIID, NS_IPREF_IID);
// static NS_DEFINE_CID(kPrefCID, NS_PREF_CID);
static NS_DEFINE_CID(kWebShellCID, NS_WEB_SHELL_CID);
static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID);
GtkMozillaContainer::GtkMozillaContainer(GtkMozilla *moz, nsIPref * aPrefs)
{
@ -50,6 +41,7 @@ GtkMozillaContainer::GtkMozillaContainer(GtkMozilla *moz, nsIPref * aPrefs)
mStream = nsnull;
mChannel = nsnull;
mLoadGroup = nsnull;
mContext = nsnull;
mozilla = moz;
@ -65,13 +57,6 @@ GtkMozillaContainer::~GtkMozillaContainer(void)
{
NS_IF_RELEASE(mWebShell);
NS_IF_RELEASE(mPrefs);
// if (nsnull != mPrefs)
// {
// mPrefs->ShutDown();
// NS_RELEASE(mPrefs);
// }
}
void
@ -81,7 +66,7 @@ GtkMozillaContainer::Show()
nsresult rv = nsRepository::CreateInstance(kWebShellCID,
nsnull,
kIWebShellIID,
NS_GET_IID(nsIWebShell),
(void**) &mWebShell);
if (NS_FAILED(rv) || !mWebShell)
@ -89,22 +74,6 @@ GtkMozillaContainer::Show()
printf("Cannot create WebShell!\n");
return;
}
// rv = nsComponentManager::CreateInstance(kPrefCID,
// nsnull,
// kIPrefIID,
// (void **) &mPrefs);
// if (NS_OK != rv)
// {
// printf("Cannot create Prefs!\n");
// return rv;
// }
// mPrefs->StartUp();
// mPrefs->ReadUserPrefs();
if (mozilla)
{
@ -171,11 +140,7 @@ GtkMozillaContainer::Stop()
void
GtkMozillaContainer::Reload(GtkMozillaReloadType type)
{
#ifdef NECKO
mWebShell->Reload((nsLoadFlags)type);
#else
mWebShell->Reload((nsURLReloadType)type);
#endif
}
gint
@ -187,19 +152,18 @@ GtkMozillaContainer::Back()
gint
GtkMozillaContainer::CanBack()
{
return mWebShell->CanBack()==NS_OK;
return mWebShell->CanBack()==NS_OK;
}
gint
GtkMozillaContainer::Forward()
{
return NS_SUCCEEDED(mWebShell->Forward());
return NS_SUCCEEDED(mWebShell->Forward());
}
gint
GtkMozillaContainer::CanForward()
{
nsresult rv = mWebShell->CanForward();
return mWebShell->CanForward()==NS_OK;
}
@ -241,9 +205,9 @@ GtkMozillaContainer::QueryInterface(REFNSIID aIID, void** aInstancePtr)
nsISupports *ifp = nsnull;
if (aIID.Equals(kIWebShellContainerIID)) {
if (aIID.Equals(NS_GET_IID(nsIWebShellContainer))) {
ifp = (nsIWebShellContainer*)this;
} else if(aIID.Equals(kISupportsIID)) {
} else if(aIID.Equals(NS_GET_IID(nsISupports))) {
ifp = this;
} else {
*aInstancePtr = 0;
@ -341,9 +305,9 @@ GtkMozillaContainer::EndLoadURL(nsIWebShell* aShell,
nsresult
GtkMozillaContainer::CreateContentViewer(const char *aCommand,
nsIChannel * aChannel,
nsILoadGroup * aLoadGroup,
const char* aContentType,
nsIChannel *aChannel,
nsILoadGroup *aLoadGroup,
const char *aContentType,
nsIContentViewerContainer* aContainer,
nsISupports* aExtraInfo,
nsIStreamListener** aDocListenerResult,
@ -363,7 +327,7 @@ GtkMozillaContainer::CreateContentViewer(const char *aCommand,
// Create an instance of the document-loader-factory object
nsIDocumentLoaderFactory* factory;
rv = nsComponentManager::CreateInstance(cid, (nsISupports *)nsnull,
kIDocumentLoaderFactoryIID,
NS_GET_IID(nsIDocumentLoaderFactory),
(void **)&factory);
if (NS_FAILED(rv)) {
return rv;
@ -383,7 +347,6 @@ GtkMozillaContainer::CreateContentViewer(const char *aCommand,
return rv;
}
NS_IMETHODIMP
GtkMozillaContainer::ProgressLoadURL(nsIWebShell* aShell, const PRUnichar* aURL, PRInt32 aProgress,
PRInt32 aProgressMax)
@ -466,74 +429,91 @@ GtkMozillaContainer::FocusAvailable(nsIWebShell* aFocusedWebShell, PRBool& aFocu
gint
GtkMozillaContainer::StartStream(const char *base_url,
const char *action,
nsISupports * ctxt)
// const char *content_type
nsISupports * ctxt,
const char *content_type)
{
#if 0
nsresult rv = NS_OK;
nsString url_str(base_url);
nsIURI* url = nsnull;
nsIContentViewer* viewer = nsnull;
nsIStreamListener* listener = nsnull;
#ifndef NECKO
rv = NS_NewURL(&url, url_str, NULL, mWebShell);
#else
rv = NS_NewURI(&url, url_str, NULL); // XXX where should the container go? (mWebShell)
#endif // NECKO
NS_WITH_SERVICE(nsIIOService, serv, kIOServiceCID, &rv);
if (NS_FAILED(rv))
goto error;
if (NS_FAILED(rv)) {
goto done;
}
rv = CreateContentViewer(url,
content_type,
action,
mWebShell,
nsnull,
&listener,
&viewer);
mStream = new GtkMozillaInputStream();
if (mStream == nsnull)
goto error;
NS_ADDREF(mStream); /* Own this */
nsIInputStream *istream = NULL;
rv = CallQueryInterface(mStream, &istream);
if (NS_FAILED(rv))
goto error;
nsString url_str(base_url);
rv = NS_NewURI(&url, url_str, NULL);
if (NS_FAILED(rv))
goto error;
rv = NS_NewLoadGroup(nsnull, nsnull, nsnull, &mLoadGroup);
if (NS_FAILED(rv))
goto error;
rv = serv->NewInputStreamChannel(url, content_type,
1024/*len*/, istream,
mLoadGroup , &mChannel);
if (NS_FAILED(rv))
goto error;
NS_RELEASE(istream);
rv = CreateContentViewer(action, mChannel, mLoadGroup, content_type,
mWebShell, nsnull, &mListener, &viewer);
if (NS_FAILED(rv)) {
printf("GtkMozillaContainer: Unable to create ContentViewer for action=%s, content-type=%s\n", action, content_type);
goto done;
goto error;
}
rv = viewer->SetContainer((nsIContentViewerContainer*)mWebShell);
if (NS_FAILED(rv)) {
goto done;
}
if (NS_FAILED(rv))
goto error;
rv = mWebShell->Embed(viewer, action, nsnull);
if (NS_FAILED(rv)) {
goto done;
}
if (NS_FAILED(rv))
goto error;
/*
* Pass the OnStartRequest(...) notification out to the document
* IStreamListener.
*/
rv = listener->OnStartRequest(url, content_type);
if (NS_FAILED(rv)) {
goto done;
}
mStream = new GtkMozillaInputStream();
mChannel = url;
rv = mListener->OnStartRequest(mChannel, ctxt);
if (NS_FAILED(rv))
goto error;
mContext = ctxt;
mListener = listener;
done:
NS_IF_RELEASE(viewer);
if (NS_SUCCEEDED(rv))
return 0;
else
return -1;
#endif
error:
if (mStream != NULL) {
delete mStream;
mStream = NULL;
}
NS_IF_RELEASE(istream);
NS_IF_RELEASE(url);
NS_IF_RELEASE(mLoadGroup);
NS_IF_RELEASE(mChannel);
NS_IF_RELEASE(viewer);
NS_IF_RELEASE(mListener);
return -1;
}
gint
@ -592,6 +572,7 @@ GtkMozillaContainer::EndStream(void)
return;
NS_IF_RELEASE(mChannel);
NS_IF_RELEASE(mLoadGroup);
NS_IF_RELEASE(mListener);
NS_IF_RELEASE(mStream);
}

View File

@ -86,7 +86,8 @@ public:
/* Stream stuff: */
gint StartStream(const char *base_url,
const char *action,
nsISupports * ctxt);
nsISupports * ctxt,
const char *content_type);
gint WriteStream(const char *data,
gint offset,
@ -111,10 +112,10 @@ protected:
/* Stream stuff: */
GtkMozillaInputStream *mStream;
// nsIURI *mStreamURL;
nsIChannel * mChannel;
nsISupports * mContext;
nsIChannel *mChannel;
nsILoadGroup *mLoadGroup;
nsISupports *mContext;
nsIStreamListener *mListener;
};

View File

@ -19,10 +19,6 @@
#include "stdio.h"
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
static NS_DEFINE_IID(kIInputStreamIID, NS_IINPUTSTREAM_IID);
static NS_DEFINE_IID(kIBaseStreamIID, NS_IBASESTREAM_IID);
GtkMozillaInputStream::GtkMozillaInputStream(void)
{
mBuffer = nsnull;
@ -41,11 +37,11 @@ GtkMozillaInputStream::QueryInterface(REFNSIID aIID, void** aInstancePtr)
nsISupports *ifp = nsnull;
if (aIID.Equals(kIInputStreamIID)) {
if (aIID.Equals(NS_GET_IID(nsIInputStream))) {
ifp = (nsIInputStream*)this;
} else if(aIID.Equals(kIBaseStreamIID)) {
} else if(aIID.Equals(NS_GET_IID(nsIBaseStream))) {
ifp = (nsIBaseStream*)this;;
} else if(aIID.Equals(kISupportsIID)) {
} else if(aIID.Equals(NS_GET_IID(nsISupports))) {
ifp = this;
} else {
*aInstancePtr = 0;

View File

@ -21,17 +21,11 @@
#include "nsIServiceManager.h"
#include "nsIEventQueueService.h"
#include "nsIPref.h"
#include "nsIThread.h"
#ifndef NECKO
#include "nsINetService.h"
#else
#include "nsIIOService.h"
#endif // NECKO
//#include "nsXPComCIID.h"
static NS_DEFINE_IID(kIEventQueueServiceIID,NS_IEVENTQUEUESERVICE_IID);
static NS_DEFINE_IID(kEventQueueServiceCID,NS_EVENTQUEUESERVICE_CID);
static NS_DEFINE_IID(kIPrefIID, NS_IPREF_IID);
static NS_DEFINE_CID(kEventQueueServiceCID,NS_EVENTQUEUESERVICE_CID);
static NS_DEFINE_CID(kPrefCID, NS_PREF_CID);
extern "C" void NS_SetupRegistry();
@ -178,8 +172,8 @@ gtk_mozilla_get_type (void)
sizeof (GtkMozillaClass),
(GtkClassInitFunc) gtk_mozilla_class_init,
(GtkObjectInitFunc) gtk_mozilla_init,
(GtkArgSetFunc) NULL,
(GtkArgGetFunc) NULL,
0,
0
};
mozilla_type = gtk_type_unique (GTK_TYPE_LAYOUT, &mozilla_info);
@ -194,7 +188,7 @@ gtk_mozilla_get_type (void)
// Create the Event Queue for the UI thread...
nsresult rv = nsServiceManager::GetService(kEventQueueServiceCID,
kIEventQueueServiceIID,
NS_GET_IID(nsIEventQueueService),
(nsISupports **)&aEventQService);
if (!NS_SUCCEEDED(rv)) {
@ -223,7 +217,7 @@ gtk_mozilla_get_type (void)
// Prefs
rv = nsComponentManager::CreateInstance(kPrefCID,
NULL,
kIPrefIID,
NS_GET_IID(nsIPref),
(void **) & sPrefs);
if (NS_OK != rv)
{
@ -231,6 +225,7 @@ gtk_mozilla_get_type (void)
return rv;
}
printf("prefs created ok.\n");
@ -242,6 +237,8 @@ gtk_mozilla_get_type (void)
event_processor_callback,
EQueue);
nsIThread::SetMainThread();
}
return mozilla_type;
@ -389,7 +386,7 @@ gtk_mozilla_stream_start(GtkMozilla *moz,
class GtkMozillaContainer *moz_container;
moz_container = (class GtkMozillaContainer *)moz->mozilla_container;
// return moz_container->StartStream(base_url, action, content_type);
return moz_container->StartStream(base_url, action, NULL, content_type);
}
gint

View File

@ -19,7 +19,6 @@
#include "nsUnixTimerCIID.h"
#include "nsIComponentManager.h"
static NS_DEFINE_IID(kITimerIID, NS_ITIMER_IID);
static NS_DEFINE_CID(kCTimerGtkCID, NS_TIMER_GTK_CID);
//////////////////////////////////////////////////////////////////////////
@ -48,7 +47,7 @@ nsresult NS_NewTimer(nsITimer ** aInstancePtrResult)
}
rv = factory->CreateInstance(NULL,
kITimerIID,
NS_GET_IID(nsITimer),
(void **)& timer);
NS_ASSERTION(NS_SUCCEEDED(rv),"Could not instanciate a timer.");