Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
1caf73be
Commit
1caf73be
authored
Mar 26, 2008
by
Jacek Caban
Committed by
Alexandre Julliard
Mar 26, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mshtml: Added IHTMLDocument2::get_location implementation.
parent
6af76b3d
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
366 additions
and
7 deletions
+366
-7
Makefile.in
dlls/mshtml/Makefile.in
+1
-0
htmldoc.c
dlls/mshtml/htmldoc.c
+15
-7
htmllocation.c
dlls/mshtml/htmllocation.c
+311
-0
mshtml_private.h
dlls/mshtml/mshtml_private.h
+11
-0
dom.c
dlls/mshtml/tests/dom.c
+28
-0
No files found.
dlls/mshtml/Makefile.in
View file @
1caf73be
...
...
@@ -20,6 +20,7 @@ C_SRCS = \
htmlelem.c
\
htmlelem2.c
\
htmlinput.c
\
htmllocation.c
\
htmlnode.c
\
htmloption.c
\
htmlscript.c
\
...
...
dlls/mshtml/htmldoc.c
View file @
1caf73be
...
...
@@ -183,6 +183,9 @@ static ULONG WINAPI HTMLDocument_Release(IHTMLDocument2 *iface)
IHTMLOptionElementFactory_Release
(
HTMLOPTFACTORY
(
This
->
option_factory
));
}
if
(
This
->
location
)
This
->
location
->
doc
=
NULL
;
if
(
This
->
window
)
IHTMLWindow2_Release
(
HTMLWINDOW2
(
This
->
window
));
...
...
@@ -537,8 +540,17 @@ static HRESULT WINAPI HTMLDocument_get_referrer(IHTMLDocument2 *iface, BSTR *p)
static
HRESULT
WINAPI
HTMLDocument_get_location
(
IHTMLDocument2
*
iface
,
IHTMLLocation
**
p
)
{
FIXME
(
"(%p)->(%p)
\n
"
,
iface
,
p
);
return
E_NOTIMPL
;
HTMLDocument
*
This
=
HTMLDOC_THIS
(
iface
);
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
p
);
if
(
This
->
location
)
IHTMLLocation_AddRef
(
HTMLLOCATION
(
This
->
location
));
else
This
->
location
=
HTMLLocation_Create
(
This
);
*
p
=
HTMLLOCATION
(
This
->
location
);
return
S_OK
;
}
static
HRESULT
WINAPI
HTMLDocument_get_lastModified
(
IHTMLDocument2
*
iface
,
BSTR
*
p
)
...
...
@@ -1247,14 +1259,10 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject)
TRACE
(
"(%p %s %p)
\n
"
,
pUnkOuter
,
debugstr_guid
(
riid
),
ppvObject
);
ret
=
heap_alloc
(
sizeof
(
HTMLDocument
));
ret
=
heap_alloc
_zero
(
sizeof
(
HTMLDocument
));
ret
->
lpHTMLDocument2Vtbl
=
&
HTMLDocumentVtbl
;
ret
->
ref
=
0
;
ret
->
nscontainer
=
NULL
;
ret
->
nodes
=
NULL
;
ret
->
readystate
=
READYSTATE_UNINITIALIZED
;
ret
->
window
=
NULL
;
ret
->
option_factory
=
NULL
;
list_init
(
&
ret
->
bindings
);
list_init
(
&
ret
->
script_hosts
);
...
...
dlls/mshtml/htmllocation.c
0 → 100644
View file @
1caf73be
/*
* Copyright 2008 Jacek Caban for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
#include <stdarg.h>
#include <stdio.h>
#define COBJMACROS
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "winnls.h"
#include "ole2.h"
#include "wine/debug.h"
#include "mshtml_private.h"
#include "resource.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
mshtml
);
#define HTMLLOCATION_THIS(iface) DEFINE_THIS(HTMLLocation, HTMLLocation, iface)
static
struct
list
window_list
=
LIST_INIT
(
window_list
);
static
HRESULT
WINAPI
HTMLLocation_QueryInterface
(
IHTMLLocation
*
iface
,
REFIID
riid
,
void
**
ppv
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
*
ppv
=
NULL
;
if
(
IsEqualGUID
(
&
IID_IUnknown
,
riid
))
{
TRACE
(
"(%p)->(IID_IUnknown %p)
\n
"
,
This
,
ppv
);
*
ppv
=
HTMLLOCATION
(
This
);
}
else
if
(
IsEqualGUID
(
&
IID_IDispatch
,
riid
))
{
TRACE
(
"(%p)->(IID_IDispatch %p)
\n
"
,
This
,
ppv
);
*
ppv
=
HTMLLOCATION
(
This
);
}
else
if
(
IsEqualGUID
(
&
IID_IHTMLLocation
,
riid
))
{
TRACE
(
"(%p)->(IID_IHTMLLocation %p)
\n
"
,
This
,
ppv
);
*
ppv
=
HTMLLOCATION
(
This
);
}
if
(
*
ppv
)
{
IUnknown_AddRef
((
IUnknown
*
)
*
ppv
);
return
S_OK
;
}
WARN
(
"(%p)->(%s %p)
\n
"
,
This
,
debugstr_guid
(
riid
),
ppv
);
return
E_NOINTERFACE
;
}
static
ULONG
WINAPI
HTMLLocation_AddRef
(
IHTMLLocation
*
iface
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
LONG
ref
=
InterlockedIncrement
(
&
This
->
ref
);
TRACE
(
"(%p) ref=%d
\n
"
,
This
,
ref
);
return
ref
;
}
static
ULONG
WINAPI
HTMLLocation_Release
(
IHTMLLocation
*
iface
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
LONG
ref
=
InterlockedDecrement
(
&
This
->
ref
);
TRACE
(
"(%p) ref=%d
\n
"
,
This
,
ref
);
if
(
!
ref
)
{
if
(
This
->
doc
&&
This
->
doc
->
location
==
This
)
This
->
doc
->
location
=
NULL
;
heap_free
(
This
);
}
return
ref
;
}
static
HRESULT
WINAPI
HTMLLocation_GetTypeInfoCount
(
IHTMLLocation
*
iface
,
UINT
*
pctinfo
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
pctinfo
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_GetTypeInfo
(
IHTMLLocation
*
iface
,
UINT
iTInfo
,
LCID
lcid
,
ITypeInfo
**
ppTInfo
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%u %u %p)
\n
"
,
This
,
iTInfo
,
lcid
,
ppTInfo
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_GetIDsOfNames
(
IHTMLLocation
*
iface
,
REFIID
riid
,
LPOLESTR
*
rgszNames
,
UINT
cNames
,
LCID
lcid
,
DISPID
*
rgDispId
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%s %p %u %u %p)
\n
"
,
This
,
debugstr_guid
(
riid
),
rgszNames
,
cNames
,
lcid
,
rgDispId
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_Invoke
(
IHTMLLocation
*
iface
,
DISPID
dispIdMember
,
REFIID
riid
,
LCID
lcid
,
WORD
wFlags
,
DISPPARAMS
*
pDispParams
,
VARIANT
*
pVarResult
,
EXCEPINFO
*
pExcepInfo
,
UINT
*
puArgErr
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%d %s %d %d %p %p %p %p)
\n
"
,
This
,
dispIdMember
,
debugstr_guid
(
riid
),
lcid
,
wFlags
,
pDispParams
,
pVarResult
,
pExcepInfo
,
puArgErr
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_put_href
(
IHTMLLocation
*
iface
,
BSTR
v
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%s)
\n
"
,
This
,
debugstr_w
(
v
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_get_href
(
IHTMLLocation
*
iface
,
BSTR
*
p
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_put_protocol
(
IHTMLLocation
*
iface
,
BSTR
v
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%s)
\n
"
,
This
,
debugstr_w
(
v
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_get_protocol
(
IHTMLLocation
*
iface
,
BSTR
*
p
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_put_host
(
IHTMLLocation
*
iface
,
BSTR
v
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%s)
\n
"
,
This
,
debugstr_w
(
v
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_get_host
(
IHTMLLocation
*
iface
,
BSTR
*
p
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_put_hostname
(
IHTMLLocation
*
iface
,
BSTR
v
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%s)
\n
"
,
This
,
debugstr_w
(
v
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_get_hostname
(
IHTMLLocation
*
iface
,
BSTR
*
p
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_put_port
(
IHTMLLocation
*
iface
,
BSTR
v
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%s)
\n
"
,
This
,
debugstr_w
(
v
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_get_port
(
IHTMLLocation
*
iface
,
BSTR
*
p
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_put_pathname
(
IHTMLLocation
*
iface
,
BSTR
v
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%s)
\n
"
,
This
,
debugstr_w
(
v
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_get_pathname
(
IHTMLLocation
*
iface
,
BSTR
*
p
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_put_search
(
IHTMLLocation
*
iface
,
BSTR
v
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%s)
\n
"
,
This
,
debugstr_w
(
v
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_get_search
(
IHTMLLocation
*
iface
,
BSTR
*
p
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_put_hash
(
IHTMLLocation
*
iface
,
BSTR
v
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%s)
\n
"
,
This
,
debugstr_w
(
v
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_get_hash
(
IHTMLLocation
*
iface
,
BSTR
*
p
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_reload
(
IHTMLLocation
*
iface
,
VARIANT_BOOL
flag
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%x)
\n
"
,
This
,
flag
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_replace
(
IHTMLLocation
*
iface
,
BSTR
bstr
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%s)
\n
"
,
This
,
debugstr_w
(
bstr
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_assign
(
IHTMLLocation
*
iface
,
BSTR
bstr
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%s)
\n
"
,
This
,
debugstr_w
(
bstr
));
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
HTMLLocation_toString
(
IHTMLLocation
*
iface
,
BSTR
*
String
)
{
HTMLLocation
*
This
=
HTMLLOCATION_THIS
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
String
);
return
E_NOTIMPL
;
}
#undef HTMLLOCATION_THIS
static
const
IHTMLLocationVtbl
HTMLLocationVtbl
=
{
HTMLLocation_QueryInterface
,
HTMLLocation_AddRef
,
HTMLLocation_Release
,
HTMLLocation_GetTypeInfoCount
,
HTMLLocation_GetTypeInfo
,
HTMLLocation_GetIDsOfNames
,
HTMLLocation_Invoke
,
HTMLLocation_put_href
,
HTMLLocation_get_href
,
HTMLLocation_put_protocol
,
HTMLLocation_get_protocol
,
HTMLLocation_put_host
,
HTMLLocation_get_host
,
HTMLLocation_put_hostname
,
HTMLLocation_get_hostname
,
HTMLLocation_put_port
,
HTMLLocation_get_port
,
HTMLLocation_put_pathname
,
HTMLLocation_get_pathname
,
HTMLLocation_put_search
,
HTMLLocation_get_search
,
HTMLLocation_put_hash
,
HTMLLocation_get_hash
,
HTMLLocation_reload
,
HTMLLocation_replace
,
HTMLLocation_assign
,
HTMLLocation_toString
};
HTMLLocation
*
HTMLLocation_Create
(
HTMLDocument
*
doc
)
{
HTMLLocation
*
ret
=
heap_alloc
(
sizeof
(
*
ret
));
ret
->
lpHTMLLocationVtbl
=
&
HTMLLocationVtbl
;
ret
->
ref
=
1
;
ret
->
doc
=
doc
;
return
ret
;
}
dlls/mshtml/mshtml_private.h
View file @
1caf73be
...
...
@@ -98,6 +98,14 @@ struct ConnectionPoint {
};
typedef
struct
{
const
IHTMLLocationVtbl
*
lpHTMLLocationVtbl
;
LONG
ref
;
HTMLDocument
*
doc
;
}
HTMLLocation
;
typedef
struct
{
const
IHTMLOptionElementFactoryVtbl
*
lpHTMLOptionElementFactoryVtbl
;
LONG
ref
;
...
...
@@ -169,6 +177,7 @@ struct HTMLDocument {
ConnectionPoint
cp_propnotif
;
HTMLOptionElementFactory
*
option_factory
;
HTMLLocation
*
location
;
struct
list
selection_list
;
struct
list
range_list
;
...
...
@@ -323,6 +332,7 @@ typedef struct {
#define HTMLTEXTCONT(x) ((IHTMLTextContainer*) &(x)->lpHTMLTextContainerVtbl)
#define HTMLOPTFACTORY(x) ((IHTMLOptionElementFactory*) &(x)->lpHTMLOptionElementFactoryVtbl)
#define HTMLLOCATION(x) ((IHTMLLocation*) &(x)->lpHTMLLocationVtbl)
#define DEFINE_THIS2(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,ifc)))
#define DEFINE_THIS(cls,ifc,iface) DEFINE_THIS2(cls,lp ## ifc ## Vtbl,iface)
...
...
@@ -333,6 +343,7 @@ HRESULT HTMLLoadOptions_Create(IUnknown*,REFIID,void**);
HTMLWindow
*
HTMLWindow_Create
(
HTMLDocument
*
);
HTMLWindow
*
nswindow_to_window
(
const
nsIDOMWindow
*
);
HTMLOptionElementFactory
*
HTMLOptionElementFactory_Create
(
HTMLDocument
*
);
HTMLLocation
*
HTMLLocation_Create
(
HTMLDocument
*
);
void
setup_nswindow
(
HTMLWindow
*
);
void
HTMLDocument_HTMLDocument3_Init
(
HTMLDocument
*
);
...
...
dlls/mshtml/tests/dom.c
View file @
1caf73be
...
...
@@ -163,6 +163,12 @@ static REFIID const script_iids[] = {
NULL
};
static
REFIID
const
location_iids
[]
=
{
&
IID_IDispatch
,
&
IID_IHTMLLocation
,
NULL
};
typedef
struct
{
const
char
*
tag
;
REFIID
*
iids
;
...
...
@@ -1002,6 +1008,27 @@ static void test_compatmode(IHTMLDocument2 *doc)
SysFreeString
(
mode
);
}
static
void
test_location
(
IHTMLDocument2
*
doc
)
{
IHTMLLocation
*
location
,
*
location2
;
ULONG
ref
;
HRESULT
hres
;
hres
=
IHTMLDocument2_get_location
(
doc
,
&
location
);
ok
(
hres
==
S_OK
,
"get_location failed: %08x
\n
"
,
hres
);
hres
=
IHTMLDocument2_get_location
(
doc
,
&
location2
);
ok
(
hres
==
S_OK
,
"get_location failed: %08x
\n
"
,
hres
);
ok
(
location
==
location2
,
"location != location2
\n
"
);
test_ifaces
((
IUnknown
*
)
location
,
location_iids
);
IHTMLLocation_Release
(
location2
);
ref
=
IHTMLLocation_Release
(
location
);
ok
(
!
ref
,
"location chould be destroyed here
\n
"
);
}
static
void
test_default_style
(
IHTMLStyle
*
style
)
{
VARIANT_BOOL
b
;
...
...
@@ -1114,6 +1141,7 @@ static void test_defaults(IHTMLDocument2 *doc)
test_default_style
(
style
);
test_compatmode
(
doc
);
test_location
(
doc
);
IHTMLStyle_Release
(
style
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment