| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "modules/notifications/NotificationData.h" | 5 #include "modules/notifications/NotificationData.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
| 8 #include "bindings/modules/v8/UnionTypesModules.h" | 8 #include "bindings/modules/v8/UnionTypesModules.h" |
| 9 #include "core/testing/NullExecutionContext.h" | 9 #include "core/testing/NullExecutionContext.h" |
| 10 #include "modules/notifications/Notification.h" | 10 #include "modules/notifications/Notification.h" |
| 11 #include "modules/notifications/NotificationOptions.h" | 11 #include "modules/notifications/NotificationOptions.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
| 13 #include "wtf/CurrentTime.h" | 13 #include "wtf/CurrentTime.h" |
| 14 #include "wtf/HashMap.h" | 14 #include "wtf/HashMap.h" |
| 15 #include "wtf/Vector.h" | 15 #include "wtf/Vector.h" |
| 16 | 16 |
| 17 namespace blink { | 17 namespace blink { |
| 18 namespace { | 18 namespace { |
| 19 | 19 |
| 20 const char kNotificationTitle[] = "My Notification"; | 20 const char kNotificationTitle[] = "My Notification"; |
| 21 | 21 |
| 22 const char kNotificationDir[] = "rtl"; | 22 const char kNotificationDir[] = "rtl"; |
| 23 const char kNotificationLang[] = "nl"; | 23 const char kNotificationLang[] = "nl"; |
| 24 const char kNotificationBody[] = "Hello, world"; | 24 const char kNotificationBody[] = "Hello, world"; |
| 25 const char kNotificationTag[] = "my_tag"; | 25 const char kNotificationTag[] = "my_tag"; |
| 26 const char kNotificationEmptyTag[] = ""; |
| 26 const char kNotificationIcon[] = "https://example.com/icon.png"; | 27 const char kNotificationIcon[] = "https://example.com/icon.png"; |
| 27 const char kNotificationIconInvalid[] = "https://invalid:icon:url"; | 28 const char kNotificationIconInvalid[] = "https://invalid:icon:url"; |
| 28 const unsigned kNotificationVibration[] = { 42, 10, 20, 30, 40 }; | 29 const unsigned kNotificationVibration[] = { 42, 10, 20, 30, 40 }; |
| 29 const unsigned long long kNotificationTimestamp = 621046800ull; | 30 const unsigned long long kNotificationTimestamp = 621046800ull; |
| 31 const bool kNotificationRenotify = true; |
| 30 const bool kNotificationSilent = false; | 32 const bool kNotificationSilent = false; |
| 31 const bool kNotificationRequireInteraction = true; | 33 const bool kNotificationRequireInteraction = true; |
| 32 | 34 |
| 33 const char kNotificationActionAction[] = "my_action"; | 35 const char kNotificationActionAction[] = "my_action"; |
| 34 const char kNotificationActionTitle[] = "My Action"; | 36 const char kNotificationActionTitle[] = "My Action"; |
| 35 const char kNotificationActionIcon[] = "https://example.com/action_icon.png"; | 37 const char kNotificationActionIcon[] = "https://example.com/action_icon.png"; |
| 36 | 38 |
| 37 const unsigned kNotificationVibrationUnnormalized[] = { 10, 1000000, 50, 42 }; | 39 const unsigned kNotificationVibrationUnnormalized[] = { 10, 1000000, 50, 42 }; |
| 38 const int kNotificationVibrationNormalized[] = { 10, 10000, 50 }; | 40 const int kNotificationVibrationNormalized[] = { 10, 10000, 50 }; |
| 39 | 41 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 70 } | 72 } |
| 71 | 73 |
| 72 NotificationOptions options; | 74 NotificationOptions options; |
| 73 options.setDir(kNotificationDir); | 75 options.setDir(kNotificationDir); |
| 74 options.setLang(kNotificationLang); | 76 options.setLang(kNotificationLang); |
| 75 options.setBody(kNotificationBody); | 77 options.setBody(kNotificationBody); |
| 76 options.setTag(kNotificationTag); | 78 options.setTag(kNotificationTag); |
| 77 options.setIcon(kNotificationIcon); | 79 options.setIcon(kNotificationIcon); |
| 78 options.setVibrate(vibrationSequence); | 80 options.setVibrate(vibrationSequence); |
| 79 options.setTimestamp(kNotificationTimestamp); | 81 options.setTimestamp(kNotificationTimestamp); |
| 82 options.setRenotify(kNotificationRenotify); |
| 80 options.setSilent(kNotificationSilent); | 83 options.setSilent(kNotificationSilent); |
| 81 options.setRequireInteraction(kNotificationRequireInteraction); | 84 options.setRequireInteraction(kNotificationRequireInteraction); |
| 82 options.setActions(actions); | 85 options.setActions(actions); |
| 83 | 86 |
| 84 // TODO(peter): Test |options.data| and |notificationData.data|. | 87 // TODO(peter): Test |options.data| and |notificationData.data|. |
| 85 | 88 |
| 86 TrackExceptionState exceptionState; | 89 TrackExceptionState exceptionState; |
| 87 WebNotificationData notificationData = createWebNotificationData(executionCo
ntext(), kNotificationTitle, options, exceptionState); | 90 WebNotificationData notificationData = createWebNotificationData(executionCo
ntext(), kNotificationTitle, options, exceptionState); |
| 88 ASSERT_FALSE(exceptionState.hadException()); | 91 ASSERT_FALSE(exceptionState.hadException()); |
| 89 | 92 |
| 90 EXPECT_EQ(kNotificationTitle, notificationData.title); | 93 EXPECT_EQ(kNotificationTitle, notificationData.title); |
| 91 | 94 |
| 92 EXPECT_EQ(WebNotificationData::DirectionRightToLeft, notificationData.direct
ion); | 95 EXPECT_EQ(WebNotificationData::DirectionRightToLeft, notificationData.direct
ion); |
| 93 EXPECT_EQ(kNotificationLang, notificationData.lang); | 96 EXPECT_EQ(kNotificationLang, notificationData.lang); |
| 94 EXPECT_EQ(kNotificationBody, notificationData.body); | 97 EXPECT_EQ(kNotificationBody, notificationData.body); |
| 95 EXPECT_EQ(kNotificationTag, notificationData.tag); | 98 EXPECT_EQ(kNotificationTag, notificationData.tag); |
| 96 | 99 |
| 97 // TODO(peter): Test WebNotificationData.icon and WebNotificationAction.icon
when ExecutionContext::completeURL() works in this test. | 100 // TODO(peter): Test WebNotificationData.icon and WebNotificationAction.icon
when ExecutionContext::completeURL() works in this test. |
| 98 | 101 |
| 99 ASSERT_EQ(vibrationPattern.size(), notificationData.vibrate.size()); | 102 ASSERT_EQ(vibrationPattern.size(), notificationData.vibrate.size()); |
| 100 for (size_t i = 0; i < vibrationPattern.size(); ++i) | 103 for (size_t i = 0; i < vibrationPattern.size(); ++i) |
| 101 EXPECT_EQ(vibrationPattern[i], static_cast<unsigned>(notificationData.vi
brate[i])); | 104 EXPECT_EQ(vibrationPattern[i], static_cast<unsigned>(notificationData.vi
brate[i])); |
| 102 | 105 |
| 103 EXPECT_EQ(kNotificationTimestamp, notificationData.timestamp); | 106 EXPECT_EQ(kNotificationTimestamp, notificationData.timestamp); |
| 107 EXPECT_EQ(kNotificationRenotify, notificationData.renotify); |
| 104 EXPECT_EQ(kNotificationSilent, notificationData.silent); | 108 EXPECT_EQ(kNotificationSilent, notificationData.silent); |
| 105 EXPECT_EQ(kNotificationRequireInteraction, notificationData.requireInteracti
on); | 109 EXPECT_EQ(kNotificationRequireInteraction, notificationData.requireInteracti
on); |
| 106 EXPECT_EQ(actions.size(), notificationData.actions.size()); | 110 EXPECT_EQ(actions.size(), notificationData.actions.size()); |
| 107 for (const auto& action : notificationData.actions) { | 111 for (const auto& action : notificationData.actions) { |
| 108 EXPECT_EQ(kNotificationActionAction, action.action); | 112 EXPECT_EQ(kNotificationActionAction, action.action); |
| 109 EXPECT_EQ(kNotificationActionTitle, action.title); | 113 EXPECT_EQ(kNotificationActionTitle, action.title); |
| 110 } | 114 } |
| 111 } | 115 } |
| 112 | 116 |
| 113 TEST_F(NotificationDataTest, SilentNotificationWithVibration) | 117 TEST_F(NotificationDataTest, SilentNotificationWithVibration) |
| 114 { | 118 { |
| 115 Vector<unsigned> vibrationPattern; | 119 Vector<unsigned> vibrationPattern; |
| 116 for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibration); ++i) | 120 for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibration); ++i) |
| 117 vibrationPattern.append(kNotificationVibration[i]); | 121 vibrationPattern.append(kNotificationVibration[i]); |
| 118 | 122 |
| 119 UnsignedLongOrUnsignedLongSequence vibrationSequence; | 123 UnsignedLongOrUnsignedLongSequence vibrationSequence; |
| 120 vibrationSequence.setUnsignedLongSequence(vibrationPattern); | 124 vibrationSequence.setUnsignedLongSequence(vibrationPattern); |
| 121 | 125 |
| 122 NotificationOptions options; | 126 NotificationOptions options; |
| 123 options.setVibrate(vibrationSequence); | 127 options.setVibrate(vibrationSequence); |
| 124 options.setSilent(true); | 128 options.setSilent(true); |
| 125 | 129 |
| 126 TrackExceptionState exceptionState; | 130 TrackExceptionState exceptionState; |
| 127 WebNotificationData notificationData = createWebNotificationData(executionCo
ntext(), kNotificationTitle, options, exceptionState); | 131 WebNotificationData notificationData = createWebNotificationData(executionCo
ntext(), kNotificationTitle, options, exceptionState); |
| 128 ASSERT_TRUE(exceptionState.hadException()); | 132 ASSERT_TRUE(exceptionState.hadException()); |
| 129 | 133 |
| 130 EXPECT_EQ("Silent notifications must not specify vibration patterns.", excep
tionState.message()); | 134 EXPECT_EQ("Silent notifications must not specify vibration patterns.", excep
tionState.message()); |
| 131 } | 135 } |
| 132 | 136 |
| 137 TEST_F(NotificationDataTest, RenotifyWithEmptyTag) |
| 138 { |
| 139 NotificationOptions options; |
| 140 options.setTag(kNotificationEmptyTag); |
| 141 options.setRenotify(true); |
| 142 |
| 143 TrackExceptionState exceptionState; |
| 144 WebNotificationData notificationData = createWebNotificationData(executionCo
ntext(), kNotificationTitle, options, exceptionState); |
| 145 ASSERT_TRUE(exceptionState.hadException()); |
| 146 |
| 147 EXPECT_EQ("Notifications which set the renotify flag must specify a non-empt
y tag.", exceptionState.message()); |
| 148 } |
| 149 |
| 133 TEST_F(NotificationDataTest, InvalidIconUrls) | 150 TEST_F(NotificationDataTest, InvalidIconUrls) |
| 134 { | 151 { |
| 135 HeapVector<NotificationAction> actions; | 152 HeapVector<NotificationAction> actions; |
| 136 for (size_t i = 0; i < Notification::maxActions(); ++i) { | 153 for (size_t i = 0; i < Notification::maxActions(); ++i) { |
| 137 NotificationAction action; | 154 NotificationAction action; |
| 138 action.setAction(kNotificationActionAction); | 155 action.setAction(kNotificationActionAction); |
| 139 action.setTitle(kNotificationActionTitle); | 156 action.setTitle(kNotificationActionTitle); |
| 140 action.setIcon(kNotificationIconInvalid); | 157 action.setIcon(kNotificationIconInvalid); |
| 141 actions.append(action); | 158 actions.append(action); |
| 142 } | 159 } |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 ASSERT_EQ(Notification::maxActions(), notificationData.actions.size()); | 253 ASSERT_EQ(Notification::maxActions(), notificationData.actions.size()); |
| 237 | 254 |
| 238 for (size_t i = 0; i < Notification::maxActions(); ++i) { | 255 for (size_t i = 0; i < Notification::maxActions(); ++i) { |
| 239 WebString expectedAction = String::number(i); | 256 WebString expectedAction = String::number(i); |
| 240 EXPECT_EQ(expectedAction, notificationData.actions[i].action); | 257 EXPECT_EQ(expectedAction, notificationData.actions[i].action); |
| 241 } | 258 } |
| 242 } | 259 } |
| 243 | 260 |
| 244 } // namespace | 261 } // namespace |
| 245 } // namespace blink | 262 } // namespace blink |
| OLD | NEW |