Chromium Code Reviews| 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..a767616c35c51020c64b0d369588903c75bea2b5 100644 |
| --- a/content/browser/notifications/notification_message_filter.cc |
| +++ b/content/browser/notifications/notification_message_filter.cc |
| @@ -19,6 +19,36 @@ |
| namespace content { |
| +namespace { |
| + |
| +const int kMinimumVibrationDurationMs = 1; // 1 millisecond |
| +const int kMaximumVibrationDurationMs = 10000; // 10 seconds |
| + |
| +PlatformNotificationData SanitizeNotificationData( |
| + const PlatformNotificationData& notification_data) { |
| + PlatformNotificationData sanitized_data; |
|
dcheng
2015/05/08 20:22:27
My point was that you could make use of the copy c
Sanghyun Park
2015/05/09 15:07:12
Oops. Sorry, I misunderstand.
Thank for your deta
|
| + |
| + sanitized_data.title = notification_data.title; |
| + sanitized_data.direction = notification_data.direction; |
| + sanitized_data.lang = notification_data.lang; |
| + sanitized_data.body = notification_data.body; |
| + sanitized_data.tag = notification_data.tag; |
| + sanitized_data.icon = notification_data.icon; |
| + sanitized_data.vibration_pattern = notification_data.vibration_pattern; |
| + sanitized_data.silent = notification_data.silent; |
| + sanitized_data.data = notification_data.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 +131,7 @@ void NotificationMessageFilter::OnShowPlatformNotification( |
| service->DisplayNotification(browser_context_, |
| origin, |
| icon, |
| - notification_data, |
| + SanitizeNotificationData(notification_data), |
| delegate.Pass(), |
| &close_closure); |
| @@ -125,7 +155,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 +170,7 @@ void NotificationMessageFilter::OnShowPersistentNotification( |
| request_id, |
| origin, |
| icon, |
| - notification_data)); |
| + sanitized_notification_data)); |
| } |
| void NotificationMessageFilter::DidWritePersistentNotificationData( |