ReactOS  0.4.14-dev-552-g2fad488
binding.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  nsChannel
 
struct  request_data_t
 
struct  BSCallback
 
struct  nsChannelBSC
 
struct  BSCallbackVtbl
 
struct  http_header_t
 

Macros

#define BINDING_NAVIGATED   0x0001
 
#define BINDING_REPLACE   0x0002
 
#define BINDING_FROMHIST   0x0004
 
#define BINDING_REFRESH   0x0008
 
#define BINDING_SUBMIT   0x0010
 
#define BINDING_NOFRAG   0x0020
 

Typedefs

typedef struct nsWineURI nsWineURI
 
typedef struct BSCallbackVtbl BSCallbackVtbl
 
typedef struct nsProtocolStream nsProtocolStream
 

Enumerations

enum  REQUEST_METHOD { METHOD_GET, METHOD_PUT, METHOD_POST }
 
enum  binding_bom_t { BOM_NONE, BOM_UTF8, BOM_UTF16 }
 

Functions

HRESULT set_http_header (struct list *, const WCHAR *, int, const WCHAR *, int) DECLSPEC_HIDDEN
 
HRESULT create_redirect_nschannel (const WCHAR *, nsChannel *, nsChannel **) DECLSPEC_HIDDEN
 
nsresult on_start_uri_open (NSContainer *, nsIURI *, cpp_bool *) DECLSPEC_HIDDEN
 
HRESULT hlink_frame_navigate (HTMLDocument *, LPCWSTR, nsChannel *, DWORD, BOOL *) DECLSPEC_HIDDEN
 
HRESULT create_doc_uri (HTMLOuterWindow *, IUri *, nsWineURI **) DECLSPEC_HIDDEN
 
HRESULT load_nsuri (HTMLOuterWindow *, nsWineURI *, nsIInputStream *, nsChannelBSC *, DWORD) DECLSPEC_HIDDEN
 
HRESULT set_moniker (HTMLOuterWindow *, IMoniker *, IUri *, IBindCtx *, nsChannelBSC *, BOOL) DECLSPEC_HIDDEN
 
void prepare_for_binding (HTMLDocument *, IMoniker *, DWORD) DECLSPEC_HIDDEN
 
HRESULT super_navigate (HTMLOuterWindow *, IUri *, DWORD, const WCHAR *, BYTE *, DWORD) DECLSPEC_HIDDEN
 
HRESULT load_uri (HTMLOuterWindow *, IUri *, DWORD) DECLSPEC_HIDDEN
 
HRESULT navigate_new_window (HTMLOuterWindow *, IUri *, const WCHAR *, request_data_t *, IHTMLWindow2 **) DECLSPEC_HIDDEN
 
HRESULT navigate_url (HTMLOuterWindow *, const WCHAR *, IUri *, DWORD) DECLSPEC_HIDDEN
 
HRESULT submit_form (HTMLOuterWindow *, const WCHAR *, IUri *, nsIInputStream *) DECLSPEC_HIDDEN
 
void init_bscallback (BSCallback *, const BSCallbackVtbl *, IMoniker *, DWORD) DECLSPEC_HIDDEN
 
HRESULT create_channelbsc (IMoniker *, const WCHAR *, BYTE *, DWORD, BOOL, nsChannelBSC **) DECLSPEC_HIDDEN
 
HRESULT channelbsc_load_stream (HTMLInnerWindow *, IMoniker *, IStream *) DECLSPEC_HIDDEN
 
void channelbsc_set_channel (nsChannelBSC *, nsChannel *, nsIStreamListener *, nsISupports *) DECLSPEC_HIDDEN
 
IUrinsuri_get_uri (nsWineURI *) DECLSPEC_HIDDEN
 
HRESULT read_stream (BSCallback *, IStream *, void *, DWORD, DWORD *) DECLSPEC_HIDDEN
 
HRESULT create_relative_uri (HTMLOuterWindow *, const WCHAR *, IUri **) DECLSPEC_HIDDEN
 
HRESULT create_uri (const WCHAR *, DWORD, IUri **) DECLSPEC_HIDDEN
 
IUriget_uri_nofrag (IUri *) DECLSPEC_HIDDEN
 
void set_current_mon (HTMLOuterWindow *, IMoniker *, DWORD) DECLSPEC_HIDDEN
 
void set_current_uri (HTMLOuterWindow *, IUri *) DECLSPEC_HIDDEN
 

Macro Definition Documentation

◆ BINDING_FROMHIST

#define BINDING_FROMHIST   0x0004

Definition at line 129 of file binding.h.

◆ BINDING_NAVIGATED

#define BINDING_NAVIGATED   0x0001

Definition at line 127 of file binding.h.

◆ BINDING_NOFRAG

#define BINDING_NOFRAG   0x0020

Definition at line 132 of file binding.h.

◆ BINDING_REFRESH

#define BINDING_REFRESH   0x0008

Definition at line 130 of file binding.h.

◆ BINDING_REPLACE

#define BINDING_REPLACE   0x0002

Definition at line 128 of file binding.h.

◆ BINDING_SUBMIT

#define BINDING_SUBMIT   0x0010

Definition at line 131 of file binding.h.

Typedef Documentation

◆ BSCallbackVtbl

Definition at line 69 of file binding.h.

◆ nsProtocolStream

Definition at line 95 of file binding.h.

◆ nsWineURI

Definition at line 21 of file binding.h.

Enumeration Type Documentation

◆ binding_bom_t

Enumerator
BOM_NONE 
BOM_UTF8 
BOM_UTF16 

Definition at line 30 of file binding.h.

