Import from 1.9a8 tarball
[mozilla-extra.git] / extensions / datetime / nsDateTimeHandler.cpp
blob45769f8a32458f2cce48b505db90c9254038b814
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
13 * License.
15 * The Original Code is mozilla.org code.
17 * The Initial Developer of the Original Code is
18 * Netscape Communications Corporation.
19 * Portions created by the Initial Developer are Copyright (C) 1998
20 * the Initial Developer. All Rights Reserved.
22 * Contributor(s):
24 * Alternatively, the contents of this file may be used under the terms of
25 * either the GNU General Public License Version 2 or later (the "GPL"), or
26 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 * in which case the provisions of the GPL or the LGPL are applicable instead
28 * of those above. If you wish to allow use of your version of this file only
29 * under the terms of either the GPL or the LGPL, and not to allow others to
30 * use your version of this file under the terms of the MPL, indicate your
31 * decision by deleting the provisions above and replace them with the notice
32 * and other provisions required by the GPL or the LGPL. If you do not delete
33 * the provisions above, a recipient may use your version of this file under
34 * the terms of any one of the MPL, the GPL or the LGPL.
36 * ***** END LICENSE BLOCK ***** */
38 #include "nspr.h"
39 #include "nsDateTimeChannel.h"
40 #include "nsDateTimeHandler.h"
41 #include "nsIURL.h"
42 #include "nsCRT.h"
43 #include "nsIComponentManager.h"
44 #include "nsIServiceManager.h"
45 #include "nsIInterfaceRequestor.h"
46 #include "nsIInterfaceRequestorUtils.h"
47 #include "nsIProgressEventSink.h"
48 #include "nsNetCID.h"
50 ////////////////////////////////////////////////////////////////////////////////
52 nsDateTimeHandler::nsDateTimeHandler() {
55 nsDateTimeHandler::~nsDateTimeHandler() {
58 NS_IMPL_ISUPPORTS2(nsDateTimeHandler,
59 nsIProtocolHandler,
60 nsIProxiedProtocolHandler)
62 NS_METHOD
63 nsDateTimeHandler::Create(nsISupports* aOuter, const nsIID& aIID, void* *aResult) {
65 nsDateTimeHandler* ph = new nsDateTimeHandler();
66 if (ph == nsnull)
67 return NS_ERROR_OUT_OF_MEMORY;
68 NS_ADDREF(ph);
69 nsresult rv = ph->QueryInterface(aIID, aResult);
70 NS_RELEASE(ph);
71 return rv;
74 ////////////////////////////////////////////////////////////////////////////////
75 // nsIProtocolHandler methods:
77 NS_IMETHODIMP
78 nsDateTimeHandler::GetScheme(nsACString &result) {
79 result = "datetime";
80 return NS_OK;
83 NS_IMETHODIMP
84 nsDateTimeHandler::GetDefaultPort(PRInt32 *result) {
85 *result = DATETIME_PORT;
86 return NS_OK;
89 NS_IMETHODIMP
90 nsDateTimeHandler::GetProtocolFlags(PRUint32 *result) {
91 *result = URI_NORELATIVE | URI_NOAUTH | ALLOWS_PROXY | URI_DANGEROUS_TO_LOAD;
92 return NS_OK;
95 NS_IMETHODIMP
96 nsDateTimeHandler::NewURI(const nsACString &aSpec,
97 const char *aCharset, // ignore charset info
98 nsIURI *aBaseURI,
99 nsIURI **result) {
100 nsresult rv;
102 nsIURI* url;
103 rv = CallCreateInstance(NS_SIMPLEURI_CONTRACTID, &url);
104 if (NS_FAILED(rv)) return rv;
106 rv = url->SetSpec(aSpec);
107 if (NS_FAILED(rv)) {
108 NS_RELEASE(url);
109 return rv;
112 *result = url;
113 return rv;
116 NS_IMETHODIMP
117 nsDateTimeHandler::NewChannel(nsIURI* url, nsIChannel* *result)
119 return NewProxiedChannel(url, nsnull, result);
122 NS_IMETHODIMP
123 nsDateTimeHandler::NewProxiedChannel(nsIURI* url, nsIProxyInfo* proxyInfo,
124 nsIChannel* *result)
126 NS_ENSURE_ARG_POINTER(url);
127 nsresult rv;
129 nsDateTimeChannel *chan = new nsDateTimeChannel();
130 if (!chan)
131 return NS_ERROR_OUT_OF_MEMORY;
132 NS_ADDREF(chan);
134 rv = chan->Init(url, proxyInfo);
135 if (NS_FAILED(rv)) {
136 NS_RELEASE(chan);
137 return rv;
140 *result = chan;
141 return NS_OK;
145 NS_IMETHODIMP
146 nsDateTimeHandler::AllowPort(PRInt32 port, const char *scheme, PRBool *_retval)
148 if (port == DATETIME_PORT)
149 *_retval = PR_TRUE;
150 else
151 *_retval = PR_FALSE;
152 return NS_OK;
154 ////////////////////////////////////////////////////////////////////////////////