This is my first time implementing an interface so thorough feedback would be appreciated.
-- v7: windows.media: Implement IClosedCaptionPropertiesStatics interface. windows.media: Add stub DLL. include/windowscontracts: Bump contractversion to 14.
From: Mohamad Al-Jaf mohamadaljaf@gmail.com
Windows.UI includes a contract version of 12 for typedef struct WindowId which cannot compile due to being an incomplete type and not a pointer. --- My Windows SDK lists the contractversion as 14 so I updated it to that for accuracy, otherwise 12 works fine. -- v4: Fix build failure. --- include/windowscontracts.idl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/windowscontracts.idl b/include/windowscontracts.idl index 6bcf80ac954..5bcae48a5b5 100644 --- a/include/windowscontracts.idl +++ b/include/windowscontracts.idl @@ -26,7 +26,7 @@ namespace Windows { apicontract FoundationContract {};
- [contractversion(10)] + [contractversion(14)] apicontract UniversalApiContract {}; }
From: Mohamad Al-Jaf mohamadaljaf@gmail.com
--- v2: - Fix DllGetActivationFactory stub. - Fix formatting in DllGetClassObject. - Use the same debug channel, media, for captions.c and main.c. - Rename struct captions to captions_statics. -- v3: - Rename windows_media_* to factory_*. - Query interface in the first commit. - Remove () from fixme and trace messages. - Add test for the activation factory. --- configure.ac | 2 + dlls/windows.media/Makefile.in | 9 ++ dlls/windows.media/captions.c | 125 ++++++++++++++++++++++++++ dlls/windows.media/classes.idl | 23 +++++ dlls/windows.media/main.c | 46 ++++++++++ dlls/windows.media/private.h | 42 +++++++++ dlls/windows.media/tests/Makefile.in | 5 ++ dlls/windows.media/tests/captions.c | 83 +++++++++++++++++ dlls/windows.media/windows.media.spec | 3 + 9 files changed, 338 insertions(+) create mode 100644 dlls/windows.media/Makefile.in create mode 100644 dlls/windows.media/captions.c create mode 100644 dlls/windows.media/classes.idl create mode 100644 dlls/windows.media/main.c create mode 100644 dlls/windows.media/private.h create mode 100644 dlls/windows.media/tests/Makefile.in create mode 100644 dlls/windows.media/tests/captions.c create mode 100644 dlls/windows.media/windows.media.spec
diff --git a/configure.ac b/configure.ac index 4e852da5ee7..83f553ea074 100644 --- a/configure.ac +++ b/configure.ac @@ -3168,6 +3168,8 @@ WINE_CONFIG_MAKEFILE(dlls/windows.media.devices) WINE_CONFIG_MAKEFILE(dlls/windows.media.devices/tests) WINE_CONFIG_MAKEFILE(dlls/windows.media.speech) WINE_CONFIG_MAKEFILE(dlls/windows.media.speech/tests) +WINE_CONFIG_MAKEFILE(dlls/windows.media) +WINE_CONFIG_MAKEFILE(dlls/windows.media/tests) WINE_CONFIG_MAKEFILE(dlls/windows.networking) WINE_CONFIG_MAKEFILE(dlls/windowscodecs) WINE_CONFIG_MAKEFILE(dlls/windowscodecs/tests) diff --git a/dlls/windows.media/Makefile.in b/dlls/windows.media/Makefile.in new file mode 100644 index 00000000000..be5012c170f --- /dev/null +++ b/dlls/windows.media/Makefile.in @@ -0,0 +1,9 @@ +MODULE = windows.media.dll +IMPORTS = combase + +C_SRCS = \ + captions.c \ + main.c + +IDL_SRCS = \ + classes.idl diff --git a/dlls/windows.media/captions.c b/dlls/windows.media/captions.c new file mode 100644 index 00000000000..212039d18ad --- /dev/null +++ b/dlls/windows.media/captions.c @@ -0,0 +1,125 @@ +/* WinRT Windows.Media Closed Captions Implementation + * + * Copyright (C) 2022 Mohamad Al-Jaf + * + * 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 "private.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(media); + +const char *debugstr_hstring( HSTRING hstr ) +{ + const WCHAR *str; + UINT32 len; + if (hstr && !((ULONG_PTR)hstr >> 16)) return "(invalid)"; + str = WindowsGetStringRawBuffer( hstr, &len ); + return wine_dbgstr_wn( str, len ); +} + +struct captions_statics +{ + IActivationFactory IActivationFactory_iface; + LONG ref; +}; + +static inline struct captions_statics *impl_from_IActivationFactory( IActivationFactory *iface ) +{ + return CONTAINING_RECORD( iface, struct captions_statics, IActivationFactory_iface ); +} + +static HRESULT WINAPI factory_QueryInterface( IActivationFactory *iface, REFIID iid, void **out ) +{ + struct captions_statics *impl = impl_from_IActivationFactory( iface ); + + TRACE( "iface %p, iid %s, out %p.\n", iface, debugstr_guid( iid ), out ); + + if (IsEqualGUID( iid, &IID_IUnknown ) || + IsEqualGUID( iid, &IID_IInspectable ) || + IsEqualGUID( iid, &IID_IActivationFactory )) + { + *out = &impl->IActivationFactory_iface; + IInspectable_AddRef( *out ); + return S_OK; + } + + FIXME( "%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid( iid ) ); + *out = NULL; + return E_NOINTERFACE; +} + +static ULONG WINAPI factory_AddRef( IActivationFactory *iface ) +{ + struct captions_statics *impl = impl_from_IActivationFactory( iface ); + ULONG ref = InterlockedIncrement( &impl->ref ); + TRACE( "iface %p increasing refcount to %lu.\n", iface, ref ); + return ref; +} + +static ULONG WINAPI factory_Release( IActivationFactory *iface ) +{ + struct captions_statics *impl = impl_from_IActivationFactory( iface ); + ULONG ref = InterlockedDecrement( &impl->ref ); + TRACE( "iface %p decreasing refcount to %lu.\n", iface, ref ); + return ref; +} + +static HRESULT WINAPI factory_GetIids( IActivationFactory *iface, ULONG *iid_count, IID **iids ) +{ + FIXME( "iface %p, iid_count %p, iids %p stub!\n", iface, iid_count, iids ); + return E_NOTIMPL; +} + +static HRESULT WINAPI factory_GetRuntimeClassName( IActivationFactory *iface, HSTRING *class_name ) +{ + FIXME( "iface %p, class_name %p stub!\n", iface, class_name ); + return E_NOTIMPL; +} + +static HRESULT WINAPI factory_GetTrustLevel( IActivationFactory *iface, TrustLevel *trust_level ) +{ + FIXME( "iface %p, trust_level %p stub!\n", iface, trust_level ); + return E_NOTIMPL; +} + +static HRESULT WINAPI factory_ActivateInstance( IActivationFactory *iface, IInspectable **instance ) +{ + FIXME( "iface %p, instance %p stub!\n", iface, instance ); + return E_NOTIMPL; +} + +static const struct IActivationFactoryVtbl factory_vtbl = +{ + factory_QueryInterface, + factory_AddRef, + factory_Release, + /* IInspectable methods */ + factory_GetIids, + factory_GetRuntimeClassName, + factory_GetTrustLevel, + /* IActivationFactory methods */ + factory_ActivateInstance, +}; + +static struct captions_statics captions_statics = +{ + {&factory_vtbl}, + 1, +}; + +IActivationFactory *captions_factory = &captions_statics.IActivationFactory_iface; diff --git a/dlls/windows.media/classes.idl b/dlls/windows.media/classes.idl new file mode 100644 index 00000000000..12424bbc90a --- /dev/null +++ b/dlls/windows.media/classes.idl @@ -0,0 +1,23 @@ +/* + * Runtime Classes for windows.media.dll + * + * Copyright (C) 2022 Mohamad Al-Jaf + * + * 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 + */ + +#pragma makedep register + +#include "windows.media.closedcaptioning.idl" diff --git a/dlls/windows.media/main.c b/dlls/windows.media/main.c new file mode 100644 index 00000000000..7c0ea0e5b62 --- /dev/null +++ b/dlls/windows.media/main.c @@ -0,0 +1,46 @@ +/* WinRT Windows.Media Implementation + * + * Copyright (C) 2022 Mohamad Al-Jaf + * + * 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 "initguid.h" +#include "private.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(media); + +HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID riid, void **out) +{ + FIXME( "clsid %s, riid %s, out %p stub!\n", debugstr_guid(clsid), debugstr_guid(riid), out ); + return CLASS_E_CLASSNOTAVAILABLE; +} + +HRESULT WINAPI DllGetActivationFactory(HSTRING classid, IActivationFactory **factory) +{ + const WCHAR *buffer = WindowsGetStringRawBuffer( classid, NULL ); + + TRACE( "class %s, factory %p.\n", debugstr_hstring(classid), factory ); + + *factory = NULL; + + if (!wcscmp( buffer, RuntimeClass_Windows_Media_ClosedCaptioning_ClosedCaptionProperties )) + IActivationFactory_QueryInterface( captions_factory, &IID_IActivationFactory, (void **)factory ); + + if (*factory) return S_OK; + return CLASS_E_CLASSNOTAVAILABLE; +} diff --git a/dlls/windows.media/private.h b/dlls/windows.media/private.h new file mode 100644 index 00000000000..defe56006fb --- /dev/null +++ b/dlls/windows.media/private.h @@ -0,0 +1,42 @@ +/* WinRT Windows.Media Implementation + * + * Copyright (C) 2022 Mohamad Al-Jaf + * + * 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 + */ + +#ifndef __WINE_WINDOWS_MEDIA_PRIVATE_H +#define __WINE_WINDOWS_MEDIA_PRIVATE_H + +#include <stdarg.h> + +#define COBJMACROS +#include "windef.h" +#include "winbase.h" +#include "winstring.h" + +#include "activation.h" + +#define WIDL_using_Windows_Foundation +#define WIDL_using_Windows_Foundation_Collections +#include "windows.foundation.h" +#define WIDL_using_Windows_Media_ClosedCaptioning +#include "windows.media.closedcaptioning.h" + +extern const char *debugstr_hstring( HSTRING hstr ); + +extern IActivationFactory *captions_factory; + +#endif diff --git a/dlls/windows.media/tests/Makefile.in b/dlls/windows.media/tests/Makefile.in new file mode 100644 index 00000000000..cc432fd73cc --- /dev/null +++ b/dlls/windows.media/tests/Makefile.in @@ -0,0 +1,5 @@ +TESTDLL = windows.media.dll +IMPORTS = combase + +C_SRCS = \ + captions.c diff --git a/dlls/windows.media/tests/captions.c b/dlls/windows.media/tests/captions.c new file mode 100644 index 00000000000..db67c0891f6 --- /dev/null +++ b/dlls/windows.media/tests/captions.c @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2022 Mohamad Al-Jaf + * + * 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 + */ +#define COBJMACROS +#include "initguid.h" +#include <stdarg.h> + +#include "windef.h" +#include "winbase.h" +#include "winstring.h" + +#include "roapi.h" + +#include "wine/test.h" + +#define check_interface( obj, iid, exp ) check_interface_( __LINE__, obj, iid, exp ) +static void check_interface_( unsigned int line, void *obj, const IID *iid, BOOL supported ) +{ + IUnknown *iface = obj; + IUnknown *unk; + HRESULT hr, expected_hr; + + expected_hr = supported ? S_OK : E_NOINTERFACE; + + hr = IUnknown_QueryInterface( iface, iid, (void **)&unk ); + ok_( __FILE__, line )( hr == expected_hr || broken(hr == E_NOINTERFACE ), "Got hr %#lx, expected %#lx.\n", hr, expected_hr ); + if (SUCCEEDED(hr)) + IUnknown_Release( unk ); +} + +static void test_CaptionStatics(void) +{ + static const WCHAR *caption_properties_name = L"Windows.Media.ClosedCaptioning.ClosedCaptionProperties"; + IActivationFactory *factory; + HSTRING str; + HRESULT hr; + LONG ref; + + hr = WindowsCreateString( caption_properties_name, wcslen( caption_properties_name ), &str ); + ok( hr == S_OK, "got hr %#lx.\n", hr ); + + hr = RoGetActivationFactory( str, &IID_IActivationFactory, (void **)&factory ); + WindowsDeleteString( str ); + ok( hr == S_OK || broken( hr == REGDB_E_CLASSNOTREG ), "got hr %#lx.\n", hr ); + if (hr == REGDB_E_CLASSNOTREG) + { + win_skip( "%s runtimeclass not registered, skipping tests.\n", wine_dbgstr_w( caption_properties_name )); + return; + } + + check_interface( factory, &IID_IUnknown, TRUE ); + check_interface( factory, &IID_IInspectable, TRUE ); + check_interface( factory, &IID_IAgileObject, FALSE ); + + ref = IActivationFactory_Release( factory ); + ok( ref == 1, "got ref %ld.\n", ref ); +} + +START_TEST(captions) +{ + HRESULT hr; + + hr = RoInitialize( RO_INIT_MULTITHREADED ); + ok( hr == S_OK, "RoInitialize failed, hr %#lx\n", hr ); + + test_CaptionStatics(); + + RoUninitialize(); +} diff --git a/dlls/windows.media/windows.media.spec b/dlls/windows.media/windows.media.spec new file mode 100644 index 00000000000..31a5eafe950 --- /dev/null +++ b/dlls/windows.media/windows.media.spec @@ -0,0 +1,3 @@ +@ stdcall -private DllGetActivationFactory(ptr ptr) +@ stdcall -private DllCanUnloadNow() +@ stdcall -private DllGetClassObject(ptr ptr ptr)
From: Mohamad Al-Jaf mohamadaljaf@gmail.com
Needed by Chromium-based browsers. --- v2: - Add property prefixes to function names. - Rename captions_vtbl to captions_statics_vtbl. -- v3: - Remove () from fixme messages. - Match parameter name in fixme message to function parameter. - Remove error checks. --- dlls/windows.media/captions.c | 107 ++++++++++++++++++++++++++++ dlls/windows.media/private.h | 40 +++++++++++ dlls/windows.media/tests/captions.c | 11 +++ 3 files changed, 158 insertions(+)
diff --git a/dlls/windows.media/captions.c b/dlls/windows.media/captions.c index 212039d18ad..2e68948209e 100644 --- a/dlls/windows.media/captions.c +++ b/dlls/windows.media/captions.c @@ -35,6 +35,7 @@ const char *debugstr_hstring( HSTRING hstr ) struct captions_statics { IActivationFactory IActivationFactory_iface; + IClosedCaptionPropertiesStatics IClosedCaptionPropertiesStatics_iface; LONG ref; };
@@ -58,6 +59,13 @@ static HRESULT WINAPI factory_QueryInterface( IActivationFactory *iface, REFIID return S_OK; }
+ if (IsEqualGUID( iid, &IID_IClosedCaptionPropertiesStatics )) + { + *out = &impl->IClosedCaptionPropertiesStatics_iface; + IInspectable_AddRef( *out ); + return S_OK; + } + FIXME( "%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid( iid ) ); *out = NULL; return E_NOINTERFACE; @@ -116,9 +124,108 @@ static const struct IActivationFactoryVtbl factory_vtbl = factory_ActivateInstance, };
+DEFINE_IINSPECTABLE( captions, IClosedCaptionPropertiesStatics, struct captions_statics, IActivationFactory_iface ) + +static HRESULT WINAPI captions_get_FontColor( IClosedCaptionPropertiesStatics *iface, ClosedCaptionColor *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +static HRESULT WINAPI captions_get_ComputedFontColor( IClosedCaptionPropertiesStatics *iface, Color *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +static HRESULT WINAPI captions_get_FontOpacity( IClosedCaptionPropertiesStatics *iface, ClosedCaptionOpacity *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +static HRESULT WINAPI captions_get_FontSize( IClosedCaptionPropertiesStatics *iface, ClosedCaptionSize *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +static HRESULT WINAPI captions_get_FontStyle( IClosedCaptionPropertiesStatics *iface, ClosedCaptionStyle *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +static HRESULT WINAPI captions_get_FontEffect( IClosedCaptionPropertiesStatics *iface, ClosedCaptionEdgeEffect *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +static HRESULT WINAPI captions_get_BackgroundColor( IClosedCaptionPropertiesStatics *iface, ClosedCaptionColor *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +static HRESULT WINAPI captions_get_ComputedBackgroundColor( IClosedCaptionPropertiesStatics *iface, Color *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +static HRESULT WINAPI captions_get_BackgroundOpacity( IClosedCaptionPropertiesStatics *iface, ClosedCaptionOpacity *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +static HRESULT WINAPI captions_get_RegionColor( IClosedCaptionPropertiesStatics *iface, ClosedCaptionColor *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +static HRESULT WINAPI captions_get_ComputedRegionColor( IClosedCaptionPropertiesStatics *iface, Color *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +static HRESULT WINAPI captions_get_RegionOpacity( IClosedCaptionPropertiesStatics *iface, ClosedCaptionOpacity *value ) +{ + FIXME( "iface %p, value %p stub!\n", iface, value ); + return E_NOTIMPL; +} + +static const struct IClosedCaptionPropertiesStaticsVtbl captions_statics_vtbl = +{ + captions_QueryInterface, + captions_AddRef, + captions_Release, + /* IInspectable methods */ + captions_GetIids, + captions_GetRuntimeClassName, + captions_GetTrustLevel, + /* IClosedCaptionPropertiesStatics methods */ + captions_get_FontColor, + captions_get_ComputedFontColor, + captions_get_FontOpacity, + captions_get_FontSize, + captions_get_FontStyle, + captions_get_FontEffect, + captions_get_BackgroundColor, + captions_get_ComputedBackgroundColor, + captions_get_BackgroundOpacity, + captions_get_RegionColor, + captions_get_ComputedRegionColor, + captions_get_RegionOpacity, +}; + static struct captions_statics captions_statics = { {&factory_vtbl}, + {&captions_statics_vtbl}, 1, };
diff --git a/dlls/windows.media/private.h b/dlls/windows.media/private.h index defe56006fb..d6353dede56 100644 --- a/dlls/windows.media/private.h +++ b/dlls/windows.media/private.h @@ -32,6 +32,8 @@ #define WIDL_using_Windows_Foundation #define WIDL_using_Windows_Foundation_Collections #include "windows.foundation.h" +#define WIDL_using_Windows_UI +#include "windows.ui.h" #define WIDL_using_Windows_Media_ClosedCaptioning #include "windows.media.closedcaptioning.h"
@@ -39,4 +41,42 @@ extern const char *debugstr_hstring( HSTRING hstr );
extern IActivationFactory *captions_factory;
+#define DEFINE_IINSPECTABLE_( pfx, iface_type, impl_type, impl_from, iface_mem, expr ) \ + static inline impl_type *impl_from( iface_type *iface ) \ + { \ + return CONTAINING_RECORD( iface, impl_type, iface_mem ); \ + } \ + static HRESULT WINAPI pfx##_QueryInterface( iface_type *iface, REFIID iid, void **out ) \ + { \ + impl_type *impl = impl_from( iface ); \ + return IInspectable_QueryInterface( (IInspectable *)(expr), iid, out ); \ + } \ + static ULONG WINAPI pfx##_AddRef( iface_type *iface ) \ + { \ + impl_type *impl = impl_from( iface ); \ + return IInspectable_AddRef( (IInspectable *)(expr) ); \ + } \ + static ULONG WINAPI pfx##_Release( iface_type *iface ) \ + { \ + impl_type *impl = impl_from( iface ); \ + return IInspectable_Release( (IInspectable *)(expr) ); \ + } \ + static HRESULT WINAPI pfx##_GetIids( iface_type *iface, ULONG *iid_count, IID **iids ) \ + { \ + impl_type *impl = impl_from( iface ); \ + return IInspectable_GetIids( (IInspectable *)(expr), iid_count, iids ); \ + } \ + static HRESULT WINAPI pfx##_GetRuntimeClassName( iface_type *iface, HSTRING *class_name ) \ + { \ + impl_type *impl = impl_from( iface ); \ + return IInspectable_GetRuntimeClassName( (IInspectable *)(expr), class_name ); \ + } \ + static HRESULT WINAPI pfx##_GetTrustLevel( iface_type *iface, TrustLevel *trust_level ) \ + { \ + impl_type *impl = impl_from( iface ); \ + return IInspectable_GetTrustLevel( (IInspectable *)(expr), trust_level ); \ + } +#define DEFINE_IINSPECTABLE( pfx, iface_type, impl_type, base_iface ) \ + DEFINE_IINSPECTABLE_( pfx, iface_type, impl_type, impl_from_##iface_type, iface_type##_iface, &impl->base_iface ) + #endif diff --git a/dlls/windows.media/tests/captions.c b/dlls/windows.media/tests/captions.c index db67c0891f6..b1e1f4fd334 100644 --- a/dlls/windows.media/tests/captions.c +++ b/dlls/windows.media/tests/captions.c @@ -25,6 +25,11 @@
#include "roapi.h"
+#define WIDL_using_Windows_Foundation +#include "windows.foundation.h" +#define WIDL_using_Windows_Media_ClosedCaptioning +#include "windows.media.closedcaptioning.h" + #include "wine/test.h"
#define check_interface( obj, iid, exp ) check_interface_( __LINE__, obj, iid, exp ) @@ -45,6 +50,7 @@ static void check_interface_( unsigned int line, void *obj, const IID *iid, BOOL static void test_CaptionStatics(void) { static const WCHAR *caption_properties_name = L"Windows.Media.ClosedCaptioning.ClosedCaptionProperties"; + IClosedCaptionPropertiesStatics *caption_statics; IActivationFactory *factory; HSTRING str; HRESULT hr; @@ -66,6 +72,11 @@ static void test_CaptionStatics(void) check_interface( factory, &IID_IInspectable, TRUE ); check_interface( factory, &IID_IAgileObject, FALSE );
+ hr = IActivationFactory_QueryInterface( factory, &IID_IClosedCaptionPropertiesStatics, (void **)&caption_statics ); + ok( hr == S_OK, "got hr %#lx.\n", hr ); + + ref = IClosedCaptionPropertiesStatics_Release( caption_statics ); + ok( ref == 2, "got ref %ld.\n", ref ); ref = IActivationFactory_Release( factory ); ok( ref == 1, "got ref %ld.\n", ref ); }
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=126516
Your paranoid android.
=== debian11 (32 bit report) ===
d3d8: stateblock: Timeout visual: Timeout
d3d9: d3d9ex: Timeout device: Timeout stateblock: Timeout visual: Timeout
d3dcompiler_43: asm: Timeout blob: Timeout hlsl_d3d11: Timeout hlsl_d3d9: Timeout reflection: Timeout
d3dcompiler_46: asm: Timeout blob: Timeout hlsl_d3d11: Timeout hlsl_d3d9: Timeout reflection: Timeout
d3dcompiler_47: asm: Timeout blob: Timeout hlsl_d3d11: Timeout hlsl_d3d9: Timeout reflection: Timeout
d3drm: d3drm: Timeout vector: Timeout
d3dx10_34: d3dx10: Timeout
d3dx10_35: d3dx10: Timeout
d3dx10_36: d3dx10: Timeout
d3dx10_37: d3dx10: Timeout
d3dx10_38: d3dx10: Timeout
d3dx10_39: d3dx10: Timeout
d3dx10_40: d3dx10: Timeout
d3dx10_41: d3dx10: Timeout
d3dx10_42: d3dx10: Timeout
d3dx10_43: d3dx10: Timeout
d3dx11_42: d3dx11: Timeout
d3dx11_43: d3dx11: Timeout
d3dx9_36: asm: Timeout core: Timeout effect: Timeout line: Timeout
Report validation errors: advapi32:security has no test summary line (early exit of the main process?) advapi32:security has unaccounted for todo messages math: Timeout
=== debian11 (build log) ===
WineRunWineTest.pl:error: The task timed out
Just rearranged the commits in the latest version to fix the build failure.
This merge request was approved by Bernhard Kölbl.
This merge request was approved by Rémi Bernon.