// Copyright (c) 2015 Felix Rieseberg and Jason Poon . All rights reserved. // Copyright (c) 2015 Ryan McShane and Brandon Smith // Thanks to both of those folks mentioned above who first thought up a bunch of this code // and released it as MIT to the world. #ifndef __WINDOWS_TOAST_NOTIFICATION_H__ #define __WINDOWS_TOAST_NOTIFICATION_H__ #include "content/public/browser/desktop_notification_delegate.h" #include "content/public/common/platform_notification_data.h" #include "base/bind.h" #include #include #include using namespace Microsoft::WRL; using namespace ABI::Windows::UI::Notifications; using namespace ABI::Windows::Foundation; namespace WinToasts { typedef ITypedEventHandler DesktopToastActivatedEventHandler; typedef ITypedEventHandler DesktopToastDismissedEventHandler; class ToastEventHandler; class WindowsToastNotification { public: WindowsToastNotification(const char* appName, content::DesktopNotificationDelegate* delegate); ~WindowsToastNotification(); void ShowNotification(const WCHAR* title, const WCHAR* msg, std::string iconPath, ComPtr& toast); void DismissNotification(ComPtr toast); void NotificationClicked(); void NotificationDismissed(); private: ComPtr m_eventHandler; content::DesktopNotificationDelegate* n_delegate; ComPtr m_toastManager; ComPtr m_toastNotifier; HRESULT GetToastXml(IToastNotificationManagerStatics* toastManager, const WCHAR* title, const WCHAR* msg, std::string iconPath, ABI::Windows::Data::Xml::Dom::IXmlDocument** toastXml); HRESULT SetXmlText(ABI::Windows::Data::Xml::Dom::IXmlDocument* doc, const WCHAR* text); HRESULT SetXmlText(ABI::Windows::Data::Xml::Dom::IXmlDocument* doc, const WCHAR* title, const WCHAR* body); HRESULT SetXmlImage(ABI::Windows::Data::Xml::Dom::IXmlDocument* doc, std::string iconPath); HRESULT GetTextNodeList(HSTRING* tag, ABI::Windows::Data::Xml::Dom::IXmlDocument* doc, ABI::Windows::Data::Xml::Dom::IXmlNodeList** nodeList, UINT32 reqLength); HRESULT AppendTextToXml(ABI::Windows::Data::Xml::Dom::IXmlDocument* doc, ABI::Windows::Data::Xml::Dom::IXmlNode* node, const WCHAR* text); HRESULT SetupCallbacks(IToastNotification* toast); HRESULT CreateHString(const WCHAR* source, HSTRING* dest); }; class ToastEventHandler : public RuntimeClass, DesktopToastActivatedEventHandler, DesktopToastDismissedEventHandler> { public: ToastEventHandler(WindowsToastNotification* notification, content::DesktopNotificationDelegate* delegate); ~ToastEventHandler(); IFACEMETHODIMP Invoke(IToastNotification* sender, IInspectable* args); IFACEMETHODIMP Invoke(IToastNotification* sender, IToastDismissedEventArgs* e); private: WindowsToastNotification* m_notification; content::DesktopNotificationDelegate* n_delegate; }; } // namespace #endif //__WINDOWS_TOAST_NOTIFICATION_H__