mshtml: Added SID_SContainerDispatch support.
[wine] / dlls / mshtml / binding.h
1 /*
2  * Copyright 2011 Jacek Caban for CodeWeavers
3  *
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.
8  *
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.
13  *
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
17  */
18
19 typedef struct nsWineURI nsWineURI;
20
21 /* Keep sync with request_method_strings in nsio.c */
22 typedef enum {
23     METHOD_GET,
24     METHOD_PUT,
25     METHOD_POST
26 } REQUEST_METHOD;
27
28 typedef struct {
29     nsIHttpChannel         nsIHttpChannel_iface;
30     nsIUploadChannel       nsIUploadChannel_iface;
31     nsIHttpChannelInternal nsIHttpChannelInternal_iface;
32
33     LONG ref;
34
35     nsWineURI *uri;
36     nsIInputStream *post_data_stream;
37     BOOL post_data_contains_headers;
38     nsILoadGroup *load_group;
39     nsIInterfaceRequestor *notif_callback;
40     nsISupports *owner;
41     nsLoadFlags load_flags;
42     nsIURI *original_uri;
43     nsIURI *referrer;
44     char *content_type;
45     char *charset;
46     PRUint32 response_status;
47     REQUEST_METHOD request_method;
48     struct list response_headers;
49     struct list request_headers;
50 } nsChannel;
51
52 typedef struct BSCallbackVtbl BSCallbackVtbl;
53
54 struct BSCallback {
55     IBindStatusCallback IBindStatusCallback_iface;
56     IServiceProvider    IServiceProvider_iface;
57     IHttpNegotiate2     IHttpNegotiate2_iface;
58     IInternetBindInfo   IInternetBindInfo_iface;
59
60     const BSCallbackVtbl          *vtbl;
61
62     LONG ref;
63
64     LPWSTR headers;
65     HGLOBAL post_data;
66     ULONG post_data_len;
67     ULONG readed;
68     DWORD bindf;
69     BOOL bindinfo_ready;
70     int bom;
71
72     IMoniker *mon;
73     IBinding *binding;
74
75     HTMLInnerWindow *window;
76
77     struct list entry;
78 };
79
80 typedef struct nsProtocolStream nsProtocolStream;
81
82 struct nsChannelBSC {
83     BSCallback bsc;
84
85     nsChannel *nschannel;
86     nsIStreamListener *nslistener;
87     nsISupports *nscontext;
88     BOOL is_js;
89     BOOL is_doc_channel;
90     BOOL response_processed;
91
92     nsProtocolStream *nsstream;
93 };
94
95 typedef struct {
96     struct list entry;
97     WCHAR *header;
98     WCHAR *data;
99 } http_header_t;
100
101 #define BINDING_NAVIGATED    0x0001
102 #define BINDING_REPLACE      0x0002
103 #define BINDING_FROMHIST     0x0004
104 #define BINDING_REFRESH      0x0008
105
106 HRESULT set_http_header(struct list*,const WCHAR*,int,const WCHAR*,int) DECLSPEC_HIDDEN;
107 HRESULT create_redirect_nschannel(const WCHAR*,nsChannel*,nsChannel**) DECLSPEC_HIDDEN;
108
109 nsresult on_start_uri_open(NSContainer*,nsIURI*,cpp_bool*) DECLSPEC_HIDDEN;
110 HRESULT hlink_frame_navigate(HTMLDocument*,LPCWSTR,nsChannel*,DWORD,BOOL*) DECLSPEC_HIDDEN;
111 HRESULT create_doc_uri(HTMLOuterWindow*,const WCHAR*,nsWineURI**) DECLSPEC_HIDDEN;
112 HRESULT load_nsuri(HTMLOuterWindow*,nsWineURI*,nsChannelBSC*,DWORD) DECLSPEC_HIDDEN;
113 HRESULT set_moniker(HTMLDocument*,IMoniker*,IBindCtx*,nsChannelBSC*,BOOL) DECLSPEC_HIDDEN;
114 void prepare_for_binding(HTMLDocument*,IMoniker*,DWORD) DECLSPEC_HIDDEN;
115 HRESULT super_navigate(HTMLOuterWindow*,IUri*,DWORD,const WCHAR*,BYTE*,DWORD) DECLSPEC_HIDDEN;
116 HRESULT load_uri(HTMLOuterWindow*,IUri*,DWORD) DECLSPEC_HIDDEN;
117 HRESULT navigate_new_window(HTMLOuterWindow*,IUri*,const WCHAR*,IHTMLWindow2**) DECLSPEC_HIDDEN;
118 HRESULT navigate_url(HTMLOuterWindow*,const WCHAR*,IUri*,DWORD) DECLSPEC_HIDDEN;
119
120 HRESULT create_channelbsc(IMoniker*,const WCHAR*,BYTE*,DWORD,BOOL,nsChannelBSC**) DECLSPEC_HIDDEN;
121 HRESULT channelbsc_load_stream(HTMLInnerWindow*,IStream*) DECLSPEC_HIDDEN;
122 void channelbsc_set_channel(nsChannelBSC*,nsChannel*,nsIStreamListener*,nsISupports*) DECLSPEC_HIDDEN;
123 IUri *nsuri_get_uri(nsWineURI*) DECLSPEC_HIDDEN;
124 HRESULT create_relative_uri(HTMLOuterWindow*,const WCHAR*,IUri**) DECLSPEC_HIDDEN;
125
126 IUri *get_uri_nofrag(IUri*) DECLSPEC_HIDDEN;
127
128 void set_current_mon(HTMLOuterWindow*,IMoniker*,DWORD) DECLSPEC_HIDDEN;
129 void set_current_uri(HTMLOuterWindow*,IUri*) DECLSPEC_HIDDEN;
130
131 HRESULT bind_mon_to_wstr(HTMLInnerWindow*,IMoniker*,WCHAR**) DECLSPEC_HIDDEN;