Chromium Code Reviews| Index: Source/modules/notifications/Notification.cpp |
| diff --git a/Source/modules/notifications/Notification.cpp b/Source/modules/notifications/Notification.cpp |
| index 4822a20c94ea8521ccb12068a90dbcb1ff8198d6..d89e89c656e1bd555e6936aa62458892aa73c702 100644 |
| --- a/Source/modules/notifications/Notification.cpp |
| +++ b/Source/modules/notifications/Notification.cpp |
| @@ -36,6 +36,7 @@ |
| #include "bindings/core/v8/ScriptValue.h" |
| #include "bindings/core/v8/ScriptWrappable.h" |
| #include "bindings/core/v8/SerializedScriptValueFactory.h" |
| +#include "bindings/modules/v8/UnionTypesModules.h" |
|
timvolodine
2015/04/13 11:55:18
is this still needed?
Sanghyun Park
2015/04/13 13:35:08
Oops, This is my fault.
I'll remove..
|
| #include "core/dom/Document.h" |
| #include "core/dom/ExecutionContext.h" |
| #include "core/dom/ExecutionContextTask.h" |
| @@ -77,6 +78,12 @@ Notification* Notification::create(ExecutionContext* context, const String& titl |
| return nullptr; |
| } |
| + // If options's silent is true, and options's vibrate is present, throw a TypeError exception. |
| + if (options.hasVibrate() && options.silent()) { |
| + exceptionState.throwTypeError("Slient notification must not specify vibration patterns."); |
| + return nullptr; |
| + } |
| + |
| RefPtr<SerializedScriptValue> data; |
| if (options.hasData()) { |
| data = SerializedScriptValueFactory::instance().create(options.data(), nullptr, exceptionState, options.data().isolate()); |
| @@ -90,6 +97,7 @@ Notification* Notification::create(ExecutionContext* context, const String& titl |
| notification->setTag(options.tag()); |
| notification->setLang(options.lang()); |
| notification->setDir(options.dir()); |
| + notification->setVibrate(NavigatorVibration::sanitizeVibrationPattern(options.vibrate())); |
| notification->setSilent(options.silent()); |
| notification->setSerializedData(data.release()); |
| if (options.hasIcon()) { |
| @@ -122,6 +130,12 @@ Notification* Notification::create(ExecutionContext* context, const String& pers |
| if (!data.icon.isEmpty()) |
| notification->setIconUrl(data.icon); |
| + if (!data.vibrate.isEmpty()) { |
| + NavigatorVibration::VibrationPattern pattern; |
| + pattern.appendRange(data.vibrate.begin(), data.vibrate.end()); |
| + notification->setVibrate(pattern); |
| + } |
| + |
| const WebVector<char>& dataBytes = data.data; |
| if (!dataBytes.isEmpty()) { |
| notification->setSerializedData(SerializedScriptValueFactory::instance().createFromWireBytes(dataBytes.data(), dataBytes.size())); |
| @@ -174,7 +188,7 @@ void Notification::show() |
| // they were created by, and thus the data doesn't have to be known to the embedder. |
| Vector<char> emptyDataWireBytes; |
| - WebNotificationData notificationData(m_title, dir, m_lang, m_body, m_tag, m_iconUrl, m_silent, emptyDataWireBytes); |
| + WebNotificationData notificationData(m_title, dir, m_lang, m_body, m_tag, m_iconUrl, m_vibrate, m_silent, emptyDataWireBytes); |
| notificationManager()->show(WebSerializedOrigin(*origin), notificationData, this); |
| m_state = NotificationStateShowing; |
| @@ -229,6 +243,12 @@ void Notification::dispatchCloseEvent() |
| dispatchEvent(Event::create(EventTypeNames::close)); |
| } |
| +NavigatorVibration::VibrationPattern Notification::vibrate(bool& isNull) const |
| +{ |
| + isNull = m_vibrate.isEmpty(); |
| + return m_vibrate; |
| +} |
| + |
| TextDirection Notification::direction() const |
| { |
| // FIXME: Resolve dir()=="auto" against the document. |