From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../notificationserver/NotificationCallback.h | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 toolkit/mozapps/notificationserver/NotificationCallback.h (limited to 'toolkit/mozapps/notificationserver/NotificationCallback.h') diff --git a/toolkit/mozapps/notificationserver/NotificationCallback.h b/toolkit/mozapps/notificationserver/NotificationCallback.h new file mode 100644 index 0000000000..3fcb50a812 --- /dev/null +++ b/toolkit/mozapps/notificationserver/NotificationCallback.h @@ -0,0 +1,72 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef NotificationCallback_h__ +#define NotificationCallback_h__ + +#include +#include +#include +#include + +#include "mozilla/Maybe.h" +#include "nsWindowsHelpers.h" + +using namespace Microsoft::WRL; +using namespace std::filesystem; + +// Windows 10+ declarations. +// TODO remove declarations and add `#include +// ` when Windows 10 is the minimum supported. +typedef struct NOTIFICATION_USER_INPUT_DATA { + LPCWSTR Key; + LPCWSTR Value; +} NOTIFICATION_USER_INPUT_DATA; + +MIDL_INTERFACE("53E31837-6600-4A81-9395-75CFFE746F94") +INotificationActivationCallback : public IUnknown { + public: + virtual HRESULT STDMETHODCALLTYPE Activate( + LPCWSTR appUserModelId, LPCWSTR invokedArgs, + const NOTIFICATION_USER_INPUT_DATA* data, ULONG count) = 0; +}; + +struct ToastArgs { + std::wstring profile; + std::wstring windowsTag; +}; + +class NotificationCallback final + : public RuntimeClass, + INotificationActivationCallback> { + public: + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject) final; + + HRESULT STDMETHODCALLTYPE Activate(LPCWSTR appUserModelId, + LPCWSTR invokedArgs, + const NOTIFICATION_USER_INPUT_DATA* data, + ULONG dataCount) final; + + explicit NotificationCallback(const GUID& runtimeGuid, + const path& dllInstallDir) + : guid(runtimeGuid), installDir(dllInstallDir) {} + + private: + const GUID guid = {}; + const path installDir = {}; + + void HandleActivation(LPCWSTR invokedArgs); + mozilla::Maybe ParseToastArguments(LPCWSTR invokedArgs); + std::tuple> BuildRunCommand( + const ToastArgs& args); + + static mozilla::Maybe CreatePipe(const std::wstring& tag); + static bool ConnectPipeWithTimeout(const nsAutoHandle& pipe); + static void HandlePipeMessages(const nsAutoHandle& pipe); + static DWORD TransferForegroundPermission(const DWORD pid); +}; + +#endif -- cgit v1.2.3