Index: content/browser/notifications/notification_message_filter.cc |
diff --git a/content/browser/notifications/notification_message_filter.cc b/content/browser/notifications/notification_message_filter.cc |
index 622fd1e66a22f0950957732a95542ddbc02aa0a3..9b9d38139e7bd3937a5ad3d94476ce3a223cdaa6 100644 |
--- a/content/browser/notifications/notification_message_filter.cc |
+++ b/content/browser/notifications/notification_message_filter.cc |
@@ -19,6 +19,26 @@ |
namespace content { |
+namespace { |
+ |
+const int kMinimumVibrationDurationMs = 1; // 1 millisecond |
+const int kMaximumVibrationDurationMs = 10000; // 10 seconds |
+ |
+PlatformNotificationData SanitizeNotificationData( |
+ const PlatformNotificationData& notification_data) { |
+ PlatformNotificationData sanitized_data = notification_data; |
+ |
+ // Make sure that the vibration values are within reasonable bounds. |
+ for (int& pattern : sanitized_data.vibration_pattern) { |
+ pattern = std::min(kMaximumVibrationDurationMs, |
+ std::max(kMinimumVibrationDurationMs, pattern)); |
+ } |
+ |
+ return sanitized_data; |
+} |
+ |
+} // namespace |
+ |
NotificationMessageFilter::NotificationMessageFilter( |
int process_id, |
PlatformNotificationContextImpl* notification_context, |
@@ -101,7 +121,7 @@ void NotificationMessageFilter::OnShowPlatformNotification( |
service->DisplayNotification(browser_context_, |
origin, |
icon, |
- notification_data, |
+ SanitizeNotificationData(notification_data), |
delegate.Pass(), |
&close_closure); |
@@ -125,7 +145,10 @@ void NotificationMessageFilter::OnShowPersistentNotification( |
NotificationDatabaseData database_data; |
database_data.origin = origin; |
database_data.service_worker_registration_id = service_worker_registration_id; |
- database_data.notification_data = notification_data; |
+ |
+ PlatformNotificationData sanitized_notification_data = |
+ SanitizeNotificationData(notification_data); |
+ database_data.notification_data = sanitized_notification_data; |
// TODO(peter): Significantly reduce the amount of information we need to |
// retain outside of the database for displaying notifications. |
@@ -137,7 +160,7 @@ void NotificationMessageFilter::OnShowPersistentNotification( |
request_id, |
origin, |
icon, |
- notification_data)); |
+ sanitized_notification_data)); |
} |
void NotificationMessageFilter::DidWritePersistentNotificationData( |