diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 3d0be0f6bcf..48ddb10ae95 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -2464,30 +2464,31 @@ HRESULT create_doc_uri(HTMLWindow *window, WCHAR *url, nsWineURI **ret)
}
typedef struct {
- const nsIProtocolHandlerVtbl *lpProtocolHandlerVtbl;
+ nsIProtocolHandler nsIProtocolHandler_iface;
LONG ref;
nsIProtocolHandler *nshandler;
} nsProtocolHandler;
-#define NSPROTHANDLER(x) ((nsIProtocolHandler*) &(x)->lpProtocolHandlerVtbl)
-
-#define NSPROTHANDLER_THIS(iface) DEFINE_THIS(nsProtocolHandler, ProtocolHandler, iface)
+static inline nsProtocolHandler *impl_from_nsIProtocolHandler(nsIProtocolHandler *iface)
+{
+ return CONTAINING_RECORD(iface, nsProtocolHandler, nsIProtocolHandler_iface);
+}
static nsresult NSAPI nsProtocolHandler_QueryInterface(nsIProtocolHandler *iface, nsIIDRef riid,
void **result)
{
- nsProtocolHandler *This = NSPROTHANDLER_THIS(iface);
+ nsProtocolHandler *This = impl_from_nsIProtocolHandler(iface);
*result = NULL;
if(IsEqualGUID(&IID_nsISupports, riid)) {
TRACE("(%p)->(IID_nsISupports %p)\n", This, result);
- *result = NSPROTHANDLER(This);
+ *result = &This->nsIProtocolHandler_iface;
}else if(IsEqualGUID(&IID_nsIProtocolHandler, riid)) {
TRACE("(%p)->(IID_nsIProtocolHandler %p)\n", This, result);
- *result = NSPROTHANDLER(This);
+ *result = &This->nsIProtocolHandler_iface;
}else if(IsEqualGUID(&IID_nsIExternalProtocolHandler, riid)) {
TRACE("(%p)->(IID_nsIExternalProtocolHandler %p), returning NULL\n", This, result);
return NS_NOINTERFACE;
@@ -2504,7 +2505,7 @@ static nsresult NSAPI nsProtocolHandler_QueryInterface(nsIProtocolHandler *iface
static nsrefcnt NSAPI nsProtocolHandler_AddRef(nsIProtocolHandler *iface)
{
- nsProtocolHandler *This = NSPROTHANDLER_THIS(iface);
+ nsProtocolHandler *This = impl_from_nsIProtocolHandler(iface);
LONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
@@ -2514,7 +2515,7 @@ static nsrefcnt NSAPI nsProtocolHandler_AddRef(nsIProtocolHandler *iface)
static nsrefcnt NSAPI nsProtocolHandler_Release(nsIProtocolHandler *iface)
{
- nsProtocolHandler *This = NSPROTHANDLER_THIS(iface);
+ nsProtocolHandler *This = impl_from_nsIProtocolHandler(iface);
LONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
@@ -2530,7 +2531,7 @@ static nsrefcnt NSAPI nsProtocolHandler_Release(nsIProtocolHandler *iface)
static nsresult NSAPI nsProtocolHandler_GetScheme(nsIProtocolHandler *iface, nsACString *aScheme)
{
- nsProtocolHandler *This = NSPROTHANDLER_THIS(iface);
+ nsProtocolHandler *This = impl_from_nsIProtocolHandler(iface);
TRACE("(%p)->(%p)\n", This, aScheme);
@@ -2542,7 +2543,7 @@ static nsresult NSAPI nsProtocolHandler_GetScheme(nsIProtocolHandler *iface, nsA
static nsresult NSAPI nsProtocolHandler_GetDefaultPort(nsIProtocolHandler *iface,
PRInt32 *aDefaultPort)
{
- nsProtocolHandler *This = NSPROTHANDLER_THIS(iface);
+ nsProtocolHandler *This = impl_from_nsIProtocolHandler(iface);
TRACE("(%p)->(%p)\n", This, aDefaultPort);
@@ -2554,7 +2555,7 @@ static nsresult NSAPI nsProtocolHandler_GetDefaultPort(nsIProtocolHandler *iface
static nsresult NSAPI nsProtocolHandler_GetProtocolFlags(nsIProtocolHandler *iface,
PRUint32 *aProtocolFlags)
{
- nsProtocolHandler *This = NSPROTHANDLER_THIS(iface);
+ nsProtocolHandler *This = impl_from_nsIProtocolHandler(iface);
TRACE("(%p)->(%p)\n", This, aProtocolFlags);
@@ -2566,7 +2567,7 @@ static nsresult NSAPI nsProtocolHandler_GetProtocolFlags(nsIProtocolHandler *ifa
static nsresult NSAPI nsProtocolHandler_NewURI(nsIProtocolHandler *iface,
const nsACString *aSpec, const char *aOriginCharset, nsIURI *aBaseURI, nsIURI **_retval)
{
- nsProtocolHandler *This = NSPROTHANDLER_THIS(iface);
+ nsProtocolHandler *This = impl_from_nsIProtocolHandler(iface);
TRACE("((%p)->%s %s %p %p)\n", This, debugstr_nsacstr(aSpec), debugstr_a(aOriginCharset),
aBaseURI, _retval);
@@ -2579,7 +2580,7 @@ static nsresult NSAPI nsProtocolHandler_NewURI(nsIProtocolHandler *iface,
static nsresult NSAPI nsProtocolHandler_NewChannel(nsIProtocolHandler *iface,
nsIURI *aURI, nsIChannel **_retval)
{
- nsProtocolHandler *This = NSPROTHANDLER_THIS(iface);
+ nsProtocolHandler *This = impl_from_nsIProtocolHandler(iface);
TRACE("(%p)->(%p %p)\n", This, aURI, _retval);
@@ -2591,7 +2592,7 @@ static nsresult NSAPI nsProtocolHandler_NewChannel(nsIProtocolHandler *iface,
static nsresult NSAPI nsProtocolHandler_AllowPort(nsIProtocolHandler *iface,
PRInt32 port, const char *scheme, PRBool *_retval)
{
- nsProtocolHandler *This = NSPROTHANDLER_THIS(iface);
+ nsProtocolHandler *This = impl_from_nsIProtocolHandler(iface);
TRACE("(%p)->(%d %s %p)\n", This, port, debugstr_a(scheme), _retval);
@@ -2600,8 +2601,6 @@ static nsresult NSAPI nsProtocolHandler_AllowPort(nsIProtocolHandler *iface,
return NS_ERROR_NOT_IMPLEMENTED;
}
-#undef NSPROTHANDLER_THIS
-
static const nsIProtocolHandlerVtbl nsProtocolHandlerVtbl = {
nsProtocolHandler_QueryInterface,
nsProtocolHandler_AddRef,
@@ -2618,11 +2617,11 @@ static nsIProtocolHandler *create_protocol_handler(nsIProtocolHandler *nshandler
{
nsProtocolHandler *ret = heap_alloc(sizeof(nsProtocolHandler));
- ret->lpProtocolHandlerVtbl = &nsProtocolHandlerVtbl;
+ ret->nsIProtocolHandler_iface.lpVtbl = &nsProtocolHandlerVtbl;
ret->ref = 1;
ret->nshandler = nshandler;
- return NSPROTHANDLER(ret);
+ return &ret->nsIProtocolHandler_iface;
}
static nsresult NSAPI nsIOService_QueryInterface(nsIIOService*,nsIIDRef,void**);