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 |