| Index: chrome/browser/notifications/notification_platform_bridge_linux.cc
|
| diff --git a/chrome/browser/notifications/notification_platform_bridge_linux.cc b/chrome/browser/notifications/notification_platform_bridge_linux.cc
|
| index e813db39afc646517996587f4b02653110940900..dfd306ce06c18476918e433156a6a8a0a5fc4d6f 100644
|
| --- a/chrome/browser/notifications/notification_platform_bridge_linux.cc
|
| +++ b/chrome/browser/notifications/notification_platform_bridge_linux.cc
|
| @@ -407,30 +407,42 @@ class NotificationPlatformBridgeLinuxImpl
|
|
|
| writer.AppendString(base::UTF16ToUTF8(notification->title()));
|
|
|
| - writer.AppendString(base::UTF16ToUTF8(notification->message()));
|
| + std::string body;
|
| + if (base::ContainsKey(capabilities_, "body")) {
|
| + body = base::UTF16ToUTF8(notification->message());
|
| + if (base::ContainsKey(capabilities_, "body-markup")) {
|
| + base::ReplaceSubstringsAfterOffset(&body, 0, "&", "&");
|
| + base::ReplaceSubstringsAfterOffset(&body, 0, "<", "<");
|
| + base::ReplaceSubstringsAfterOffset(&body, 0, ">", ">");
|
| + }
|
| + }
|
| + writer.AppendString(body);
|
|
|
| // Even-indexed elements in this vector are action IDs passed back to
|
| // us in OnActionInvoked(). Odd-indexed ones contain the button text.
|
| std::vector<std::string> actions;
|
| - data->action_start = data->action_end;
|
| - for (const auto& button_info : notification->buttons()) {
|
| - // FDO notification buttons can contain either an icon or a label,
|
| - // but not both, and the type of all buttons must be the same (all
|
| - // labels or all icons), so always use labels.
|
| - const std::string id = base::SizeTToString(data->action_end++);
|
| - const std::string label = base::UTF16ToUTF8(button_info.title);
|
| - actions.push_back(id);
|
| - actions.push_back(label);
|
| + if (base::ContainsKey(capabilities_, "actions")) {
|
| + data->action_start = data->action_end;
|
| + for (const auto& button_info : notification->buttons()) {
|
| + // FDO notification buttons can contain either an icon or a label,
|
| + // but not both, and the type of all buttons must be the same (all
|
| + // labels or all icons), so always use labels.
|
| + const std::string id = base::SizeTToString(data->action_end++);
|
| + const std::string label = base::UTF16ToUTF8(button_info.title);
|
| + actions.push_back(id);
|
| + actions.push_back(label);
|
| + }
|
| + if (notification->clickable()) {
|
| + // Special case: the pair ("default", "") will not add a button,
|
| + // but instead makes the entire notification clickable.
|
| + actions.push_back(kDefaultButtonId);
|
| + actions.push_back("");
|
| + }
|
| + // Always add a settings button.
|
| + actions.push_back(kSettingsButtonId);
|
| + // TODO(thomasanderson): Localize this string.
|
| + actions.push_back("Settings");
|
| }
|
| - if (notification->clickable()) {
|
| - // Special case: the pair ("default", "") will not add a button,
|
| - // but instead makes the entire notification clickable.
|
| - actions.push_back(kDefaultButtonId);
|
| - actions.push_back("");
|
| - }
|
| - // Always add a settings button.
|
| - actions.push_back(kSettingsButtonId);
|
| - actions.push_back("Settings");
|
| writer.AppendArrayOfStrings(actions);
|
|
|
| dbus::MessageWriter hints_writer(nullptr);
|
| @@ -645,26 +657,26 @@ class NotificationPlatformBridgeLinuxImpl
|
| // Histogram macros must be called with the same name for each
|
| // callsite, so we can't roll the below into a nice loop.
|
| UMA_HISTOGRAM_BOOLEAN("Notifications.Freedesktop.Capabilities.ActionIcons",
|
| - capabilities_.count("action-icons"));
|
| + base::ContainsKey(capabilities_, "action-icons"));
|
| UMA_HISTOGRAM_BOOLEAN("Notifications.Freedesktop.Capabilities.Actions",
|
| - capabilities_.count("actions"));
|
| + base::ContainsKey(capabilities_, "actions"));
|
| UMA_HISTOGRAM_BOOLEAN("Notifications.Freedesktop.Capabilities.Body",
|
| - capabilities_.count("body"));
|
| + base::ContainsKey(capabilities_, "body"));
|
| UMA_HISTOGRAM_BOOLEAN(
|
| "Notifications.Freedesktop.Capabilities.BodyHyperlinks",
|
| - capabilities_.count("body-hyperlinks"));
|
| + base::ContainsKey(capabilities_, "body-hyperlinks"));
|
| UMA_HISTOGRAM_BOOLEAN("Notifications.Freedesktop.Capabilities.BodyImages",
|
| - capabilities_.count("body-images"));
|
| + base::ContainsKey(capabilities_, "body-images"));
|
| UMA_HISTOGRAM_BOOLEAN("Notifications.Freedesktop.Capabilities.BodyMarkup",
|
| - capabilities_.count("body-markup"));
|
| + base::ContainsKey(capabilities_, "body-markup"));
|
| UMA_HISTOGRAM_BOOLEAN("Notifications.Freedesktop.Capabilities.IconMulti",
|
| - capabilities_.count("icon-multi"));
|
| + base::ContainsKey(capabilities_, "icon-multi"));
|
| UMA_HISTOGRAM_BOOLEAN("Notifications.Freedesktop.Capabilities.IconStatic",
|
| - capabilities_.count("icon-static"));
|
| + base::ContainsKey(capabilities_, "icon-static"));
|
| UMA_HISTOGRAM_BOOLEAN("Notifications.Freedesktop.Capabilities.Persistence",
|
| - capabilities_.count("persistence"));
|
| + base::ContainsKey(capabilities_, "persistence"));
|
| UMA_HISTOGRAM_BOOLEAN("Notifications.Freedesktop.Capabilities.Sound",
|
| - capabilities_.count("sound"));
|
| + base::ContainsKey(capabilities_, "sound"));
|
| }
|
|
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|