Index: webkit/glue/cpp_variant.cc |
diff --git a/webkit/glue/cpp_variant.cc b/webkit/glue/cpp_variant.cc |
index eca554bcafe0a37e51b758de96fc5b4c35363fe1..699f7f158dfeae769a54bff4419ecacba24a6c58 100644 |
--- a/webkit/glue/cpp_variant.cc |
+++ b/webkit/glue/cpp_variant.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -211,14 +211,14 @@ bool CppVariant::ToBoolean() const { |
return value.boolValue; |
} |
-std::vector<std::string> CppVariant::ToStringVector() const { |
+std::vector<CppVariant> CppVariant::ToVector() const { |
DCHECK(isObject()); |
- std::vector<std::string> string_vector; |
+ std::vector<CppVariant> vector; |
NPObject* np_value = value.objectValue; |
NPIdentifier length_id = WebBindings::getStringIdentifier("length"); |
if (WebBindings::hasProperty(NULL, np_value, length_id)) { |
- NPVariant length_value; |
+ CppVariant length_value; |
if (WebBindings::getProperty(NULL, np_value, length_id, &length_value)) { |
int length = 0; |
// The length is a double in some cases. |
@@ -226,30 +226,25 @@ std::vector<std::string> CppVariant::ToStringVector() const { |
length = static_cast<int>(NPVARIANT_TO_DOUBLE(length_value)); |
else if (NPVARIANT_IS_INT32(length_value)) |
length = NPVARIANT_TO_INT32(length_value); |
- WebBindings::releaseVariantValue(&length_value); |
+ else |
+ NOTREACHED(); |
// For sanity, only allow 60000 items. |
length = std::min(60000, length); |
for (int i = 0; i < length; ++i) { |
// Get each of the items. |
- std::string index = base::StringPrintf("%d", i); |
- NPIdentifier index_id = WebBindings::getStringIdentifier(index.c_str()); |
- if (WebBindings::hasProperty(NULL, np_value, index_id)) { |
- NPVariant index_value; |
- if (WebBindings::getProperty(NULL, np_value, index_id, &index_value)) { |
- if (NPVARIANT_IS_STRING(index_value)) { |
- std::string string( |
- NPVARIANT_TO_STRING(index_value).UTF8Characters, |
- NPVARIANT_TO_STRING(index_value).UTF8Length); |
- string_vector.push_back(string); |
- } |
- WebBindings::releaseVariantValue(&index_value); |
- } |
+ NPIdentifier index = WebBindings::getIntIdentifier(i); |
+ if (WebBindings::hasProperty(NULL, np_value, index)) { |
+ CppVariant index_value; |
+ if (WebBindings::getProperty(NULL, np_value, index, &index_value)) |
+ vector.push_back(index_value); |
} |
} |
} |
+ } else { |
+ NOTREACHED(); |
} |
- return string_vector; |
+ return vector; |
} |
bool CppVariant::Invoke(const std::string& method, const CppVariant* args, |