2 * Copyright 2006 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
31 #include "wine/debug.h"
32 #include "wine/unicode.h"
34 #include "mshtml_private.h"
36 WINE_DEFAULT_DEBUG_CHANNEL(mshtml
);
38 #define LOAD_INITIAL_DOCUMENT_URI 0x80000
40 #define NS_IOSERVICE_CLASSNAME "nsIOService"
41 #define NS_IOSERVICE_CONTRACTID "@mozilla.org/network/io-service;1"
43 static const IID NS_IOSERVICE_CID
=
44 {0x9ac9e770, 0x18bc, 0x11d3, {0x93, 0x37, 0x00, 0x10, 0x4b, 0xa0, 0xfd, 0x40}};
46 static nsIIOService
*nsio
= NULL
;
49 const nsIWineURIVtbl
*lpWineURIVtbl
;
54 NSContainer
*container
;
57 #define NSURI(x) ((nsIURI*) &(x)->lpWineURIVtbl)
59 static nsresult
create_uri(nsIURI
*,NSContainer
*,nsIURI
**);
61 static BOOL
exec_shldocvw_67(HTMLDocument
*doc
, LPCWSTR url
)
63 IOleCommandTarget
*cmdtrg
= NULL
;
66 hres
= IOleClientSite_QueryInterface(doc
->client
, &IID_IOleCommandTarget
,
69 VARIANT varUrl
, varRes
;
71 V_VT(&varUrl
) = VT_BSTR
;
72 V_BSTR(&varUrl
) = SysAllocString(url
);
73 V_VT(&varRes
) = VT_BOOL
;
75 hres
= IOleCommandTarget_Exec(cmdtrg
, &CGID_ShellDocView
, 67, 0, &varUrl
, &varRes
);
77 IOleCommandTarget_Release(cmdtrg
);
78 SysFreeString(V_BSTR(&varUrl
));
80 if(SUCCEEDED(hres
) && !V_BOOL(&varRes
)) {
81 TRACE("got VARIANT_FALSE, do not load\n");
89 static BOOL
handle_uri(NSContainer
*container
, nsChannel
*channel
, LPCWSTR uri
)
91 IServiceProvider
*service_provider
;
92 HTMLDocument
*doc
= container
->doc
;
97 NSContainer
*container_iter
= container
;
99 hlnf
= HLNF_OPENINNEWWINDOW
;
100 while(!container_iter
->doc
)
101 container_iter
= container_iter
->parent
;
102 doc
= container_iter
->doc
;
105 if(!hlnf
&& !exec_shldocvw_67(doc
, uri
))
108 hres
= IOleClientSite_QueryInterface(doc
->client
, &IID_IServiceProvider
,
109 (void**)&service_provider
);
110 if(SUCCEEDED(hres
)) {
111 IHlinkFrame
*hlink_frame
;
113 hres
= IServiceProvider_QueryService(service_provider
, &IID_IHlinkFrame
,
114 &IID_IHlinkFrame
, (void**)&hlink_frame
);
115 IServiceProvider_Release(service_provider
);
116 if(SUCCEEDED(hres
)) {
117 hlink_frame_navigate(doc
, hlink_frame
, uri
, channel
->post_data_stream
, hlnf
);
118 IHlinkFrame_Release(hlink_frame
);
127 static BOOL
before_async_open(nsChannel
*channel
, NSContainer
*container
)
135 nsACString_Init(&uri_str
, NULL
);
136 nsIWineURI_GetSpec(channel
->uri
, &uri_str
);
137 nsACString_GetData(&uri_str
, &uria
, NULL
);
138 len
= MultiByteToWideChar(CP_ACP
, 0, uria
, -1, NULL
, 0);
139 uri
= HeapAlloc(GetProcessHeap(), 0, len
*sizeof(WCHAR
));
140 MultiByteToWideChar(CP_ACP
, 0, uria
, -1, uri
, len
);
141 nsACString_Finish(&uri_str
);
143 ret
= handle_uri(container
, channel
, uri
);
145 HeapFree(GetProcessHeap(), 0, uri
);
150 #define NSCHANNEL_THIS(iface) DEFINE_THIS(nsChannel, HttpChannel, iface)
152 static nsresult NSAPI
nsChannel_QueryInterface(nsIHttpChannel
*iface
, nsIIDRef riid
, nsQIResult result
)
154 nsChannel
*This
= NSCHANNEL_THIS(iface
);
158 if(IsEqualGUID(&IID_nsISupports
, riid
)) {
159 TRACE("(%p)->(IID_nsISupports %p)\n", This
, result
);
160 *result
= NSCHANNEL(This
);
161 }else if(IsEqualGUID(&IID_nsIRequest
, riid
)) {
162 TRACE("(%p)->(IID_nsIRequest %p)\n", This
, result
);
163 *result
= NSCHANNEL(This
);
164 }else if(IsEqualGUID(&IID_nsIChannel
, riid
)) {
165 TRACE("(%p)->(IID_nsIChannel %p)\n", This
, result
);
166 *result
= NSCHANNEL(This
);
167 }else if(This
->http_channel
&& IsEqualGUID(&IID_nsIHttpChannel
, riid
)) {
168 TRACE("(%p)->(IID_nsIHttpChannel %p)\n", This
, result
);
169 *result
= NSHTTPCHANNEL(This
);
170 }else if(IsEqualGUID(&IID_nsIUploadChannel
, riid
)) {
171 TRACE("(%p)->(IID_nsIUploadChannel %p)\n", This
, result
);
172 *result
= NSUPCHANNEL(This
);
176 nsIChannel_AddRef(NSCHANNEL(This
));
180 TRACE("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), result
);
183 return nsIChannel_QueryInterface(This
->channel
, riid
, result
);
184 return NS_NOINTERFACE
;
187 static nsrefcnt NSAPI
nsChannel_AddRef(nsIHttpChannel
*iface
)
189 nsChannel
*This
= NSCHANNEL_THIS(iface
);
190 nsrefcnt ref
= InterlockedIncrement(&This
->ref
);
192 TRACE("(%p) ref=%ld\n", This
, ref
);
197 static nsrefcnt NSAPI
nsChannel_Release(nsIHttpChannel
*iface
)
199 nsChannel
*This
= NSCHANNEL_THIS(iface
);
200 LONG ref
= InterlockedDecrement(&This
->ref
);
203 nsIWineURI_Release(This
->uri
);
205 nsIChannel_Release(This
->channel
);
206 if(This
->http_channel
)
207 nsIHttpChannel_Release(This
->http_channel
);
208 if(This
->post_data_stream
)
209 nsIInputStream_Release(This
->post_data_stream
);
211 nsILoadGroup_Release(This
->load_group
);
212 if(This
->notif_callback
)
213 nsIInterfaceRequestor_Release(This
->notif_callback
);
214 if(This
->original_uri
)
215 nsIURI_Release(This
->original_uri
);
216 HeapFree(GetProcessHeap(), 0, This
->content
);
217 HeapFree(GetProcessHeap(), 0, This
);
223 static nsresult NSAPI
nsChannel_GetName(nsIHttpChannel
*iface
, nsACString
*aName
)
225 nsChannel
*This
= NSCHANNEL_THIS(iface
);
227 TRACE("(%p)->(%p)\n", This
, aName
);
230 return nsIChannel_GetName(This
->channel
, aName
);
232 FIXME("default action not implemented\n");
233 return NS_ERROR_NOT_IMPLEMENTED
;
236 static nsresult NSAPI
nsChannel_IsPending(nsIHttpChannel
*iface
, PRBool
*_retval
)
238 nsChannel
*This
= NSCHANNEL_THIS(iface
);
240 TRACE("(%p)->(%p)\n", This
, _retval
);
243 return nsIChannel_IsPending(This
->channel
, _retval
);
245 FIXME("default action not implemented\n");
246 return NS_ERROR_NOT_IMPLEMENTED
;
249 static nsresult NSAPI
nsChannel_GetStatus(nsIHttpChannel
*iface
, nsresult
*aStatus
)
251 nsChannel
*This
= NSCHANNEL_THIS(iface
);
253 TRACE("(%p)->(%p)\n", This
, aStatus
);
256 return nsIChannel_GetStatus(This
->channel
, aStatus
);
258 TRACE("returning NS_OK\n");
259 return *aStatus
= NS_OK
;
262 static nsresult NSAPI
nsChannel_Cancel(nsIHttpChannel
*iface
, nsresult aStatus
)
264 nsChannel
*This
= NSCHANNEL_THIS(iface
);
266 TRACE("(%p)->(%08lx)\n", This
, aStatus
);
269 return nsIChannel_Cancel(This
->channel
, aStatus
);
271 FIXME("default action not implemented\n");
272 return NS_ERROR_NOT_IMPLEMENTED
;
275 static nsresult NSAPI
nsChannel_Suspend(nsIHttpChannel
*iface
)
277 nsChannel
*This
= NSCHANNEL_THIS(iface
);
279 TRACE("(%p)\n", This
);
282 return nsIChannel_Suspend(This
->channel
);
284 FIXME("default action not implemented\n");
285 return NS_ERROR_NOT_IMPLEMENTED
;
288 static nsresult NSAPI
nsChannel_Resume(nsIHttpChannel
*iface
)
290 nsChannel
*This
= NSCHANNEL_THIS(iface
);
292 TRACE("(%p)\n", This
);
295 return nsIChannel_Resume(This
->channel
);
297 FIXME("default action not implemented\n");
298 return NS_ERROR_NOT_IMPLEMENTED
;
301 static nsresult NSAPI
nsChannel_GetLoadGroup(nsIHttpChannel
*iface
, nsILoadGroup
**aLoadGroup
)
303 nsChannel
*This
= NSCHANNEL_THIS(iface
);
305 TRACE("(%p)->(%p)\n", This
, aLoadGroup
);
308 nsILoadGroup_AddRef(This
->load_group
);
310 *aLoadGroup
= This
->load_group
;
314 static nsresult NSAPI
nsChannel_SetLoadGroup(nsIHttpChannel
*iface
, nsILoadGroup
*aLoadGroup
)
316 nsChannel
*This
= NSCHANNEL_THIS(iface
);
318 TRACE("(%p)->(%p)\n", This
, aLoadGroup
);
321 nsILoadGroup_Release(This
->load_group
);
323 nsILoadGroup_AddRef(aLoadGroup
);
325 This
->load_group
= aLoadGroup
;
328 return nsIChannel_SetLoadGroup(This
->channel
, aLoadGroup
);
332 static nsresult NSAPI
nsChannel_GetLoadFlags(nsIHttpChannel
*iface
, nsLoadFlags
*aLoadFlags
)
334 nsChannel
*This
= NSCHANNEL_THIS(iface
);
336 TRACE("(%p)->(%p)\n", This
, aLoadFlags
);
338 *aLoadFlags
= This
->load_flags
;
342 static nsresult NSAPI
nsChannel_SetLoadFlags(nsIHttpChannel
*iface
, nsLoadFlags aLoadFlags
)
344 nsChannel
*This
= NSCHANNEL_THIS(iface
);
346 TRACE("(%p)->(%08lx)\n", This
, aLoadFlags
);
348 This
->load_flags
= aLoadFlags
;
351 return nsIChannel_SetLoadFlags(This
->channel
, aLoadFlags
);
355 static nsresult NSAPI
nsChannel_GetOriginalURI(nsIHttpChannel
*iface
, nsIURI
**aOriginalURI
)
357 nsChannel
*This
= NSCHANNEL_THIS(iface
);
359 TRACE("(%p)->(%p)\n", This
, aOriginalURI
);
361 if(This
->original_uri
)
362 nsIURI_AddRef(This
->original_uri
);
364 *aOriginalURI
= This
->original_uri
;
368 static nsresult NSAPI
nsChannel_SetOriginalURI(nsIHttpChannel
*iface
, nsIURI
*aOriginalURI
)
370 nsChannel
*This
= NSCHANNEL_THIS(iface
);
372 TRACE("(%p)->(%p)\n", This
, aOriginalURI
);
374 if(This
->original_uri
)
375 nsIURI_Release(This
->original_uri
);
377 nsIURI_AddRef(aOriginalURI
);
378 This
->original_uri
= aOriginalURI
;
381 return nsIChannel_SetOriginalURI(This
->channel
, aOriginalURI
);
385 static nsresult NSAPI
nsChannel_GetURI(nsIHttpChannel
*iface
, nsIURI
**aURI
)
387 nsChannel
*This
= NSCHANNEL_THIS(iface
);
389 TRACE("(%p)->(%p)\n", This
, aURI
);
391 nsIWineURI_AddRef(This
->uri
);
392 *aURI
= (nsIURI
*)This
->uri
;
397 static nsresult NSAPI
nsChannel_GetOwner(nsIHttpChannel
*iface
, nsISupports
**aOwner
)
399 nsChannel
*This
= NSCHANNEL_THIS(iface
);
401 TRACE("(%p)->(%p)\n", This
, aOwner
);
404 return nsIChannel_GetOwner(This
->channel
, aOwner
);
406 FIXME("default action not implemented\n");
407 return NS_ERROR_NOT_IMPLEMENTED
;
410 static nsresult NSAPI
nsChannel_SetOwner(nsIHttpChannel
*iface
, nsISupports
*aOwner
)
412 nsChannel
*This
= NSCHANNEL_THIS(iface
);
414 TRACE("(%p)->(%p)\n", This
, aOwner
);
417 return nsIChannel_SetOwner(This
->channel
, aOwner
);
419 FIXME("default action not implemented\n");
420 return NS_ERROR_NOT_IMPLEMENTED
;
423 static nsresult NSAPI
nsChannel_GetNotificationCallbacks(nsIHttpChannel
*iface
,
424 nsIInterfaceRequestor
**aNotificationCallbacks
)
426 nsChannel
*This
= NSCHANNEL_THIS(iface
);
428 TRACE("(%p)->(%p)\n", This
, aNotificationCallbacks
);
430 if(This
->notif_callback
)
431 nsIInterfaceRequestor_AddRef(This
->notif_callback
);
432 *aNotificationCallbacks
= This
->notif_callback
;
437 static nsresult NSAPI
nsChannel_SetNotificationCallbacks(nsIHttpChannel
*iface
,
438 nsIInterfaceRequestor
*aNotificationCallbacks
)
440 nsChannel
*This
= NSCHANNEL_THIS(iface
);
442 TRACE("(%p)->(%p)\n", This
, aNotificationCallbacks
);
444 if(This
->notif_callback
)
445 nsIInterfaceRequestor_Release(This
->notif_callback
);
446 if(aNotificationCallbacks
)
447 nsIInterfaceRequestor_AddRef(aNotificationCallbacks
);
449 This
->notif_callback
= aNotificationCallbacks
;
452 return nsIChannel_SetNotificationCallbacks(This
->channel
, aNotificationCallbacks
);
456 static nsresult NSAPI
nsChannel_GetSecurityInfo(nsIHttpChannel
*iface
, nsISupports
**aSecurityInfo
)
458 nsChannel
*This
= NSCHANNEL_THIS(iface
);
460 TRACE("(%p)->(%p)\n", This
, aSecurityInfo
);
463 return nsIChannel_GetSecurityInfo(This
->channel
, aSecurityInfo
);
465 FIXME("default action not implemented\n");
466 return NS_ERROR_NOT_IMPLEMENTED
;
469 static nsresult NSAPI
nsChannel_GetContentType(nsIHttpChannel
*iface
, nsACString
*aContentType
)
471 nsChannel
*This
= NSCHANNEL_THIS(iface
);
473 TRACE("(%p)->(%p)\n", This
, aContentType
);
476 nsACString_Init(aContentType
, This
->content
);
481 return nsIChannel_GetContentType(This
->channel
, aContentType
);
483 TRACE("returning default text/html\n");
484 nsACString_Init(aContentType
, "text/html");
488 static nsresult NSAPI
nsChannel_SetContentType(nsIHttpChannel
*iface
,
489 const nsACString
*aContentType
)
491 nsChannel
*This
= NSCHANNEL_THIS(iface
);
493 TRACE("(%p)->(%p)\n", This
, aContentType
);
496 return nsIChannel_SetContentType(This
->channel
, aContentType
);
498 FIXME("default action not implemented\n");
499 return NS_ERROR_NOT_IMPLEMENTED
;
502 static nsresult NSAPI
nsChannel_GetContentCharset(nsIHttpChannel
*iface
,
503 nsACString
*aContentCharset
)
505 nsChannel
*This
= NSCHANNEL_THIS(iface
);
507 TRACE("(%p)->(%p)\n", This
, aContentCharset
);
510 return nsIChannel_GetContentCharset(This
->channel
, aContentCharset
);
512 FIXME("default action not implemented\n");
513 return NS_ERROR_NOT_IMPLEMENTED
;
516 static nsresult NSAPI
nsChannel_SetContentCharset(nsIHttpChannel
*iface
,
517 const nsACString
*aContentCharset
)
519 nsChannel
*This
= NSCHANNEL_THIS(iface
);
521 TRACE("(%p)->(%p)\n", This
, aContentCharset
);
524 return nsIChannel_SetContentCharset(This
->channel
, aContentCharset
);
526 FIXME("default action not implemented\n");
527 return NS_ERROR_NOT_IMPLEMENTED
;
530 static nsresult NSAPI
nsChannel_GetContentLength(nsIHttpChannel
*iface
, PRInt32
*aContentLength
)
532 nsChannel
*This
= NSCHANNEL_THIS(iface
);
534 TRACE("(%p)->(%p)\n", This
, aContentLength
);
537 return nsIChannel_GetContentLength(This
->channel
, aContentLength
);
539 FIXME("default action not implemented\n");
540 return NS_ERROR_NOT_IMPLEMENTED
;
543 static nsresult NSAPI
nsChannel_SetContentLength(nsIHttpChannel
*iface
, PRInt32 aContentLength
)
545 nsChannel
*This
= NSCHANNEL_THIS(iface
);
547 TRACE("(%p)->(%ld)\n", This
, aContentLength
);
550 return nsIChannel_SetContentLength(This
->channel
, aContentLength
);
552 FIXME("default action not implemented\n");
553 return NS_ERROR_NOT_IMPLEMENTED
;
556 static nsresult NSAPI
nsChannel_Open(nsIHttpChannel
*iface
, nsIInputStream
**_retval
)
558 nsChannel
*This
= NSCHANNEL_THIS(iface
);
560 TRACE("(%p)->(%p)\n", This
, _retval
);
563 return nsIChannel_Open(This
->channel
, _retval
);
565 FIXME("default action not implemented\n");
566 return NS_ERROR_NOT_IMPLEMENTED
;
569 static nsresult NSAPI
nsChannel_AsyncOpen(nsIHttpChannel
*iface
, nsIStreamListener
*aListener
,
570 nsISupports
*aContext
)
572 nsChannel
*This
= NSCHANNEL_THIS(iface
);
575 TRACE("(%p)->(%p %p)\n", This
, aListener
, aContext
);
577 if(This
->load_flags
& LOAD_INITIAL_DOCUMENT_URI
) {
578 NSContainer
*container
;
580 nsIWineURI_GetNSContainer(This
->uri
, &container
);
582 ERR("container = NULL\n");
583 return NS_ERROR_UNEXPECTED
;
586 if(container
->bscallback
) {
587 nsIChannel_AddRef(NSCHANNEL(This
));
588 container
->bscallback
->nschannel
= This
;
590 nsIStreamListener_AddRef(aListener
);
591 container
->bscallback
->nslistener
= aListener
;
594 nsISupports_AddRef(aContext
);
595 container
->bscallback
->nscontext
= aContext
;
598 nsIWebBrowserChrome_Release(NSWBCHROME(container
));
600 BOOL cont
= before_async_open(This
, container
);
601 nsIWebBrowserChrome_Release(NSWBCHROME(container
));
605 return NS_ERROR_UNEXPECTED
;
611 FIXME("channel == NULL\n");
612 return NS_ERROR_UNEXPECTED
;
615 if(This
->post_data_stream
) {
616 nsIUploadChannel
*upload_channel
;
618 nsres
= nsIChannel_QueryInterface(This
->channel
, &IID_nsIUploadChannel
,
619 (void**)&upload_channel
);
620 if(NS_SUCCEEDED(nsres
)) {
621 nsACString empty_string
;
622 nsACString_Init(&empty_string
, "");
624 nsres
= nsIUploadChannel_SetUploadStream(upload_channel
, This
->post_data_stream
,
626 nsIUploadChannel_Release(upload_channel
);
628 WARN("SetUploadStream failed: %08lx\n", nsres
);
630 nsACString_Finish(&empty_string
);
634 return nsIChannel_AsyncOpen(This
->channel
, aListener
, aContext
);
637 static nsresult NSAPI
nsChannel_GetRequestMethod(nsIHttpChannel
*iface
, nsACString
*aRequestMethod
)
639 nsChannel
*This
= NSCHANNEL_THIS(iface
);
641 TRACE("(%p)->(%p)\n", This
, aRequestMethod
);
643 if(This
->http_channel
)
644 return nsIHttpChannel_GetRequestMethod(This
->http_channel
, aRequestMethod
);
646 return NS_ERROR_NOT_IMPLEMENTED
;
649 static nsresult NSAPI
nsChannel_SetRequestMethod(nsIHttpChannel
*iface
,
650 const nsACString
*aRequestMethod
)
652 nsChannel
*This
= NSCHANNEL_THIS(iface
);
654 TRACE("(%p)->(%p)\n", This
, aRequestMethod
);
656 if(This
->http_channel
)
657 return nsIHttpChannel_SetRequestMethod(This
->http_channel
, aRequestMethod
);
659 return NS_ERROR_NOT_IMPLEMENTED
;
662 static nsresult NSAPI
nsChannel_GetReferrer(nsIHttpChannel
*iface
, nsIURI
**aReferrer
)
664 nsChannel
*This
= NSCHANNEL_THIS(iface
);
666 TRACE("(%p)->(%p)\n", This
, aReferrer
);
668 if(This
->http_channel
)
669 return nsIHttpChannel_GetReferrer(This
->http_channel
, aReferrer
);
671 return NS_ERROR_NOT_IMPLEMENTED
;
674 static nsresult NSAPI
nsChannel_SetReferrer(nsIHttpChannel
*iface
, nsIURI
*aReferrer
)
676 nsChannel
*This
= NSCHANNEL_THIS(iface
);
678 TRACE("(%p)->(%p)\n", This
, aReferrer
);
680 if(This
->http_channel
)
681 return nsIHttpChannel_SetReferrer(This
->http_channel
, aReferrer
);
683 return NS_ERROR_NOT_IMPLEMENTED
;
686 static nsresult NSAPI
nsChannel_GetRequestHeader(nsIHttpChannel
*iface
,
687 const nsACString
*aHeader
, nsACString
*_retval
)
689 nsChannel
*This
= NSCHANNEL_THIS(iface
);
691 TRACE("(%p)->(%p %p)\n", This
, aHeader
, _retval
);
693 if(This
->http_channel
)
694 return nsIHttpChannel_GetRequestHeader(This
->http_channel
, aHeader
, _retval
);
696 return NS_ERROR_NOT_IMPLEMENTED
;
699 static nsresult NSAPI
nsChannel_SetRequestHeader(nsIHttpChannel
*iface
,
700 const nsACString
*aHeader
, const nsACString
*aValue
, PRBool aMerge
)
702 nsChannel
*This
= NSCHANNEL_THIS(iface
);
704 TRACE("(%p)->(%p %p %x)\n", This
, aHeader
, aValue
, aMerge
);
706 if(This
->http_channel
)
707 return nsIHttpChannel_SetRequestHeader(This
->http_channel
, aHeader
, aValue
, aMerge
);
709 return NS_ERROR_NOT_IMPLEMENTED
;
712 static nsresult NSAPI
nsChannel_VisitRequestHeaders(nsIHttpChannel
*iface
,
713 nsIHttpHeaderVisitor
*aVisitor
)
715 nsChannel
*This
= NSCHANNEL_THIS(iface
);
717 TRACE("(%p)->(%p)\n", This
, aVisitor
);
719 if(This
->http_channel
)
720 return nsIHttpChannel_VisitRequestHeaders(This
->http_channel
, aVisitor
);
722 return NS_ERROR_NOT_IMPLEMENTED
;
725 static nsresult NSAPI
nsChannel_GetAllowPipelining(nsIHttpChannel
*iface
, PRBool
*aAllowPipelining
)
727 nsChannel
*This
= NSCHANNEL_THIS(iface
);
729 TRACE("(%p)->(%p)\n", This
, aAllowPipelining
);
731 if(This
->http_channel
)
732 return nsIHttpChannel_GetAllowPipelining(This
->http_channel
, aAllowPipelining
);
734 return NS_ERROR_NOT_IMPLEMENTED
;
737 static nsresult NSAPI
nsChannel_SetAllowPipelining(nsIHttpChannel
*iface
, PRBool aAllowPipelining
)
739 nsChannel
*This
= NSCHANNEL_THIS(iface
);
741 TRACE("(%p)->(%x)\n", This
, aAllowPipelining
);
743 if(This
->http_channel
)
744 return nsIHttpChannel_SetAllowPipelining(This
->http_channel
, aAllowPipelining
);
746 return NS_ERROR_NOT_IMPLEMENTED
;
749 static nsresult NSAPI
nsChannel_GetRedirectionLimit(nsIHttpChannel
*iface
, PRUint32
*aRedirectionLimit
)
751 nsChannel
*This
= NSCHANNEL_THIS(iface
);
753 TRACE("(%p)->(%p)\n", This
, aRedirectionLimit
);
755 if(This
->http_channel
)
756 return nsIHttpChannel_GetRedirectionLimit(This
->http_channel
, aRedirectionLimit
);
758 return NS_ERROR_NOT_IMPLEMENTED
;
761 static nsresult NSAPI
nsChannel_SetRedirectionLimit(nsIHttpChannel
*iface
, PRUint32 aRedirectionLimit
)
763 nsChannel
*This
= NSCHANNEL_THIS(iface
);
765 TRACE("(%p)->(%lu)\n", This
, aRedirectionLimit
);
767 if(This
->http_channel
)
768 return nsIHttpChannel_SetRedirectionLimit(This
->http_channel
, aRedirectionLimit
);
770 return NS_ERROR_NOT_IMPLEMENTED
;
773 static nsresult NSAPI
nsChannel_GetResponseStatus(nsIHttpChannel
*iface
, PRUint32
*aResponseStatus
)
775 nsChannel
*This
= NSCHANNEL_THIS(iface
);
777 TRACE("(%p)->(%p)\n", This
, aResponseStatus
);
779 if(This
->http_channel
)
780 return nsIHttpChannel_GetResponseStatus(This
->http_channel
, aResponseStatus
);
782 return NS_ERROR_NOT_IMPLEMENTED
;
785 static nsresult NSAPI
nsChannel_GetResponseStatusText(nsIHttpChannel
*iface
,
786 nsACString
*aResponseStatusText
)
788 nsChannel
*This
= NSCHANNEL_THIS(iface
);
790 TRACE("(%p)->(%p)\n", This
, aResponseStatusText
);
792 if(This
->http_channel
)
793 return nsIHttpChannel_GetResponseStatusText(This
->http_channel
, aResponseStatusText
);
795 return NS_ERROR_NOT_IMPLEMENTED
;
798 static nsresult NSAPI
nsChannel_GetRequestSucceeded(nsIHttpChannel
*iface
,
799 PRBool
*aRequestSucceeded
)
801 nsChannel
*This
= NSCHANNEL_THIS(iface
);
803 TRACE("(%p)->(%p)\n", This
, aRequestSucceeded
);
805 if(This
->http_channel
)
806 return nsIHttpChannel_GetRequestSucceeded(This
->http_channel
, aRequestSucceeded
);
808 return NS_ERROR_NOT_IMPLEMENTED
;
811 static nsresult NSAPI
nsChannel_GetResponseHeader(nsIHttpChannel
*iface
,
812 const nsACString
*header
, nsACString
*_retval
)
814 nsChannel
*This
= NSCHANNEL_THIS(iface
);
816 TRACE("(%p)->(%p %p)\n", This
, header
, _retval
);
818 if(This
->http_channel
)
819 return nsIHttpChannel_GetResponseHeader(This
->http_channel
, header
, _retval
);
821 return NS_ERROR_NOT_IMPLEMENTED
;
824 static nsresult NSAPI
nsChannel_SetResponseHeader(nsIHttpChannel
*iface
,
825 const nsACString
*header
, const nsACString
*value
, PRBool merge
)
827 nsChannel
*This
= NSCHANNEL_THIS(iface
);
829 TRACE("(%p)->(%p %p %x)\n", This
, header
, value
, merge
);
831 if(This
->http_channel
)
832 return nsIHttpChannel_SetResponseHeader(This
->http_channel
, header
, value
, merge
);
834 return NS_ERROR_NOT_IMPLEMENTED
;
837 static nsresult NSAPI
nsChannel_VisitResponseHeaders(nsIHttpChannel
*iface
,
838 nsIHttpHeaderVisitor
*aVisitor
)
840 nsChannel
*This
= NSCHANNEL_THIS(iface
);
842 TRACE("(%p)->(%p)\n", This
, aVisitor
);
844 if(This
->http_channel
)
845 return nsIHttpChannel_VisitResponseHeaders(This
->http_channel
, aVisitor
);
847 return NS_ERROR_NOT_IMPLEMENTED
;
850 static nsresult NSAPI
nsChannel_IsNoStoreResponse(nsIHttpChannel
*iface
, PRBool
*_retval
)
852 nsChannel
*This
= NSCHANNEL_THIS(iface
);
854 TRACE("(%p)->(%p)\n", This
, _retval
);
856 if(This
->http_channel
)
857 return nsIHttpChannel_IsNoStoreResponse(This
->http_channel
, _retval
);
859 return NS_ERROR_NOT_IMPLEMENTED
;
862 static nsresult NSAPI
nsChannel_IsNoCacheResponse(nsIHttpChannel
*iface
, PRBool
*_retval
)
864 nsChannel
*This
= NSCHANNEL_THIS(iface
);
866 TRACE("(%p)->(%p)\n", This
, _retval
);
868 if(This
->http_channel
)
869 return nsIHttpChannel_IsNoCacheResponse(This
->http_channel
, _retval
);
871 return NS_ERROR_NOT_IMPLEMENTED
;
874 #undef NSCHANNEL_THIS
876 static const nsIHttpChannelVtbl nsChannelVtbl
= {
877 nsChannel_QueryInterface
,
886 nsChannel_GetLoadGroup
,
887 nsChannel_SetLoadGroup
,
888 nsChannel_GetLoadFlags
,
889 nsChannel_SetLoadFlags
,
890 nsChannel_GetOriginalURI
,
891 nsChannel_SetOriginalURI
,
895 nsChannel_GetNotificationCallbacks
,
896 nsChannel_SetNotificationCallbacks
,
897 nsChannel_GetSecurityInfo
,
898 nsChannel_GetContentType
,
899 nsChannel_SetContentType
,
900 nsChannel_GetContentCharset
,
901 nsChannel_SetContentCharset
,
902 nsChannel_GetContentLength
,
903 nsChannel_SetContentLength
,
906 nsChannel_GetRequestMethod
,
907 nsChannel_SetRequestMethod
,
908 nsChannel_GetReferrer
,
909 nsChannel_SetReferrer
,
910 nsChannel_GetRequestHeader
,
911 nsChannel_SetRequestHeader
,
912 nsChannel_VisitRequestHeaders
,
913 nsChannel_GetAllowPipelining
,
914 nsChannel_SetAllowPipelining
,
915 nsChannel_GetRedirectionLimit
,
916 nsChannel_SetRedirectionLimit
,
917 nsChannel_GetResponseStatus
,
918 nsChannel_GetResponseStatusText
,
919 nsChannel_GetRequestSucceeded
,
920 nsChannel_GetResponseHeader
,
921 nsChannel_SetResponseHeader
,
922 nsChannel_VisitResponseHeaders
,
923 nsChannel_IsNoStoreResponse
,
924 nsChannel_IsNoCacheResponse
927 #define NSUPCHANNEL_THIS(iface) DEFINE_THIS(nsChannel, UploadChannel, iface)
929 static nsresult NSAPI
nsUploadChannel_QueryInterface(nsIUploadChannel
*iface
, nsIIDRef riid
,
932 nsChannel
*This
= NSUPCHANNEL_THIS(iface
);
933 return nsIChannel_QueryInterface(NSCHANNEL(This
), riid
, result
);
936 static nsrefcnt NSAPI
nsUploadChannel_AddRef(nsIUploadChannel
*iface
)
938 nsChannel
*This
= NSUPCHANNEL_THIS(iface
);
939 return nsIChannel_AddRef(NSCHANNEL(This
));
942 static nsrefcnt NSAPI
nsUploadChannel_Release(nsIUploadChannel
*iface
)
944 nsChannel
*This
= NSUPCHANNEL_THIS(iface
);
945 return nsIChannel_Release(NSCHANNEL(This
));
948 static nsresult NSAPI
nsUploadChannel_SetUploadStream(nsIUploadChannel
*iface
,
949 nsIInputStream
*aStream
, const nsACString
*aContentType
, PRInt32 aContentLength
)
951 nsChannel
*This
= NSUPCHANNEL_THIS(iface
);
952 const char *content_type
;
954 TRACE("(%p)->(%p %p %ld)\n", This
, aStream
, aContentType
, aContentLength
);
956 if(This
->post_data_stream
)
957 nsIInputStream_Release(This
->post_data_stream
);
960 nsACString_GetData(aContentType
, &content_type
, NULL
);
962 FIXME("Unsupported aContentType argument: %s\n", debugstr_a(content_type
));
965 if(aContentLength
!= -1)
966 FIXME("Unsupported acontentLength = %ld\n", aContentLength
);
969 nsIInputStream_AddRef(aStream
);
970 This
->post_data_stream
= aStream
;
975 static nsresult NSAPI
nsUploadChannel_GetUploadStream(nsIUploadChannel
*iface
,
976 nsIInputStream
**aUploadStream
)
978 nsChannel
*This
= NSUPCHANNEL_THIS(iface
);
980 TRACE("(%p)->(%p)\n", This
, aUploadStream
);
982 if(This
->post_data_stream
)
983 nsIInputStream_AddRef(This
->post_data_stream
);
985 *aUploadStream
= This
->post_data_stream
;
989 #undef NSUPCHANNEL_THIS
991 static const nsIUploadChannelVtbl nsUploadChannelVtbl
= {
992 nsUploadChannel_QueryInterface
,
993 nsUploadChannel_AddRef
,
994 nsUploadChannel_Release
,
995 nsUploadChannel_SetUploadStream
,
996 nsUploadChannel_GetUploadStream
999 #define NSURI_THIS(iface) DEFINE_THIS(nsURI, WineURI, iface)
1001 static nsresult NSAPI
nsURI_QueryInterface(nsIWineURI
*iface
, nsIIDRef riid
, nsQIResult result
)
1003 nsURI
*This
= NSURI_THIS(iface
);
1007 if(IsEqualGUID(&IID_nsISupports
, riid
)) {
1008 TRACE("(%p)->(IID_nsISupports %p)\n", This
, result
);
1009 *result
= NSURI(This
);
1010 }else if(IsEqualGUID(&IID_nsIURI
, riid
)) {
1011 TRACE("(%p)->(IID_nsIURI %p)\n", This
, result
);
1012 *result
= NSURI(This
);
1013 }else if(IsEqualGUID(&IID_nsIWineURI
, riid
)) {
1014 TRACE("(%p)->(IID_nsIWineURI %p)\n", This
, result
);
1015 *result
= NSURI(This
);
1019 nsIURI_AddRef(NSURI(This
));
1023 TRACE("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), result
);
1024 return nsIURI_QueryInterface(This
->uri
, riid
, result
);
1027 static nsrefcnt NSAPI
nsURI_AddRef(nsIWineURI
*iface
)
1029 nsURI
*This
= NSURI_THIS(iface
);
1030 LONG ref
= InterlockedIncrement(&This
->ref
);
1032 TRACE("(%p) ref=%ld\n", This
, ref
);
1037 static nsrefcnt NSAPI
nsURI_Release(nsIWineURI
*iface
)
1039 nsURI
*This
= NSURI_THIS(iface
);
1040 LONG ref
= InterlockedDecrement(&This
->ref
);
1042 TRACE("(%p) ref=%ld\n", This
, ref
);
1046 nsIWebBrowserChrome_Release(NSWBCHROME(This
->container
));
1048 nsIURI_Release(This
->uri
);
1049 HeapFree(GetProcessHeap(), 0, This
);
1055 static nsresult NSAPI
nsURI_GetSpec(nsIWineURI
*iface
, nsACString
*aSpec
)
1057 nsURI
*This
= NSURI_THIS(iface
);
1059 TRACE("(%p)->(%p)\n", This
, aSpec
);
1062 return nsIURI_GetSpec(This
->uri
, aSpec
);
1064 FIXME("default action not implemented\n");
1065 return NS_ERROR_NOT_IMPLEMENTED
;
1069 static nsresult NSAPI
nsURI_SetSpec(nsIWineURI
*iface
, const nsACString
*aSpec
)
1071 nsURI
*This
= NSURI_THIS(iface
);
1073 TRACE("(%p)->(%p)\n", This
, aSpec
);
1076 return nsIURI_SetSpec(This
->uri
, aSpec
);
1078 FIXME("default action not implemented\n");
1079 return NS_ERROR_NOT_IMPLEMENTED
;
1082 static nsresult NSAPI
nsURI_GetPrePath(nsIWineURI
*iface
, nsACString
*aPrePath
)
1084 nsURI
*This
= NSURI_THIS(iface
);
1086 TRACE("(%p)->(%p)\n", This
, aPrePath
);
1089 return nsIURI_GetPrePath(This
->uri
, aPrePath
);
1091 FIXME("default action not implemented\n");
1092 return NS_ERROR_NOT_IMPLEMENTED
;
1095 static nsresult NSAPI
nsURI_GetScheme(nsIWineURI
*iface
, nsACString
*aScheme
)
1097 nsURI
*This
= NSURI_THIS(iface
);
1099 TRACE("(%p)->(%p)\n", This
, aScheme
);
1102 return nsIURI_GetScheme(This
->uri
, aScheme
);
1104 FIXME("default action not implemented\n");
1105 return NS_ERROR_NOT_IMPLEMENTED
;
1108 static nsresult NSAPI
nsURI_SetScheme(nsIWineURI
*iface
, const nsACString
*aScheme
)
1110 nsURI
*This
= NSURI_THIS(iface
);
1112 TRACE("(%p)->(%p)\n", This
, aScheme
);
1115 return nsIURI_SetScheme(This
->uri
, aScheme
);
1117 FIXME("default action not implemented\n");
1118 return NS_ERROR_NOT_IMPLEMENTED
;
1121 static nsresult NSAPI
nsURI_GetUserPass(nsIWineURI
*iface
, nsACString
*aUserPass
)
1123 nsURI
*This
= NSURI_THIS(iface
);
1125 TRACE("(%p)->(%p)\n", This
, aUserPass
);
1128 return nsIURI_GetUserPass(This
->uri
, aUserPass
);
1130 FIXME("default action not implemented\n");
1131 return NS_ERROR_NOT_IMPLEMENTED
;
1134 static nsresult NSAPI
nsURI_SetUserPass(nsIWineURI
*iface
, const nsACString
*aUserPass
)
1136 nsURI
*This
= NSURI_THIS(iface
);
1138 TRACE("(%p)->(%p)\n", This
, aUserPass
);
1141 return nsIURI_SetUserPass(This
->uri
, aUserPass
);
1143 FIXME("default action not implemented\n");
1144 return NS_ERROR_NOT_IMPLEMENTED
;
1147 static nsresult NSAPI
nsURI_GetUsername(nsIWineURI
*iface
, nsACString
*aUsername
)
1149 nsURI
*This
= NSURI_THIS(iface
);
1151 TRACE("(%p)->(%p)\n", This
, aUsername
);
1154 return nsIURI_GetUsername(This
->uri
, aUsername
);
1156 FIXME("default action not implemented\n");
1157 return NS_ERROR_NOT_IMPLEMENTED
;
1160 static nsresult NSAPI
nsURI_SetUsername(nsIWineURI
*iface
, const nsACString
*aUsername
)
1162 nsURI
*This
= NSURI_THIS(iface
);
1164 TRACE("(%p)->(%p)\n", This
, aUsername
);
1167 return nsIURI_SetUsername(This
->uri
, aUsername
);
1169 FIXME("default action not implemented\n");
1170 return NS_ERROR_NOT_IMPLEMENTED
;
1173 static nsresult NSAPI
nsURI_GetPassword(nsIWineURI
*iface
, nsACString
*aPassword
)
1175 nsURI
*This
= NSURI_THIS(iface
);
1177 TRACE("(%p)->(%p)\n", This
, aPassword
);
1180 return nsIURI_GetPassword(This
->uri
, aPassword
);
1182 FIXME("default action not implemented\n");
1183 return NS_ERROR_NOT_IMPLEMENTED
;
1186 static nsresult NSAPI
nsURI_SetPassword(nsIWineURI
*iface
, const nsACString
*aPassword
)
1188 nsURI
*This
= NSURI_THIS(iface
);
1190 TRACE("(%p)->(%p)\n", This
, aPassword
);
1193 return nsIURI_SetPassword(This
->uri
, aPassword
);
1195 FIXME("default action not implemented\n");
1196 return NS_ERROR_NOT_IMPLEMENTED
;
1199 static nsresult NSAPI
nsURI_GetHostPort(nsIWineURI
*iface
, nsACString
*aHostPort
)
1201 nsURI
*This
= NSURI_THIS(iface
);
1203 TRACE("(%p)->(%p)\n", This
, aHostPort
);
1206 return nsIURI_GetHostPort(This
->uri
, aHostPort
);
1208 FIXME("default action not implemented\n");
1209 return NS_ERROR_NOT_IMPLEMENTED
;
1212 static nsresult NSAPI
nsURI_SetHostPort(nsIWineURI
*iface
, const nsACString
*aHostPort
)
1214 nsURI
*This
= NSURI_THIS(iface
);
1216 TRACE("(%p)->(%p)\n", This
, aHostPort
);
1219 return nsIURI_SetHostPort(This
->uri
, aHostPort
);
1221 FIXME("default action not implemented\n");
1222 return NS_ERROR_NOT_IMPLEMENTED
;
1225 static nsresult NSAPI
nsURI_GetHost(nsIWineURI
*iface
, nsACString
*aHost
)
1227 nsURI
*This
= NSURI_THIS(iface
);
1229 TRACE("(%p)->(%p)\n", This
, aHost
);
1232 return nsIURI_GetHost(This
->uri
, aHost
);
1234 FIXME("default action not implemented\n");
1235 return NS_ERROR_NOT_IMPLEMENTED
;
1238 static nsresult NSAPI
nsURI_SetHost(nsIWineURI
*iface
, const nsACString
*aHost
)
1240 nsURI
*This
= NSURI_THIS(iface
);
1242 TRACE("(%p)->(%p)\n", This
, aHost
);
1245 return nsIURI_SetHost(This
->uri
, aHost
);
1247 FIXME("default action not implemented\n");
1248 return NS_ERROR_NOT_IMPLEMENTED
;
1251 static nsresult NSAPI
nsURI_GetPort(nsIWineURI
*iface
, PRInt32
*aPort
)
1253 nsURI
*This
= NSURI_THIS(iface
);
1255 TRACE("(%p)->(%p)\n", This
, aPort
);
1258 return nsIURI_GetPort(This
->uri
, aPort
);
1260 FIXME("default action not implemented\n");
1261 return NS_ERROR_NOT_IMPLEMENTED
;
1264 static nsresult NSAPI
nsURI_SetPort(nsIWineURI
*iface
, PRInt32 aPort
)
1266 nsURI
*This
= NSURI_THIS(iface
);
1268 TRACE("(%p)->(%ld)\n", This
, aPort
);
1271 return nsIURI_SetPort(This
->uri
, aPort
);
1273 FIXME("default action not implemented\n");
1274 return NS_ERROR_NOT_IMPLEMENTED
;
1277 static nsresult NSAPI
nsURI_GetPath(nsIWineURI
*iface
, nsACString
*aPath
)
1279 nsURI
*This
= NSURI_THIS(iface
);
1281 TRACE("(%p)->(%p)\n", This
, aPath
);
1284 return nsIURI_GetPath(This
->uri
, aPath
);
1286 FIXME("default action not implemented\n");
1287 return NS_ERROR_NOT_IMPLEMENTED
;
1290 static nsresult NSAPI
nsURI_SetPath(nsIWineURI
*iface
, const nsACString
*aPath
)
1292 nsURI
*This
= NSURI_THIS(iface
);
1294 TRACE("(%p)->(%p)\n", This
, aPath
);
1297 return nsIURI_SetPath(This
->uri
, aPath
);
1299 FIXME("default action not implemented\n");
1300 return NS_ERROR_NOT_IMPLEMENTED
;
1303 static nsresult NSAPI
nsURI_Equals(nsIWineURI
*iface
, nsIURI
*other
, PRBool
*_retval
)
1305 nsURI
*This
= NSURI_THIS(iface
);
1307 TRACE("(%p)->(%p %p)\n", This
, other
, _retval
);
1310 return nsIURI_Equals(This
->uri
, other
, _retval
);
1312 FIXME("default action not implemented\n");
1313 return NS_ERROR_NOT_IMPLEMENTED
;
1316 static nsresult NSAPI
nsURI_SchemeIs(nsIWineURI
*iface
, const char *scheme
, PRBool
*_retval
)
1318 nsURI
*This
= NSURI_THIS(iface
);
1320 TRACE("(%p)->(%s %p)\n", This
, debugstr_a(scheme
), _retval
);
1323 return nsIURI_SchemeIs(This
->uri
, scheme
, _retval
);
1325 FIXME("default action not implemented\n");
1326 return NS_ERROR_NOT_IMPLEMENTED
;
1329 static nsresult NSAPI
nsURI_Clone(nsIWineURI
*iface
, nsIURI
**_retval
)
1331 nsURI
*This
= NSURI_THIS(iface
);
1333 TRACE("(%p)->(%p)\n", This
, _retval
);
1339 nsres
= nsIURI_Clone(This
->uri
, &uri
);
1340 if(NS_FAILED(nsres
)) {
1341 WARN("Clone failed: %08lx\n", nsres
);
1345 return create_uri(uri
, This
->container
, _retval
);
1348 FIXME("default action not implemented\n");
1349 return NS_ERROR_NOT_IMPLEMENTED
;
1352 static nsresult NSAPI
nsURI_Resolve(nsIWineURI
*iface
, const nsACString
*arelativePath
,
1353 nsACString
*_retval
)
1355 nsURI
*This
= NSURI_THIS(iface
);
1357 TRACE("(%p)->(%p %p)\n", This
, arelativePath
, _retval
);
1360 return nsIURI_Resolve(This
->uri
, arelativePath
, _retval
);
1362 FIXME("default action not implemented\n");
1363 return NS_ERROR_NOT_IMPLEMENTED
;
1366 static nsresult NSAPI
nsURI_GetAsciiSpec(nsIWineURI
*iface
, nsACString
*aAsciiSpec
)
1368 nsURI
*This
= NSURI_THIS(iface
);
1370 TRACE("(%p)->(%p)\n", This
, aAsciiSpec
);
1373 return nsIURI_GetAsciiSpec(This
->uri
, aAsciiSpec
);
1375 FIXME("default action not implemented\n");
1376 return NS_ERROR_NOT_IMPLEMENTED
;
1379 static nsresult NSAPI
nsURI_GetAsciiHost(nsIWineURI
*iface
, nsACString
*aAsciiHost
)
1381 nsURI
*This
= NSURI_THIS(iface
);
1383 TRACE("(%p)->(%p)\n", This
, aAsciiHost
);
1386 return nsIURI_GetAsciiHost(This
->uri
, aAsciiHost
);
1388 FIXME("default action not implemented\n");
1389 return NS_ERROR_NOT_IMPLEMENTED
;
1392 static nsresult NSAPI
nsURI_GetOriginCharset(nsIWineURI
*iface
, nsACString
*aOriginCharset
)
1394 nsURI
*This
= NSURI_THIS(iface
);
1396 TRACE("(%p)->(%p)\n", This
, aOriginCharset
);
1399 return nsIURI_GetOriginCharset(This
->uri
, aOriginCharset
);
1401 FIXME("default action not implemented\n");
1402 return NS_ERROR_NOT_IMPLEMENTED
;
1405 static nsresult NSAPI
nsURI_GetNSContainer(nsIWineURI
*iface
, NSContainer
**aContainer
)
1407 nsURI
*This
= NSURI_THIS(iface
);
1409 TRACE("(%p)->(%p)\n", This
, aContainer
);
1412 nsIWebBrowserChrome_AddRef(NSWBCHROME(This
->container
));
1413 *aContainer
= This
->container
;
1418 static nsresult NSAPI
nsURI_SetNSContainer(nsIWineURI
*iface
, NSContainer
*aContainer
)
1420 nsURI
*This
= NSURI_THIS(iface
);
1422 TRACE("(%p)->(%p)\n", This
, aContainer
);
1424 if(This
->container
) {
1425 WARN("Container already set: %p\n", This
->container
);
1426 nsIWebBrowserChrome_Release(NSWBCHROME(This
->container
));
1430 nsIWebBrowserChrome_AddRef(NSWBCHROME(aContainer
));
1431 This
->container
= aContainer
;
1438 static const nsIWineURIVtbl nsWineURIVtbl
= {
1439 nsURI_QueryInterface
,
1467 nsURI_GetOriginCharset
,
1468 nsURI_GetNSContainer
,
1469 nsURI_SetNSContainer
,
1472 static nsresult
create_uri(nsIURI
*uri
, NSContainer
*container
, nsIURI
**_retval
)
1474 nsURI
*ret
= HeapAlloc(GetProcessHeap(), 0, sizeof(nsURI
));
1476 ret
->lpWineURIVtbl
= &nsWineURIVtbl
;
1479 ret
->container
= container
;
1482 nsIWebBrowserChrome_AddRef(NSWBCHROME(container
));
1484 TRACE("retval=%p\n", ret
);
1485 *_retval
= NSURI(ret
);
1489 static nsresult NSAPI
nsIOService_QueryInterface(nsIIOService
*iface
, nsIIDRef riid
,
1494 if(IsEqualGUID(&IID_nsISupports
, riid
)) {
1495 TRACE("(IID_nsISupports %p)\n", result
);
1497 }else if(IsEqualGUID(&IID_nsIIOService
, riid
)) {
1498 TRACE("(IID_nsIIOService %p)\n", result
);
1503 nsIIOService_AddRef(iface
);
1507 WARN("(%s %p)\n", debugstr_guid(riid
), result
);
1508 return NS_NOINTERFACE
;
1511 static nsrefcnt NSAPI
nsIOService_AddRef(nsIIOService
*iface
)
1516 static nsrefcnt NSAPI
nsIOService_Release(nsIIOService
*iface
)
1521 static nsresult NSAPI
nsIOService_GetProtocolHandler(nsIIOService
*iface
, const char *aScheme
,
1522 nsIProtocolHandler
**_retval
)
1524 TRACE("(%s %p)\n", debugstr_a(aScheme
), _retval
);
1525 return nsIIOService_GetProtocolHandler(nsio
, aScheme
, _retval
);
1528 static nsresult NSAPI
nsIOService_GetProtocolFlags(nsIIOService
*iface
, const char *aScheme
,
1531 TRACE("(%s %p)\n", debugstr_a(aScheme
), _retval
);
1532 return nsIIOService_GetProtocolFlags(nsio
, aScheme
, _retval
);
1535 static nsresult NSAPI
nsIOService_NewURI(nsIIOService
*iface
, const nsACString
*aSpec
,
1536 const char *aOriginCharset
, nsIURI
*aBaseURI
, nsIURI
**_retval
)
1538 const char *spec
= NULL
;
1539 NSContainer
*nscontainer
= NULL
;
1541 PRBool is_javascript
= FALSE
;
1544 nsACString_GetData(aSpec
, &spec
, NULL
);
1546 TRACE("(%p(%s) %s %p %p)\n", aSpec
, debugstr_a(spec
), debugstr_a(aOriginCharset
),
1550 nsACString base_uri_str
;
1551 const char *base_uri
= NULL
;
1553 nsACString_Init(&base_uri_str
, NULL
);
1555 nsres
= nsIURI_GetSpec(aBaseURI
, &base_uri_str
);
1556 if(NS_SUCCEEDED(nsres
)) {
1557 nsACString_GetData(&base_uri_str
, &base_uri
, NULL
);
1558 TRACE("uri=%s\n", debugstr_a(base_uri
));
1560 ERR("GetSpec failed: %08lx\n", nsres
);
1563 nsACString_Finish(&base_uri_str
);
1566 nsres
= nsIIOService_NewURI(nsio
, aSpec
, aOriginCharset
, aBaseURI
, &uri
);
1567 if(NS_FAILED(nsres
))
1568 TRACE("NewURI failed: %08lx\n", nsres
);
1571 nsIURI_SchemeIs(uri
, "javascript", &is_javascript
);
1573 TRACE("returning javascript uri: %p\n", uri
);
1580 nsIWineURI
*wine_uri
;
1582 nsres
= nsIURI_QueryInterface(aBaseURI
, &IID_nsIWineURI
, (void**)&wine_uri
);
1583 if(NS_SUCCEEDED(nsres
)) {
1584 nsIWineURI_GetNSContainer(wine_uri
, &nscontainer
);
1585 nsIWineURI_Release(wine_uri
);
1587 ERR("Could not get nsIWineURI: %08lx\n", nsres
);
1591 nsres
= create_uri(uri
, nscontainer
, _retval
);
1594 nsIWebBrowserChrome_Release(NSWBCHROME(nscontainer
));
1599 static nsresult NSAPI
nsIOService_NewFileURI(nsIIOService
*iface
, nsIFile
*aFile
,
1602 TRACE("(%p %p)\n", aFile
, _retval
);
1603 return nsIIOService_NewFileURI(nsio
, aFile
, _retval
);
1606 static nsresult NSAPI
nsIOService_NewChannelFromURI(nsIIOService
*iface
, nsIURI
*aURI
,
1607 nsIChannel
**_retval
)
1609 nsIChannel
*channel
= NULL
;
1611 nsIWineURI
*wine_uri
;
1614 TRACE("(%p %p)\n", aURI
, _retval
);
1616 nsres
= nsIIOService_NewChannelFromURI(nsio
, aURI
, &channel
);
1617 if(NS_FAILED(nsres
) && nsres
!= NS_ERROR_UNKNOWN_PROTOCOL
) {
1618 WARN("NewChannelFromURI failed: %08lx\n", nsres
);
1623 nsres
= nsIURI_QueryInterface(aURI
, &IID_nsIWineURI
, (void**)&wine_uri
);
1624 if(NS_FAILED(nsres
)) {
1625 WARN("Could not get nsIWineURI: %08lx\n", nsres
);
1627 return channel
? NS_OK
: NS_ERROR_UNEXPECTED
;
1630 ret
= HeapAlloc(GetProcessHeap(), 0, sizeof(nsChannel
));
1632 ret
->lpHttpChannelVtbl
= &nsChannelVtbl
;
1633 ret
->lpUploadChannelVtbl
= &nsUploadChannelVtbl
;
1635 ret
->channel
= channel
;
1636 ret
->http_channel
= NULL
;
1637 ret
->uri
= wine_uri
;
1638 ret
->post_data_stream
= NULL
;
1639 ret
->load_group
= NULL
;
1640 ret
->notif_callback
= NULL
;
1641 ret
->load_flags
= 0;
1642 ret
->content
= NULL
;
1644 nsIURI_AddRef(aURI
);
1645 ret
->original_uri
= aURI
;
1648 nsIChannel_QueryInterface(channel
, &IID_nsIHttpChannel
, (void**)&ret
->http_channel
);
1650 *_retval
= NSCHANNEL(ret
);
1654 static nsresult NSAPI
nsIOService_NewChannel(nsIIOService
*iface
, const nsACString
*aSpec
,
1655 const char *aOriginCharset
, nsIURI
*aBaseURI
, nsIChannel
**_retval
)
1657 TRACE("(%p %s %p %p)\n", aSpec
, debugstr_a(aOriginCharset
), aBaseURI
, _retval
);
1658 return nsIIOService_NewChannel(nsio
, aSpec
, aOriginCharset
, aBaseURI
, _retval
);
1661 static nsresult NSAPI
nsIOService_GetOffline(nsIIOService
*iface
, PRBool
*aOffline
)
1663 TRACE("(%p)\n", aOffline
);
1664 return nsIIOService_GetOffline(nsio
, aOffline
);
1667 static nsresult NSAPI
nsIOService_SetOffline(nsIIOService
*iface
, PRBool aOffline
)
1669 TRACE("(%x)\n", aOffline
);
1670 return nsIIOService_SetOffline(nsio
, aOffline
);
1673 static nsresult NSAPI
nsIOService_AllowPort(nsIIOService
*iface
, PRInt32 aPort
,
1674 const char *aScheme
, PRBool
*_retval
)
1676 TRACE("(%ld %s %p)\n", aPort
, debugstr_a(aScheme
), _retval
);
1677 return nsIIOService_AllowPort(nsio
, aPort
, debugstr_a(aScheme
), _retval
);
1680 static nsresult NSAPI
nsIOService_ExtractScheme(nsIIOService
*iface
, const nsACString
*urlString
,
1681 nsACString
* _retval
)
1683 TRACE("(%p %p)\n", urlString
, _retval
);
1684 return nsIIOService_ExtractScheme(nsio
, urlString
, _retval
);
1687 static const nsIIOServiceVtbl nsIOServiceVtbl
= {
1688 nsIOService_QueryInterface
,
1690 nsIOService_Release
,
1691 nsIOService_GetProtocolHandler
,
1692 nsIOService_GetProtocolFlags
,
1694 nsIOService_NewFileURI
,
1695 nsIOService_NewChannelFromURI
,
1696 nsIOService_NewChannel
,
1697 nsIOService_GetOffline
,
1698 nsIOService_SetOffline
,
1699 nsIOService_AllowPort
,
1700 nsIOService_ExtractScheme
1703 static nsIIOService nsIOService
= { &nsIOServiceVtbl
};
1705 static nsresult NSAPI
nsIOServiceFactory_QueryInterface(nsIFactory
*iface
, nsIIDRef riid
,
1710 if(IsEqualGUID(&IID_nsISupports
, riid
)) {
1711 TRACE("(IID_nsISupoprts %p)\n", result
);
1713 }else if(IsEqualGUID(&IID_nsIFactory
, riid
)) {
1714 TRACE("(IID_nsIFactory %p)\n", result
);
1719 nsIFactory_AddRef(iface
);
1723 WARN("(%s %p)\n", debugstr_guid(riid
), result
);
1724 return NS_NOINTERFACE
;
1727 static nsrefcnt NSAPI
nsIOServiceFactory_AddRef(nsIFactory
*iface
)
1732 static nsrefcnt NSAPI
nsIOServiceFactory_Release(nsIFactory
*iface
)
1737 static nsresult NSAPI
nsIOServiceFactory_CreateInstance(nsIFactory
*iface
,
1738 nsISupports
*aOuter
, const nsIID
*iid
, void **result
)
1740 return nsIIOService_QueryInterface(&nsIOService
, iid
, result
);
1743 static nsresult NSAPI
nsIOServiceFactory_LockFactory(nsIFactory
*iface
, PRBool lock
)
1745 WARN("(%x)\n", lock
);
1749 static const nsIFactoryVtbl nsIOServiceFactoryVtbl
= {
1750 nsIOServiceFactory_QueryInterface
,
1751 nsIOServiceFactory_AddRef
,
1752 nsIOServiceFactory_Release
,
1753 nsIOServiceFactory_CreateInstance
,
1754 nsIOServiceFactory_LockFactory
1757 static nsIFactory nsIOServiceFactory
= { &nsIOServiceFactoryVtbl
};
1759 void init_nsio(nsIComponentManager
*component_manager
, nsIComponentRegistrar
*registrar
)
1761 nsIFactory
*old_factory
= NULL
;
1764 nsres
= nsIComponentManager_GetClassObject(component_manager
, &NS_IOSERVICE_CID
,
1765 &IID_nsIFactory
, (void**)&old_factory
);
1766 if(NS_FAILED(nsres
)) {
1767 ERR("Could not get factory: %08lx\n", nsres
);
1768 nsIFactory_Release(old_factory
);
1772 nsres
= nsIFactory_CreateInstance(old_factory
, NULL
, &IID_nsIIOService
, (void**)&nsio
);
1773 if(NS_FAILED(nsres
)) {
1774 ERR("Couldn not create nsIOService instance %08lx\n", nsres
);
1775 nsIFactory_Release(old_factory
);
1779 nsres
= nsIComponentRegistrar_UnregisterFactory(registrar
, &NS_IOSERVICE_CID
, old_factory
);
1780 nsIFactory_Release(old_factory
);
1781 if(NS_FAILED(nsres
))
1782 ERR("UnregisterFactory failed: %08lx\n", nsres
);
1784 nsres
= nsIComponentRegistrar_RegisterFactory(registrar
, &NS_IOSERVICE_CID
,
1785 NS_IOSERVICE_CLASSNAME
, NS_IOSERVICE_CONTRACTID
, &nsIOServiceFactory
);
1786 if(NS_FAILED(nsres
))
1787 ERR("RegisterFactory failed: %08lx\n", nsres
);
1790 nsIURI
*get_nsIURI(LPCWSTR url
)
1798 len
= WideCharToMultiByte(CP_ACP
, 0, url
, -1, NULL
, -1, NULL
, NULL
);
1799 urla
= HeapAlloc(GetProcessHeap(), 0, len
);
1800 WideCharToMultiByte(CP_ACP
, 0, url
, -1, urla
, -1, NULL
, NULL
);
1802 nsACString_Init(&acstr
, urla
);
1804 nsres
= nsIIOService_NewURI(nsio
, &acstr
, NULL
, NULL
, &ret
);
1805 if(NS_FAILED(nsres
))
1806 FIXME("NewURI failed: %08lx\n", nsres
);
1808 nsACString_Finish(&acstr
);
1809 HeapFree(GetProcessHeap(), 0, urla
);