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

Unified Diff: content/child/npapi/npobject_stub.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_stub.h ('k') | content/child/npapi/npobject_util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/child/npapi/npobject_stub.cc
diff --git a/content/child/npapi/npobject_stub.cc b/content/child/npapi/npobject_stub.cc
deleted file mode 100644
index a8f512809eb5f637dddf874fc8dccbeb604f8ed2..0000000000000000000000000000000000000000
--- a/content/child/npapi/npobject_stub.cc
+++ /dev/null
@@ -1,424 +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_stub.h"
-
-#include "build/build_config.h"
-#include "content/child/npapi/np_channel_base.h"
-#include "content/child/npapi/npobject_util.h"
-#include "content/child/plugin_messages.h"
-#include "content/public/common/content_client.h"
-#include "content/public/common/content_switches.h"
-#include "third_party/WebKit/public/web/WebBindings.h"
-#include "third_party/npapi/bindings/npapi.h"
-#include "third_party/npapi/bindings/npruntime.h"
-
-#if defined(OS_WIN)
-#include "base/command_line.h"
-#include "content/common/plugin_constants_win.h"
-#endif
-
-using blink::WebBindings;
-
-namespace content {
-
-NPObjectStub::NPObjectStub(
- NPObject* npobject,
- NPChannelBase* channel,
- int route_id,
- int render_view_id,
- const GURL& page_url)
- : npobject_(npobject),
- channel_(channel),
- route_id_(route_id),
- render_view_id_(render_view_id),
- page_url_(page_url) {
- channel_->AddMappingForNPObjectStub(route_id, npobject);
- channel_->AddRoute(route_id, this, this);
-
- // We retain the object just as PluginHost does if everything was in-process.
- WebBindings::retainObject(npobject_);
-}
-
-NPObjectStub::~NPObjectStub() {
- channel_->RemoveRoute(route_id_);
- DCHECK(!npobject_);
-}
-
-void NPObjectStub::DeleteSoon() {
- if (npobject_) {
- channel_->RemoveMappingForNPObjectStub(route_id_, npobject_);
-
- // We need to NULL npobject_ prior to calling releaseObject() to avoid
- // problems with re-entrancy. See http://crbug.com/94179#c17 for more
- // details on how this can happen.
- NPObject* npobject = npobject_;
- npobject_ = NULL;
-
- WebBindings::releaseObject(npobject);
-
- base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
- }
-}
-
-bool NPObjectStub::Send(IPC::Message* msg) {
- return channel_->Send(msg);
-}
-
-NPObject* NPObjectStub::GetUnderlyingNPObject() {
- return npobject_;
-}
-
-IPC::Listener* NPObjectStub::GetChannelListener() {
- return static_cast<IPC::Listener*>(this);
-}
-
-bool NPObjectStub::OnMessageReceived(const IPC::Message& msg) {
- GetContentClient()->SetActiveURL(page_url_);
- if (!npobject_) {
- if (msg.is_sync()) {
- // The object could be garbage because the frame has gone away, so
- // just send an error reply to the caller.
- IPC::Message* reply = IPC::SyncMessage::GenerateReply(&msg);
- reply->set_reply_error();
- Send(reply);
- }
-
- return true;
- }
-
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(NPObjectStub, msg)
- IPC_MESSAGE_HANDLER_DELAY_REPLY(NPObjectMsg_Release, OnRelease);
- IPC_MESSAGE_HANDLER(NPObjectMsg_HasMethod, OnHasMethod);
- IPC_MESSAGE_HANDLER_DELAY_REPLY(NPObjectMsg_Invoke, OnInvoke);
- IPC_MESSAGE_HANDLER(NPObjectMsg_HasProperty, OnHasProperty);
- IPC_MESSAGE_HANDLER(NPObjectMsg_GetProperty, OnGetProperty);
- IPC_MESSAGE_HANDLER_DELAY_REPLY(NPObjectMsg_SetProperty, OnSetProperty);
- IPC_MESSAGE_HANDLER(NPObjectMsg_RemoveProperty, OnRemoveProperty);
- IPC_MESSAGE_HANDLER(NPObjectMsg_Invalidate, OnInvalidate);
- IPC_MESSAGE_HANDLER(NPObjectMsg_Enumeration, OnEnumeration);
- IPC_MESSAGE_HANDLER_DELAY_REPLY(NPObjectMsg_Construct, OnConstruct);
- IPC_MESSAGE_HANDLER_DELAY_REPLY(NPObjectMsg_Evaluate, OnEvaluate);
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- DCHECK(handled);
- return handled;
-}
-
-void NPObjectStub::OnChannelError() {
- DeleteSoon();
-}
-
-void NPObjectStub::OnRelease(IPC::Message* reply_msg) {
- Send(reply_msg);
- DeleteSoon();
-}
-
-void NPObjectStub::OnHasMethod(const NPIdentifier_Param& name,
- bool* result) {
- NPIdentifier id = CreateNPIdentifier(name);
- // If we're in the plugin process, then the stub is holding onto an NPObject
- // from the plugin, so all function calls on it need to go through the
- // functions in NPClass. If we're in the renderer process, then we just call
- // the NPN_ functions.
- if (IsPluginProcess()) {
- if (npobject_->_class->hasMethod) {
- *result = npobject_->_class->hasMethod(npobject_, id);
- } else {
- *result = false;
- }
- } else {
- *result = WebBindings::hasMethod(0, npobject_, id);
- }
-}
-
-void NPObjectStub::OnInvoke(bool is_default,
- const NPIdentifier_Param& method,
- const std::vector<NPVariant_Param>& args,
- IPC::Message* reply_msg) {
- bool return_value = false;
- NPVariant_Param result_param;
- NPVariant result_var;
-
- VOID_TO_NPVARIANT(result_var);
- result_param.type = NPVARIANT_PARAM_VOID;
-
- int arg_count = static_cast<int>(args.size());
- NPVariant* args_var = new NPVariant[arg_count];
- for (int i = 0; i < arg_count; ++i) {
- if (!CreateNPVariant(args[i],
- channel_.get(),
- &(args_var[i]),
- render_view_id_,
- page_url_)) {
- NPObjectMsg_Invoke::WriteReplyParams(
- reply_msg, result_param, return_value);
- channel_->Send(reply_msg);
- delete[] args_var;
- return;
- }
- }
-
- if (is_default) {
- if (IsPluginProcess()) {
- if (npobject_->_class->invokeDefault) {
- return_value = npobject_->_class->invokeDefault(
- npobject_, args_var, arg_count, &result_var);
- } else {
- return_value = false;
- }
- } else {
- return_value = WebBindings::invokeDefault(
- 0, npobject_, args_var, arg_count, &result_var);
- }
- } else {
- NPIdentifier id = CreateNPIdentifier(method);
- if (IsPluginProcess()) {
- if (npobject_->_class->invoke) {
- return_value = npobject_->_class->invoke(
- npobject_, id, args_var, arg_count, &result_var);
- } else {
- return_value = false;
- }
- } else {
- return_value = WebBindings::invoke(
- 0, npobject_, id, args_var, arg_count, &result_var);
- }
- }
-
- for (int i = 0; i < arg_count; ++i)
- WebBindings::releaseVariantValue(&(args_var[i]));
-
- delete[] args_var;
-
- CreateNPVariantParam(result_var,
- channel_.get(),
- &result_param,
- true,
- render_view_id_,
- page_url_);
- NPObjectMsg_Invoke::WriteReplyParams(reply_msg, result_param, return_value);
- channel_->Send(reply_msg);
-}
-
-void NPObjectStub::OnHasProperty(const NPIdentifier_Param& name,
- bool* result) {
- NPIdentifier id = CreateNPIdentifier(name);
- if (IsPluginProcess()) {
- if (npobject_->_class->hasProperty) {
- *result = npobject_->_class->hasProperty(npobject_, id);
- } else {
- *result = false;
- }
- } else {
- *result = WebBindings::hasProperty(0, npobject_, id);
- }
-}
-
-void NPObjectStub::OnGetProperty(const NPIdentifier_Param& name,
- NPVariant_Param* property,
- bool* result) {
- NPVariant result_var;
- VOID_TO_NPVARIANT(result_var);
- NPIdentifier id = CreateNPIdentifier(name);
-
- if (IsPluginProcess()) {
- if (npobject_->_class->getProperty) {
- *result = npobject_->_class->getProperty(npobject_, id, &result_var);
- } else {
- *result = false;
- }
- } else {
- *result = WebBindings::getProperty(0, npobject_, id, &result_var);
- }
-
- CreateNPVariantParam(
- result_var, channel_.get(), property, true, render_view_id_, page_url_);
-}
-
-void NPObjectStub::OnSetProperty(const NPIdentifier_Param& name,
- const NPVariant_Param& property,
- IPC::Message* reply_msg) {
- bool result = false;
- NPIdentifier id = CreateNPIdentifier(name);
- NPVariant property_var;
- if (!CreateNPVariant(property,
- channel_.get(),
- &property_var,
- render_view_id_,
- page_url_)) {
- NPObjectMsg_SetProperty::WriteReplyParams(reply_msg, result);
- channel_->Send(reply_msg);
- return;
- }
-
- if (IsPluginProcess()) {
- if (npobject_->_class->setProperty) {
-#if defined(OS_WIN)
- static base::FilePath plugin_path =
- base::CommandLine::ForCurrentProcess()->GetSwitchValuePath(
- switches::kPluginPath);
- static std::wstring filename = base::ToLowerASCII(
- plugin_path.BaseName().value());
- static NPIdentifier fullscreen =
- WebBindings::getStringIdentifier("fullScreen");
- if (filename == kNewWMPPlugin && id == fullscreen) {
- // Workaround for bug 15985, which is if Flash causes WMP to go
- // full screen a deadlock can occur when WMP calls SetFocus.
- NPObjectMsg_SetProperty::WriteReplyParams(reply_msg, true);
- Send(reply_msg);
- reply_msg = NULL;
- }
-#endif
- result = npobject_->_class->setProperty(npobject_, id, &property_var);
- } else {
- result = false;
- }
- } else {
- result = WebBindings::setProperty(0, npobject_, id, &property_var);
- }
-
- WebBindings::releaseVariantValue(&property_var);
-
- if (reply_msg) {
- NPObjectMsg_SetProperty::WriteReplyParams(reply_msg, result);
- Send(reply_msg);
- }
-}
-
-void NPObjectStub::OnRemoveProperty(const NPIdentifier_Param& name,
- bool* result) {
- NPIdentifier id = CreateNPIdentifier(name);
- if (IsPluginProcess()) {
- if (npobject_->_class->removeProperty) {
- *result = npobject_->_class->removeProperty(npobject_, id);
- } else {
- *result = false;
- }
- } else {
- *result = WebBindings::removeProperty(0, npobject_, id);
- }
-}
-
-void NPObjectStub::OnInvalidate() {
- if (!IsPluginProcess()) {
- NOTREACHED() << "Should only be called on NPObjects in the plugin";
- return;
- }
-
- if (!npobject_->_class->invalidate)
- return;
-
- npobject_->_class->invalidate(npobject_);
-}
-
-void NPObjectStub::OnEnumeration(std::vector<NPIdentifier_Param>* value,
- bool* result) {
- NPIdentifier* value_np = NULL;
- unsigned int count = 0;
- if (!IsPluginProcess()) {
- *result = WebBindings::enumerate(0, npobject_, &value_np, &count);
- } else {
- if (npobject_->_class->structVersion < NP_CLASS_STRUCT_VERSION_ENUM ||
- !npobject_->_class->enumerate) {
- *result = false;
- return;
- }
-
- *result = npobject_->_class->enumerate(npobject_, &value_np, &count);
- }
-
- if (!*result)
- return;
-
- for (unsigned int i = 0; i < count; ++i) {
- NPIdentifier_Param param;
- CreateNPIdentifierParam(value_np[i], &param);
- value->push_back(param);
- }
-
- free(value_np);
-}
-
-void NPObjectStub::OnConstruct(const std::vector<NPVariant_Param>& args,
- IPC::Message* reply_msg) {
- bool return_value = false;
- NPVariant_Param result_param;
- NPVariant result_var;
-
- VOID_TO_NPVARIANT(result_var);
-
- int arg_count = static_cast<int>(args.size());
- NPVariant* args_var = new NPVariant[arg_count];
- for (int i = 0; i < arg_count; ++i) {
- if (!CreateNPVariant(args[i],
- channel_.get(),
- &(args_var[i]),
- render_view_id_,
- page_url_)) {
- NPObjectMsg_Invoke::WriteReplyParams(
- reply_msg, result_param, return_value);
- channel_->Send(reply_msg);
- delete[] args_var;
- return;
- }
- }
-
- if (IsPluginProcess()) {
- if (npobject_->_class->structVersion >= NP_CLASS_STRUCT_VERSION_CTOR &&
- npobject_->_class->construct) {
- return_value = npobject_->_class->construct(
- npobject_, args_var, arg_count, &result_var);
- } else {
- return_value = false;
- }
- } else {
- return_value = WebBindings::construct(
- 0, npobject_, args_var, arg_count, &result_var);
- }
-
- for (int i = 0; i < arg_count; ++i)
- WebBindings::releaseVariantValue(&(args_var[i]));
-
- delete[] args_var;
-
- CreateNPVariantParam(result_var,
- channel_.get(),
- &result_param,
- true,
- render_view_id_,
- page_url_);
- NPObjectMsg_Invoke::WriteReplyParams(reply_msg, result_param, return_value);
- channel_->Send(reply_msg);
-}
-
-void NPObjectStub::OnEvaluate(const std::string& script,
- bool popups_allowed,
- IPC::Message* reply_msg) {
- if (IsPluginProcess()) {
- NOTREACHED() << "Should only be called on NPObjects in the renderer";
- return;
- }
-
- NPVariant result_var;
- NPString script_string;
- script_string.UTF8Characters = script.c_str();
- script_string.UTF8Length = static_cast<unsigned int>(script.length());
-
- bool return_value = WebBindings::evaluateHelper(0, popups_allowed, npobject_,
- &script_string, &result_var);
-
- NPVariant_Param result_param;
- CreateNPVariantParam(result_var,
- channel_.get(),
- &result_param,
- true,
- render_view_id_,
- page_url_);
- NPObjectMsg_Evaluate::WriteReplyParams(reply_msg, result_param, return_value);
- channel_->Send(reply_msg);
-}
-
-} // namespace content
« no previous file with comments | « content/child/npapi/npobject_stub.h ('k') | content/child/npapi/npobject_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698