This is my first time implementing an interface so thorough feedback would be appreciated.
-- v6: windows.media: Implement IClosedCaptionPropertiesStatics interface. include/windowscontracts: Bump contractversion to 14. windows.media: Add stub DLL.
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
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. --- 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
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=126513
Your paranoid android.
=== debian11 (32 bit report) ===
Report validation errors: advapi32:security has no test summary line (early exit of the main process?) advapi32:security has unaccounted for todo messages
On Mon Nov 21 00:13:21 2022 +0000, Mohamad Al-Jaf wrote:
changed this line in [version 6 of the diff](/wine/wine/-/merge_requests/1343/diffs?diff_id=19855&start_sha=ab45fb366e37c75cc59ecc537ccdf7122be8cf79#696910dbc43dafaa69c900fcca1eb163fc8ce197_131_131)
I don't mind changing it to one of the existing styles. I just find them a bit helpful when reading the debug logs as I have trouble focusing, though the difference they make is small so it's fine to remove them.
On Mon Nov 21 00:13:22 2022 +0000, Mohamad Al-Jaf wrote:
changed this line in [version 6 of the diff](/wine/wine/-/merge_requests/1343/diffs?diff_id=19855&start_sha=ab45fb366e37c75cc59ecc537ccdf7122be8cf79#696910dbc43dafaa69c900fcca1eb163fc8ce197_143_137)
Yeah, I suppose it'd be better to do the check when it's implemented.
On Fri Nov 18 10:50:29 2022 +0000, Bernhard Kölbl wrote:
You need to request Developer status to be able to set a reviewer.
I see, thanks for letting me know.