30  {
31  BOM_NONE,
32  BOM_UTF8,
33  BOM_UTF16
binding_bom_t
Definition: binding.h:30

◆ REQUEST_METHOD

Enumerator
METHOD_GET 
METHOD_PUT 
METHOD_POST 

Definition at line 24 of file binding.h.

24  {
25  METHOD_GET,
26  METHOD_PUT,
REQUEST_METHOD
Definition: binding.h:24

Function Documentation

◆ channelbsc_load_stream()

HRESULT channelbsc_load_stream ( HTMLInnerWindow ,
IMoniker ,
IStream  
)

Definition at line 1811 of file navigate.c.

1812 {
1813  nsChannelBSC *bscallback = pending_window->bscallback;
1814  HRESULT hres = S_OK;
1815 
1816  if(!bscallback->nschannel) {
1817  ERR("NULL nschannel\n");
1818  return E_FAIL;
1819  }
1820 
1821  bscallback->nschannel->content_type = heap_strdupA("text/html");
1822  if(!bscallback->nschannel->content_type)
1823  return E_OUTOFMEMORY;
1824 
1825  set_current_mon(pending_window->base.outer_window, mon, 0);
1826 
1827  bscallback->bsc.window = pending_window;
1828  if(stream)
1829  hres = read_stream_data(bscallback, stream);
1830  if(SUCCEEDED(hres))
1831  hres = async_stop_request(bscallback);
1832  if(FAILED(hres))
1833  IBindStatusCallback_OnStopBinding(&bscallback->bsc.IBindStatusCallback_iface, hres,
1834  ERROR_SUCCESS);
1835 
1836  return hres;
1837 }
#define ERROR_SUCCESS
Definition: deptool.c:10
static HRESULT async_stop_request(nsChannelBSC *This)
Definition: navigate.c:1258
BSCallback bsc
Definition: binding.h:98
HTMLInnerWindow * window
Definition: binding.h:90
#define E_FAIL
Definition: ddrawi.h:102
char * content_type
Definition: binding.h:53
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
Definition: parse.h:22
#define ERR(fmt,...)
Definition: debug.h:109
#define S_OK
Definition: intsafe.h:59
void set_current_mon(HTMLOuterWindow *, IMoniker *, DWORD) DECLSPEC_HIDDEN
Definition: persist.c:99
IBindStatusCallback IBindStatusCallback_iface
Definition: binding.h:72
nsChannel * nschannel
Definition: binding.h:100
static char * heap_strdupA(const char *str)
static HRESULT read_stream_data(nsChannelBSC *This, IStream *stream)
Definition: navigate.c:960
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by PersistStreamInit_InitNew(), and PersistStreamInit_Load().

◆ channelbsc_set_channel()

void channelbsc_set_channel ( nsChannelBSC ,
nsChannel ,
nsIStreamListener ,
nsISupports  
)

Definition at line 1839 of file navigate.c.

1840 {
1841  nsIHttpChannel_AddRef(&channel->nsIHttpChannel_iface);
1842  This->nschannel = channel;
1843 
1844  nsIStreamListener_AddRef(listener);
1845  This->nslistener = listener;
1846 
1847  if(context) {
1848  nsISupports_AddRef(context);
1849  This->nscontext = context;
1850  }
1851 
1852  if(This->bsc.request_data.headers) {
1853  HRESULT hres;
1854 
1855  hres = parse_headers(This->bsc.request_data.headers, &channel->request_headers);
1856  heap_free(This->bsc.request_data.headers);
1857  This->bsc.request_data.headers = NULL;
1858  if(FAILED(hres))
1859  WARN("parse_headers failed: %08x\n", hres);
1860  }
1861 }
Definition: http.c:6597
#define WARN(fmt,...)
Definition: debug.h:111
smooth NULL
Definition: ftsmooth.c:416
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
static HRESULT parse_headers(const WCHAR *headers, struct list *headers_list)
Definition: navigate.c:681
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by async_open(), and nsChannel_AsyncOpen().

◆ create_channelbsc()

HRESULT create_channelbsc ( IMoniker ,
const WCHAR ,
BYTE ,
DWORD  ,
BOOL  ,
nsChannelBSC **   
)

Definition at line 1693 of file navigate.c.

1695 {
1696  nsChannelBSC *ret;
1697  DWORD bindf;
1698 
1699  ret = heap_alloc_zero(sizeof(*ret));
1700  if(!ret)
1701  return E_OUTOFMEMORY;
1702 
1703  bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
1704  if(post_data_size)
1705  bindf |= BINDF_FORMS_SUBMIT | BINDF_PRAGMA_NO_CACHE | BINDF_HYPERLINK | BINDF_GETNEWESTVERSION;
1706 
1707  init_bscallback(&ret->bsc, &nsChannelBSCVtbl, mon, bindf);
1708  ret->is_doc_channel = is_doc_binding;
1709 
1710  if(headers) {
1711  ret->bsc.request_data.headers = heap_strdupW(headers);
1712  if(!ret->bsc.request_data.headers) {
1713  IBindStatusCallback_Release(&ret->bsc.IBindStatusCallback_iface);
1714  return E_OUTOFMEMORY;
1715  }
1716  }
1717 
1718  if(post_data) {
1719  ret->bsc.request_data.post_data = GlobalAlloc(0, post_data_size+1);
1720  if(!ret->bsc.request_data.post_data) {
1721  release_request_data(&ret->bsc.request_data);
1722  IBindStatusCallback_Release(&ret->bsc.IBindStatusCallback_iface);
1723  return E_OUTOFMEMORY;
1724  }
1725 
1726  memcpy(ret->bsc.request_data.post_data, post_data, post_data_size);
1727  ((BYTE*)ret->bsc.request_data.post_data)[post_data_size] = 0;
1728  ret->bsc.request_data.post_data_len = post_data_size;
1729  }
1730 
1731  TRACE("created %p\n", ret);
1732  *retval = ret;
1733  return S_OK;
1734 }
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
vector< Header * > headers
Definition: sdkparse.cpp:39
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
static WCHAR * heap_strdupW(const WCHAR *str)
Definition: propsheet.c:178
static const BSCallbackVtbl nsChannelBSCVtbl
Definition: navigate.c:1682
#define TRACE(s)
Definition: solgame.cpp:4
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
static const CHAR post_data[]
Definition: protocol.c:217
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
unsigned char BYTE
Definition: mem.h:68
void init_bscallback(BSCallback *This, const BSCallbackVtbl *vtbl, IMoniker *mon, DWORD bindf)
Definition: navigate.c:584
#define S_OK
Definition: intsafe.h:59
static void release_request_data(request_data_t *request_data)
Definition: navigate.c:190
static DWORD bindf
Definition: protocol.c:70

Referenced by async_open(), hlink_frame_navigate(), navigate_new_window(), set_moniker(), and super_navigate().

◆ create_doc_uri()

HRESULT create_doc_uri ( HTMLOuterWindow ,
IUri ,
nsWineURI **   
)

Definition at line 3210 of file nsio.c.

3211 {
3212  nsWineURI *uri;
3213  nsresult nsres;
3214 
3215  nsres = create_nsuri(iuri, window, window->doc_obj->nscontainer, NULL, &uri);
3216  if(NS_FAILED(nsres))
3217  return E_FAIL;
3218 
3219  uri->is_doc_uri = TRUE;
3220 
3221  *ret = uri;
3222  return S_OK;
3223 }
#define TRUE
Definition: types.h:120
const char * uri
Definition: sec_mgr.c:1594
static nsresult create_nsuri(IUri *, HTMLOuterWindow *, NSContainer *, const char *, nsWineURI **)
Definition: nsio.c:3172
Definition: nsio.c:34
#define E_FAIL
Definition: ddrawi.h:102
smooth NULL
Definition: ftsmooth.c:416
#define NS_FAILED(res)
int ret
static IHTMLWindow2 * window
Definition: events.c:77
#define S_OK
Definition: intsafe.h:59
HRESULT nsresult
Definition: nsiface.idl:39

Referenced by navigate_uri(), and set_moniker().

◆ create_redirect_nschannel()

HRESULT create_redirect_nschannel ( const WCHAR ,
nsChannel ,
nsChannel **   
)

Definition at line 3251 of file nsio.c.

3252 {
3254  nsChannel *channel;
3255  nsWineURI *uri;
3256  IUri *iuri;
3257  nsresult nsres;
3258  HRESULT hres;
3259 
3260  hres = create_uri(url, 0, &iuri);
3261  if(FAILED(hres))
3262  return hres;
3263 
3264  if(orig_channel->uri->window_ref)
3265  window = orig_channel->uri->window_ref->window;
3266  nsres = create_nsuri(iuri, window, NULL, NULL, &uri);
3267  IUri_Release(iuri);
3268  if(NS_FAILED(nsres))
3269  return E_FAIL;
3270 
3271  nsres = create_nschannel(uri, &channel);
3272  nsIFileURL_Release(&uri->nsIFileURL_iface);
3273  if(NS_FAILED(nsres))
3274  return E_FAIL;
3275 
3276  if(orig_channel->load_group) {
3277  nsILoadGroup_AddRef(orig_channel->load_group);
3278  channel->load_group = orig_channel->load_group;
3279  }
3280 
3281  if(orig_channel->notif_callback) {
3282  nsIInterfaceRequestor_AddRef(orig_channel->notif_callback);
3283  channel->notif_callback = orig_channel->notif_callback;
3284  }
3285 
3286  channel->load_flags = orig_channel->load_flags | LOAD_REPLACE;
3287 
3288  if(orig_channel->request_method == METHOD_POST)
3289  FIXME("unsupported POST method\n");
3290 
3291  if(orig_channel->original_uri) {
3292  nsIURI_AddRef(orig_channel->original_uri);
3293  channel->original_uri = orig_channel->original_uri;
3294  }
3295 
3296  if(orig_channel->referrer) {
3297  nsIURI_AddRef(orig_channel->referrer);
3298  channel->referrer = orig_channel->referrer;
3299  }
3300 
3301  *ret = channel;
3302  return S_OK;
3303 }
nsIInterfaceRequestor * notif_callback
Definition: binding.h:47
const char * uri
Definition: sec_mgr.c:1594
static nsresult create_nsuri(IUri *, HTMLOuterWindow *, NSContainer *, const char *, nsWineURI **)
Definition: nsio.c:3172
Definition: nsio.c:34
nsLoadFlags load_flags
Definition: binding.h:50
#define E_FAIL
Definition: ddrawi.h:102
#define FIXME(fmt,...)
Definition: debug.h:110
nsIURI * original_uri
Definition: binding.h:51
smooth NULL
Definition: ftsmooth.c:416
#define NS_FAILED(res)
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
static const WCHAR url[]
Definition: encode.c:1432
int ret
static IHTMLWindow2 * window
Definition: events.c:77
#define S_OK
Definition: intsafe.h:59
static nsresult create_nschannel(nsWineURI *uri, nsChannel **ret)
Definition: nsio.c:3225
nsILoadGroup * load_group
Definition: binding.h:46
HRESULT nsresult
Definition: nsiface.idl:39
nsIURI * referrer
Definition: binding.h:52
HRESULT create_uri(const WCHAR *, DWORD, IUri **) DECLSPEC_HIDDEN
Definition: persist.c:158

Referenced by handle_redirect().

◆ create_relative_uri()

HRESULT create_relative_uri ( HTMLOuterWindow ,
const WCHAR ,
IUri **   
)

Definition at line 163 of file persist.c.

164 {
165  return window->uri
167  : create_uri(rel_uri, 0, uri);
168 }
HRESULT WINAPI CoInternetCombineUrlEx(IUri *pBaseUri, LPCWSTR pwzRelativeUrl, DWORD dwCombineFlags, IUri **ppCombinedUri, DWORD_PTR dwReserved)
Definition: uri.c:6762
const char * uri
Definition: sec_mgr.c:1594
HRESULT create_uri(const WCHAR *uri_str, DWORD flags, IUri **uri)
Definition: persist.c:158
static IHTMLWindow2 * window
Definition: events.c:77
#define URL_ESCAPE_SPACES_ONLY
Definition: shlwapi.h:1216
#define URL_DONT_ESCAPE_EXTRA_INFO
Definition: shlwapi.h:1217

Referenced by HTMLWindow2_open(), and navigate_href_new_window().

◆ create_uri()

HRESULT create_uri ( const WCHAR ,
DWORD  ,
IUri **   
)

Definition at line 158 of file persist.c.

159 {
160  return CreateUri(uri_str, flags | Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME, 0, uri);
161 }
const char * uri
Definition: sec_mgr.c:1594
GLbitfield flags
Definition: glext.h:7161
HRESULT WINAPI CreateUri(LPCWSTR pwzURI, DWORD dwFlags, DWORD_PTR dwReserved, IUri **ppURI)
Definition: uri.c:5700

Referenced by create_redirect_nschannel(), create_relative_uri(), HTMLFormElement_submit(), HTMLPrivateWindow_SuperNavigate(), navigate_url(), nsIOService_NewURI(), nsURI_SetSpec(), parse_extern_script(), PersistHistory_LoadHistory(), set_current_mon(), set_moniker(), and translate_uri().

◆ get_uri_nofrag()

IUri* get_uri_nofrag ( IUri )

Definition at line 77 of file nsio.c.

78 {
79  IUriBuilder *uri_builder;
80  IUri *ret;
81  BOOL b;
82  HRESULT hres;
83 
84  hres = IUri_HasProperty(uri, Uri_PROPERTY_FRAGMENT, &b);
85  if(SUCCEEDED(hres) && !b) {
86  IUri_AddRef(uri);
87  return uri;
88  }
89 
90  hres = CreateIUriBuilder(uri, 0, 0, &uri_builder);
91  if(FAILED(hres))
92  return NULL;
93 
94  hres = IUriBuilder_RemoveProperties(uri_builder, Uri_HAS_FRAGMENT);
95  if(SUCCEEDED(hres))
96  hres = IUriBuilder_CreateUriSimple(uri_builder, 0, 0, &ret);
97  IUriBuilder_Release(uri_builder);
98  if(FAILED(hres))
99  return NULL;
100 
101  return ret;
102 }
HRESULT WINAPI CreateIUriBuilder(IUri *pIUri, DWORD dwFlags, DWORD_PTR dwReserved, IUriBuilder **ppIUriBuilder)
Definition: uri.c:6353
const char * uri
Definition: sec_mgr.c:1594
unsigned int BOOL
Definition: ntddk_ex.h:94
smooth NULL
Definition: ftsmooth.c:416
#define b
Definition: ke_i.h:79
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
int ret
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by combine_url(), compare_ignoring_frag(), nsURI_CloneIgnoreRef(), set_current_uri(), and super_navigate().

◆ hlink_frame_navigate()

HRESULT hlink_frame_navigate ( HTMLDocument ,
LPCWSTR  ,
nsChannel ,
DWORD  ,
BOOL  
)

Definition at line 2193 of file navigate.c.

2194 {
2195  IHlinkFrame *hlink_frame;
2197  IBindCtx *bindctx;
2198  IMoniker *mon;
2199  IHlink *hlink;
2200  HRESULT hres;
2201 
2202  *cancel = FALSE;
2203 
2204  hres = do_query_service((IUnknown*)doc->doc_obj->client, &IID_IHlinkFrame, &IID_IHlinkFrame,
2205  (void**)&hlink_frame);
2206  if(FAILED(hres))
2207  return S_OK;
2208 
2210  if(FAILED(hres)) {
2211  IHlinkFrame_Release(hlink_frame);
2212  return hres;
2213  }
2214 
2215  if(nschannel)
2216  read_post_data_stream(nschannel->post_data_stream, nschannel->post_data_contains_headers,
2217  &nschannel->request_headers, &callback->bsc.request_data);
2218 
2219  hres = CreateAsyncBindCtx(0, &callback->bsc.IBindStatusCallback_iface, NULL, &bindctx);
2220  if(SUCCEEDED(hres))
2221  hres = CoCreateInstance(&CLSID_StdHlink, NULL, CLSCTX_INPROC_SERVER,
2222  &IID_IHlink, (LPVOID*)&hlink);
2223 
2224  if(SUCCEEDED(hres))
2225  hres = CreateURLMoniker(NULL, url, &mon);
2226 
2227  if(SUCCEEDED(hres)) {
2228  IHlink_SetMonikerReference(hlink, HLINKSETF_TARGET, mon, NULL);
2229 
2230  if(hlnf & HLNF_OPENINNEWWINDOW) {
2231  static const WCHAR wszBlank[] = {'_','b','l','a','n','k',0};
2232  IHlink_SetTargetFrameName(hlink, wszBlank); /* FIXME */
2233  }
2234 
2235  hres = IHlinkFrame_Navigate(hlink_frame, hlnf, bindctx,
2236  &callback->bsc.IBindStatusCallback_iface, hlink);
2237  IMoniker_Release(mon);
2238  *cancel = hres == S_OK;
2239  hres = S_OK;
2240  }
2241 
2242  IHlinkFrame_Release(hlink_frame);
2243  IBindCtx_Release(bindctx);
2244  IBindStatusCallback_Release(&callback->bsc.IBindStatusCallback_iface);
2245  return hres;
2246 }
HRESULT do_query_service(IUnknown *unk, REFGUID guid_service, REFIID riid, void **ppv)
Definition: main.c:141
smooth NULL
Definition: ftsmooth.c:416
MmuTrapHandler callback[0x30]
Definition: mmuobject.c:44
HRESULT hres
Definition: protocol.c:465
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
static const WCHAR url[]
Definition: encode.c:1432
static HRESULT read_post_data_stream(nsIInputStream *stream, BOOL contains_headers, struct list *headers_list, request_data_t *request_data)
Definition: navigate.c:800
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
#define S_OK
Definition: intsafe.h:59
HRESULT WINAPI CreateAsyncBindCtx(DWORD reserved, IBindStatusCallback *callback, IEnumFORMATETC *format, IBindCtx **pbind)
Definition: bindctx.c:899
HRESULT create_channelbsc(IMoniker *mon, const WCHAR *headers, BYTE *post_data, DWORD post_data_size, BOOL is_doc_binding, nsChannelBSC **retval)
Definition: navigate.c:1693
HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk)
Definition: umon.c:732
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by before_async_open(), and navigate_uri().

◆ init_bscallback()

void init_bscallback ( BSCallback ,
const BSCallbackVtbl ,
IMoniker ,
DWORD   
)

Definition at line 584 of file navigate.c.

585 {
586  This->IBindStatusCallback_iface.lpVtbl = &BindStatusCallbackVtbl;
587  This->IServiceProvider_iface.lpVtbl = &ServiceProviderVtbl;
588  This->IHttpNegotiate2_iface.lpVtbl = &HttpNegotiate2Vtbl;
589  This->IInternetBindInfo_iface.lpVtbl = &InternetBindInfoVtbl;
590  This->vtbl = vtbl;
591  This->ref = 1;
592  This->bindf = bindf;
593  This->bom = BOM_NONE;
594 
595  list_init(&This->entry);
596 
597  if(mon)
598  IMoniker_AddRef(mon);
599  This->mon = mon;
600 }
static const IServiceProviderVtbl ServiceProviderVtbl
Definition: navigate.c:577
static const IBindStatusCallbackVtbl BindStatusCallbackVtbl
Definition: navigate.c:399
static const IHttpNegotiate2Vtbl HttpNegotiate2Vtbl
Definition: navigate.c:484
__WINE_SERVER_LIST_INLINE void list_init(struct list *list)
Definition: list.h:149
static const IInternetBindInfoVtbl InternetBindInfoVtbl
Definition: navigate.c:533
static DWORD bindf
Definition: protocol.c:70

Referenced by bind_script_to_text(), and create_channelbsc().

◆ load_nsuri()

HRESULT load_nsuri ( HTMLOuterWindow ,
nsWineURI ,
nsIInputStream ,
nsChannelBSC ,
DWORD   
)

Definition at line 250 of file nsio.c.

252 {
253  nsIDocShellLoadInfo *load_info = NULL;
254  nsIWebNavigation *web_navigation;
255  nsIDocShell *doc_shell;
256  HTMLDocumentNode *doc;
257  nsresult nsres;
258 
259  nsres = get_nsinterface((nsISupports*)window->nswindow, &IID_nsIWebNavigation, (void**)&web_navigation);
260  if(NS_FAILED(nsres)) {
261  ERR("Could not get nsIWebNavigation interface: %08x\n", nsres);
262  return E_FAIL;
263  }
264 
265  nsres = nsIWebNavigation_QueryInterface(web_navigation, &IID_nsIDocShell, (void**)&doc_shell);
266  nsIWebNavigation_Release(web_navigation);
267  if(NS_FAILED(nsres)) {
268  ERR("Could not get nsIDocShell: %08x\n", nsres);
269  return E_FAIL;
270  }
271 
272  if(post_stream) {
273  nsres = nsIDocShell_CreateLoadInfo(doc_shell, &load_info);
274  if(NS_FAILED(nsres)) {
275  nsIDocShell_Release(doc_shell);
276  return E_FAIL;
277  }
278 
279  nsres = nsIDocShellLoadInfo_SetPostDataStream(load_info, post_stream);
280  assert(nsres == NS_OK);
281  }
282 
283  uri->channel_bsc = channelbsc;
284  doc = window->base.inner_window->doc;
285  doc->skip_mutation_notif = TRUE;
286  nsres = nsIDocShell_LoadURI(doc_shell, (nsIURI*)&uri->nsIFileURL_iface, load_info, flags, FALSE);
287  if(doc == window->base.inner_window->doc)
288  doc->skip_mutation_notif = FALSE;
289  uri->channel_bsc = NULL;
290  nsIDocShell_Release(doc_shell);
291  if(load_info)
292  nsIDocShellLoadInfo_Release(load_info);
293  if(NS_FAILED(nsres)) {
294  WARN("LoadURI failed: %08x\n", nsres);
295  return E_FAIL;
296  }
297 
298  return S_OK;
299 }
#define TRUE
Definition: types.h:120
const char * uri
Definition: sec_mgr.c:1594
#define WARN(fmt,...)
Definition: debug.h:111
#define assert(x)
Definition: debug.h:53
#define E_FAIL
Definition: ddrawi.h:102
#define NS_OK
smooth NULL
Definition: ftsmooth.c:416
#define NS_FAILED(res)
GLbitfield flags
Definition: glext.h:7161
static IHTMLWindow2 * window
Definition: events.c:77
#define ERR(fmt,...)
Definition: debug.h:109
#define S_OK
Definition: intsafe.h:59
nsresult get_nsinterface(nsISupports *, REFIID, void **) DECLSPEC_HIDDEN
Definition: nsembed.c:907
HRESULT nsresult
Definition: nsiface.idl:39

Referenced by navigate_uri(), and set_moniker().

◆ load_uri()

HRESULT load_uri ( HTMLOuterWindow ,
IUri ,
DWORD   
)

Definition at line 2306 of file navigate.c.

2307 {
2308  BSTR display_uri;
2309  HRESULT hres;
2310 
2311  hres = IUri_GetDisplayUri(uri, &display_uri);
2312  if(FAILED(hres))
2313  return hres;
2314 
2315  hres = navigate_uri(window, uri, display_uri, NULL, flags);
2316  SysFreeString(display_uri);
2317  return hres;
2318 }
const char * uri
Definition: sec_mgr.c:1594
OLECHAR * BSTR
Definition: compat.h:1942
smooth NULL
Definition: ftsmooth.c:416
HRESULT hres
Definition: protocol.c:465
static HRESULT navigate_uri(HTMLOuterWindow *window, IUri *uri, const WCHAR *display_uri, const request_data_t *request_data, DWORD flags)
Definition: navigate.c:2248
LONG HRESULT
Definition: typedefs.h:77
GLbitfield flags
Definition: glext.h:7161
static IHTMLWindow2 * window
Definition: events.c:77
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271

Referenced by PersistHistory_LoadHistory(), and refresh_proc().

◆ navigate_new_window()

HRESULT navigate_new_window ( HTMLOuterWindow ,
IUri ,
const WCHAR ,
request_data_t ,
IHTMLWindow2 **   
)

Definition at line 2132 of file navigate.c.

2133 {
2134  IWebBrowser2 *web_browser;
2136  IBindCtx *bind_ctx;
2137  nsChannelBSC *bsc;
2138  HRESULT hres;
2139 
2140  if(request_data)
2141  hres = create_channelbsc(NULL, request_data->headers,
2142  request_data->post_data, request_data->post_data_len, FALSE,
2143  &bsc);
2144  else
2146  if(FAILED(hres))
2147  return hres;
2148 
2149  hres = CreateAsyncBindCtx(0, &bsc->bsc.IBindStatusCallback_iface, NULL, &bind_ctx);
2150  if(FAILED(hres)) {
2151  IBindStatusCallback_Release(&bsc->bsc.IBindStatusCallback_iface);
2152  return hres;
2153  }
2154 
2155  hres = CoCreateInstance(&CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER,
2156  &IID_IWebBrowser2, (void**)&web_browser);
2157  if(SUCCEEDED(hres)) {
2158  ITargetFramePriv2 *target_frame_priv;
2159 
2160  hres = IWebBrowser2_QueryInterface(web_browser, &IID_ITargetFramePriv2, (void**)&target_frame_priv);
2161  if(SUCCEEDED(hres)) {
2162  hres = ITargetFramePriv2_AggregatedNavigation2(target_frame_priv,
2163  HLNF_DISABLEWINDOWRESTRICTIONS|HLNF_OPENINNEWWINDOW, bind_ctx, &bsc->bsc.IBindStatusCallback_iface,
2164  name, uri, emptyW);
2165  ITargetFramePriv2_Release(target_frame_priv);
2166 
2167  if(SUCCEEDED(hres))
2168  hres = do_query_service((IUnknown*)web_browser, &SID_SHTMLWindow, &IID_IHTMLWindow2, (void**)&new_window);
2169  }
2170  if(FAILED(hres)) {
2171  IWebBrowser2_Quit(web_browser);
2172  IWebBrowser2_Release(web_browser);
2173  }
2174  }else {
2175  WARN("Could not create InternetExplorer instance: %08x\n", hres);
2176  }
2177 
2178  IBindStatusCallback_Release(&bsc->bsc.IBindStatusCallback_iface);
2179  IBindCtx_Release(bind_ctx);
2180  if(FAILED(hres))
2181  return hres;
2182 
2183  IWebBrowser2_put_Visible(web_browser, VARIANT_TRUE);
2184  IWebBrowser2_Release(web_browser);
2185 
2186  if(ret)
2187  *ret = new_window;
2188  else
2189  IHTMLWindow2_Release(new_window);
2190  return S_OK;
2191 }
static const WCHAR emptyW[]
Definition: navigate.c:28
const char * uri
Definition: sec_mgr.c:1594
#define WARN(fmt,...)
Definition: debug.h:111
__IHTMLWindow2_FWD_DEFINED__ typedef interface IHTMLWindow2 IHTMLWindow2
Definition: mshtmhst.idl:64
HRESULT do_query_service(IUnknown *unk, REFGUID guid_service, REFIID riid, void **ppv)
Definition: main.c:141
static IBindStatusCallbackEx bsc
Definition: url.c:2150
smooth NULL
Definition: ftsmooth.c:416
HRESULT hres
Definition: protocol.c:465
static HWND new_window(LPCSTR lpClassName, DWORD dwStyle, HWND parent)
Definition: editor.c:54
LONG HRESULT
Definition: typedefs.h:77
int ret
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
#define S_OK
Definition: intsafe.h:59
HRESULT WINAPI CreateAsyncBindCtx(DWORD reserved, IBindStatusCallback *callback, IEnumFORMATETC *format, IBindCtx **pbind)
Definition: bindctx.c:899
HRESULT create_channelbsc(IMoniker *mon, const WCHAR *headers, BYTE *post_data, DWORD post_data_size, BOOL is_doc_binding, nsChannelBSC **retval)
Definition: navigate.c:1693
Definition: name.c:38
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by HlinkTarget_Navigate(), HTMLWindow2_open(), navigate_href_new_window(), and submit_form().

◆ navigate_url()

HRESULT navigate_url ( HTMLOuterWindow ,
const WCHAR ,
IUri ,
DWORD   
)

Definition at line 2391 of file navigate.c.

2392 {
2393  IUri *uri, *nav_uri;
2394  BSTR display_uri;
2395  HRESULT hres;
2396 
2397  if(new_url && base_uri)
2399  &nav_uri, 0);
2400  else
2401  hres = create_uri(new_url, 0, &nav_uri);
2402  if(FAILED(hres))
2403  return hres;
2404 
2405  hres = translate_uri(window, nav_uri, &display_uri, &uri);
2406  IUri_Release(nav_uri);
2407  if(FAILED(hres))
2408  return hres;
2409 
2410  hres = navigate_uri(window, uri, display_uri, NULL, flags);
2411  IUri_Release(uri);
2412  SysFreeString(display_uri);
2413  return hres;
2414 }
HRESULT WINAPI CoInternetCombineUrlEx(IUri *pBaseUri, LPCWSTR pwzRelativeUrl, DWORD dwCombineFlags, IUri **ppCombinedUri, DWORD_PTR dwReserved)
Definition: uri.c:6762
const char * uri
Definition: sec_mgr.c:1594
static HRESULT translate_uri(HTMLOuterWindow *window, IUri *orig_uri, BSTR *ret_display_uri, IUri **ret_uri)
Definition: navigate.c:2320
OLECHAR * BSTR
Definition: compat.h:1942
smooth NULL
Definition: ftsmooth.c:416
HRESULT hres
Definition: protocol.c:465
static HRESULT navigate_uri(HTMLOuterWindow *window, IUri *uri, const WCHAR *display_uri, const request_data_t *request_data, DWORD flags)
Definition: navigate.c:2248
LONG HRESULT
Definition: typedefs.h:77
GLbitfield flags
Definition: glext.h:7161
static IHTMLWindow2 * window
Definition: events.c:77
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
#define URL_ESCAPE_SPACES_ONLY
Definition: shlwapi.h:1216
#define URL_DONT_ESCAPE_EXTRA_INFO
Definition: shlwapi.h:1217
HRESULT create_uri(const WCHAR *, DWORD, IUri **) DECLSPEC_HIDDEN
Definition: persist.c:158

