Moving URI dispatching code into its new home in mozilla\uriloader. I'll be removing

the existing files that I put in netwerk very soon.
This commit is contained in:
mscott%netscape.com 1999-10-29 21:46:18 +00:00
Родитель a0a7d0e569
Коммит 0069fa11da
5 изменённых файлов: 298 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,45 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsISupports.idl"
interface nsIChannel;
[scriptable, uuid(2F0F927A-8677-11d3-989D-001083010E9B)]
interface nsIContentHandler : nsISupports
{
/* CanHandleContent returns true if this content handler wants
to handle this particular content type and false otherwise.
aContentType --> is the content type of the document
aCommand --> is a layout specific action command i.e. "view"
aWindowTarget --> can be null for the normal case. It refers to the
target window name the content needs to be displayed in.
*/
void CanHandleContent(in string aContentType,
in string aCommand,
in string aWindowTarget,
out boolean aCanHandle);
/* HandleContent works as the name implies =). aChannel is an open channel
whose content type is already known (aContentType) */
void HandleContent(in string aContentType,
in string aCommand,
in string aWindowTarget,
in nsIChannel aChannel);
attribute nsIContentHandler parentHandler;
};

Просмотреть файл

@ -0,0 +1,55 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
/* nsIURIContentListener is an interface used by classes which
want to know (and have a chance to handle) a particular content type.
Typical useage scenarios will include running applications which register
a nsIURIContentListener for each of its content windows with the uri dispatcher
service.
*/
#include "nsISupports.idl"
interface nsIProtocolHandler;
interface nsIStreamListener;
[scriptable, uuid(94928AB3-8B63-11d3-989D-001083010E9B)]
interface nsIURIContentListener : nsISupports
{
/* Give the content listener first crack at forcing us to use
a specific content handler. Content listener's do not need to
support this method if they want the uri dispatcher to find the
default protocol handler from the registry.
*/
readonly attribute nsIProtocolHandler protocolHandler;
/* The URIDispatcher will give the content listener a shot at handling
the content before it tries other means. If the content listener
wants to handle the content then it should return a stream listener
the data should be pushed into.
aContentType --> the content type we need to handle
aCommand --> verb for the action (this comes from layout???)
aWindowTarget --> name of the target window if any
aStreamListener --> the content viewer the content should be displayed in
You should return null for this out parameter if you do
not want to handle this content type.
*/
void doContent(in string aContentType, in string aCommand,
in string aWindowTarget,
out nsIStreamListener aContentHandler);
};

Просмотреть файл

@ -0,0 +1,80 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
/* The uri dispatcher is responsible for taking uri's, determining
the content and routing the opened url to the correct content
handler.
When you encounter a url you want to open, you typically call
openURI, passing it the content listener for the window the uri is
originating from. The uri dispatcher opens the url to discover the
content type. It then gives the content listener first crack at
handling the content. If it doesn't want it, the dispatcher tries
to hand it off one of the registered content listeners. This allows
running applications the chance to jump in and handle the content.
If that also fails, then the uri dispatcher goes to the registry
looking for the preferred content handler for the content type
of the uri. The content handler may create an app instance
or it may hand the contents off to a platform specific plugin
or helper app. Or it may hand the url off to an OS registered
application.
*/
#include "nsISupports.idl"
interface nsIURIContentListener;
interface nsIStreamObserver;
interface nsIURI;
[scriptable, uuid(40AECB53-8B65-11d3-989D-001083010E9B)]
interface nsIURIDispatcher : nsISupports
{
/* as applications such as messenger and the browser are instantiated,
they register content listener's with the uri dispatcher corresponding
to content windows within that application.
Note to self: we may want to optimize things a bit more by requiring
the content types the registered content listener cares about.
*/
void registerContentListener (in nsIURIContentListener aContentListener);
void unRegisterContentListener (in nsIURIContentListener aContentListener);
/* OpenURI requires the following parameters.....
aURI --> the uri you wish to open
aStreamObserver --> observer for the open operation (if any)
aContentListener --> a content listener you want to give first crack
at handling the uri.
aContext --> same context for the AsyncOpen call that you would have passed
if you were calling nsIIOChannel::AsyncOpen
aReferringURI --> if a uri referral was involved....
*/
void openURI(in nsIURI aURI, in nsIStreamObserver aStreamObserver,
in nsIURIContentListener aContentListener, in nsISupports aContext,
in nsIURI aReferringURI);
};
%{C++
#define NS_URIDISPATCHER_CID \
{ /* EBBBBFE1-8BE8-11d3-989D-001083010E9B */ \
0xebbbbfe1, 0x8be8, 0x11d3, \
{0x98, 0x9d, 0x0, 0x10, 0x83, 0x1, 0xe, 0x9b}}
#define NS_URIDISPATCHER_PROGID \
"component://netscape/network/uri-dispatcher-service"
%}

Просмотреть файл

@ -0,0 +1,63 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsURIDispatcher.h"
#include "nsVoidArray.h"
#include "nsXPIDLString.h"
#include "nsString.h"
nsURIDispatcher::nsURIDispatcher()
{
NS_INIT_ISUPPORTS();
m_listeners = new nsVoidArray();
}
nsURIDispatcher::~nsURIDispatcher()
{
if (m_listeners)
delete m_listeners;
}
NS_IMPL_ISUPPORTS1(nsURIDispatcher, nsIURIDispatcher)
NS_IMETHODIMP nsURIDispatcher::RegisterContentListener(nsIURIContentListener * aContentListener)
{
nsresult rv = NS_OK;
if (m_listeners)
m_listeners->AppendElement(aContentListener);
else
rv = NS_ERROR_FAILURE;
return rv;
}
NS_IMETHODIMP nsURIDispatcher::UnRegisterContentListener(nsIURIContentListener * aContentListener)
{
if (m_listeners)
m_listeners->RemoveElement(aContentListener);
return NS_OK;
}
NS_IMETHODIMP nsURIDispatcher::OpenURI(nsIURI *aURI, nsIStreamObserver *aStreamObserver,
nsIURIContentListener *aContentListener, nsISupports *aContext,
nsIURI *aReferringURI)
{
return NS_ERROR_NOT_IMPLEMENTED;
}

Просмотреть файл

@ -0,0 +1,55 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
/* In some regards this class is a temporary class. As the new web shell
re-architecture begins to fall into place, the URIDispatcher will also
be the doc loader and this implementation will be grated onto the doc
loader.
But in the current world, the uri dispatcher will be a stand alone
class implementation.
*/
#ifndef nsURIDispatcher_h__
#define nsURIDispatcher_h__
#include "nsIURIDispatcher.h"
#include "nsCOMPtr.h"
class nsVoidArray;
class nsURIDispatcher : public nsIURIDispatcher
{
public:
NS_DECL_NSIURIDISPATCHER
NS_DECL_ISUPPORTS
nsURIDispatcher();
virtual ~nsURIDispatcher();
protected:
// we shouldn't need to have an owning ref count on registered
// content listeners because they are supposed to unregister themselves
// when they go away.
nsVoidArray * m_listeners;
};
#endif /* nsURIDispatcher_h__ */