This get us pass the "Update your browser" blocker in adobe's sign-in page. The page itself doesn't make use of `window.MutationObserver`.
However the sign-in page is still broken.
--
v22: mshtml: add stubs for MutationObserver methods
mshtml: implement window.MutationObserver with MutationObserver stub
https://gitlab.winehq.org/wine/wine/-/merge_requests/3391
This get us pass the "Update your browser" blocker in adobe's sign-in page. The page itself doesn't make use of `window.MutationObserver`.
However the sign-in page is still broken.
--
v21: mshtml: add stubs for MutationObserver methods
mshtml: implement window.MutationObserver with MutationObserver stub
https://gitlab.winehq.org/wine/wine/-/merge_requests/3391
`getpeername()` is currently handled in ntdll. This merge request changes ntdll to forward `getpeername()` to wineserver. The implementation utilises new `peer_addr` and `peer_addr_len` fields in wineserver's `struct sock`.
This fixes multiple `todo_wine`s in `ws2_32/tests` and allows for more accurate peer names to be provided in case the address the socket is bound to on the Unix side does not match what `bind()` was called with on the Windows side.
*This merge request was originally intended to be included in !2786 (Add support for AF_UNIX sockets) but was split into its own merge request because this is not an insignificant change.*
--
v23: server: Move getpeername() implementation from ntdll/unix.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3074
This get us pass the "Update your browser" blocker in adobe's sign-in page. The page itself doesn't make use of `window.MutationObserver`.
However the sign-in page is still broken.
--
v20: mshtml: add stubs for MutationObserver methods
mshtml: implement window.MutationObserver with MutationObserver stub
https://gitlab.winehq.org/wine/wine/-/merge_requests/3391
This get us pass the "Update your browser" blocker in adobe's sign-in page. The page itself doesn't make use of `window.MutationObserver`.
However the sign-in page is still broken.
--
v18: mshtml: add stubs for MutationObserver methods
mshtml: implement window.MutationObserver with MutationObserver stub
https://gitlab.winehq.org/wine/wine/-/merge_requests/3391
This get us pass the "Update your browser" blocker in adobe's sign-in page. The page itself doesn't make use of `window.MutationObserver`.
However the sign-in page is still broken.
--
v19: mshtml: add stubs for MutationObserver methods
mshtml: implement window.MutationObserver with MutationObserver stub
https://gitlab.winehq.org/wine/wine/-/merge_requests/3391
This get us pass the "Update your browser" blocker in adobe's sign-in page. The page itself doesn't make use of `window.MutationObserver`.
However the sign-in page is still broken.
--
v17: mshtml: add stubs for MutationObserver methods
mshtml: implement window.MutationObserver with MutationObserver stub
https://gitlab.winehq.org/wine/wine/-/merge_requests/3391
Some applications (e.g. UE4) requires
the DriverVersion string in the registry.
The string is taken from `dlls/wbemprox/builtin.c`
--
v3: win32u: Add DriverVersion string for GPUs to registry
https://gitlab.winehq.org/wine/wine/-/merge_requests/3104
Recap:
I implemented relative addressing in !229, but I was suggested to handle register indexes by moving all the registers to the heap, which I did in my [nonconst-offsets-6](https://gitlab.winehq.org/fcasas/vkd3d/-/commits/noncon… branch. A part of this implementation required !269, but I was asked to try to turn the sm4 register structs into the vkd3d-shader register structs instead, to get closer to a common low level IR.
This is the first part of that transformation. The whole thing is in my [use_vkd3d_reg](https://gitlab.winehq.org/fcasas/vkd3d/-/commits/use_vkd3d_r… branch.
~~This is built on top of !225 (the first two patches), so it may be good to get that upstream first.~~
---
This patch series aims to do the following replacements:
```
struct sm4_register -> struct vkd3d_shader_register
struct sm4_dst_register -> struct vkd3d_shader_dst_param
struct sm4_src_register -> struct vkd3d_shader_src_param
```
to get us closer to a common level IR and simplify the implementation of relative-addressing.
To achieve this, the fields in the sm4 register structs are replaced with fields in the vkd3d-shader structs or removed altogether, one at the time.
As can be seen when looking at the whole branch, it is possible to do this transformation without having to add additional fields to `struct vkd3d_shader_register`, by restricting each register type to a single `enum vkd3d_sm4_dimension` (and its src registers to a single `enum vkd3d_sm4_swizzle_type`) by default.
The only exception we need so far is for sampler registers: They always have dimension NONE, except when used as arguments of gather instructions, in which case they have dimension VEC4 and SCALAR swizzle. This, and similar exceptions we may find in the future, can be handled using the opcode_info, as in 7/8 [81e17506](https://gitlab.winehq.org/fcasas/vkd3d/-/commit/81e17506ba2cb1fbf….
--
v3: vkd3d-shader/tpf: Get rid of sm4_register.dim.
vkd3d-shader/tpf: Use 's' in src_info to expect sampler register with vec4 dimension.
vkd3d-shader/tpf: Separate dst register write function.
vkd3d-shader/tpf: Separate src register write function.
vkd3d-shader/tpf: Make register_type_table an array of structs.
vkd3d-shader/tpf: Use struct vkd3d_shader_register_index in sm4_register.idx[].
vkd3d-shader/tpf: Allow passing NULL register type on hlsl_sm4_register_from_semantic().
vkd3d-shader/tpf: Use enum vkd3d_shader_register_type in sm4_register.type.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/281
--
v10: vkd3d-shader/tpf: Add support for writing 'resinfo' instruction.
vkd3d-shader/tpf: Add support for writing 'sampleinfo' instruction.
vkd3d-shader/hlsl: Parse GetDimensions() method.
tests: Add some tests for GetDimensions().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/218
Same as MR !2394
Signed-off-by: Zhao Yi zhaoyi(a)uniontech.com
--
v6: comctl32/listview: Reset bNoItemMetrics to TRUE in LISTVIEW_DeleteAllItems() to arrange listview items.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3392
On Wed Jul 26 19:17:48 2023 +0000, Nikolay Sivov wrote:
> I had to learn what's going on in there once again. I think what we need
> to do is basically stop using 'presenter->cs' in the streaming thread
> entirely, MFVP_MESSAGE_ENDSTREAMING handling will remain unchanged.
> This means two things:
> - queue itself should be protected with its own lock;
> - video_presenter_process_input() should not be called in the streaming
> thread all. Instead it could be called right in
> video_presenter_allocator_cb_NotifyRelease(), with appropriate locking.
It's slightly more complicated, I can see now why EVRM_PROCESS_INPUT was added - it was probably to avoid interacting with tracking thread. The point still stands, I think we'll need to remove remaining presenter lock from streaming thread, one way or another.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3319#note_40394
This get us pass the "Update your browser" blocker in adobe's sign-in page. The page itself doesn't make use of `window.MutationObserver`.
However the sign-in page is still broken.
--
v16: mshtml: add stubs for MutationObserver methods
mshtml: implement window.MutationObserver with MutationObserver stub
https://gitlab.winehq.org/wine/wine/-/merge_requests/3391
On Wed Jul 26 17:26:57 2023 +0000, Santino Mazza wrote:
> Oh I just saw that we have `PRESENTER_MIXER_HAS_INPUT` flag and is set
> when it receives the `MFVP_MESSAGE_PROCESSINPUTNOTIFY` message, but when
> the streaming thread receives the `EVRM_PROCESS_INPUT` message it
> doesn't set that flag, shouldn't we set that flag and check for it
> before waiting for the thread?
I had to learn what's going on in there once again. I think what we need to do is basically stop using 'presenter->cs' in the streaming thread entirely, MFVP_MESSAGE_ENDSTREAMING handling will remain unchanged.
This means two things:
- queue itself should be protected with its own lock;
- video_presenter_process_input() should not be called in the streaming thread all. Instead it could be called right in video_presenter_allocator_cb_NotifyRelease(), with appropriate locking.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3319#note_40382
This get us pass the "Update your browser" blocker in adobe's sign-in page. The page itself doesn't make use of `window.MutationObserver`.
However the sign-in page is still broken.
--
v15: mshtml: add stubs for MutationObserver methods
mshtml: implement window.MutationObserver with MutationObserver stub
https://gitlab.winehq.org/wine/wine/-/merge_requests/3391
On Wed Jul 26 17:25:19 2023 +0000, Santino Mazza wrote:
> mmm, what about adding a timeout for WaitForSingleObject and do the
> LeaveCriticalSection if the timeout passed? Not sure how long it should be.
Oh I just saw that we have `PRESENTER_MIXER_HAS_INPUT` flag and is set when it receives the `MFVP_MESSAGE_PROCESSINPUTNOTIFY` message, but when the streaming thread receives the `EVRM_PROCESS_INPUT` message it doesn't set that flag, shouldn't we set that flag and check for it before waiting for the thread?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3319#note_40361
This is meant to simplify testing conditions that generally hold true
but may occasionally fail due to interference from external factors
(such as processes that start / stop, network connections being
opened / closed, etc).
The trick is to loop a few times on the set of flaky conditions until
they succeed. During the last attempt all failures are recorded as
usual, while in the previous runs, the tryok() failures area ignored
but cause one more attempt to be made.
The simplest case looks like this:
LOOP_ON_FLAKY_TESTS(3)
{
// ok() failures are never ignored and not retried
ok(..., "check 1", ...);
// tryok() failures are ignored except on the last attempt
tryok(..., "check 2", ...);
}
There is also:
* attempt_retry() which marks the current attempt as failed as if
calling tryok(0), and returns true if another attempt can be made.
* attempt_failed() which returns true if an ok() call failed.
---
This is independent from the 'flaky' mechanism which adds some naming
constraints. The loop macro is still called LOOP_ON_FLAKY_TESTS()
despite being unrelated to the flaky mechanism. The attempt_retry()
and attempt_failed() macro names also don't make it obvious that they
are related to tryok().
I think this mechanism is better than the flaky one because a flaky test
can go bad without anyone noticing, whereas if a tryok() starts failing
systematically it will cause a real failure.
The other side of that coin is that, unlike flaky, the tryok()
mechanism does not entirely eliminate the possibility of getting a
failure, it just reduces it; though by adjusting the maximum number of
attempts one can achieve an arbitrarily low failure rate. For instance
if an ok() call fails 10% of the time and one wants a maximum of 1 in
a million failure rate, use LOOP_ON_FLAKY_TESTS(6). The cost is an
increased run time in the worst case.
This also limits the use of this mechanism to tests that have a
reasonably low failure rate to start with (otherwise one has to loop
too many times). Also note that there are cases where looping
essentially reduce the failure rate to zero. For instance
ieframe:webbrowser fails if IE creates a net session while the test is
counting them. But IE only creates the one net session on start up so
trying even one more time should guarantee that the test will succeed.
Other cases like scheduling delays and the creation of network
connections are more probabilistic in nature. Maybe a comment in test.h
should offer some guideline as to the target failure rate.
Eventually this may replace the flaky mechanism but that depends on
how well it works in practice and how practical it is to loop on flaky
tests. It seems to be going well in the few cases I looked at. But I
think this mechanism has value even if the two end up coexisting
indefinitely.
This MR uses the tryok() in some actual tests for illustration and testing purposes. The final MR will probably split most of those off to separate MRs.
--
v2: mmdevapi/tests: Replace flaky with tryok() in the capture tests.
mmdevapi/tests: Replace flaky with tryok() in the render tests.
quartz/tests: Replace flaky() with tryok() to work around scheduling delays.
DEBUG ieframe/tests: tryok() framework testing ground.
ieframe/tests: Work around a network session race condition.
advapi32/tests: Replace the custom loop with tryok() mechanism.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3418
On Wed Jul 26 15:17:52 2023 +0000, Nikolay Sivov wrote:
> This should be arranged differently, you can't generally assume that
> you've entered this lock when calling the helper.
mmm, what about adding a timeout for WaitForSingleObject and do the LeaveCriticalSection if the timeout passed? Not sure how long it should be.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3319#note_40359
On Wed Jul 26 15:17:52 2023 +0000, Nikolay Sivov wrote:
> This does hang on my system, but is it reliable or is it depending on
> calls made close one after another in time?
It's definitely not a reliable way to test for this behavior, but I'm not sure how could I do it.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3319#note_40353
Nikolay Sivov (@nsivov) commented about dlls/evr/presenter.c:
>
> PostThreadMessageW(presenter->thread.tid, EVRM_STOP, 0, 0);
>
> + /* Make sure streaming thread is not blocked by critical section before waiting for it. */
> + LeaveCriticalSection(&presenter->cs);
> WaitForSingleObject(presenter->thread.hthread, INFINITE);
> CloseHandle(presenter->thread.hthread);
> + EnterCriticalSection(&presenter->cs);
>
This should be arranged differently, you can't generally assume that you've entered this lock when calling the helper.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3319#note_40348
Ensured to work with both the current `klist` implementation and the one modified to use KerbQueryTicketCacheExMessage. Patch for `klist` will be sent separately.
--
v5: dlls/kerberos: Implement KerbQueryTicketCacheExMessage.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3393
This is meant to simplify testing conditions that generally hold true
but may occasionally fail due to interference from external factors
(such as processes that start / stop, network connections being
opened / closed, etc).
The trick is to loop a few times on the set of flaky conditions until
they succeed. During the last attempt all failures are recorded as
usual, while in the previous runs, the tryok() failures area ignored
but cause one more attempt to be made.
The simplest case looks like this:
LOOP_ON_FLAKY_TESTS(3)
{
// ok() failures are never ignored and not retried
ok(..., "check 1", ...);
// tryok() failures are ignored except on the last attempt
tryok(..., "check 2", ...);
}
There is also:
* attempt_retry() which marks the current attempt as failed as if
calling tryok(0), and returns true if another attempt can be made.
* attempt_failed() which returns true if an ok() call failed.
---
This is independent from the 'flaky' mechanism which adds some naming
constraints. The loop macro is still called LOOP_ON_FLAKY_TESTS()
despite being unrelated to the flaky mechanism. The attempt_retry()
and attempt_failed() macro names also don't make it obvious that they
are related to tryok().
I think this mechanism is better than the flaky one because a flaky test
can go bad without anyone noticing, whereas if a tryok() starts failing
systematically it will cause a real failure.
The other side of that coin is that, unlike flaky, the tryok()
mechanism does not entirely eliminate the possibility of getting a
failure, it just reduces it; though by adjusting the maximum number of
attempts one can achieve an arbitrarily low failure rate. For instance
if an ok() call fails 10% of the time and one wants a maximum of 1 in
a million failure rate, use LOOP_ON_FLAKY_TESTS(6). The cost is an
increased run time in the worst case.
This also limits the use of this mechanism to tests that have a
reasonably low failure rate to start with (otherwise one has to loop
too many times). Also note that there are cases where looping
essentially reduce the failure rate to zero. For instance
ieframe:webbrowser fails if IE creates a net session while the test is
counting them. But IE only creates the one net session on start up so
trying even one more time should guarantee that the test will succeed.
Other cases like scheduling delays and the creation of network
connections are more probabilistic in nature. Maybe a comment in test.h
should offer some guideline as to the target failure rate.
Eventually this may replace the flaky mechanism but that depends on
how well it works in practice and how practical it is to loop on flaky
tests. It seems to be going well in the few cases I looked at. But I
think this mechanism has value even if the two end up coexisting
indefinitely.
This MR uses the tryok() in some actual tests for illustration and testing purposes. The final MR will probably split most of those off to separate MRs.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3418
This get us pass the "Update your browser" blocker in adobe's sign-in page. The page itself doesn't make use of `window.MutationObserver`.
However the sign-in page is still broken.
--
v14: mshtml: add stubs for MutationObserver methods
mshtml: implement window.MutationObserver with MutationObserver stub
https://gitlab.winehq.org/wine/wine/-/merge_requests/3391
This is first part in a series that implements Cycle Collection for every mshtml object (dispex) and cleans up rest of the code based on it, which is obviously needed due to dynamic props and other extra object-specific refs.
In an effort to split it up as much as possible, since it already has quite a lot of restructuring and changes, some of the earlier patches will introduce temporary leaks or cyclic refs, but that's because we'll later handle them properly with the dispex CC. These shouldn't affect behavior, though, so it shouldn't pose problems for functionality.
Nodes are, initially, not changed much (other than to make it compatible with the dispex) to keep changes as small as possible. They still use their own CC mechanism and refcounting, which is hackish but that is solved in a follow-up MR, so it's temporary only.
Eventually, every object (including nodes) will use the dispex's vtbl to do its Cycle Collection, except for stuff like outer window (which is a special case).
In this first part, the objects that are using the node CC will have no-op dispex CC methods since they are using the node's, but this is temporary only.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3408
Ensured to work with both the current `klist` implementation and the one modified to use KerbQueryTicketCacheExMessage. Patch for `klist` will be sent separately.
--
v4: dlls/kerberos: Implement KerbQueryTicketCacheExMessage.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3393
This framework is present in all macOS SDKs we support, starting at macOS 10.13 and still present in macOS Sonoma.
Getting pcsclite completely working correctly is a lot harder on macOS and this would give us better integration.
--
v2: configure: Use PCSC.framework when pcsclite is not available on macOS.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3389
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55283
---
It has been causing every merge request to get a GitLab CI error ever
since the move to Debian 12 on 2023-07-10. That makes the GitLab CI
pretty horrible.
If there is a quick fix for this issue then this MR can be ignored.
Otherwise, since there is no way to tell the GitLab CI that a specific
test is expected to crash or fail in a certain way, there is no other
option than to skip the test entirely until it works again.
Side-note: Finding failures in the GitLab CI logs is quite annoying. As
far as I can tell the only way not to miss any is to perform a set of
four searches:
- "Test f" -> regular failures
- "todo " -> Todo tests that unexpectedly succeed
- "ne (2" -> Timeouts (and test units with 2 failures)
- "ne (-" -> Crashes (with or without an 'unhandled exception' line)
If anyone has an emacs macro to automate this...
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3361
This get us pass the "Update your browser" blocker in adobe's sign-in page. The page itself doesn't make use of `window.MutationObserver`.
However the sign-in page is still broken.
--
v13: mshtml: add stubs for MutationObserver methods
mshtml: implement window.MutationObserver with MutationObserver stub
https://gitlab.winehq.org/wine/wine/-/merge_requests/3391
This get us pass the "Update your browser" blocker in adobe's sign-in page. The page itself doesn't make use of `window.MutationObserver`.
However the sign-in page is still broken.
--
v12: mshtml: implement window.MutationObserver with MutationObserver stub
https://gitlab.winehq.org/wine/wine/-/merge_requests/3391
Builtin gdiplus behaves as documented but tests are indicating that Windows behaviour sometimes differs from the documentation.
I believe this issue is at least one of the contributing issues to bug https://bugs.winehq.org/show_bug.cgi?id=46947, if not the sole issue. I propose that this flag be disabled until it is well understood. I noticed as issue with DrawString seeming to ignore the flag sometimes(sometimes the text fits without any noticeable defects which I believe is the case with the program in the bug) and sometimes even drawing clipped text with the flag on. Other times it works as expected. I can't seem to find a pattern to identify that could be used to predict its behaviour.
Signed-off-by: David Kahurani k.kahurani(a)gmail.com
--
v3: gdiplus: Disable StringFormatFlagsLineLimit
https://gitlab.winehq.org/wine/wine/-/merge_requests/3407
This get us pass the "Update your browser" blocker in adobe's sign-in page. The page itself doesn't make use of `window.MutationObserver`.
However the sign-in page is still broken.
--
v11: mshtml: implement window.MutationObserver with MutationObserver stub
https://gitlab.winehq.org/wine/wine/-/merge_requests/3391