◆ nsuri_get_uri()

IUri* nsuri_get_uri ( nsWineURI )

Definition at line 68 of file nsio.c.

69 {
70  if(!ensure_uri(nsuri))
71  return NULL;
72 
73  IUri_AddRef(nsuri->uri);
74  return nsuri->uri;
75 }
smooth NULL
Definition: ftsmooth.c:416
static BOOL ensure_uri(nsWineURI *This)
Definition: nsio.c:51

Referenced by nsAsyncVerifyRedirectCallback_OnRedirectVerifyCallback().

◆ on_start_uri_open()

nsresult on_start_uri_open ( NSContainer ,
nsIURI ,
cpp_bool  
)

Definition at line 4019 of file nsio.c.

4020 {
4021  nsWineURI *wine_uri;
4022  nsresult nsres;
4023 
4024  *_retval = FALSE;
4025 
4026  nsres = nsIURI_QueryInterface(uri, &IID_nsWineURI, (void**)&wine_uri);
4027  if(NS_FAILED(nsres)) {
4028  WARN("Could not get nsWineURI: %08x\n", nsres);
4029  return NS_ERROR_NOT_IMPLEMENTED;
4030  }
4031 
4032  if(!wine_uri->is_doc_uri) {
4033  wine_uri->is_doc_uri = TRUE;
4034 
4035  if(!wine_uri->container) {
4036  nsIWebBrowserChrome_AddRef(&nscontainer->nsIWebBrowserChrome_iface);
4037  wine_uri->container = nscontainer;
4038  }
4039 
4040  if(nscontainer->doc)
4041  *_retval = translate_url(nscontainer->doc, wine_uri);
4042  }
4043 
4044  nsIFileURL_Release(&wine_uri->nsIFileURL_iface);
4045  return NS_OK;
4046 }
#define TRUE
Definition: types.h:120
NSContainer * container
Definition: nsio.c:40
nsIFileURL nsIFileURL_iface
Definition: nsio.c:35
const char * uri
Definition: sec_mgr.c:1594
static const IID IID_nsWineURI
Definition: nsio.c:26
#define WARN(fmt,...)
Definition: debug.h:111
Definition: nsio.c:34
#define NS_OK
#define NS_FAILED(res)
static BOOL translate_url(HTMLDocumentObj *doc, nsWineURI *uri)
Definition: nsio.c:3992
#define NS_ERROR_NOT_IMPLEMENTED
BOOL is_doc_uri
Definition: nsio.c:46
HRESULT nsresult
Definition: nsiface.idl:39

