| Index: content/child/npapi/npobject_util.cc
|
| diff --git a/content/child/npapi/npobject_util.cc b/content/child/npapi/npobject_util.cc
|
| deleted file mode 100644
|
| index aeb66ae3700b7603c33c31ac3d2781c422534cb0..0000000000000000000000000000000000000000
|
| --- a/content/child/npapi/npobject_util.cc
|
| +++ /dev/null
|
| @@ -1,310 +0,0 @@
|
| -// Copyright 2013 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.
|
| -
|
| -#include "content/child/npapi/npobject_util.h"
|
| -
|
| -#include <stddef.h>
|
| -#include <stdint.h>
|
| -#include <string.h>
|
| -
|
| -#include "base/strings/string_util.h"
|
| -#include "content/child/npapi/np_channel_base.h"
|
| -#include "content/child/npapi/npobject_proxy.h"
|
| -#include "content/child/npapi/plugin_host.h"
|
| -#include "content/child/plugin_messages.h"
|
| -#include "third_party/WebKit/public/web/WebBindings.h"
|
| -#include "third_party/npapi/bindings/nphostapi.h"
|
| -
|
| -using blink::WebBindings;
|
| -
|
| -namespace content {
|
| -
|
| -// true if the current process is a plugin process, false otherwise.
|
| -static bool g_plugin_process;
|
| -
|
| -namespace {
|
| -#if defined(ENABLE_PLUGINS)
|
| -// The next 7 functions are called by the plugin code when it's using the
|
| -// NPObject. Plugins always ignore the functions in NPClass (except allocate
|
| -// and deallocate), and instead just use the function pointers that were
|
| -// passed in NPInitialize.
|
| -// When the renderer interacts with an NPObject from the plugin, it of course
|
| -// uses the function pointers in its NPClass structure.
|
| -static bool NPN_HasMethodPatch(NPP npp,
|
| - NPObject *npobj,
|
| - NPIdentifier methodName) {
|
| - return NPObjectProxy::NPHasMethod(npobj, methodName);
|
| -}
|
| -
|
| -static bool NPN_InvokePatch(NPP npp, NPObject *npobj,
|
| - NPIdentifier methodName,
|
| - const NPVariant *args,
|
| - uint32_t argCount,
|
| - NPVariant *result) {
|
| - return NPObjectProxy::NPInvokePrivate(npp, npobj, false, methodName, args,
|
| - argCount, result);
|
| -}
|
| -
|
| -static bool NPN_InvokeDefaultPatch(NPP npp,
|
| - NPObject *npobj,
|
| - const NPVariant *args,
|
| - uint32_t argCount,
|
| - NPVariant *result) {
|
| - return NPObjectProxy::NPInvokePrivate(npp, npobj, true, 0, args, argCount,
|
| - result);
|
| -}
|
| -
|
| -static bool NPN_HasPropertyPatch(NPP npp,
|
| - NPObject *npobj,
|
| - NPIdentifier propertyName) {
|
| - return NPObjectProxy::NPHasProperty(npobj, propertyName);
|
| -}
|
| -
|
| -static bool NPN_GetPropertyPatch(NPP npp,
|
| - NPObject *npobj,
|
| - NPIdentifier propertyName,
|
| - NPVariant *result) {
|
| - return NPObjectProxy::NPGetProperty(npobj, propertyName, result);
|
| -}
|
| -
|
| -static bool NPN_SetPropertyPatch(NPP npp,
|
| - NPObject *npobj,
|
| - NPIdentifier propertyName,
|
| - const NPVariant *value) {
|
| - return NPObjectProxy::NPSetProperty(npobj, propertyName, value);
|
| -}
|
| -
|
| -static bool NPN_RemovePropertyPatch(NPP npp,
|
| - NPObject *npobj,
|
| - NPIdentifier propertyName) {
|
| - return NPObjectProxy::NPRemoveProperty(npobj, propertyName);
|
| -}
|
| -
|
| -static bool NPN_EvaluatePatch(NPP npp,
|
| - NPObject *npobj,
|
| - NPString *script,
|
| - NPVariant *result) {
|
| - return NPObjectProxy::NPNEvaluate(npp, npobj, script, result);
|
| -}
|
| -
|
| -
|
| -static void NPN_SetExceptionPatch(NPObject *obj, const NPUTF8 *message) {
|
| - std::string message_str(message);
|
| - if (IsPluginProcess()) {
|
| - NPChannelBase* renderer_channel = NPChannelBase::GetCurrentChannel();
|
| - if (renderer_channel)
|
| - renderer_channel->Send(new PluginHostMsg_SetException(message_str));
|
| - } else {
|
| - WebBindings::setException(obj, message_str.c_str());
|
| - }
|
| -}
|
| -
|
| -static bool NPN_EnumeratePatch(NPP npp, NPObject *obj,
|
| - NPIdentifier **identifier, uint32_t *count) {
|
| - return NPObjectProxy::NPNEnumerate(obj, identifier, count);
|
| -}
|
| -
|
| -// The overrided table of functions provided to the plugin.
|
| -NPNetscapeFuncs *GetHostFunctions() {
|
| - static bool init = false;
|
| - static NPNetscapeFuncs host_funcs;
|
| - if (init)
|
| - return &host_funcs;
|
| -
|
| - memset(&host_funcs, 0, sizeof(host_funcs));
|
| - host_funcs.invoke = NPN_InvokePatch;
|
| - host_funcs.invokeDefault = NPN_InvokeDefaultPatch;
|
| - host_funcs.evaluate = NPN_EvaluatePatch;
|
| - host_funcs.getproperty = NPN_GetPropertyPatch;
|
| - host_funcs.setproperty = NPN_SetPropertyPatch;
|
| - host_funcs.removeproperty = NPN_RemovePropertyPatch;
|
| - host_funcs.hasproperty = NPN_HasPropertyPatch;
|
| - host_funcs.hasmethod = NPN_HasMethodPatch;
|
| - host_funcs.setexception = NPN_SetExceptionPatch;
|
| - host_funcs.enumerate = NPN_EnumeratePatch;
|
| -
|
| - init = true;
|
| - return &host_funcs;
|
| -}
|
| -
|
| -#endif // defined(ENABLE_PLUGINS)
|
| -}
|
| -
|
| -#if defined(ENABLE_PLUGINS)
|
| -void PatchNPNFunctions() {
|
| - g_plugin_process = true;
|
| - NPNetscapeFuncs* funcs = GetHostFunctions();
|
| - PluginHost::Singleton()->PatchNPNetscapeFuncs(funcs);
|
| -}
|
| -#endif
|
| -
|
| -bool IsPluginProcess() {
|
| - return g_plugin_process;
|
| -}
|
| -
|
| -void CreateNPIdentifierParam(NPIdentifier id, NPIdentifier_Param* param) {
|
| - param->identifier = id;
|
| -}
|
| -
|
| -NPIdentifier CreateNPIdentifier(const NPIdentifier_Param& param) {
|
| - return param.identifier;
|
| -}
|
| -
|
| -void CreateNPVariantParam(const NPVariant& variant,
|
| - NPChannelBase* channel,
|
| - NPVariant_Param* param,
|
| - bool release,
|
| - int render_view_id,
|
| - const GURL& page_url) {
|
| - switch (variant.type) {
|
| - case NPVariantType_Void:
|
| - param->type = NPVARIANT_PARAM_VOID;
|
| - break;
|
| - case NPVariantType_Null:
|
| - param->type = NPVARIANT_PARAM_NULL;
|
| - break;
|
| - case NPVariantType_Bool:
|
| - param->type = NPVARIANT_PARAM_BOOL;
|
| - param->bool_value = variant.value.boolValue;
|
| - break;
|
| - case NPVariantType_Int32:
|
| - param->type = NPVARIANT_PARAM_INT;
|
| - param->int_value = variant.value.intValue;
|
| - break;
|
| - case NPVariantType_Double:
|
| - param->type = NPVARIANT_PARAM_DOUBLE;
|
| - param->double_value = variant.value.doubleValue;
|
| - break;
|
| - case NPVariantType_String:
|
| - param->type = NPVARIANT_PARAM_STRING;
|
| - if (variant.value.stringValue.UTF8Length) {
|
| - param->string_value.assign(variant.value.stringValue.UTF8Characters,
|
| - variant.value.stringValue.UTF8Length);
|
| - }
|
| - break;
|
| - case NPVariantType_Object: {
|
| - if (variant.value.objectValue->_class == NPObjectProxy::npclass()) {
|
| - param->type = NPVARIANT_PARAM_RECEIVER_OBJECT_ROUTING_ID;
|
| - NPObjectProxy* proxy =
|
| - NPObjectProxy::GetProxy(variant.value.objectValue);
|
| - DCHECK(proxy);
|
| - param->npobject_routing_id = proxy->route_id();
|
| - // Don't release, because our original variant is the same as our proxy.
|
| - release = false;
|
| - } else {
|
| - // The channel could be NULL if there was a channel error. The caller's
|
| - // Send call will fail anyways.
|
| - if (channel) {
|
| - // NPObjectStub adds its own reference to the NPObject it owns, so if
|
| - // we were supposed to release the corresponding variant
|
| - // (release==true), we should still do that.
|
| - param->type = NPVARIANT_PARAM_SENDER_OBJECT_ROUTING_ID;
|
| - int route_id = channel->GetExistingRouteForNPObjectStub(
|
| - variant.value.objectValue);
|
| - if (route_id != MSG_ROUTING_NONE) {
|
| - param->npobject_routing_id = route_id;
|
| - } else {
|
| - route_id = channel->GenerateRouteID();
|
| - new NPObjectStub(
|
| - variant.value.objectValue, channel, route_id, render_view_id,
|
| - page_url);
|
| - param->npobject_routing_id = route_id;
|
| - }
|
| -
|
| - // Include the object's owner, should be the result of
|
| - // _NPN_GetObjectOwner, but we don't have that.
|
| - NPP owner = 0;
|
| - param->npobject_owner_id =
|
| - channel->GetExistingRouteForNPObjectOwner(owner);
|
| - } else {
|
| - param->type = NPVARIANT_PARAM_VOID;
|
| - }
|
| - }
|
| - break;
|
| - }
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| -
|
| - if (release)
|
| - WebBindings::releaseVariantValue(const_cast<NPVariant*>(&variant));
|
| -}
|
| -
|
| -bool CreateNPVariant(const NPVariant_Param& param,
|
| - NPChannelBase* channel,
|
| - NPVariant* result,
|
| - int render_view_id,
|
| - const GURL& page_url) {
|
| - switch (param.type) {
|
| - case NPVARIANT_PARAM_VOID:
|
| - result->type = NPVariantType_Void;
|
| - break;
|
| - case NPVARIANT_PARAM_NULL:
|
| - result->type = NPVariantType_Null;
|
| - break;
|
| - case NPVARIANT_PARAM_BOOL:
|
| - result->type = NPVariantType_Bool;
|
| - result->value.boolValue = param.bool_value;
|
| - break;
|
| - case NPVARIANT_PARAM_INT:
|
| - result->type = NPVariantType_Int32;
|
| - result->value.intValue = param.int_value;
|
| - break;
|
| - case NPVARIANT_PARAM_DOUBLE:
|
| - result->type = NPVariantType_Double;
|
| - result->value.doubleValue = param.double_value;
|
| - break;
|
| - case NPVARIANT_PARAM_STRING: {
|
| - result->type = NPVariantType_String;
|
| - void* buffer = malloc(param.string_value.size());
|
| - size_t size = param.string_value.size();
|
| - result->value.stringValue.UTF8Characters = static_cast<NPUTF8*>(buffer);
|
| - memcpy(buffer, param.string_value.c_str(), size);
|
| - result->value.stringValue.UTF8Length = static_cast<int>(size);
|
| - break;
|
| - }
|
| - case NPVARIANT_PARAM_SENDER_OBJECT_ROUTING_ID: {
|
| - result->type = NPVariantType_Object;
|
| - NPObject* object =
|
| - channel->GetExistingNPObjectProxy(param.npobject_routing_id);
|
| - if (object) {
|
| - WebBindings::retainObject(object);
|
| - result->value.objectValue = object;
|
| - } else {
|
| - NPP owner =
|
| - channel->GetExistingNPObjectOwner(param.npobject_owner_id);
|
| - // TODO(wez): Once NPObject tracking lands in Blink, check |owner| and
|
| - // return NPVariantType_Void if it is NULL.
|
| - result->value.objectValue =
|
| - NPObjectProxy::Create(channel,
|
| - param.npobject_routing_id,
|
| - render_view_id,
|
| - page_url,
|
| - owner);
|
| - }
|
| - break;
|
| - }
|
| - case NPVARIANT_PARAM_RECEIVER_OBJECT_ROUTING_ID: {
|
| - NPObjectBase* npobject_base =
|
| - channel->GetNPObjectListenerForRoute(param.npobject_routing_id);
|
| - if (!npobject_base) {
|
| - DLOG(WARNING) << "Invalid routing id passed in"
|
| - << param.npobject_routing_id;
|
| - return false;
|
| - }
|
| -
|
| - DCHECK(npobject_base->GetUnderlyingNPObject() != NULL);
|
| -
|
| - result->type = NPVariantType_Object;
|
| - result->value.objectValue = npobject_base->GetUnderlyingNPObject();
|
| - WebBindings::retainObject(result->value.objectValue);
|
| - break;
|
| - }
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -} // namespace content
|
|
|