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

Side by Side Diff: Source/modules/notifications/Notification.cpp

Issue 1042513002: Add the vibrate attribute to the Notification object (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 8 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 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 exceptionState.throwTypeError("Illegal constructor. Use ServiceWorkerReg istration.showNotification() instead."); 72 exceptionState.throwTypeError("Illegal constructor. Use ServiceWorkerReg istration.showNotification() instead.");
73 return nullptr; 73 return nullptr;
74 } 74 }
75 75
76 // The Web Notification constructor may not be used in Service Worker contex ts. 76 // The Web Notification constructor may not be used in Service Worker contex ts.
77 if (context->isServiceWorkerGlobalScope()) { 77 if (context->isServiceWorkerGlobalScope()) {
78 exceptionState.throwTypeError("Illegal constructor."); 78 exceptionState.throwTypeError("Illegal constructor.");
79 return nullptr; 79 return nullptr;
80 } 80 }
81 81
82 // If options's silent is true, and options's vibrate is present, throw a Ty peError exception.
83 if (options.hasVibrate() && options.silent()) {
84 exceptionState.throwTypeError("Silent notifications must not specify vib ration patterns.");
85 return nullptr;
86 }
87
82 RefPtr<SerializedScriptValue> data; 88 RefPtr<SerializedScriptValue> data;
83 if (options.hasData()) { 89 if (options.hasData()) {
84 data = SerializedScriptValueFactory::instance().create(options.data(), n ullptr, exceptionState, options.data().isolate()); 90 data = SerializedScriptValueFactory::instance().create(options.data(), n ullptr, exceptionState, options.data().isolate());
85 if (exceptionState.hadException()) 91 if (exceptionState.hadException())
86 return nullptr; 92 return nullptr;
87 } 93 }
88 94
89 Notification* notification = new Notification(title, context); 95 Notification* notification = new Notification(title, context);
90 96
91 notification->setBody(options.body()); 97 notification->setBody(options.body());
92 notification->setTag(options.tag()); 98 notification->setTag(options.tag());
93 notification->setLang(options.lang()); 99 notification->setLang(options.lang());
94 notification->setDir(options.dir()); 100 notification->setDir(options.dir());
101 notification->setVibrate(NavigatorVibration::sanitizeVibrationPattern(option s.vibrate()));
95 notification->setSilent(options.silent()); 102 notification->setSilent(options.silent());
96 notification->setSerializedData(data.release()); 103 notification->setSerializedData(data.release());
97 if (options.hasIcon()) { 104 if (options.hasIcon()) {
98 KURL iconUrl = options.icon().isEmpty() ? KURL() : context->completeURL( options.icon()); 105 KURL iconUrl = options.icon().isEmpty() ? KURL() : context->completeURL( options.icon());
99 if (!iconUrl.isEmpty() && iconUrl.isValid()) 106 if (!iconUrl.isEmpty() && iconUrl.isValid())
100 notification->setIconUrl(iconUrl); 107 notification->setIconUrl(iconUrl);
101 } 108 }
102 109
103 String insecureOriginMessage; 110 String insecureOriginMessage;
104 UseCounter::Feature feature = context->isPrivilegedContext(insecureOriginMes sage) 111 UseCounter::Feature feature = context->isPrivilegedContext(insecureOriginMes sage)
(...skipping 13 matching lines...) Expand all
118 notification->setPersistentId(persistentId); 125 notification->setPersistentId(persistentId);
119 notification->setDir(data.direction == WebNotificationData::DirectionLeftToR ight ? "ltr" : "rtl"); 126 notification->setDir(data.direction == WebNotificationData::DirectionLeftToR ight ? "ltr" : "rtl");
120 notification->setLang(data.lang); 127 notification->setLang(data.lang);
121 notification->setBody(data.body); 128 notification->setBody(data.body);
122 notification->setTag(data.tag); 129 notification->setTag(data.tag);
123 notification->setSilent(data.silent); 130 notification->setSilent(data.silent);
124 131
125 if (!data.icon.isEmpty()) 132 if (!data.icon.isEmpty())
126 notification->setIconUrl(data.icon); 133 notification->setIconUrl(data.icon);
127 134
135 if (!data.vibrate.isEmpty()) {
136 NavigatorVibration::VibrationPattern pattern;
137 pattern.appendRange(data.vibrate.begin(), data.vibrate.end());
138 notification->setVibrate(pattern);
139 }
140
128 const WebVector<char>& dataBytes = data.data; 141 const WebVector<char>& dataBytes = data.data;
129 if (!dataBytes.isEmpty()) { 142 if (!dataBytes.isEmpty()) {
130 notification->setSerializedData(SerializedScriptValueFactory::instance() .createFromWireBytes(dataBytes.data(), dataBytes.size())); 143 notification->setSerializedData(SerializedScriptValueFactory::instance() .createFromWireBytes(dataBytes.data(), dataBytes.size()));
131 notification->serializedData()->registerMemoryAllocatedWithCurrentScript Context(); 144 notification->serializedData()->registerMemoryAllocatedWithCurrentScript Context();
132 } 145 }
133 146
134 notification->setState(NotificationStateShowing); 147 notification->setState(NotificationStateShowing);
135 notification->suspendIfNeeded(); 148 notification->suspendIfNeeded();
136 return notification; 149 return notification;
137 } 150 }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 SecurityOrigin* origin = executionContext()->securityOrigin(); 209 SecurityOrigin* origin = executionContext()->securityOrigin();
197 ASSERT(origin); 210 ASSERT(origin);
198 211
199 // FIXME: Do CSP checks on the associated notification icon. 212 // FIXME: Do CSP checks on the associated notification icon.
200 WebNotificationData::Direction dir = m_dir == "rtl" ? WebNotificationData::D irectionRightToLeft : WebNotificationData::DirectionLeftToRight; 213 WebNotificationData::Direction dir = m_dir == "rtl" ? WebNotificationData::D irectionRightToLeft : WebNotificationData::DirectionLeftToRight;
201 214
202 // The lifetime and availability of non-persistent notifications is tied to the page 215 // The lifetime and availability of non-persistent notifications is tied to the page
203 // they were created by, and thus the data doesn't have to be known to the e mbedder. 216 // they were created by, and thus the data doesn't have to be known to the e mbedder.
204 Vector<char> emptyDataWireBytes; 217 Vector<char> emptyDataWireBytes;
205 218
206 WebNotificationData notificationData(m_title, dir, m_lang, m_body, m_tag, m_ iconUrl, m_silent, emptyDataWireBytes); 219 WebNotificationData notificationData(m_title, dir, m_lang, m_body, m_tag, m_ iconUrl, m_vibrate, m_silent, emptyDataWireBytes);
207 notificationManager()->show(WebSerializedOrigin(*origin), notificationData, this); 220 notificationManager()->show(WebSerializedOrigin(*origin), notificationData, this);
208 221
209 m_state = NotificationStateShowing; 222 m_state = NotificationStateShowing;
210 } 223 }
211 224
212 void Notification::close() 225 void Notification::close()
213 { 226 {
214 if (m_state != NotificationStateShowing) 227 if (m_state != NotificationStateShowing)
215 return; 228 return;
216 229
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 { 267 {
255 // The notification will be showing when the user initiated the close, or it will be 268 // The notification will be showing when the user initiated the close, or it will be
256 // closing if the developer initiated the close. 269 // closing if the developer initiated the close.
257 if (m_state != NotificationStateShowing && m_state != NotificationStateClosi ng) 270 if (m_state != NotificationStateShowing && m_state != NotificationStateClosi ng)
258 return; 271 return;
259 272
260 m_state = NotificationStateClosed; 273 m_state = NotificationStateClosed;
261 dispatchEvent(Event::create(EventTypeNames::close)); 274 dispatchEvent(Event::create(EventTypeNames::close));
262 } 275 }
263 276
277 NavigatorVibration::VibrationPattern Notification::vibrate(bool& isNull) const
278 {
279 isNull = m_vibrate.isEmpty();
280 return m_vibrate;
281 }
282
264 TextDirection Notification::direction() const 283 TextDirection Notification::direction() const
265 { 284 {
266 // FIXME: Resolve dir()=="auto" against the document. 285 // FIXME: Resolve dir()=="auto" against the document.
267 return dir() == "rtl" ? RTL : LTR; 286 return dir() == "rtl" ? RTL : LTR;
268 } 287 }
269 288
270 String Notification::permissionString(WebNotificationPermission permission) 289 String Notification::permissionString(WebNotificationPermission permission)
271 { 290 {
272 switch (permission) { 291 switch (permission) {
273 case WebNotificationPermissionAllowed: 292 case WebNotificationPermissionAllowed:
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 return ScriptValue(scriptState, m_serializedData->deserialize(scriptState->i solate())); 355 return ScriptValue(scriptState, m_serializedData->deserialize(scriptState->i solate()));
337 } 356 }
338 357
339 DEFINE_TRACE(Notification) 358 DEFINE_TRACE(Notification)
340 { 359 {
341 RefCountedGarbageCollectedEventTargetWithInlineData<Notification>::trace(vis itor); 360 RefCountedGarbageCollectedEventTargetWithInlineData<Notification>::trace(vis itor);
342 ActiveDOMObject::trace(visitor); 361 ActiveDOMObject::trace(visitor);
343 } 362 }
344 363
345 } // namespace blink 364 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/notifications/Notification.h ('k') | Source/modules/notifications/Notification.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698