Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2401)

Unified Diff: chrome/browser/notifications/notification_toast_helper_win.h

Issue 2033093003: [Notification] Make HTML5 Notification use ActionCenter on Windows 10, behind Flags. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync and merge. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/notifications/notification_toast_helper_win.h
diff --git a/chrome/browser/notifications/notification_toast_helper_win.h b/chrome/browser/notifications/notification_toast_helper_win.h
new file mode 100644
index 0000000000000000000000000000000000000000..47e121c55a357dbcde712d66f60520517ac50b70
--- /dev/null
+++ b/chrome/browser/notifications/notification_toast_helper_win.h
@@ -0,0 +1,151 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_TOAST_HELPER_WIN_H_
+#define CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_TOAST_HELPER_WIN_H_
+
+#include <activation.h>
+#include <d2d1_1.h>
+#include <d3d11_1.h>
+#include <roapi.h>
+#include <shlwapi.h>
+#include <wincodec.h>
+#include <windows.h>
+#include <windows.applicationModel.core.h>
+#include <windows.applicationModel.datatransfer.h>
+#include <windows.data.xml.dom.h>
+#include <windows.graphics.printing.h>
+#include <windows.storage.pickers.h>
+#include <windows.ui.notifications.h>
+#include <wrl/implements.h>
+#include <wrl/module.h>
+#include <wrl/event.h>
+#include <wrl/wrappers/corewrappers.h>
+
+#include "base/macros.h"
+#include "base/strings/string16.h"
+
+namespace mswr = Microsoft::WRL;
+namespace mswrw = Microsoft::WRL::Wrappers;
+
+namespace winapp = ABI::Windows::ApplicationModel;
+namespace windata = ABI::Windows::Data;
+namespace winxml = ABI::Windows::Data::Xml;
+namespace windevs = ABI::Windows::Devices;
+namespace winfoundtn = ABI::Windows::Foundation;
+namespace wingfx = ABI::Windows::Graphics;
+namespace winui = ABI::Windows::UI;
+namespace winsys = ABI::Windows::System;
+namespace winstorage = ABI::Windows::Storage;
+
+namespace base {
+class FilePath;
+} // namespace base
+
+typedef winfoundtn::ITypedEventHandler<
+ winui::Notifications::ToastNotification*, IInspectable*>
+ ToastActivatedHandler;
+
+typedef winfoundtn::ITypedEventHandler<
+ winui::Notifications::ToastNotification*,
+ winui::Notifications::ToastDismissedEventArgs*> ToastDismissedHandler;
+
+typedef winfoundtn::ITypedEventHandler<
+ winui::Notifications::ToastNotification*,
+ winui::Notifications::ToastFailedEventArgs*> ToastFailedHandler;
+
+// This class provides an abstraction to COM calls to display and process
+// Notification Toast in Windows. Features:
+// - Stores HRESULT |hr_|, and coarse accessors HasFailed() or StillOkay().
+// - Failure is permanent, and on failure all subsequent calls become no-op.
+// - An implicit "current element" is stored, which is the target of various
+// XML operations.
+class NotificationToastHelperWin {
+ public:
+ NotificationToastHelperWin() = default;
+ ~NotificationToastHelperWin() = default;
+
+ bool StillOkay() const { return SUCCEEDED(hr_); }
+ bool HasFailed() const { return !SUCCEEDED(hr_); }
+
+ // Creates |toast_manager_|.
+ void CreateToastManager();
+
+ // Loads |toast_xml_| from template, also loads |document_element_|.
+ void LoadXMLFromTemplate(winui::Notifications::ToastTemplateType type);
+
+ // For debugging.
+ // TODO(huangs): Remove.
+ // Loads |toast_xml_| directly from |xml_str|.
+ void LoadXMLFromString(const base::string16& xml_str);
+
+ // For debugging.
+ // TODO(huangs): Remove.
+ void AlertToastXml();
+
+ // Selects |document_element_| as the "current element".
+ void SelectDocument();
+
+ // Selects element with |tag_name| and at |index| as the "current element".
+ void SelectElementByTagNameAndIndex(const base::string16& tag_name,
+ unsigned int index);
+
+ // Converts a file path, e.g., "C:\\User\\test\\AppData\\Local\\Temp\\a.tmp"
+ // to a file URL, e.g., "file:///C:/User/test/AppData/Local/Temp/a.tmp".
+ base::string16 FilePathToFileUrl(const base::FilePath& file_path);
+
+ // Removes the current element, and selects the parent.
+ void RemoveElement();
+
+ // Appends a text node to the "current element".
+ void AppendText(const base::string16& text);
+
+ // Sets an attribute of the "current element".
+ void SetAttribute(const base::string16& name, const base::string16& value);
+
+ // Reads an attribute of the "current element".
+ base::string16 GetAttribute(const base::string16& name);
+
+ // Creates a toast notifier.
+ void CreateToastNotifier();
+
+ // Creates a toast notification.
+ void CreateToastNotification();
+
+ // Loads an existing |toast_notification|. Also loads |toast_xml_| and
+ // |document_element_|.
+ void LoadNotificationAndXml(
+ winui::Notifications::IToastNotification* toast_notification);
+
+ // Displays a toast notification, using |toast_xml_|.
+ void Show(mswr::ComPtr<ToastActivatedHandler> activated_handler,
+ mswr::ComPtr<ToastDismissedHandler> dismissed_handler,
+ mswr::ComPtr<ToastFailedHandler> failed_handler,
+ EventRegistrationToken* activated_token,
+ EventRegistrationToken* dismissed_token,
+ EventRegistrationToken* failed_token);
+
+ private:
+ // Returned HSTRING should be deallocated by ::WindowsDeleteString(). This can
+ // be done by attaching the return value to mswrw::HString.
+ HSTRING MakeHString(const base::string16& str);
+
+ // Creates an intermediate text node.
+ void CreateTextNode(const base::string16& text,
+ mswr::ComPtr<winxml::Dom::IXmlNode>* node);
+
+ HRESULT hr_ = S_OK;
+ mswr::ComPtr<winui::Notifications::IToastNotificationManagerStatics>
+ toast_manager_;
+ mswr::ComPtr<winxml::Dom::IXmlDocument> toast_xml_;
+ mswr::ComPtr<winxml::Dom::IXmlElement> document_element_;
+ mswr::ComPtr<winxml::Dom::IXmlElement> cur_element_;
+
+ mswr::ComPtr<winui::Notifications::IToastNotifier> notifier_;
+ mswr::ComPtr<winui::Notifications::IToastNotification> toast_notification_;
+
+ DISALLOW_COPY_AND_ASSIGN(NotificationToastHelperWin);
+};
+
+#endif // CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_TOAST_HELPER_WIN_H_

Powered by Google App Engine
This is Rietveld 408576698