| Index: experimental/c_salt/npapi/javascript_object_proxy.cc
|
| diff --git a/experimental/c_salt/npapi/javascript_object_proxy.cc b/experimental/c_salt/npapi/javascript_object_proxy.cc
|
| deleted file mode 100644
|
| index 6ee2063cf3080ee3d18670b0b27b624d46799983..0000000000000000000000000000000000000000
|
| --- a/experimental/c_salt/npapi/javascript_object_proxy.cc
|
| +++ /dev/null
|
| @@ -1,192 +0,0 @@
|
| -// Copyright 2010 The Ginsu Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can
|
| -// be found in the LICENSE file.
|
| -
|
| -#include "c_salt/npapi/javascript_object_proxy.h"
|
| -
|
| -#include "c_salt/npapi/scoped_npid_to_string_converter.h"
|
| -#include "c_salt/variant.h"
|
| -
|
| -namespace c_salt {
|
| -
|
| -namespace npapi {
|
| -
|
| -namespace {
|
| - // RAII wrappers for NPVariant that calls NPN_ReleaseVariantValue on
|
| - // destruction. NPVariantSentry is for most uses where you want to create an
|
| - // NPVariant on the stack and have it released at the end of scope. In those
|
| - // cases, simply create an NPVariantSentry, and when you need to use the
|
| - // NPVariant it owns, call my_sentry.np_variant() to get a reference to it.
|
| - class NPVariantSentry {
|
| - public:
|
| - NPVariantSentry() : np_variant_() {}
|
| - NPVariant& np_variant() { return np_variant_; }
|
| - ~NPVariantSentry() { NPN_ReleaseVariantValue(&np_variant_); }
|
| - private:
|
| - NPVariant np_variant_;
|
| - };
|
| - // NPVariantPtrSentry is used when you want to own the NPVariant some other
|
| - // way, but you want NPN_ReleaseVariantValue to be invoked when the
|
| - // NPVariantPtrSentry goes out of scope.
|
| - class NPVariantPtrSentry {
|
| - public:
|
| - NPVariantPtrSentry() : np_variant_(NULL) {}
|
| - explicit NPVariantPtrSentry(NPVariant* np_variant)
|
| - : np_variant_(np_variant) {}
|
| - NPVariant* np_variant() { return np_variant_; }
|
| - void set_np_variant(NPVariant* np_variant) {
|
| - release();
|
| - np_variant_ = np_variant;
|
| - }
|
| - void release() {
|
| - if (np_variant_) {
|
| - NPN_ReleaseVariantValue(np_variant_);
|
| - }
|
| - np_variant_ = NULL;
|
| - }
|
| - ~NPVariantPtrSentry() { release(); }
|
| - private:
|
| - NPVariant* np_variant_;
|
| - };
|
| -}
|
| -
|
| -JavaScriptObjectProxy::JavaScriptObjectProxy(NPObject* np_object,
|
| - NPP instance)
|
| - : instance_(instance), np_object_(np_object), variant_converter_(instance) {
|
| - NPN_RetainObject(np_object_);
|
| -}
|
| -
|
| -JavaScriptObjectProxy::~JavaScriptObjectProxy() {
|
| - NPN_ReleaseObject(np_object_);
|
| -}
|
| -
|
| -void JavaScriptObjectProxy::Invalidate() {
|
| - instance_ = NULL;
|
| - np_object_ = NULL;
|
| -}
|
| -
|
| -bool JavaScriptObjectProxy::Valid() const {
|
| - return (instance_ && np_object_);
|
| -}
|
| -
|
| -bool JavaScriptObjectProxy::HasScriptMethod(const std::string& name) {
|
| - if (!Valid()) return false;
|
| - NPIdentifier name_id = NPN_GetStringIdentifier(name.c_str());
|
| - return NPN_HasMethod(instance_, np_object_, name_id);
|
| -}
|
| -
|
| -bool
|
| -JavaScriptObjectProxy::InvokeScriptMethod(
|
| - const std::string& method_name,
|
| - const SharedVariant* params_begin,
|
| - const SharedVariant* params_end,
|
| - ::c_salt::SharedVariant* return_value) {
|
| - if (!Valid()) return false;
|
| - // Allocate a vector of NPVariants to hold the parameters and convet the
|
| - // c_salt variants to them.
|
| - std::size_t arg_count = params_end - params_begin;
|
| - std::vector<NPVariant> np_var_vector(arg_count);
|
| - // Make a vector of sentries to ensure the NPVariants are cleaned up
|
| - // regardless of how we exit this function.
|
| - std::vector<NPVariantPtrSentry> np_var_sentry_vector(arg_count);
|
| - for (size_t i = 0; i < arg_count; ++i) {
|
| - // Point the i-th sentry at the i-th NPVariant. Note that it's not
|
| - // necessary prior to this, as the i-th sentry is still NULL until after the
|
| - // conversion.
|
| - np_var_sentry_vector[i].set_np_variant(&np_var_vector[i]);
|
| - variant_converter_.ConvertVariantToNPVariant(*params_begin[i],
|
| - &np_var_vector[i]);
|
| - }
|
| - bool success = false;
|
| - NPVariantSentry return_var;
|
| - if (!method_name.empty()) {
|
| - NPIdentifier name_id = NPN_GetStringIdentifier(method_name.c_str());
|
| - success = NPN_Invoke(instance_,
|
| - np_object_,
|
| - name_id,
|
| - &(*np_var_vector.begin()),
|
| - np_var_vector.size(),
|
| - &return_var.np_variant());
|
| - } else {
|
| - success = NPN_InvokeDefault(instance_,
|
| - np_object_,
|
| - &(*np_var_vector.begin()),
|
| - np_var_vector.size(),
|
| - &return_var.np_variant());
|
| - }
|
| - if (success) {
|
| - (*return_value) =
|
| - variant_converter_.CreateVariantFromNPVariant(return_var.np_variant());
|
| - }
|
| - return success;
|
| -}
|
| -
|
| -void JavaScriptObjectProxy::GetAllPropertyNames(
|
| - std::vector<std::string>* prop_names)
|
| - const {
|
| - if (!Valid()) return;
|
| - if (prop_names) {
|
| - // Use the copy-and-swap idiom to ensure prop_names is only modified if
|
| - // everything succeeds.
|
| - std::vector<std::string> keys;
|
| - NPIdentifier* npid_array;
|
| - uint32_t array_size;
|
| - if (NPN_Enumerate(instance_, np_object_, &npid_array, &array_size)) {
|
| - keys.resize(array_size);
|
| - for (uint32_t i = 0; i < array_size; ++i) {
|
| - keys[i] = ScopedNPIdToStringConverter(npid_array[i]).string_value();
|
| - }
|
| - }
|
| - NPN_MemFree(npid_array);
|
| - prop_names->swap(keys);
|
| - }
|
| -}
|
| -
|
| -bool JavaScriptObjectProxy::HasScriptProperty(const std::string& name) {
|
| - if (!Valid()) return false;
|
| - NPIdentifier name_id = NPN_GetStringIdentifier(name.c_str());
|
| - return NPN_HasProperty(instance_, np_object_, name_id);
|
| -}
|
| -
|
| -bool
|
| -JavaScriptObjectProxy::GetScriptProperty(const std::string& name,
|
| - SharedVariant* return_value) const {
|
| - if (!Valid()) return false;
|
| - assert(return_value);
|
| - if (NULL == return_value) {
|
| - return false;
|
| - }
|
| - NPIdentifier name_id = NPN_GetStringIdentifier(name.c_str());
|
| - NPVariantSentry result;
|
| - bool success = NPN_GetProperty(instance_,
|
| - np_object_,
|
| - name_id,
|
| - &result.np_variant());
|
| - if (success) {
|
| - *return_value = variant_converter_.
|
| - CreateVariantFromNPVariant(result.np_variant());
|
| - }
|
| - return success;
|
| -}
|
| -
|
| -bool JavaScriptObjectProxy::SetScriptProperty(const std::string& name,
|
| - const SharedVariant& value) {
|
| - if (!Valid()) return false;
|
| - NPIdentifier name_id = NPN_GetStringIdentifier(name.c_str());
|
| - NPVariantSentry np_var;
|
| - variant_converter_.ConvertVariantToNPVariant(*value, &np_var.np_variant());
|
| - bool success = NPN_SetProperty(instance_,
|
| - np_object_,
|
| - name_id,
|
| - &np_var.np_variant());
|
| - return success;
|
| -}
|
| -
|
| -bool JavaScriptObjectProxy::RemoveScriptProperty(const std::string& name) {
|
| - if (!Valid()) return false;
|
| - NPIdentifier name_id = NPN_GetStringIdentifier(name.c_str());
|
| - return NPN_RemoveProperty(instance_, np_object_, name_id);
|
| -}
|
| -
|
| -} // namespace npapi
|
| -} // namespace c_salt
|
|
|