| Index: win8/metro_driver/toast_notification_handler.cc
|
| diff --git a/win8/metro_driver/toast_notification_handler.cc b/win8/metro_driver/toast_notification_handler.cc
|
| deleted file mode 100644
|
| index fb44b11dc2cc3a2a09e29ca942468502e59d715d..0000000000000000000000000000000000000000
|
| --- a/win8/metro_driver/toast_notification_handler.cc
|
| +++ /dev/null
|
| @@ -1,253 +0,0 @@
|
| -// Copyright (c) 2012 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.
|
| -
|
| -#include <string>
|
| -
|
| -#include "win8/metro_driver/stdafx.h"
|
| -#include "win8/metro_driver/toast_notification_handler.h"
|
| -
|
| -#include "base/files/file_path.h"
|
| -#include "base/logging.h"
|
| -#include "base/path_service.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/installer/util/browser_distribution.h"
|
| -#include "chrome/installer/util/install_util.h"
|
| -#include "chrome/installer/util/shell_util.h"
|
| -
|
| -#include "win8/metro_driver/winrt_utils.h"
|
| -
|
| -typedef winfoundtn::ITypedEventHandler<
|
| - winui::Notifications::ToastNotification*, IInspectable*>
|
| - ToastActivationHandler;
|
| -
|
| -typedef winfoundtn::ITypedEventHandler<
|
| - winui::Notifications::ToastNotification*,
|
| - winui::Notifications::ToastDismissedEventArgs*> ToastDismissedHandler;
|
| -
|
| -namespace {
|
| -
|
| -// Helper function to return the text node root identified by the index passed
|
| -// in.
|
| -HRESULT GetTextNodeRoot(
|
| - unsigned int index,
|
| - winxml::Dom::IXmlDocument* xml_doc,
|
| - winxml::Dom::IXmlNode** node) {
|
| - DCHECK(xml_doc);
|
| - DCHECK(node);
|
| -
|
| - mswr::ComPtr<winxml::Dom::IXmlElement> document_element;
|
| - HRESULT hr = xml_doc->get_DocumentElement(&document_element);
|
| - CheckHR(hr);
|
| -
|
| - mswr::ComPtr<winxml::Dom::IXmlNodeList> elements;
|
| - mswrw::HString tag_name;
|
| - tag_name.Attach(MakeHString(L"text"));
|
| - hr = document_element->GetElementsByTagName(tag_name.Get(),
|
| - &elements);
|
| - CheckHR(hr);
|
| -
|
| - unsigned int count = 0;
|
| - elements->get_Length(&count);
|
| -
|
| - if (index > count) {
|
| - DVLOG(1) << "Invalid text node index passed in : " << index;
|
| - return E_FAIL;
|
| - }
|
| - hr = elements->Item(index, node);
|
| - CheckHR(hr);
|
| - return hr;
|
| -}
|
| -
|
| -// Helper function to append a text element to the text section in the
|
| -// XML document passed in.
|
| -// The index parameter identifies which text node we append to.
|
| -HRESULT CreateTextNode(winxml::Dom::IXmlDocument* xml_doc,
|
| - int index,
|
| - const base::string16& text_string) {
|
| - DCHECK(xml_doc);
|
| -
|
| - mswr::ComPtr<winxml::Dom::IXmlElement> document_element;
|
| - HRESULT hr = xml_doc->get_DocumentElement(&document_element);
|
| - CheckHR(hr);
|
| -
|
| - mswr::ComPtr<winxml::Dom::IXmlText> xml_text_node;
|
| - mswrw::HString data_hstring;
|
| - data_hstring.Attach(MakeHString(text_string.c_str()));
|
| - hr = xml_doc->CreateTextNode(data_hstring.Get(), &xml_text_node);
|
| - CheckHR(hr);
|
| -
|
| - mswr::ComPtr<winxml::Dom::IXmlNode> created_node;
|
| - hr = xml_text_node.CopyTo(
|
| - winxml::Dom::IID_IXmlNode,
|
| - reinterpret_cast<void**>(created_node.GetAddressOf()));
|
| - CheckHR(hr);
|
| -
|
| - mswr::ComPtr<winxml::Dom::IXmlNode> text_node_root;
|
| - hr = GetTextNodeRoot(index, xml_doc, &text_node_root);
|
| - CheckHR(hr);
|
| -
|
| - mswr::ComPtr<winxml::Dom::IXmlNode> appended_node;
|
| - hr = text_node_root->AppendChild(created_node.Get(), &appended_node);
|
| - CheckHR(hr);
|
| - return hr;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -ToastNotificationHandler::DesktopNotification::DesktopNotification(
|
| - const char* notification_origin,
|
| - const char* notification_icon,
|
| - const wchar_t* notification_title,
|
| - const wchar_t* notification_body,
|
| - const wchar_t* notification_display_source,
|
| - const char* notification_id,
|
| - base::win::MetroNotificationClickedHandler handler,
|
| - const wchar_t* handler_context)
|
| - : origin_url(notification_origin),
|
| - icon_url(notification_icon),
|
| - title(notification_title),
|
| - body(notification_body),
|
| - display_source(notification_display_source),
|
| - id(notification_id),
|
| - notification_handler(handler) {
|
| - if (handler_context)
|
| - notification_context = handler_context;
|
| -}
|
| -
|
| -ToastNotificationHandler::DesktopNotification::DesktopNotification()
|
| - : notification_handler(NULL) {
|
| -}
|
| -
|
| -ToastNotificationHandler::ToastNotificationHandler() {
|
| - DVLOG(1) << __FUNCTION__;
|
| -}
|
| -
|
| -ToastNotificationHandler::~ToastNotificationHandler() {
|
| - DVLOG(1) << __FUNCTION__;
|
| -
|
| - if (notifier_ && notification_)
|
| - CancelNotification();
|
| -}
|
| -
|
| -void ToastNotificationHandler::DisplayNotification(
|
| - const DesktopNotification& notification) {
|
| - DVLOG(1) << __FUNCTION__;
|
| -
|
| - DCHECK(notifier_.Get() == NULL);
|
| - DCHECK(notification_.Get() == NULL);
|
| -
|
| - notification_info_ = notification;
|
| -
|
| - mswr::ComPtr<winui::Notifications::IToastNotificationManagerStatics>
|
| - toast_manager;
|
| -
|
| - HRESULT hr = winrt_utils::CreateActivationFactory(
|
| - RuntimeClass_Windows_UI_Notifications_ToastNotificationManager,
|
| - toast_manager.GetAddressOf());
|
| - CheckHR(hr);
|
| -
|
| - mswr::ComPtr<winxml::Dom::IXmlDocument> toast_xml;
|
| - hr = toast_manager->GetTemplateContent(
|
| - winui::Notifications::ToastTemplateType_ToastText02,
|
| - &toast_xml);
|
| - CheckHR(hr);
|
| -
|
| - if (!toast_xml)
|
| - return;
|
| -
|
| - mswr::ComPtr<winxml::Dom::IXmlElement> document_element;
|
| - hr = toast_xml->get_DocumentElement(&document_element);
|
| - CheckHR(hr);
|
| -
|
| - if (!document_element)
|
| - return;
|
| -
|
| - hr = CreateTextNode(toast_xml.Get(), 0, notification.title);
|
| - CheckHR(hr);
|
| -
|
| - hr = CreateTextNode(toast_xml.Get(), 1, notification.body);
|
| - CheckHR(hr);
|
| -
|
| - mswrw::HString duration_attribute_name;
|
| - duration_attribute_name.Attach(MakeHString(L"duration"));
|
| - mswrw::HString duration_attribute_value;
|
| - duration_attribute_value.Attach(MakeHString(L"long"));
|
| -
|
| - hr = document_element->SetAttribute(duration_attribute_name.Get(),
|
| - duration_attribute_value.Get());
|
| - CheckHR(hr);
|
| -
|
| - // TODO(ananta)
|
| - // We should set the image and launch params attribute in the notification
|
| - // XNL as described here: http://msdn.microsoft.com/en-us/library/hh465448
|
| - // To set the image we may have to extract the image and specify it in the
|
| - // following url form. ms-appx:///images/foo.png
|
| - // The launch params as described don't get passed back to us via the
|
| - // winapp::Activation::ILaunchActivatedEventArgs argument. Needs to be
|
| - // investigated.
|
| - mswr::ComPtr<winui::Notifications::IToastNotificationFactory>
|
| - toast_notification_factory;
|
| - hr = winrt_utils::CreateActivationFactory(
|
| - RuntimeClass_Windows_UI_Notifications_ToastNotification,
|
| - toast_notification_factory.GetAddressOf());
|
| - CheckHR(hr);
|
| -
|
| - hr = toast_notification_factory->CreateToastNotification(
|
| - toast_xml.Get(), ¬ification_);
|
| - CheckHR(hr);
|
| -
|
| - base::FilePath chrome_path;
|
| - if (!PathService::Get(base::FILE_EXE, &chrome_path)) {
|
| - NOTREACHED() << "Failed to get chrome exe path";
|
| - return;
|
| - }
|
| -
|
| - BrowserDistribution* dist = BrowserDistribution::GetDistribution();
|
| - bool is_per_user_install = InstallUtil::IsPerUserInstall(
|
| - chrome_path.value().c_str());
|
| - base::string16 appid =
|
| - ShellUtil::GetBrowserModelId(dist, is_per_user_install);
|
| - DVLOG(1) << "Chrome Appid is " << appid.c_str();
|
| -
|
| - mswrw::HString app_user_model_id;
|
| - app_user_model_id.Attach(MakeHString(appid));
|
| -
|
| - hr = toast_manager->CreateToastNotifierWithId(app_user_model_id.Get(),
|
| - ¬ifier_);
|
| - CheckHR(hr);
|
| -
|
| - hr = notification_->add_Activated(
|
| - mswr::Callback<ToastActivationHandler>(
|
| - this, &ToastNotificationHandler::OnActivate).Get(),
|
| - &activated_token_);
|
| - CheckHR(hr);
|
| -
|
| - hr = notifier_->Show(notification_.Get());
|
| - CheckHR(hr);
|
| -}
|
| -
|
| -void ToastNotificationHandler::CancelNotification() {
|
| - DVLOG(1) << __FUNCTION__;
|
| -
|
| - DCHECK(notifier_);
|
| - DCHECK(notification_);
|
| -
|
| - notifier_->Hide(notification_.Get());
|
| -}
|
| -
|
| -HRESULT ToastNotificationHandler::OnActivate(
|
| - winui::Notifications::IToastNotification* notification,
|
| - IInspectable* inspectable) {
|
| - // TODO(ananta)
|
| - // We should pass back information from the notification like the source url
|
| - // etc to ChromeAppView which would enable it to ensure that the
|
| - // correct tab in chrome is activated.
|
| - DVLOG(1) << __FUNCTION__;
|
| -
|
| - if (notification_info_.notification_handler) {
|
| - notification_info_.notification_handler(
|
| - notification_info_.notification_context.c_str());
|
| - }
|
| - return S_OK;
|
| -}
|
|
|