Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
f3a2cb7b
Commit
f3a2cb7b
authored
Nov 16, 2013
by
Jacek Caban
Committed by
Alexandre Julliard
Nov 18, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mshtml: Added IHTMLDocument3::getElementsByName implementation.
parent
25264f0b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
98 additions
and
2 deletions
+98
-2
htmldoc3.c
dlls/mshtml/htmldoc3.c
+37
-2
dom.c
dlls/mshtml/tests/dom.c
+61
-0
No files found.
dlls/mshtml/htmldoc3.c
View file @
f3a2cb7b
...
...
@@ -536,8 +536,43 @@ static HRESULT WINAPI HTMLDocument3_getElementsByName(IHTMLDocument3 *iface, BST
IHTMLElementCollection
**
ppelColl
)
{
HTMLDocument
*
This
=
impl_from_IHTMLDocument3
(
iface
);
FIXME
(
"(%p)->(%s %p)
\n
"
,
This
,
debugstr_w
(
v
),
ppelColl
);
return
E_NOTIMPL
;
nsIDOMNodeList
*
node_list
;
nsAString
selector_str
;
WCHAR
*
selector
;
nsresult
nsres
;
static
const
WCHAR
formatW
[]
=
{
'*'
,
'['
,
'i'
,
'd'
,
'='
,
'%'
,
's'
,
']'
,
','
,
'*'
,
'['
,
'n'
,
'a'
,
'm'
,
'e'
,
'='
,
'%'
,
's'
,
']'
,
0
};
TRACE
(
"(%p)->(%s %p)
\n
"
,
This
,
debugstr_w
(
v
),
ppelColl
);
if
(
!
This
->
doc_node
||
!
This
->
doc_node
->
nsdoc
)
{
/* We should probably return an empty collection. */
FIXME
(
"No nsdoc
\n
"
);
return
E_NOTIMPL
;
}
selector
=
heap_alloc
(
2
*
SysStringLen
(
v
)
*
sizeof
(
WCHAR
)
+
sizeof
(
formatW
));
if
(
!
selector
)
return
E_OUTOFMEMORY
;
sprintfW
(
selector
,
formatW
,
v
,
v
);
/*
* NOTE: IE getElementsByName implementation differs from Gecko. It searches both name and id attributes.
* That's why we use CSS selector instead. We should also use name only when it applies to given element
* types and search should be case insensitive. Those are currently not supported properly.
*/
nsAString_InitDepend
(
&
selector_str
,
selector
);
nsres
=
nsIDOMNodeSelector_QuerySelectorAll
(
This
->
doc_node
->
nsnode_selector
,
&
selector_str
,
&
node_list
);
nsAString_Finish
(
&
selector_str
);
heap_free
(
selector
);
if
(
NS_FAILED
(
nsres
))
{
ERR
(
"QuerySelectorAll failed: %08x
\n
"
,
nsres
);
return
E_FAIL
;
}
*
ppelColl
=
create_collection_from_nodelist
(
This
->
doc_node
,
node_list
);
nsIDOMNodeList_Release
(
node_list
);
return
S_OK
;
}
...
...
dlls/mshtml/tests/dom.c
View file @
f3a2cb7b
...
...
@@ -759,6 +759,18 @@ static IHTMLElement4 *_get_elem4_iface(unsigned line, IUnknown *unk)
return
elem
;
}
#define get_doc3_iface(u) _get_doc3_iface(__LINE__,u)
static
IHTMLDocument3
*
_get_doc3_iface
(
unsigned
line
,
IHTMLDocument2
*
doc
)
{
IHTMLDocument3
*
doc3
;
HRESULT
hres
;
hres
=
IHTMLDocument2_QueryInterface
(
doc
,
&
IID_IHTMLDocument3
,
(
void
**
)
&
doc3
);
ok_
(
__FILE__
,
line
)
(
hres
==
S_OK
,
"Could not get IHTMLDocument3 interface: %08x
\n
"
,
hres
);
return
doc3
;
}
#define get_node_iface(u) _get_node_iface(__LINE__,u)
static
IHTMLDOMNode
*
_get_node_iface
(
unsigned
line
,
IUnknown
*
unk
)
{
...
...
@@ -6737,6 +6749,54 @@ static void test_blocked(IHTMLDocument2 *doc, IHTMLElement *outer_elem)
}
}
#define doc_get_elems_by_name(a,b) _doc_get_elems_by_name(__LINE__,a,b)
static
IHTMLElementCollection
*
_doc_get_elems_by_name
(
unsigned
line
,
IHTMLDocument2
*
doc
,
const
char
*
name
)
{
IHTMLDocument3
*
doc3
=
_get_doc3_iface
(
line
,
doc
);
IHTMLElementCollection
*
col
;
BSTR
str
=
a2bstr
(
name
);
HRESULT
hres
;
hres
=
IHTMLDocument3_getElementsByName
(
doc3
,
str
,
&
col
);
ok_
(
__FILE__
,
line
)(
hres
==
S_OK
,
"getElementsByName failed: %08x
\n
"
,
hres
);
ok_
(
__FILE__
,
line
)(
col
!=
NULL
,
"col = NULL
\n
"
);
IHTMLDocument3_Release
(
doc3
);
SysFreeString
(
str
);
return
col
;
}
static
void
test_elem_names
(
IHTMLDocument2
*
doc
)
{
IHTMLElementCollection
*
col
;
IHTMLElement
*
body
;
LONG
len
;
HRESULT
hres
;
static
const
elem_type_t
test1_types
[]
=
{
ET_INPUT
,
ET_A
,
ET_DIV
};
body
=
doc_get_body
(
doc
);
test_elem_set_innerhtml
((
IUnknown
*
)
body
,
"<input name=
\"
test
\"
><a name=
\"
test
\"
></a><a name=
\"
xxx
\"
></a><div id=
\"
test
\"
></div>"
);
col
=
doc_get_elems_by_name
(
doc
,
"test"
);
test_elem_collection
((
IUnknown
*
)
col
,
test1_types
,
sizeof
(
test1_types
)
/
sizeof
(
*
test1_types
));
IHTMLElementCollection_Release
(
col
);
col
=
doc_get_elems_by_name
(
doc
,
"yyy"
);
test_elem_collection
((
IUnknown
*
)
col
,
NULL
,
0
);
IHTMLElementCollection_Release
(
col
);
/* case insensivity test */
col
=
doc_get_elems_by_name
(
doc
,
"Xxx"
);
hres
=
IHTMLElementCollection_get_length
(
col
,
&
len
);
ok
(
hres
==
S_OK
,
"get_length failed: %08x
\n
"
,
hres
);
todo_wine
ok
(
len
==
1
,
"len = %d
\n
"
,
len
);
IHTMLElementCollection_Release
(
col
);
IHTMLElement_Release
(
body
);
}
static
void
test_elems2
(
IHTMLDocument2
*
doc
)
{
IHTMLElement
*
elem
,
*
elem2
,
*
div
;
...
...
@@ -6825,6 +6885,7 @@ static void test_elems2(IHTMLDocument2 *doc)
test_attr
(
div
);
test_blocked
(
doc
,
div
);
test_elem_names
(
doc
);
IHTMLElement_Release
(
div
);
}
...
...
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