OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 // Custom binding for the GCM API. | 5 // Custom binding for the GCM API. |
6 | 6 |
7 var binding = require('binding').Binding.create('gcm'); | 7 var binding = require('binding').Binding.create('gcm'); |
8 var forEach = require('utils').forEach; | 8 var forEach = require('utils').forEach; |
9 | 9 |
10 binding.registerCustomHook(function(bindingsAPI) { | 10 binding.registerCustomHook(function(bindingsAPI) { |
11 var apiFunctions = bindingsAPI.apiFunctions; | 11 var apiFunctions = bindingsAPI.apiFunctions; |
12 var gcm = bindingsAPI.compiledApi; | 12 var gcm = bindingsAPI.compiledApi; |
13 | 13 |
14 apiFunctions.setUpdateArgumentsPostValidate( | 14 apiFunctions.setUpdateArgumentsPostValidate( |
15 'send', function(message, callback) { | 15 'send', function(message, callback) { |
16 // Validate message.data. | 16 // Validate message.data. |
17 var payloadSize = 0; | 17 var payloadSize = 0; |
18 forEach(message.data, function(property, value) { | 18 forEach(message.data, function(property, value) { |
19 if (property.length == 0) | 19 if (property.length == 0) |
20 throw new Error("One of data keys is empty."); | 20 throw new Error("One of data keys is empty."); |
21 | 21 |
| 22 var lowerCasedProperty = property.toLowerCase(); |
22 // Issue an error for forbidden prefixes of property names. | 23 // Issue an error for forbidden prefixes of property names. |
23 if (property.indexOf("goog.") == 0 || | 24 if (lowerCasedProperty.indexOf("goog.") == 0 || |
24 property.indexOf("google") == 0) { | 25 lowerCasedProperty.indexOf("google") == 0 || |
| 26 property.indexOf("collapse_key") == 0) { |
25 throw new Error("Invalid data key: " + property); | 27 throw new Error("Invalid data key: " + property); |
26 } | 28 } |
27 | 29 |
28 payloadSize += property.length + value.length; | 30 payloadSize += property.length + value.length; |
29 }); | 31 }); |
30 | 32 |
31 if (payloadSize > gcm.MAX_MESSAGE_SIZE) | 33 if (payloadSize > gcm.MAX_MESSAGE_SIZE) |
32 throw new Error("Payload exceeded allowed size limit. Payload size is: " | 34 throw new Error("Payload exceeded allowed size limit. Payload size is: " |
33 + payloadSize); | 35 + payloadSize); |
34 | 36 |
35 if (payloadSize == 0) | 37 if (payloadSize == 0) |
36 throw new Error("No data to send."); | 38 throw new Error("No data to send."); |
37 | 39 |
38 return arguments; | 40 return arguments; |
39 }); | 41 }); |
40 }); | 42 }); |
41 | 43 |
42 exports.binding = binding.generate(); | 44 exports.binding = binding.generate(); |
OLD | NEW |