Referenced by nsURIContentListener_OnStartURIOpen().

◆ prepare_for_binding()

void prepare_for_binding ( HTMLDocument ,
IMoniker ,
DWORD   
)

Definition at line 271 of file persist.c.

272 {
273  HRESULT hres;
274 
275  if(This->doc_obj->client) {
276  VARIANT silent, offline;
277 
278  hres = get_client_disp_property(This->doc_obj->client, DISPID_AMBIENT_SILENT, &silent);
279  if(SUCCEEDED(hres)) {
280  if(V_VT(&silent) != VT_BOOL)
281  WARN("silent = %s\n", debugstr_variant(&silent));
282  else if(V_BOOL(&silent))
283  FIXME("silent == true\n");
284  }
285 
286  hres = get_client_disp_property(This->doc_obj->client,
288  if(SUCCEEDED(hres)) {
289  if(V_VT(&offline) != VT_BOOL)
290  WARN("offline = %s\n", debugstr_variant(&offline));
291  else if(V_BOOL(&offline))
292  FIXME("offline == true\n");
293  }
294  }
295 
296  if(This->window->mon) {
298  }else {
300  set_current_mon(This->window, mon, flags);
301  }
302 
303  if(This->doc_obj->client) {
304  IOleCommandTarget *cmdtrg = NULL;
305 
306  hres = IOleClientSite_QueryInterface(This->doc_obj->client, &IID_IOleCommandTarget,
307  (void**)&cmdtrg);
308  if(SUCCEEDED(hres)) {
309  VARIANT var, out;
310 
311  if(flags & BINDING_NAVIGATED) {
312  V_VT(&var) = VT_UNKNOWN;
313  V_UNKNOWN(&var) = (IUnknown*)&This->window->base.IHTMLWindow2_iface;
314  V_VT(&out) = VT_EMPTY;
315  hres = IOleCommandTarget_Exec(cmdtrg, &CGID_ShellDocView, 63, 0, &var, &out);
316  if(SUCCEEDED(hres))
317  VariantClear(&out);
318  }else if(!(flags & BINDING_FROMHIST)) {
319  V_VT(&var) = VT_I4;
320  V_I4(&var) = 0;
321  IOleCommandTarget_Exec(cmdtrg, &CGID_ShellDocView, 37, 0, &var, NULL);
322  }
323 
324  IOleCommandTarget_Release(cmdtrg);
325  }
326  }
327 }
#define UPDATE_UI
#define DISPID_AMBIENT_SILENT
Definition: idispids.h:26
void update_doc(HTMLDocument *, DWORD) DECLSPEC_HIDDEN
Definition: view.c:62
Definition: compat.h:1947
#define WARN(fmt,...)
Definition: debug.h:111
static HRESULT get_client_disp_property(IOleClientSite *client, DISPID dispid, VARIANT *res)
Definition: oleobject.c:233
#define DISPID_AMBIENT_OFFLINEIFNOTCONNECTED
Definition: idispids.h:25
#define V_I4(A)
Definition: oleauto.h:247
#define FIXME(fmt,...)
Definition: debug.h:110
smooth NULL
Definition: ftsmooth.c:416
HRESULT hres
Definition: protocol.c:465
void set_current_mon(HTMLOuterWindow *This, IMoniker *mon, DWORD flags)
Definition: persist.c:99
LONG HRESULT
Definition: typedefs.h:77
#define V_BOOL(A)
Definition: oleauto.h:224
static FILE * out
Definition: regtests2xml.c:44
GLbitfield flags
Definition: glext.h:7161
#define UPDATE_TITLE
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648
#define V_VT(A)
Definition: oleauto.h:211
#define V_UNKNOWN(A)
Definition: oleauto.h:281
static const char * debugstr_variant(const VARIANT *var)
Definition: container.c:46
#define BINDING_NAVIGATED
Definition: binding.h:127
#define BINDING_FROMHIST
Definition: binding.h:129
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by PersistMoniker_Load(), PersistStreamInit_InitNew(), PersistStreamInit_Load(), and super_navigate().

◆ read_stream()

HRESULT read_stream ( BSCallback ,
IStream ,
void ,
DWORD  ,
DWORD  
)

Definition at line 602 of file navigate.c.

603 {
604  DWORD read_size = 0, skip=0;
605  BYTE *data = buf;
606  HRESULT hres;
607 
608  hres = IStream_Read(stream, buf, size, &read_size);
609 
610  if(!This->readed && This->bom == BOM_NONE) {
611  if(read_size >= 2 && data[0] == 0xff && data[1] == 0xfe) {
612  This->bom = BOM_UTF16;
613  skip = 2;
614  }else if(read_size >= 3 && data[0] == 0xef && data[1] == 0xbb && data[2] == 0xbf) {
615  This->bom = BOM_UTF8;
616  skip = 3;
617  }
618  if(skip) {
619  read_size -= skip;
620  if(read_size)
621  memmove(data, data+skip, read_size);
622  }
623  }
624 
625  This->readed += read_size;
626  *ret_size = read_size;
627  return hres;
628 }
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLsizeiptr size
Definition: glext.h:5919
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
Definition: parse.h:22
unsigned char BYTE
Definition: mem.h:68
#define skip(...)
Definition: atltest.h:64

Referenced by duplicate_extents(), read_stream_data(), and ScriptBSC_read_data().

◆ set_current_mon()

void set_current_mon ( HTMLOuterWindow ,
IMoniker ,
DWORD   
)

Definition at line 99 of file persist.c.

100 {
101  IUriContainer *uri_container;
102  IUri *uri = NULL;
103  HRESULT hres;
104 
105  if(This->mon) {
106  if(This->doc_obj && !(flags & (BINDING_REPLACE|BINDING_REFRESH))) {
107  if(This == This->doc_obj->basedoc.window)
108  notify_travellog_update(This->doc_obj);
109  else
110  TRACE("Skipping travellog update for frame navigation.\n");
111  }
112  IMoniker_Release(This->mon);
113  This->mon = NULL;
114  }
115 
116  This->load_flags = flags;
117  if(!mon)
118  return;
119 
120  IMoniker_AddRef(mon);
121  This->mon = mon;
122 
123  hres = IMoniker_QueryInterface(mon, &IID_IUriContainer, (void**)&uri_container);
124  if(SUCCEEDED(hres)) {
125  hres = IUriContainer_GetIUri(uri_container, &uri);
126  IUriContainer_Release(uri_container);
127  if(hres != S_OK) {
128  WARN("GetIUri failed: %08x\n", hres);
129  uri = NULL;
130  }
131  }
132 
133  if(!uri) {
134  WCHAR *url;
135 
136  hres = IMoniker_GetDisplayName(mon, NULL, NULL, &url);
137  if(SUCCEEDED(hres)) {
138  hres = create_uri(url, 0, &uri);
139  if(FAILED(hres)) {
140  WARN("CrateUri failed: %08x\n", hres);
142  This->url = SysAllocString(url);
144  return;
145  }
147  }else {
148  WARN("GetDisplayName failed: %08x\n", hres);
149  }
150  }
151 
153  if(uri)
154  IUri_Release(uri);
156 }
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:420
const char * uri
Definition: sec_mgr.c:1594
#define WARN(fmt,...)
Definition: debug.h:111
smooth NULL
Definition: ftsmooth.c:416
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
HRESULT create_uri(const WCHAR *uri_str, DWORD flags, IUri **uri)
Definition: persist.c:158
static void notify_travellog_update(HTMLDocumentObj *doc)
Definition: persist.c:48
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
static const WCHAR url[]
Definition: encode.c:1432
GLbitfield flags
Definition: glext.h:7161
#define BINDING_REFRESH
Definition: binding.h:130
#define S_OK
Definition: intsafe.h:59
static BOOL use_gecko_script(HTMLOuterWindow *window)
Definition: persist.c:33
void set_current_uri(HTMLOuterWindow *window, IUri *uri)
Definition: persist.c:68
void set_script_mode(HTMLOuterWindow *, SCRIPTMODE) DECLSPEC_HIDDEN
Definition: script.c:1551
#define BINDING_REPLACE
Definition: binding.h:128
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by async_open(), channelbsc_load_stream(), navigate_proc(), prepare_for_binding(), release_outer_window(), and start_doc_binding_proc().

◆ set_current_uri()

void set_current_uri ( HTMLOuterWindow ,
IUri  
)

Definition at line 68 of file persist.c.

69 {
70  if(window->uri) {
71  IUri_Release(window->uri);
72  window->uri = NULL;
73  }
74 
75  if(window->uri_nofrag) {
76  IUri_Release(window->uri_nofrag);
77  window->uri_nofrag = NULL;
78  }
79 
80  SysFreeString(window->url);
81  window->url = NULL;
82 
83  if(!uri)
84  return;
85 
86  IUri_AddRef(uri);
87  window->uri = uri;
88 
89  window->uri_nofrag = get_uri_nofrag(uri);
90  if(!window->uri_nofrag) {
91  FIXME("get_uri_nofrag failed\n");
92  IUri_AddRef(uri);
93  window->uri_nofrag = uri;
94  }
95 
96  IUri_GetDisplayUri(uri, &window->url);
97 }
const char * uri
Definition: sec_mgr.c:1594
#define FIXME(fmt,...)
Definition: debug.h:110
smooth NULL
Definition: ftsmooth.c:416
IUri * get_uri_nofrag(IUri *) DECLSPEC_HIDDEN
Definition: nsio.c:77
static IHTMLWindow2 * window
Definition: events.c:77
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271

Referenced by navigate_fragment(), navigate_proc(), nsAsyncVerifyRedirectCallback_OnRedirectVerifyCallback(), and set_current_mon().

◆ set_http_header()

HRESULT set_http_header ( struct list ,
const WCHAR ,
int  ,
const WCHAR ,
int   
)

Definition at line 380 of file nsio.c.

382 {
384 
385  TRACE("%s: %s\n", debugstr_wn(name, name_len), debugstr_wn(value, value_len));
386 
387  header = find_http_header(headers, name, name_len);
388  if(header) {
389  WCHAR *new_data;
390 
391  new_data = heap_strndupW(value, value_len);
392  if(!new_data)
393  return E_OUTOFMEMORY;
394 
395  heap_free(header->data);
396  header->data = new_data;
397  }else {
398  header = heap_alloc(sizeof(http_header_t));
399  if(!header)
400  return E_OUTOFMEMORY;
401 
402  header->header = heap_strndupW(name, name_len);
403  header->data = heap_strndupW(value, value_len);
404  if(!header->header || !header->data) {
405  heap_free(header->header);
406  heap_free(header->data);
407  heap_free(header);
408  return E_OUTOFMEMORY;
409  }
410 
411  list_add_tail(headers, &header->entry);
412  }
413 
414  return S_OK;
415 }
static LPWSTR heap_strndupW(LPCWSTR str, unsigned len)
vector< Header * > headers
Definition: sdkparse.cpp:39
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
__WINE_SERVER_LIST_INLINE void list_add_tail(struct list *list, struct list *elem)
Definition: list.h:102
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_wn
Definition: kernel32.h:33
static http_header_t * find_http_header(struct list *headers, const WCHAR *name, int len)
Definition: nsio.c:340
#define S_OK
Definition: intsafe.h:59
Definition: name.c:38
struct CFHEADER header
Definition: fdi.c:101
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by nsUploadChannel_SetUploadStream(), parse_headers(), and set_channel_http_header().

◆ set_moniker()

HRESULT set_moniker ( HTMLOuterWindow ,
IMoniker ,
IUri ,
IBindCtx ,
nsChannelBSC ,
BOOL   
)

Definition at line 329 of file persist.c.

331 {
332  download_proc_task_t *download_task;
333  HTMLDocumentObj *doc_obj = NULL;
334  nsChannelBSC *bscallback;
335  nsWineURI *nsuri;
336  LPOLESTR url;
337  IUri *uri;
338  HRESULT hres;
339 
340  if(window->doc_obj && window->doc_obj->basedoc.window == window)
341  doc_obj = window->doc_obj;
342 
343  hres = IMoniker_GetDisplayName(mon, pibc, NULL, &url);
344  if(FAILED(hres)) {
345  WARN("GetDiaplayName failed: %08x\n", hres);
346  return hres;
347  }
348 
349  if(nav_uri) {
350  uri = nav_uri;
351  }else {
352  hres = create_uri(url, 0, &uri);
353  if(FAILED(hres)) {
355  return hres;
356  }
357  }
358 
359  TRACE("got url: %s\n", debugstr_w(url));
360 
361  set_ready_state(window, READYSTATE_LOADING);
362 
363  hres = create_doc_uri(window, uri, &nsuri);
364  if(!nav_uri)
365  IUri_Release(uri);
366  if(SUCCEEDED(hres)) {
367  if(async_bsc)
368  bscallback = async_bsc;
369  else
370  hres = create_channelbsc(mon, NULL, NULL, 0, TRUE, &bscallback);
371  }
372 
373  if(SUCCEEDED(hres)) {
374  if(window->base.inner_window->doc)
375  remove_target_tasks(window->base.inner_window->task_magic);
376  abort_window_bindings(window->base.inner_window);
377 
378  hres = load_nsuri(window, nsuri, NULL, bscallback, LOAD_FLAGS_BYPASS_CACHE);
379  nsISupports_Release((nsISupports*)nsuri); /* FIXME */
380  if(SUCCEEDED(hres)) {
381  hres = create_pending_window(window, bscallback);
382  TRACE("pending window for %p %p %p\n", window, bscallback, window->pending_window);
383  }
384  if(bscallback != async_bsc)
385  IBindStatusCallback_Release(&bscallback->bsc.IBindStatusCallback_iface);
386  }
387 
388  if(FAILED(hres)) {
390  return hres;
391  }
392 
393  if(doc_obj) {
395 
396  if(doc_obj->frame) {
397  docobj_task_t *task;
398 
399  task = heap_alloc(sizeof(docobj_task_t));
400  task->doc = doc_obj;
402  if(FAILED(hres)) {
404  return hres;
405  }
406  }
407 
408  download_task = heap_alloc(sizeof(download_proc_task_t));
409  download_task->doc = doc_obj;
410  download_task->set_download = set_download;
411  download_task->url = url;
413  }
414 
415  return S_OK;
416 }
#define TRUE
Definition: types.h:120
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:420
static void set_downloading_task_destr(task_t *_task)
Definition: persist.c:263
static void set_downloading_proc(task_t *_task)
Definition: persist.c:233
const char * uri
Definition: sec_mgr.c:1594
void HTMLDocument_LockContainer(HTMLDocumentObj *, BOOL) DECLSPEC_HIDDEN
Definition: oleobj.c:1183
HRESULT create_channelbsc(IMoniker *, const WCHAR *, BYTE *, DWORD, BOOL, nsChannelBSC **) DECLSPEC_HIDDEN
Definition: navigate.c:1693
BSCallback bsc
Definition: binding.h:98
#define WARN(fmt,...)
Definition: debug.h:111
Definition: nsio.c:34
static LPOLESTR
Definition: stg_prop.c:27
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
HRESULT create_pending_window(HTMLOuterWindow *outer_window, nsChannelBSC *channelbsc)
Definition: htmlwindow.c:3009
void set_ready_state(HTMLOuterWindow *window, READYSTATE readystate)
Definition: persist.c:450
void remove_target_tasks(LONG) DECLSPEC_HIDDEN
Definition: task.c:107
HRESULT create_uri(const WCHAR *uri_str, DWORD flags, IUri **uri)
Definition: persist.c:158
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
static const WCHAR url[]
Definition: encode.c:1432
HTMLDocument basedoc
HRESULT create_doc_uri(HTMLOuterWindow *, IUri *, nsWineURI **) DECLSPEC_HIDDEN
Definition: nsio.c:3210
HTMLDocumentObj * doc
IOleInPlaceFrame * frame
void abort_window_bindings(HTMLInnerWindow *) DECLSPEC_HIDDEN
Definition: navigate.c:1775
HTMLDocumentObj * doc
Definition: persist.c:28
static IHTMLWindow2 * window
Definition: events.c:77
#define S_OK
Definition: intsafe.h:59
static void set_progress_proc(task_t *_task)
Definition: persist.c:192
IBindStatusCallback IBindStatusCallback_iface
Definition: binding.h:72
HRESULT load_nsuri(HTMLOuterWindow *, nsWineURI *, nsIInputStream *, nsChannelBSC *, DWORD) DECLSPEC_HIDDEN
Definition: nsio.c:250
HRESULT push_task(task_t *, task_proc_t, task_proc_t, LONG) DECLSPEC_HIDDEN
Definition: task.c:39
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by navigate_proc(), PersistMoniker_Load(), PersistStreamInit_InitNew(), PersistStreamInit_Load(), and super_navigate().

◆ submit_form()

HRESULT submit_form ( HTMLOuterWindow ,
const WCHAR ,
IUri ,
nsIInputStream  
)

Definition at line 2361 of file navigate.c.

2362 {
2363  request_data_t request_data = {NULL};
2364  HRESULT hres;
2365 
2366  hres = read_post_data_stream(post_stream, TRUE, NULL, &request_data);
2367  if(FAILED(hres))
2368  return hres;
2369 
2370  if(window) {
2371  IUri *uri;
2372  BSTR display_uri;
2373 
2374  window->readystate_locked++;
2375 
2376  hres = translate_uri(window, submit_uri, &display_uri, &uri);
2377  if(SUCCEEDED(hres)) {
2378  hres = navigate_uri(window, uri, display_uri, &request_data, BINDING_NAVIGATED|BINDING_SUBMIT);
2379  IUri_Release(uri);
2380  SysFreeString(display_uri);
2381  }
2382 
2383  window->readystate_locked--;
2384  }else
2385  hres = navigate_new_window(window, submit_uri, target, &request_data, NULL);
2386 
2387  release_request_data(&request_data);
2388  return hres;
2389 }
#define TRUE
Definition: types.h:120
const char * uri
Definition: sec_mgr.c:1594
static HRESULT translate_uri(HTMLOuterWindow *window, IUri *orig_uri, BSTR *ret_display_uri, IUri **ret_uri)
Definition: navigate.c:2320
OLECHAR * BSTR
Definition: compat.h:1942
smooth NULL
Definition: ftsmooth.c:416
HRESULT hres
Definition: protocol.c:465
static HRESULT navigate_uri(HTMLOuterWindow *window, IUri *uri, const WCHAR *display_uri, const request_data_t *request_data, DWORD flags)
Definition: navigate.c:2248
LONG HRESULT
Definition: typedefs.h:77
static HRESULT read_post_data_stream(nsIInputStream *stream, BOOL contains_headers, struct list *headers_list, request_data_t *request_data)
Definition: navigate.c:800
#define BINDING_SUBMIT
Definition: binding.h:131
HRESULT navigate_new_window(HTMLOuterWindow *window, IUri *uri, const WCHAR *name, request_data_t *request_data, IHTMLWindow2 **ret)
Definition: navigate.c:2132
static IHTMLWindow2 * window
Definition: events.c:77
#define BINDING_NAVIGATED
Definition: binding.h:127
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
GLenum target
Definition: glext.h:7315
#define SUCCEEDED(hr)
Definition: intsafe.h:57
static void release_request_data(request_data_t *request_data)
Definition: navigate.c:190

Referenced by HTMLFormElement_submit().

◆ super_navigate()

HRESULT super_navigate ( HTMLOuterWindow ,
IUri ,
DWORD  ,
const WCHAR ,
BYTE ,
DWORD   
)

Definition at line 2016 of file navigate.c.

2017 {
2018  nsChannelBSC *bsc;
2019  IUri *uri_nofrag;
2020  IMoniker *mon;
2021  DWORD scheme;
2022  HRESULT hres;
2023 
2024  uri_nofrag = get_uri_nofrag(uri);
2025  if(!uri_nofrag)
2026  return E_FAIL;
2027 
2028  if(window->doc_obj->client && !(flags & BINDING_REFRESH)) {
2029  IOleCommandTarget *cmdtrg;
2030 
2031  hres = IOleClientSite_QueryInterface(window->doc_obj->client, &IID_IOleCommandTarget, (void**)&cmdtrg);
2032  if(SUCCEEDED(hres)) {
2033  VARIANT in, out;
2034  BSTR url_str;
2035 
2036  hres = IUri_GetDisplayUri(uri_nofrag, &url_str);
2037  if(SUCCEEDED(hres)) {
2038  V_VT(&in) = VT_BSTR;
2039  V_BSTR(&in) = url_str;
2040  V_VT(&out) = VT_BOOL;
2041  V_BOOL(&out) = VARIANT_TRUE;
2042  hres = IOleCommandTarget_Exec(cmdtrg, &CGID_ShellDocView, 67, 0, &in, &out);
2043  IOleCommandTarget_Release(cmdtrg);
2044  if(SUCCEEDED(hres))
2045  VariantClear(&out);
2046  SysFreeString(url_str);
2047  }
2048  }
2049  }
2050 
2051  if(!(flags & BINDING_NOFRAG) && window->uri_nofrag && !post_data_size) {
2052  BOOL eq;
2053 
2054  hres = IUri_IsEqual(uri_nofrag, window->uri_nofrag, &eq);
2055  if(SUCCEEDED(hres) && eq) {
2056  IUri_Release(uri_nofrag);
2057  TRACE("fragment navigate\n");
2058  return navigate_fragment(window, uri);
2059  }
2060  }
2061 
2062  hres = CreateURLMonikerEx2(NULL, uri_nofrag, &mon, URL_MK_UNIFORM);
2063  IUri_Release(uri_nofrag);
2064  if(FAILED(hres))
2065  return hres;
2066 
2067  /* FIXME: Why not set_ready_state? */
2068  window->readystate = READYSTATE_UNINITIALIZED;
2069 
2070  hres = create_channelbsc(mon, headers, post_data, post_data_size, TRUE, &bsc);
2071  if(FAILED(hres)) {
2072  IMoniker_Release(mon);
2073  return hres;
2074  }
2075 
2076  prepare_for_binding(&window->doc_obj->basedoc, mon, flags);
2077 
2078  hres = IUri_GetScheme(uri, &scheme);
2081 
2082  IBindStatusCallback_Release(&bsc->bsc.IBindStatusCallback_iface);
2083  IMoniker_Release(mon);
2084 
2085  task = heap_alloc(sizeof(*task));
2086  if(!task)
2087  return E_OUTOFMEMORY;
2088 
2089  /* Why silently? */
2090  window->readystate = READYSTATE_COMPLETE;
2091  if(!(flags & BINDING_FROMHIST))
2092  call_docview_84(window->doc_obj);
2093 
2094  IUri_AddRef(uri);
2095  task->window = window;
2096  task->uri = uri;
2098  }else if(flags & BINDING_SUBMIT) {
2099  hres = set_moniker(window, mon, uri, NULL, bsc, TRUE);
2100  if(SUCCEEDED(hres))
2101  hres = start_binding(window->pending_window, &bsc->bsc, NULL);
2102  IBindStatusCallback_Release(&bsc->bsc.IBindStatusCallback_iface);
2103  IMoniker_Release(mon);
2104  }else {
2105  navigate_task_t *task;
2106 
2107  task = heap_alloc(sizeof(*task));
2108  if(!task) {
2109  IBindStatusCallback_Release(&bsc->bsc.IBindStatusCallback_iface);
2110  IMoniker_Release(mon);
2111  return E_OUTOFMEMORY;
2112  }
2113 
2114  /* Silently and repeated when real loading starts? */
2115  window->readystate = READYSTATE_LOADING;
2117  call_docview_84(window->doc_obj);
2118 
2119  task->window = window;
2120  task->bscallback = bsc;
2121  task->flags = flags;
2122  task->mon = mon;
2123 
2124  IUri_AddRef(uri);
2125  task->uri = uri;
2126  hres = push_task(&task->header, navigate_proc, navigate_task_destr, window->task_magic);
2127  }
2128 
2129  return hres;
2130 }
#define TRUE
Definition: types.h:120
const char * uri
Definition: sec_mgr.c:1594
static void navigate_proc(task_t *_task)
Definition: navigate.c:1924
DWORD scheme
vector< Header * > headers
Definition: sdkparse.cpp:39
OLECHAR * BSTR
Definition: compat.h:1942
nsChannelBSC * bscallback
Definition: navigate.c:1918
#define E_FAIL
Definition: ddrawi.h:102
#define eq(received, expected, label, type)
Definition: locale.c:144
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
HRESULT start_binding(HTMLInnerWindow *inner_window, BSCallback *bscallback, IBindCtx *bctx)
Definition: navigate.c:762
unsigned int BOOL
Definition: ntddk_ex.h:94
static IBindStatusCallbackEx bsc
Definition: url.c:2150
smooth NULL
Definition: ftsmooth.c:416
IUri * get_uri_nofrag(IUri *) DECLSPEC_HIDDEN
Definition: nsio.c:77
HTMLOuterWindow * window
Definition: navigate.c:1917
static void navigate_task_destr(task_t *_task)
Definition: navigate.c:1937
#define TRACE(s)
Definition: solgame.cpp:4
void prepare_for_binding(HTMLDocument *, IMoniker *, DWORD) DECLSPEC_HIDDEN
Definition: persist.c:271
IMoniker * mon
Definition: navigate.c:1920
HRESULT hres
Definition: protocol.c:465
static HRESULT navigate_fragment(HTMLOuterWindow *window, IUri *uri)
Definition: navigate.c:1947
LONG HRESULT
Definition: typedefs.h:77
#define V_BOOL(A)
Definition: oleauto.h:224
static FILE * out
Definition: regtests2xml.c:44
unsigned long DWORD
Definition: ntddk_ex.h:95
#define BINDING_SUBMIT
Definition: binding.h:131
GLbitfield flags
Definition: glext.h:7161
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648
static const CHAR post_data[]
Definition: protocol.c:217
#define V_VT(A)
Definition: oleauto.h:211
HRESULT WINAPI CreateURLMonikerEx2(IMoniker *pmkContext, IUri *pUri, IMoniker **ppmk, DWORD dwFlags)
Definition: umon.c:668
static IHTMLWindow2 * window
Definition: events.c:77
#define V_BSTR(A)
Definition: oleauto.h:226
HTMLOuterWindow * window
Definition: navigate.c:1865
#define BINDING_REFRESH
Definition: binding.h:130
GLuint in
Definition: glext.h:9616
HRESULT create_channelbsc(IMoniker *mon, const WCHAR *headers, BYTE *post_data, DWORD post_data_size, BOOL is_doc_binding, nsChannelBSC **retval)
Definition: navigate.c:1693
#define BINDING_FROMHIST
Definition: binding.h:129
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
void call_docview_84(HTMLDocumentObj *) DECLSPEC_HIDDEN
Definition: oleobj.c:173
#define BINDING_NOFRAG
Definition: binding.h:132
HRESULT push_task(task_t *, task_proc_t, task_proc_t, LONG) DECLSPEC_HIDDEN
Definition: task.c:39
static void navigate_javascript_proc(task_t *_task)
Definition: navigate.c:1869
static void navigate_javascript_task_destr(task_t *_task)
Definition: navigate.c:1907
HRESULT set_moniker(HTMLOuterWindow *, IMoniker *, IUri *, IBindCtx *, nsChannelBSC *, BOOL) DECLSPEC_HIDDEN
Definition: persist.c:329
#define SUCCEEDED(hr)
Definition: intsafe.h:57

Referenced by HTMLPrivateWindow_SuperNavigate(), and navigate_uri().