Index: content/browser/notifications/type_converters.cc |
diff --git a/content/browser/notifications/type_converters.cc b/content/browser/notifications/type_converters.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..823eaa16d6fa09fe584bead2a2f1a95c9920448d |
--- /dev/null |
+++ b/content/browser/notifications/type_converters.cc |
@@ -0,0 +1,139 @@ |
+// 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. |
+ |
+#include "content/browser/notifications/type_converters.h" |
+ |
+#include "base/strings/utf_string_conversions.h" |
+#include "base/time/time.h" |
+ |
+using blink::mojom::NotificationDirection; |
+using content::PlatformNotificationData; |
+ |
+namespace mojo { |
+ |
+PlatformNotificationData |
+TypeConverter<PlatformNotificationData, blink::mojom::NotificationPtr>::Convert( |
+ const blink::mojom::NotificationPtr& notification) { |
+ PlatformNotificationData notification_data; |
+ |
+ notification_data.title = base::UTF8ToUTF16(notification->title.get()); |
+ |
+ switch (notification->direction) { |
+ case NotificationDirection::LEFT_TO_RIGHT: |
+ notification_data.direction = |
+ PlatformNotificationData::DIRECTION_LEFT_TO_RIGHT; |
+ break; |
+ case NotificationDirection::RIGHT_TO_LEFT: |
+ notification_data.direction = |
+ PlatformNotificationData::DIRECTION_RIGHT_TO_LEFT; |
+ break; |
+ case NotificationDirection::AUTO: |
+ notification_data.direction = PlatformNotificationData::DIRECTION_AUTO; |
+ break; |
+ } |
+ |
+ notification_data.lang = notification->lang; |
+ notification_data.body = base::UTF8ToUTF16(notification->body.get()); |
+ notification_data.tag = notification->tag; |
+ notification_data.icon = GURL(notification->icon.get()); |
+ notification_data.badge = GURL(notification->badge.get()); |
+ |
+ for (uint32_t vibration : notification->vibration_pattern) |
+ notification_data.vibration_pattern.push_back(static_cast<int>(vibration)); |
+ |
+ notification_data.timestamp = base::Time::FromJsTime(notification->timestamp); |
+ notification_data.renotify = notification->renotify; |
+ notification_data.silent = notification->silent; |
+ notification_data.require_interaction = notification->require_interaction; |
+ notification_data.data.assign(notification->data.begin(), |
+ notification->data.end()); |
+ |
+ for (const auto& action : notification->actions) { |
+ content::PlatformNotificationAction data_action; |
+ |
+ switch (action->type) { |
+ case blink::mojom::NotificationActionType::BUTTON: |
+ data_action.type = content::PLATFORM_NOTIFICATION_ACTION_TYPE_BUTTON; |
+ break; |
+ case blink::mojom::NotificationActionType::TEXT: |
+ data_action.type = content::PLATFORM_NOTIFICATION_ACTION_TYPE_TEXT; |
+ break; |
+ } |
+ |
+ data_action.action = action->action; |
+ data_action.title = base::UTF8ToUTF16(action->title.get()); |
+ data_action.icon = GURL(action->icon.get()); |
+ if (!action->placeholder.is_null()) { |
+ data_action.placeholder = base::NullableString16( |
+ base::UTF8ToUTF16(action->placeholder.get()), false /* is_null */); |
+ } |
+ |
+ notification_data.actions.push_back(data_action); |
+ } |
+ |
+ return notification_data; |
+} |
+ |
+blink::mojom::NotificationPtr |
+TypeConverter<blink::mojom::NotificationPtr, PlatformNotificationData>::Convert( |
+ const PlatformNotificationData& notification_data) { |
+ blink::mojom::NotificationPtr notification = |
+ blink::mojom::Notification::New(); |
+ |
+ notification->title = base::UTF16ToUTF8(notification_data.title); |
+ |
+ switch (notification_data.direction) { |
+ case PlatformNotificationData::DIRECTION_LEFT_TO_RIGHT: |
+ notification->direction = NotificationDirection::LEFT_TO_RIGHT; |
+ break; |
+ case PlatformNotificationData::DIRECTION_RIGHT_TO_LEFT: |
+ notification->direction = NotificationDirection::RIGHT_TO_LEFT; |
+ break; |
+ case PlatformNotificationData::DIRECTION_AUTO: |
+ notification->direction = NotificationDirection::AUTO; |
+ break; |
+ } |
+ |
+ notification->lang = notification_data.lang; |
+ notification->body = base::UTF16ToUTF8(notification_data.body); |
+ notification->tag = notification_data.tag; |
+ notification->icon = notification_data.icon.spec(); |
+ notification->badge = notification_data.badge.spec(); |
+ |
+ for (int vibration : notification_data.vibration_pattern) |
+ notification->vibration_pattern.push_back(static_cast<uint32_t>(vibration)); |
+ |
+ notification->timestamp = notification_data.timestamp.ToJsTime(); |
+ notification->renotify = notification_data.renotify; |
+ notification->silent = notification_data.silent; |
+ notification->require_interaction = notification_data.require_interaction; |
+ notification->data = std::vector<int8_t>(notification_data.data.begin(), |
+ notification_data.data.end()); |
+ |
+ for (const auto& data_action : notification_data.actions) { |
+ blink::mojom::NotificationActionPtr action = |
+ blink::mojom::NotificationAction::New(); |
+ |
+ switch (data_action.type) { |
+ case content::PLATFORM_NOTIFICATION_ACTION_TYPE_BUTTON: |
+ action->type = blink::mojom::NotificationActionType::BUTTON; |
+ break; |
+ case content::PLATFORM_NOTIFICATION_ACTION_TYPE_TEXT: |
+ action->type = blink::mojom::NotificationActionType::TEXT; |
+ break; |
+ } |
+ |
+ action->action = data_action.action; |
+ action->title = base::UTF16ToUTF8(data_action.title); |
+ action->icon = data_action.icon.spec(); |
+ if (!data_action.placeholder.is_null()) |
+ action->placeholder = base::UTF16ToUTF8(data_action.placeholder.string()); |
+ |
+ notification->actions.push_back(std::move(action)); |
+ } |
+ |
+ return notification; |
+} |
+ |
+} // namespace mojo |