Implements HTMLDocument that makes HTML rendering. Wine's implementation uses Gecko (Mozilla's engine) to render HTML.
MSHTML DOM Develop Hints
This is not a detailed development document, but just some hints for fresh person who are interested in mshtml.dll. If you have any questions, please feel free to ask ZhenboLi, the writer of this article.
0. Know a little C
1. Know how to compile wine
2. wine_gecko-*.msi is laying in ~/.cache/wine (maybe changed on your computer)
Go to wine-git/dlls/mshtml, open htmltablerow.c. Find the function 'HTMLTableRow_get_rowIndex'
Well, This is my first patch for mshtml. You can find that it is just a wrapper for Gecko.
How to find the Gecko function? nsiface.[h|idl] will help you.
It is common that you have to do some transform between WinAPI's data type and Gecko's. Here are some examples.
Mostly, Gecko needs nsAString. In wine-git/dlls/mshtml/nsembed.c, you can find functions like nsAString_InitDepent, nsAString_GetData, etc. Also, there are some useful helpers like return_nsstr.Example.
VARIANT is an important data type in COM. You can find many useful tools in include/oleauto.h. VARIANT can cause much troubles, and to ask is always better than sending a bad patch to wine-patches.
IDL is used for describing an interface. While building wine, nsiface.h would be generated by nsiface.idl(That's why nsiface.h is in .gitignore).
You need to care about IDL when dealing some bugs or adding elements. The format for Gecko is different from MIDL, so you'd better Build Gecko, and a header file would be generated. More information at Understanding Interface Definition Language
ConformanceTests is the most challenging part at beginning. And WineTestBot is your most reliable friend. Most situations are simple, but sometimes you need to be very careful to avoid breaking other tests. Also, you need to know how WinAPI handle errors, like NULL pointers, invalid parameters, etc. Remember, don't leak memory in tests.