diff options
Diffstat (limited to 'chromium/webkit/renderer/cpp_variant.cc')
-rw-r--r-- | chromium/webkit/renderer/cpp_variant.cc | 268 |
1 files changed, 0 insertions, 268 deletions
diff --git a/chromium/webkit/renderer/cpp_variant.cc b/chromium/webkit/renderer/cpp_variant.cc deleted file mode 100644 index 1438c388fee..00000000000 --- a/chromium/webkit/renderer/cpp_variant.cc +++ /dev/null @@ -1,268 +0,0 @@ -// Copyright (c) 2012 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. - -// This file contains definitions for CppVariant. - -#include <limits> -#include "base/logging.h" -#include "base/strings/string_util.h" -#include "base/strings/stringprintf.h" -#include "base/strings/utf_string_conversions.h" -#include "third_party/WebKit/public/web/WebBindings.h" -#include "webkit/renderer/cpp_variant.h" - -using blink::WebBindings; - -namespace webkit_glue { - -CppVariant::CppVariant() { - type = NPVariantType_Null; -} - -// Note that Set() performs a deep copy, which is necessary to safely -// call FreeData() on the value in the destructor. -CppVariant::CppVariant(const CppVariant& original) { - type = NPVariantType_Null; - Set(original); -} - -// See comment for copy constructor, above. -CppVariant& CppVariant::operator=(const CppVariant& original) { - if (&original != this) - Set(original); - return *this; -} - -CppVariant::~CppVariant() { - FreeData(); -} - -void CppVariant::FreeData() { - WebBindings::releaseVariantValue(this); -} - -bool CppVariant::isEqual(const CppVariant& other) const { - if (type != other.type) - return false; - - switch (type) { - case NPVariantType_Bool: { - return (value.boolValue == other.value.boolValue); - } - case NPVariantType_Int32: { - return (value.intValue == other.value.intValue); - } - case NPVariantType_Double: { - return (value.doubleValue == other.value.doubleValue); - } - case NPVariantType_String: { - const NPString *this_value = &value.stringValue; - const NPString *other_value = &other.value.stringValue; - uint32_t len = this_value->UTF8Length; - return (len == other_value->UTF8Length && - !strncmp(this_value->UTF8Characters, other_value->UTF8Characters, - len)); - } - case NPVariantType_Null: - case NPVariantType_Void: { - return true; - } - case NPVariantType_Object: { - NPObject *this_value = value.objectValue; - NPObject *other_value = other.value.objectValue; - return (this_value->_class == other_value->_class && - this_value->referenceCount == other_value->referenceCount); - } - } - return false; -} - -void CppVariant::CopyToNPVariant(NPVariant* result) const { - result->type = type; - switch (type) { - case NPVariantType_Bool: - result->value.boolValue = value.boolValue; - break; - case NPVariantType_Int32: - result->value.intValue = value.intValue; - break; - case NPVariantType_Double: - result->value.doubleValue = value.doubleValue; - break; - case NPVariantType_String: - WebBindings::initializeVariantWithStringCopy(result, &value.stringValue); - break; - case NPVariantType_Null: - case NPVariantType_Void: - // Nothing to set. - break; - case NPVariantType_Object: - result->type = NPVariantType_Object; - result->value.objectValue = WebBindings::retainObject(value.objectValue); - break; - } -} - -void CppVariant::Set(const NPVariant& new_value) { - FreeData(); - switch (new_value.type) { - case NPVariantType_Bool: - Set(new_value.value.boolValue); - break; - case NPVariantType_Int32: - Set(new_value.value.intValue); - break; - case NPVariantType_Double: - Set(new_value.value.doubleValue); - break; - case NPVariantType_String: - Set(new_value.value.stringValue); - break; - case NPVariantType_Null: - case NPVariantType_Void: - type = new_value.type; - break; - case NPVariantType_Object: - Set(new_value.value.objectValue); - break; - } -} - -void CppVariant::SetNull() { - FreeData(); - type = NPVariantType_Null; -} - -void CppVariant::Set(bool new_value) { - FreeData(); - type = NPVariantType_Bool; - value.boolValue = new_value; -} - -void CppVariant::Set(int32_t new_value) { - FreeData(); - type = NPVariantType_Int32; - value.intValue = new_value; -} - -void CppVariant::Set(double new_value) { - FreeData(); - type = NPVariantType_Double; - value.doubleValue = new_value; -} - -// The new_value must be a null-terminated string. -void CppVariant::Set(const char* new_value) { - FreeData(); - type = NPVariantType_String; - NPString new_string = {new_value, - static_cast<uint32_t>(strlen(new_value))}; - WebBindings::initializeVariantWithStringCopy(this, &new_string); -} - -void CppVariant::Set(const std::string& new_value) { - FreeData(); - type = NPVariantType_String; - NPString new_string = {new_value.data(), - static_cast<uint32_t>(new_value.size())}; - WebBindings::initializeVariantWithStringCopy(this, &new_string); -} -void CppVariant::Set(const NPString& new_value) { - FreeData(); - type = NPVariantType_String; - WebBindings::initializeVariantWithStringCopy(this, &new_value); -} - -void CppVariant::Set(NPObject* new_value) { - FreeData(); - type = NPVariantType_Object; - value.objectValue = WebBindings::retainObject(new_value); -} - -std::string CppVariant::ToString() const { - DCHECK(isString()); - return std::string(value.stringValue.UTF8Characters, - value.stringValue.UTF8Length); -} - -int32_t CppVariant::ToInt32() const { - if (isInt32()) { - return value.intValue; - } else if (isDouble()) { - return static_cast<int32_t>(value.doubleValue); - } else { - NOTREACHED(); - return 0; - } -} - -double CppVariant::ToDouble() const { - if (isInt32()) { - return static_cast<double>(value.intValue); - } else if (isDouble()) { - return value.doubleValue; - } else { - NOTREACHED(); - return 0.0; - } -} - -bool CppVariant::ToBoolean() const { - DCHECK(isBool()); - return value.boolValue; -} - -std::vector<CppVariant> CppVariant::ToVector() const { - DCHECK(isObject()); - std::vector<CppVariant> vector; - NPObject* np_value = value.objectValue; - NPIdentifier length_id = WebBindings::getStringIdentifier("length"); - - if (WebBindings::hasProperty(NULL, np_value, length_id)) { - CppVariant length_value; - if (WebBindings::getProperty(NULL, np_value, length_id, &length_value)) { - int length = 0; - // The length is a double in some cases. - if (NPVARIANT_IS_DOUBLE(length_value)) - length = static_cast<int>(NPVARIANT_TO_DOUBLE(length_value)); - else if (NPVARIANT_IS_INT32(length_value)) - length = NPVARIANT_TO_INT32(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. - 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 vector; -} - -bool CppVariant::Invoke(const std::string& method, const CppVariant* args, - uint32 arg_count, CppVariant& result) const { - DCHECK(isObject()); - NPIdentifier method_name = WebBindings::getStringIdentifier(method.c_str()); - NPObject* np_object = value.objectValue; - if (WebBindings::hasMethod(NULL, np_object, method_name)) { - NPVariant r; - bool status = - WebBindings::invoke(NULL, np_object, method_name, args, arg_count, &r); - result.Set(r); - return status; - } else { - return false; - } -} - -} // namespace webkit_glue |