Created a new MR, because the mailing bridge wouldn't trigger on force pushes.
--
v3: windows.media.speech/tests: Skip SpeechRecognitionListConstraint tests on Win10 1709 x32 and below.
windows.media.speech/tests: Add basic query tests for SpeechSynthesizerOptions.
include/windows.media.speechsynthesis.idl: Order items alphabetically.
include/windows.media.speechsynthesis.idl: Add missing interfaces to SpeechSynthesizerOptions runtimeclass.
include/windows.media.speechsynthesis.idl: Add SpeechAppendedSilence and SpeechPunctuationSilence enums.
windows.media.speech: Add missing async_void_Release implementation.
windows.media.speech/tests: Remove some flaky refcount checks.
https://gitlab.winehq.org/wine/wine/-/merge_requests/708
This should implement all of sessionStorage and most of the missing localStorage (except for the space quota for the latter). Some other common parts are still missing and pending (using props to directly access items in the underlying storage, and StorageEvents, which will come later).
On native, sessionStorage seems to be per-thread, and based on a specific origin, so it's implemented that way using a rbtree for origins in the thread local storage. The diff below (applied after all of the patches) should show that, which works on native as expected, but it's not in the actual commits because it crashes wine-gecko due to known multi-threading issues ([bug 37906](https://bugs.winehq.org/show_bug.cgi?id=37906)).
```diff
diff --git a/dlls/mshtml/tests/misc.c b/dlls/mshtml/tests/misc.c
index c2c8370..e358e9c 100644
--- a/dlls/mshtml/tests/misc.c
+++ b/dlls/mshtml/tests/misc.c
@@ -193,6 +193,32 @@ static HRESULT get_sessionstorage(IHTMLDocument2 *doc, IHTMLStorage **storage)
return hres;
}
+static DWORD WINAPI test_HTMLStorage_thread(void *data)
+{
+ IHTMLStorage *storage;
+ IHTMLDocument2 *doc;
+ BSTR key = data;
+ HRESULT hres;
+ VARIANT var;
+
+ CoInitialize(NULL);
+
+ doc = create_doc_from_url(L"http://www.codeweavers.com/");
+ hres = get_sessionstorage(doc, &storage);
+ ok(hres == S_OK, "got %08lx\n", hres);
+
+ V_VT(&var) = 0xdead;
+ hres = IHTMLStorage_getItem(storage, key, &var);
+ ok(hres == S_OK, "getItem failed: %08lx\n", hres);
+ ok(V_VT(&var) == VT_NULL, "got %d\n", V_VT(&var));
+
+ IHTMLStorage_Release(storage);
+ IHTMLDocument2_Release(doc);
+
+ CoUninitialize();
+ return 0;
+}
+
static void test_HTMLStorage(void)
{
IHTMLDocument2 *doc, *doc2;
@@ -200,7 +226,9 @@ static void test_HTMLStorage(void)
LONG space, length, lval;
VARIANT var;
BSTR key, value;
+ HANDLE thread;
HRESULT hres;
+ DWORD ret;
doc = create_doc_from_url(L"http://www.codeweavers.com/");
doc2 = create_doc_from_url(L"http://www.codeweavers.com/");
@@ -607,6 +635,12 @@ static void test_HTMLStorage(void)
ok(hres == S_OK, "get_remainingSpace failed %08lx\n", hres);
ok(lval == space, "remainingSpace = %ld\n", lval);
+ /* Different thread */
+ thread = CreateThread(NULL, 0, test_HTMLStorage_thread, key, 0, NULL);
+ ret = WaitForSingleObject(thread, INFINITE);
+ ok(ret == WAIT_OBJECT_0, "WaitForSingleObject returned %08lx\n", ret);
+ CloseHandle(thread);
+
hres = IHTMLStorage_clear(storage);
ok(hres == S_OK, "clear failed %08lx\n", hres);
```
There's another rbtree for the actual storage on a given origin, which contains key/value pairs, with keys stored inline because they do not change.
--
v3: mshtml: Implement remainingSpace prop for sessionStorage.
mshtml: Implement length prop for Storage.
mshtml: Implement key() for localStorage.
mshtml: Implement key() for sessionStorage.
mshtml: Implement clear() for Storage.
mshtml: Implement removeItem() for sessionStorage.
mshtml: Implement getItem() for sessionStorage.
mshtml: Implement setItem() for sessionStorage.
https://gitlab.winehq.org/wine/wine/-/merge_requests/704
Initial implementation for registry application hives, this is a step forward to get Visual Studio to run.
:-)
--
v3: server: save app hive into it's file when closing handle.
server/registry: pass file name instead of file handle to server.
kernelbase: Implement RegLoadAppKey.
ntdll: Initial implementation for application hives.
ntdll: Move NtLoadKey implementation to NtLoadKeyEx.
ntdll/test: Test for application hives.
ntdll: Create NtLoadKeyEx syscall stub.
advapi32/test: Create tests for RegLoadAppKey.
https://gitlab.winehq.org/wine/wine/-/merge_requests/717
Initial implementation for registry application hives, this is a step forward to get Visual Studio to run.
:-)
--
v2: server: save app hive into it's file when closing handle.
server/registry: pass file name instead of file handle to server.
kernelbase: Implement RegLoadAppKey.
ntdll: Initial implementation for application hives.
https://gitlab.winehq.org/wine/wine/-/merge_requests/717
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
--
v2: mfplat: Partially implement MFInitMediaTypeFromAMMediaType().
mfplat: Partially implement MFInitMediaTypeFromVideoInfoHeader().
mfplat/tests: Add some tests for legacy media type conersion functions.
https://gitlab.winehq.org/wine/wine/-/merge_requests/713
On Fri Aug 26 00:36:32 2022 +0000, Davide Beatrici wrote:
> What do you mean? A complex piece of software like this has rigid
> standards in order to prevent potential issues from arising, whether
> immediately or in the future.
> I too made a few mistakes in my merge requests, but I have always taken
> the time to fix them and make things look nice. This is what improving
> is about.
> Also, consider that generally the more reviewers the better:
> - @julliard noticed that you changed the WinAPI definitions and
> explained that you cannot do that.
> - @jhol spotted the icon issue.
> - I tested your changes and reported back the results.
> Imagine if this merge request was accepted as it was right at the
> beginning: guaranteed breakage.
> If you deem your contribution(s) important to the project, please put on
> hold the MR until you have time to fix it.
OK, fair enough. I'm unemployed at the moment, so I have plenty of time, but, it's not always enjoyable. I suppose I can keep it open and work on it when I'm doing better.
I found it difficult finding implementations for COM interfaces in the code, and would like to have C++ classes instead, as I notice through public debugging symbols for DLL's on Windows 10, especially comdlg32, that developers at Microsoft are writing significant parts in C++.
I bought that up before, but it was dismissed because it may add complexity that others do not want to deal with, and, I agree that C code is more transparent.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/672#note_6971