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

Side by Side Diff: Source/modules/crypto/NormalizeAlgorithm.cpp

Issue 373423002: Split Dictionary's get and convert into DictionaryHelper. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fixed LICENSE and windows build Created 6 years, 5 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 | Annotate | Revision Log
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 14 matching lines...) Expand all
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "config.h" 31 #include "config.h"
32 #include "modules/crypto/NormalizeAlgorithm.h" 32 #include "modules/crypto/NormalizeAlgorithm.h"
33 33
34 #include "bindings/core/v8/Dictionary.h" 34 #include "bindings/core/v8/Dictionary.h"
35 #include "bindings/core/v8/DictionaryHelper.h"
35 #include "platform/NotImplemented.h" 36 #include "platform/NotImplemented.h"
36 #include "public/platform/WebCryptoAlgorithmParams.h" 37 #include "public/platform/WebCryptoAlgorithmParams.h"
37 #include "public/platform/WebString.h" 38 #include "public/platform/WebString.h"
38 #include "wtf/ArrayBuffer.h" 39 #include "wtf/ArrayBuffer.h"
39 #include "wtf/ArrayBufferView.h" 40 #include "wtf/ArrayBufferView.h"
40 #include "wtf/MathExtras.h" 41 #include "wtf/MathExtras.h"
41 #include "wtf/Uint8Array.h" 42 #include "wtf/Uint8Array.h"
42 #include "wtf/Vector.h" 43 #include "wtf/Vector.h"
43 #include "wtf/text/StringBuilder.h" 44 #include "wtf/text/StringBuilder.h"
44 #include <algorithm> 45 #include <algorithm>
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 Vector<const char*, 10> m_messages; 263 Vector<const char*, 10> m_messages;
263 }; 264 };
264 265
265 // Defined by the WebCrypto spec as: 266 // Defined by the WebCrypto spec as:
266 // 267 //
267 // typedef (ArrayBuffer or ArrayBufferView) CryptoOperationData; 268 // typedef (ArrayBuffer or ArrayBufferView) CryptoOperationData;
268 // 269 //
269 // FIXME: Currently only supports ArrayBufferView. 270 // FIXME: Currently only supports ArrayBufferView.
270 bool getOptionalCryptoOperationData(const Dictionary& raw, const char* propertyN ame, bool& hasProperty, RefPtr<ArrayBufferView>& buffer, const ErrorContext& con text, AlgorithmError* error) 271 bool getOptionalCryptoOperationData(const Dictionary& raw, const char* propertyN ame, bool& hasProperty, RefPtr<ArrayBufferView>& buffer, const ErrorContext& con text, AlgorithmError* error)
271 { 272 {
272 if (!raw.get(propertyName, buffer)) { 273 if (!DictionaryHelper::get(raw, propertyName, buffer)) {
273 hasProperty = false; 274 hasProperty = false;
274 return true; 275 return true;
275 } 276 }
276 277
277 hasProperty = true; 278 hasProperty = true;
278 279
279 if (!buffer) { 280 if (!buffer) {
280 setSyntaxError(context.toString(propertyName, "Not an ArrayBufferView"), error); 281 setSyntaxError(context.toString(propertyName, "Not an ArrayBufferView"), error);
281 return false; 282 return false;
282 } 283 }
(...skipping 12 matching lines...) Expand all
295 bool ok = getOptionalCryptoOperationData(raw, propertyName, hasProperty, buf fer, context, error); 296 bool ok = getOptionalCryptoOperationData(raw, propertyName, hasProperty, buf fer, context, error);
296 if (!hasProperty) { 297 if (!hasProperty) {
297 setSyntaxError(context.toString(propertyName, "Missing required property "), error); 298 setSyntaxError(context.toString(propertyName, "Missing required property "), error);
298 return false; 299 return false;
299 } 300 }
300 return ok; 301 return ok;
301 } 302 }
302 303
303 bool getUint8Array(const Dictionary& raw, const char* propertyName, RefPtr<Uint8 Array>& array, const ErrorContext& context, AlgorithmError* error) 304 bool getUint8Array(const Dictionary& raw, const char* propertyName, RefPtr<Uint8 Array>& array, const ErrorContext& context, AlgorithmError* error)
304 { 305 {
305 if (!raw.get(propertyName, array) || !array) { 306 if (!DictionaryHelper::get(raw, propertyName, array) || !array) {
306 setSyntaxError(context.toString(propertyName, "Missing or not a Uint8Arr ay"), error); 307 setSyntaxError(context.toString(propertyName, "Missing or not a Uint8Arr ay"), error);
307 return false; 308 return false;
308 } 309 }
309 return true; 310 return true;
310 } 311 }
311 312
312 // Defined by the WebCrypto spec as: 313 // Defined by the WebCrypto spec as:
313 // 314 //
314 // typedef Uint8Array BigInteger; 315 // typedef Uint8Array BigInteger;
315 bool getBigInteger(const Dictionary& raw, const char* propertyName, RefPtr<Uint8 Array>& array, const ErrorContext& context, AlgorithmError* error) 316 bool getBigInteger(const Dictionary& raw, const char* propertyName, RefPtr<Uint8 Array>& array, const ErrorContext& context, AlgorithmError* error)
316 { 317 {
317 if (!getUint8Array(raw, propertyName, array, context, error)) 318 if (!getUint8Array(raw, propertyName, array, context, error))
318 return false; 319 return false;
319 320
320 if (!array->byteLength()) { 321 if (!array->byteLength()) {
321 setSyntaxError(context.toString(propertyName, "BigInteger should not be empty"), error); 322 setSyntaxError(context.toString(propertyName, "BigInteger should not be empty"), error);
322 return false; 323 return false;
323 } 324 }
324 325
325 if (!raw.get(propertyName, array) || !array) { 326 if (!DictionaryHelper::get(raw, propertyName, array) || !array) {
326 setSyntaxError(context.toString(propertyName, "Missing or not a Uint8Arr ay"), error); 327 setSyntaxError(context.toString(propertyName, "Missing or not a Uint8Arr ay"), error);
327 return false; 328 return false;
328 } 329 }
329 return true; 330 return true;
330 } 331 }
331 332
332 // Gets an integer according to WebIDL's [EnforceRange]. 333 // Gets an integer according to WebIDL's [EnforceRange].
333 bool getOptionalInteger(const Dictionary& raw, const char* propertyName, bool& h asProperty, double& value, double minValue, double maxValue, const ErrorContext& context, AlgorithmError* error) 334 bool getOptionalInteger(const Dictionary& raw, const char* propertyName, bool& h asProperty, double& value, double minValue, double maxValue, const ErrorContext& context, AlgorithmError* error)
334 { 335 {
335 double number; 336 double number;
336 bool ok = raw.get(propertyName, number, hasProperty); 337 bool ok = DictionaryHelper::get(raw, propertyName, number, hasProperty);
337 338
338 if (!hasProperty) 339 if (!hasProperty)
339 return true; 340 return true;
340 341
341 if (!ok || std::isnan(number)) { 342 if (!ok || std::isnan(number)) {
342 setSyntaxError(context.toString(propertyName, "Is not a number"), error) ; 343 setSyntaxError(context.toString(propertyName, "Is not a number"), error) ;
343 return false; 344 return false;
344 } 345 }
345 346
346 number = trunc(number); 347 number = trunc(number);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 439
439 params = adoptPtr(new blink::WebCryptoAesKeyGenParams(length)); 440 params = adoptPtr(new blink::WebCryptoAesKeyGenParams(length));
440 return true; 441 return true;
441 } 442 }
442 443
443 bool parseAlgorithm(const Dictionary&, blink::WebCryptoOperation, blink::WebCryp toAlgorithm&, ErrorContext, AlgorithmError*); 444 bool parseAlgorithm(const Dictionary&, blink::WebCryptoOperation, blink::WebCryp toAlgorithm&, ErrorContext, AlgorithmError*);
444 445
445 bool parseHash(const Dictionary& raw, blink::WebCryptoAlgorithm& hash, ErrorCont ext context, AlgorithmError* error) 446 bool parseHash(const Dictionary& raw, blink::WebCryptoAlgorithm& hash, ErrorCont ext context, AlgorithmError* error)
446 { 447 {
447 Dictionary rawHash; 448 Dictionary rawHash;
448 if (!raw.get("hash", rawHash)) { 449 if (!DictionaryHelper::get(raw, "hash", rawHash)) {
449 setSyntaxError(context.toString("hash", "Missing or not a dictionary"), error); 450 setSyntaxError(context.toString("hash", "Missing or not a dictionary"), error);
450 return false; 451 return false;
451 } 452 }
452 453
453 context.add("hash"); 454 context.add("hash");
454 return parseAlgorithm(rawHash, blink::WebCryptoOperationDigest, hash, contex t, error); 455 return parseAlgorithm(rawHash, blink::WebCryptoOperationDigest, hash, contex t, error);
455 } 456 }
456 457
457 // Defined by the WebCrypto spec as: 458 // Defined by the WebCrypto spec as:
458 // 459 //
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 bool parseAlgorithm(const Dictionary& raw, blink::WebCryptoOperation op, blink:: WebCryptoAlgorithm& algorithm, ErrorContext context, AlgorithmError* error) 679 bool parseAlgorithm(const Dictionary& raw, blink::WebCryptoOperation op, blink:: WebCryptoAlgorithm& algorithm, ErrorContext context, AlgorithmError* error)
679 { 680 {
680 context.add("Algorithm"); 681 context.add("Algorithm");
681 682
682 if (!raw.isObject()) { 683 if (!raw.isObject()) {
683 setSyntaxError(context.toString("Not an object"), error); 684 setSyntaxError(context.toString("Not an object"), error);
684 return false; 685 return false;
685 } 686 }
686 687
687 String algorithmName; 688 String algorithmName;
688 if (!raw.get("name", algorithmName)) { 689 if (!DictionaryHelper::get(raw, "name", algorithmName)) {
689 setSyntaxError(context.toString("name", "Missing or not a string"), erro r); 690 setSyntaxError(context.toString("name", "Missing or not a string"), erro r);
690 return false; 691 return false;
691 } 692 }
692 693
693 blink::WebCryptoAlgorithmId algorithmId; 694 blink::WebCryptoAlgorithmId algorithmId;
694 if (!lookupAlgorithmIdByName(algorithmName, algorithmId)) { 695 if (!lookupAlgorithmIdByName(algorithmName, algorithmId)) {
695 // FIXME: The spec says to return a SyntaxError if the input contains 696 // FIXME: The spec says to return a SyntaxError if the input contains
696 // any non-ASCII characters. 697 // any non-ASCII characters.
697 setNotSupportedError(context.toString("Unrecognized name"), error); 698 setNotSupportedError(context.toString("Unrecognized name"), error);
698 return false; 699 return false;
(...skipping 21 matching lines...) Expand all
720 } 721 }
721 722
722 } // namespace 723 } // namespace
723 724
724 bool normalizeAlgorithm(const Dictionary& raw, blink::WebCryptoOperation op, bli nk::WebCryptoAlgorithm& algorithm, AlgorithmError* error) 725 bool normalizeAlgorithm(const Dictionary& raw, blink::WebCryptoOperation op, bli nk::WebCryptoAlgorithm& algorithm, AlgorithmError* error)
725 { 726 {
726 return parseAlgorithm(raw, op, algorithm, ErrorContext(), error); 727 return parseAlgorithm(raw, op, algorithm, ErrorContext(), error);
727 } 728 }
728 729
729 } // namespace WebCore 730 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698