Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(689)

Unified Diff: content/child/npapi/npobject_util.cc

Issue 1483733002: Remove support for NPObjects. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/child/npapi/npobject_util.h ('k') | content/child/npapi/npruntime_util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « content/child/npapi/npobject_util.h ('k') | content/child/npapi/npruntime_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698