Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: third_party/WebKit/Source/modules/notifications/NotificationDataTest.cpp

Issue 1644573002: Notification actions may have an icon url. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 kNotificationIcon[] = "https://example.com/icon.png"; 26 const char kNotificationIcon[] = "https://example.com/icon.png";
27 const char kNotificationIconInvalid[] = "https://invalid:icon:url";
27 const unsigned kNotificationVibration[] = { 42, 10, 20, 30, 40 }; 28 const unsigned kNotificationVibration[] = { 42, 10, 20, 30, 40 };
28 const unsigned long long kNotificationTimestamp = 621046800ull; 29 const unsigned long long kNotificationTimestamp = 621046800ull;
29 const bool kNotificationSilent = false; 30 const bool kNotificationSilent = false;
30 const bool kNotificationRequireInteraction = true; 31 const bool kNotificationRequireInteraction = true;
31 32
32 const char kNotificationActionAction[] = "my_action"; 33 const char kNotificationActionAction[] = "my_action";
33 const char kNotificationActionTitle[] = "My Action"; 34 const char kNotificationActionTitle[] = "My Action";
35 const char kNotificationActionIcon[] = "https://example.com/action_icon.png";
34 36
35 const unsigned kNotificationVibrationUnnormalized[] = { 10, 1000000, 50, 42 }; 37 const unsigned kNotificationVibrationUnnormalized[] = { 10, 1000000, 50, 42 };
36 const int kNotificationVibrationNormalized[] = { 10, 10000, 50 }; 38 const int kNotificationVibrationNormalized[] = { 10, 10000, 50 };
37 39
38 class NotificationDataTest : public ::testing::Test { 40 class NotificationDataTest : public ::testing::Test {
39 public: 41 public:
40 void SetUp() override 42 void SetUp() override
41 { 43 {
42 m_executionContext = adoptRefWillBeNoop(new NullExecutionContext()); 44 m_executionContext = adoptRefWillBeNoop(new NullExecutionContext());
43 } 45 }
(...skipping 11 matching lines...) Expand all
55 vibrationPattern.append(kNotificationVibration[i]); 57 vibrationPattern.append(kNotificationVibration[i]);
56 58
57 UnsignedLongOrUnsignedLongSequence vibrationSequence; 59 UnsignedLongOrUnsignedLongSequence vibrationSequence;
58 vibrationSequence.setUnsignedLongSequence(vibrationPattern); 60 vibrationSequence.setUnsignedLongSequence(vibrationPattern);
59 61
60 HeapVector<NotificationAction> actions; 62 HeapVector<NotificationAction> actions;
61 for (size_t i = 0; i < Notification::maxActions(); ++i) { 63 for (size_t i = 0; i < Notification::maxActions(); ++i) {
62 NotificationAction action; 64 NotificationAction action;
63 action.setAction(kNotificationActionAction); 65 action.setAction(kNotificationActionAction);
64 action.setTitle(kNotificationActionTitle); 66 action.setTitle(kNotificationActionTitle);
67 action.setIcon(kNotificationActionIcon);
65 68
66 actions.append(action); 69 actions.append(action);
67 } 70 }
68 71
69 NotificationOptions options; 72 NotificationOptions options;
70 options.setDir(kNotificationDir); 73 options.setDir(kNotificationDir);
71 options.setLang(kNotificationLang); 74 options.setLang(kNotificationLang);
72 options.setBody(kNotificationBody); 75 options.setBody(kNotificationBody);
73 options.setTag(kNotificationTag); 76 options.setTag(kNotificationTag);
74 options.setIcon(kNotificationIcon); 77 options.setIcon(kNotificationIcon);
75 options.setVibrate(vibrationSequence); 78 options.setVibrate(vibrationSequence);
76 options.setTimestamp(kNotificationTimestamp); 79 options.setTimestamp(kNotificationTimestamp);
77 options.setSilent(kNotificationSilent); 80 options.setSilent(kNotificationSilent);
78 options.setRequireInteraction(kNotificationRequireInteraction); 81 options.setRequireInteraction(kNotificationRequireInteraction);
79 options.setActions(actions); 82 options.setActions(actions);
80 83
81 // TODO(peter): Test |options.data| and |notificationData.data|. 84 // TODO(peter): Test |options.data| and |notificationData.data|.
82 85
83 TrackExceptionState exceptionState; 86 TrackExceptionState exceptionState;
84 WebNotificationData notificationData = createWebNotificationData(executionCo ntext(), kNotificationTitle, options, exceptionState); 87 WebNotificationData notificationData = createWebNotificationData(executionCo ntext(), kNotificationTitle, options, exceptionState);
85 ASSERT_FALSE(exceptionState.hadException()); 88 ASSERT_FALSE(exceptionState.hadException());
86 89
87 EXPECT_EQ(kNotificationTitle, notificationData.title); 90 EXPECT_EQ(kNotificationTitle, notificationData.title);
88 91
89 EXPECT_EQ(WebNotificationData::DirectionRightToLeft, notificationData.direct ion); 92 EXPECT_EQ(WebNotificationData::DirectionRightToLeft, notificationData.direct ion);
90 EXPECT_EQ(kNotificationLang, notificationData.lang); 93 EXPECT_EQ(kNotificationLang, notificationData.lang);
91 EXPECT_EQ(kNotificationBody, notificationData.body); 94 EXPECT_EQ(kNotificationBody, notificationData.body);
92 EXPECT_EQ(kNotificationTag, notificationData.tag); 95 EXPECT_EQ(kNotificationTag, notificationData.tag);
93 96
94 // TODO(peter): Test notificationData.icon when ExecutionContext::completeUR L() works in this test. 97 // TODO(peter): Test WebNotificationData.icon and WebNotificationAction.icon when ExecutionContext::completeURL() works in this test.
95 98
96 ASSERT_EQ(vibrationPattern.size(), notificationData.vibrate.size()); 99 ASSERT_EQ(vibrationPattern.size(), notificationData.vibrate.size());
97 for (size_t i = 0; i < vibrationPattern.size(); ++i) 100 for (size_t i = 0; i < vibrationPattern.size(); ++i)
98 EXPECT_EQ(vibrationPattern[i], static_cast<unsigned>(notificationData.vi brate[i])); 101 EXPECT_EQ(vibrationPattern[i], static_cast<unsigned>(notificationData.vi brate[i]));
99 102
100 EXPECT_EQ(kNotificationTimestamp, notificationData.timestamp); 103 EXPECT_EQ(kNotificationTimestamp, notificationData.timestamp);
101 EXPECT_EQ(kNotificationSilent, notificationData.silent); 104 EXPECT_EQ(kNotificationSilent, notificationData.silent);
102 EXPECT_EQ(kNotificationRequireInteraction, notificationData.requireInteracti on); 105 EXPECT_EQ(kNotificationRequireInteraction, notificationData.requireInteracti on);
103 EXPECT_EQ(actions.size(), notificationData.actions.size()); 106 EXPECT_EQ(actions.size(), notificationData.actions.size());
107 for (const auto& action : notificationData.actions) {
108 EXPECT_EQ(kNotificationActionAction, action.action);
109 EXPECT_EQ(kNotificationActionTitle, action.title);
110 }
104 } 111 }
105 112
106 TEST_F(NotificationDataTest, SilentNotificationWithVibration) 113 TEST_F(NotificationDataTest, SilentNotificationWithVibration)
107 { 114 {
108 Vector<unsigned> vibrationPattern; 115 Vector<unsigned> vibrationPattern;
109 for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibration); ++i) 116 for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibration); ++i)
110 vibrationPattern.append(kNotificationVibration[i]); 117 vibrationPattern.append(kNotificationVibration[i]);
111 118
112 UnsignedLongOrUnsignedLongSequence vibrationSequence; 119 UnsignedLongOrUnsignedLongSequence vibrationSequence;
113 vibrationSequence.setUnsignedLongSequence(vibrationPattern); 120 vibrationSequence.setUnsignedLongSequence(vibrationPattern);
114 121
115 NotificationOptions options; 122 NotificationOptions options;
116 options.setVibrate(vibrationSequence); 123 options.setVibrate(vibrationSequence);
117 options.setSilent(true); 124 options.setSilent(true);
118 125
119 TrackExceptionState exceptionState; 126 TrackExceptionState exceptionState;
120 WebNotificationData notificationData = createWebNotificationData(executionCo ntext(), kNotificationTitle, options, exceptionState); 127 WebNotificationData notificationData = createWebNotificationData(executionCo ntext(), kNotificationTitle, options, exceptionState);
121 ASSERT_TRUE(exceptionState.hadException()); 128 ASSERT_TRUE(exceptionState.hadException());
122 129
123 EXPECT_EQ("Silent notifications must not specify vibration patterns.", excep tionState.message()); 130 EXPECT_EQ("Silent notifications must not specify vibration patterns.", excep tionState.message());
124 } 131 }
125 132
126 TEST_F(NotificationDataTest, InvalidIconUrl) 133 TEST_F(NotificationDataTest, InvalidIconUrls)
127 { 134 {
135 HeapVector<NotificationAction> actions;
136 for (size_t i = 0; i < Notification::maxActions(); ++i) {
137 NotificationAction action;
138 action.setAction(kNotificationActionAction);
139 action.setTitle(kNotificationActionTitle);
140 action.setIcon(kNotificationIconInvalid);
141 actions.append(action);
142 }
143
128 NotificationOptions options; 144 NotificationOptions options;
129 options.setIcon("https://invalid:icon:url"); 145 options.setIcon(kNotificationIconInvalid);
146 options.setActions(actions);
130 147
131 TrackExceptionState exceptionState; 148 TrackExceptionState exceptionState;
132 WebNotificationData notificationData = createWebNotificationData(executionCo ntext(), kNotificationTitle, options, exceptionState); 149 WebNotificationData notificationData = createWebNotificationData(executionCo ntext(), kNotificationTitle, options, exceptionState);
133 ASSERT_FALSE(exceptionState.hadException()); 150 ASSERT_FALSE(exceptionState.hadException());
134 151
135 EXPECT_TRUE(notificationData.icon.isEmpty()); 152 EXPECT_TRUE(notificationData.icon.isEmpty());
153 for (const auto& action : notificationData.actions)
154 EXPECT_TRUE(action.icon.isEmpty());
136 } 155 }
137 156
138 TEST_F(NotificationDataTest, VibrationNormalization) 157 TEST_F(NotificationDataTest, VibrationNormalization)
139 { 158 {
140 Vector<unsigned> unnormalizedPattern; 159 Vector<unsigned> unnormalizedPattern;
141 for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibrationUnnormalized); ++i) 160 for (size_t i = 0; i < WTF_ARRAY_LENGTH(kNotificationVibrationUnnormalized); ++i)
142 unnormalizedPattern.append(kNotificationVibrationUnnormalized[i]); 161 unnormalizedPattern.append(kNotificationVibrationUnnormalized[i]);
143 162
144 UnsignedLongOrUnsignedLongSequence vibrationSequence; 163 UnsignedLongOrUnsignedLongSequence vibrationSequence;
145 vibrationSequence.setUnsignedLongSequence(unnormalizedPattern); 164 vibrationSequence.setUnsignedLongSequence(unnormalizedPattern);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 ASSERT_EQ(Notification::maxActions(), notificationData.actions.size()); 236 ASSERT_EQ(Notification::maxActions(), notificationData.actions.size());
218 237
219 for (size_t i = 0; i < Notification::maxActions(); ++i) { 238 for (size_t i = 0; i < Notification::maxActions(); ++i) {
220 WebString expectedAction = String::number(i); 239 WebString expectedAction = String::number(i);
221 EXPECT_EQ(expectedAction, notificationData.actions[i].action); 240 EXPECT_EQ(expectedAction, notificationData.actions[i].action);
222 } 241 }
223 } 242 }
224 243
225 } // namespace 244 } // namespace
226 } // namespace blink 245 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698