OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "content/browser/android/java/gin_java_script_to_java_types_coercion.h" | 5 #include "content/browser/android/java/gin_java_script_to_java_types_coercion.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 #include <unistd.h> | 8 #include <unistd.h> |
9 | 9 |
10 #include <limits> | 10 #include <limits> |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 value->GetAsDictionary(&dictionary_value); | 508 value->GetAsDictionary(&dictionary_value); |
509 const base::Value* length_value; | 509 const base::Value* length_value; |
510 // If the object does not have a length property, return null. | 510 // If the object does not have a length property, return null. |
511 if (!dictionary_value->Get("length", &length_value)) { | 511 if (!dictionary_value->Get("length", &length_value)) { |
512 return NULL; | 512 return NULL; |
513 } | 513 } |
514 | 514 |
515 // If the length property does not have numeric type, or is outside the valid | 515 // If the length property does not have numeric type, or is outside the valid |
516 // range for a Java array length, return null. | 516 // range for a Java array length, return null. |
517 jsize length = -1; | 517 jsize length = -1; |
518 if (length_value->IsType(base::Value::TYPE_INTEGER)) { | 518 if (length_value->IsType(base::Value::Type::INTEGER)) { |
519 int int_length; | 519 int int_length; |
520 length_value->GetAsInteger(&int_length); | 520 length_value->GetAsInteger(&int_length); |
521 if (int_length >= 0 && int_length <= std::numeric_limits<int32_t>::max()) { | 521 if (int_length >= 0 && int_length <= std::numeric_limits<int32_t>::max()) { |
522 length = static_cast<jsize>(int_length); | 522 length = static_cast<jsize>(int_length); |
523 } | 523 } |
524 } else if (length_value->IsType(base::Value::TYPE_DOUBLE)) { | 524 } else if (length_value->IsType(base::Value::Type::DOUBLE)) { |
525 double double_length; | 525 double double_length; |
526 length_value->GetAsDouble(&double_length); | 526 length_value->GetAsDouble(&double_length); |
527 if (double_length >= 0.0 && | 527 if (double_length >= 0.0 && |
528 double_length <= std::numeric_limits<int32_t>::max()) { | 528 double_length <= std::numeric_limits<int32_t>::max()) { |
529 length = static_cast<jsize>(double_length); | 529 length = static_cast<jsize>(double_length); |
530 } | 530 } |
531 } | 531 } |
532 if (length == -1) { | 532 if (length == -1) { |
533 return NULL; | 533 return NULL; |
534 } | 534 } |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
622 jvalue null_value = {0}; | 622 jvalue null_value = {0}; |
623 result = null_value; | 623 result = null_value; |
624 break; | 624 break; |
625 } | 625 } |
626 case JavaType::TypeBoolean: | 626 case JavaType::TypeBoolean: |
627 // LIVECONNECT_COMPLIANCE: Existing behavior is to convert to false. Spec | 627 // LIVECONNECT_COMPLIANCE: Existing behavior is to convert to false. Spec |
628 // requires raising a JavaScript exception. | 628 // requires raising a JavaScript exception. |
629 result.z = JNI_FALSE; | 629 result.z = JNI_FALSE; |
630 break; | 630 break; |
631 case JavaType::TypeArray: | 631 case JavaType::TypeArray: |
632 if (value->IsType(base::Value::TYPE_DICTIONARY)) { | 632 if (value->IsType(base::Value::Type::DICTIONARY)) { |
633 result.l = CoerceJavaScriptDictionaryToArray( | 633 result.l = CoerceJavaScriptDictionaryToArray( |
634 env, value, target_type, object_refs, error); | 634 env, value, target_type, object_refs, error); |
635 } else if (value->IsType(base::Value::TYPE_LIST)) { | 635 } else if (value->IsType(base::Value::Type::LIST)) { |
636 result.l = CoerceJavaScriptListToArray( | 636 result.l = CoerceJavaScriptListToArray( |
637 env, value, target_type, object_refs, error); | 637 env, value, target_type, object_refs, error); |
638 } else { | 638 } else { |
639 result.l = NULL; | 639 result.l = NULL; |
640 } | 640 } |
641 break; | 641 break; |
642 case JavaType::TypeVoid: | 642 case JavaType::TypeVoid: |
643 // Conversion to void must never happen. | 643 // Conversion to void must never happen. |
644 NOTREACHED(); | 644 NOTREACHED(); |
645 break; | 645 break; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
691 jvalue CoerceJavaScriptValueToJavaValue(JNIEnv* env, | 691 jvalue CoerceJavaScriptValueToJavaValue(JNIEnv* env, |
692 const base::Value* value, | 692 const base::Value* value, |
693 const JavaType& target_type, | 693 const JavaType& target_type, |
694 bool coerce_to_string, | 694 bool coerce_to_string, |
695 const ObjectRefs& object_refs, | 695 const ObjectRefs& object_refs, |
696 GinJavaBridgeError* error) { | 696 GinJavaBridgeError* error) { |
697 // Note that in all these conversions, the relevant field of the jvalue must | 697 // Note that in all these conversions, the relevant field of the jvalue must |
698 // always be explicitly set, as jvalue does not initialize its fields. | 698 // always be explicitly set, as jvalue does not initialize its fields. |
699 | 699 |
700 switch (value->GetType()) { | 700 switch (value->GetType()) { |
701 case base::Value::TYPE_INTEGER: | 701 case base::Value::Type::INTEGER: |
702 return CoerceJavaScriptIntegerToJavaValue( | 702 return CoerceJavaScriptIntegerToJavaValue( |
703 env, value, target_type, coerce_to_string, error); | 703 env, value, target_type, coerce_to_string, error); |
704 case base::Value::TYPE_DOUBLE: { | 704 case base::Value::Type::DOUBLE: { |
705 double double_value; | 705 double double_value; |
706 value->GetAsDouble(&double_value); | 706 value->GetAsDouble(&double_value); |
707 return CoerceJavaScriptDoubleToJavaValue( | 707 return CoerceJavaScriptDoubleToJavaValue( |
708 env, double_value, target_type, coerce_to_string, error); | 708 env, double_value, target_type, coerce_to_string, error); |
709 } | 709 } |
710 case base::Value::TYPE_BOOLEAN: | 710 case base::Value::Type::BOOLEAN: |
711 return CoerceJavaScriptBooleanToJavaValue( | 711 return CoerceJavaScriptBooleanToJavaValue( |
712 env, value, target_type, coerce_to_string, error); | 712 env, value, target_type, coerce_to_string, error); |
713 case base::Value::TYPE_STRING: | 713 case base::Value::Type::STRING: |
714 return CoerceJavaScriptStringToJavaValue(env, value, target_type, error); | 714 return CoerceJavaScriptStringToJavaValue(env, value, target_type, error); |
715 case base::Value::TYPE_DICTIONARY: | 715 case base::Value::Type::DICTIONARY: |
716 case base::Value::TYPE_LIST: | 716 case base::Value::Type::LIST: |
717 return CoerceJavaScriptObjectToJavaValue( | 717 return CoerceJavaScriptObjectToJavaValue( |
718 env, value, target_type, coerce_to_string, object_refs, error); | 718 env, value, target_type, coerce_to_string, object_refs, error); |
719 case base::Value::TYPE_NULL: | 719 case base::Value::Type::NONE: |
720 return CoerceJavaScriptNullOrUndefinedToJavaValue( | 720 return CoerceJavaScriptNullOrUndefinedToJavaValue( |
721 env, value, target_type, coerce_to_string, error); | 721 env, value, target_type, coerce_to_string, error); |
722 case base::Value::TYPE_BINARY: | 722 case base::Value::Type::BINARY: |
723 return CoerceGinJavaBridgeValueToJavaValue( | 723 return CoerceGinJavaBridgeValueToJavaValue( |
724 env, value, target_type, coerce_to_string, object_refs, error); | 724 env, value, target_type, coerce_to_string, object_refs, error); |
725 } | 725 } |
726 NOTREACHED(); | 726 NOTREACHED(); |
727 return jvalue(); | 727 return jvalue(); |
728 } | 728 } |
729 | 729 |
730 } // namespace content | 730 } // namespace content |
OLD | NEW |