Chromium Code Reviews| Index: webkit/glue/cpp_variant.cc |
| diff --git a/webkit/glue/cpp_variant.cc b/webkit/glue/cpp_variant.cc |
| index eca554bcafe0a37e51b758de96fc5b4c35363fe1..b5d7d28edcedf4fd433d1f1d5fca6ba0a747396d 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,28 @@ 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; |
|
Evan Martin
2011/01/26 19:21:10
Just to confirm, by using CppVariant here it impli
arv (Not doing code reviews)
2011/01/26 19:38:58
Yes, CppVariant calls FreeData in its destructor.
|
| + if (WebBindings::getProperty(NULL, np_value, index, &index_value)) { |
| + CppVariant cpp; |
| + cpp.Set(index_value); |
| + vector.push_back(cpp); |
| } |
| } |
| } |
| } |
| + } else { |
| + NOTREACHED(); |
| } |
| - return string_vector; |
| + return vector; |
| } |
| bool CppVariant::Invoke(const std::string& method, const CppVariant* args, |