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

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

Issue 1851093005: Remove content/child/npapi (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove_combined_01_02
Patch Set: rebase Created 4 years, 8 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/np_channel_base.h ('k') | content/child/npapi/plugin_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/child/npapi/np_channel_base.cc
diff --git a/content/child/npapi/np_channel_base.cc b/content/child/npapi/np_channel_base.cc
deleted file mode 100644
index 29984ea017807eb9e852cbea21c61b90396ff5b8..0000000000000000000000000000000000000000
--- a/content/child/npapi/np_channel_base.cc
+++ /dev/null
@@ -1,281 +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/np_channel_base.h"
-
-#include <stddef.h>
-
-#include "base/auto_reset.h"
-#include "base/containers/hash_tables.h"
-#include "base/files/scoped_file.h"
-#include "base/lazy_instance.h"
-#include "base/single_thread_task_runner.h"
-#include "base/threading/thread_local.h"
-#include "build/build_config.h"
-#include "ipc/ipc_sync_message.h"
-
-#if defined(OS_POSIX)
-#include "base/files/file_util.h"
-#include "ipc/ipc_channel_posix.h"
-#endif
-
-namespace content {
-
-namespace {
-
-typedef base::hash_map<std::string, scoped_refptr<NPChannelBase> > ChannelMap;
-
-struct ChannelGlobals {
- ChannelMap channel_map;
- scoped_refptr<NPChannelBase> current_channel;
-};
-
-#if defined(OS_ANDROID)
-// Workaround for http://crbug.com/298179 - NPChannelBase is only intended
-// for use on one thread per process. Using TLS to store the globals removes the
-// worst thread hostility in this class, especially needed for webview which
-// runs in single-process mode. TODO(joth): Make a complete fix, most likely
-// as part of addressing http://crbug.com/258510.
-base::LazyInstance<base::ThreadLocalPointer<ChannelGlobals> >::Leaky
- g_channels_tls_ptr = LAZY_INSTANCE_INITIALIZER;
-
-ChannelGlobals* GetChannelGlobals() {
- ChannelGlobals* globals = g_channels_tls_ptr.Get().Get();
- if (!globals) {
- globals = new ChannelGlobals;
- g_channels_tls_ptr.Get().Set(globals);
- }
- return globals;
-}
-
-#else
-
-base::LazyInstance<ChannelGlobals>::Leaky g_channels_globals =
- LAZY_INSTANCE_INITIALIZER;
-
-ChannelGlobals* GetChannelGlobals() { return g_channels_globals.Pointer(); }
-
-#endif // OS_ANDROID
-
-ChannelMap* GetChannelMap() {
- return &GetChannelGlobals()->channel_map;
-}
-
-} // namespace
-
-NPChannelBase* NPChannelBase::GetChannel(
- const IPC::ChannelHandle& channel_handle,
- IPC::Channel::Mode mode,
- ChannelFactory factory,
- base::SingleThreadTaskRunner* ipc_task_runner,
- bool create_pipe_now,
- base::WaitableEvent* shutdown_event) {
-#if defined(OS_POSIX)
- // On POSIX the channel_handle conveys an FD (socket) which is duped by the
- // kernel during the IPC message exchange (via the SCM_RIGHTS mechanism).
- // Ensure we do not leak this FD.
- base::ScopedFD fd(channel_handle.socket.auto_close ?
- channel_handle.socket.fd : -1);
-#endif
-
- scoped_refptr<NPChannelBase> channel;
- std::string channel_key = channel_handle.name;
- ChannelMap::const_iterator iter = GetChannelMap()->find(channel_key);
- if (iter == GetChannelMap()->end()) {
- channel = factory();
- } else {
- channel = iter->second;
- }
-
- DCHECK(channel.get() != NULL);
-
- if (!channel->channel_valid()) {
- channel->channel_handle_ = channel_handle;
-#if defined(OS_POSIX)
- ignore_result(fd.release());
-#endif
- if (mode & IPC::Channel::MODE_SERVER_FLAG) {
- channel->channel_handle_.name =
- IPC::Channel::GenerateVerifiedChannelID(channel_key);
- }
- channel->mode_ = mode;
- if (channel->Init(ipc_task_runner, create_pipe_now, shutdown_event)) {
- (*GetChannelMap())[channel_key] = channel;
- } else {
- channel = NULL;
- }
- }
-
- return channel.get();
-}
-
-void NPChannelBase::Broadcast(IPC::Message* message) {
- for (ChannelMap::iterator iter = GetChannelMap()->begin();
- iter != GetChannelMap()->end();
- ++iter) {
- iter->second->Send(new IPC::Message(*message));
- }
- delete message;
-}
-
-NPChannelBase::NPChannelBase()
- : mode_(IPC::Channel::MODE_NONE),
- non_npobject_count_(0),
- peer_pid_(0),
- channel_valid_(false),
- in_unblock_dispatch_(0),
- send_unblocking_only_during_unblock_dispatch_(false) {
-}
-
-NPChannelBase::~NPChannelBase() {
-}
-
-NPChannelBase* NPChannelBase::GetCurrentChannel() {
- return GetChannelGlobals()->current_channel.get();
-}
-
-void NPChannelBase::CleanupChannels() {
- // Make a copy of the references as we can't iterate the map since items will
- // be removed from it as we clean them up.
- std::vector<scoped_refptr<NPChannelBase> > channels;
- for (ChannelMap::const_iterator iter = GetChannelMap()->begin();
- iter != GetChannelMap()->end();
- ++iter) {
- channels.push_back(iter->second);
- }
-
- for (size_t i = 0; i < channels.size(); ++i)
- channels[i]->CleanUp();
-
- // This will clean up channels added to the map for which subsequent
- // AddRoute wasn't called
- GetChannelMap()->clear();
-}
-
-base::WaitableEvent* NPChannelBase::GetModalDialogEvent(int render_view_id) {
- return NULL;
-}
-
-bool NPChannelBase::Init(base::SingleThreadTaskRunner* ipc_task_runner,
- bool create_pipe_now,
- base::WaitableEvent* shutdown_event) {
-#if defined(OS_POSIX)
- // Attempting to initialize with an invalid channel handle.
- // See http://crbug.com/97285 for details.
- if (mode_ == IPC::Channel::MODE_CLIENT && -1 == channel_handle_.socket.fd)
- return false;
-#endif
-
- channel_ =
- IPC::SyncChannel::Create(channel_handle_, mode_, this, ipc_task_runner,
- create_pipe_now, shutdown_event);
-
-#if defined(OS_POSIX)
- // Check the validity of fd for bug investigation. Remove after fixed.
- // See crbug.com/97285 for details.
- if (mode_ == IPC::Channel::MODE_SERVER)
- CHECK_NE(-1, channel_->GetClientFileDescriptor());
-#endif
-
- channel_valid_ = true;
- return true;
-}
-
-bool NPChannelBase::Send(IPC::Message* message) {
- if (!channel_) {
- VLOG(1) << "Channel is NULL; dropping message";
- delete message;
- return false;
- }
-
- if (send_unblocking_only_during_unblock_dispatch_ &&
- in_unblock_dispatch_ == 0 &&
- message->is_sync()) {
- message->set_unblock(false);
- }
-
- return channel_->Send(message);
-}
-
-bool NPChannelBase::OnMessageReceived(const IPC::Message& message) {
- // Push this channel as the current channel being processed. This also forms
- // a stack of scoped_refptr avoiding ourselves (or any instance higher
- // up the callstack) from being deleted while processing a message.
- base::AutoReset<scoped_refptr<NPChannelBase> > keep_alive(
- &GetChannelGlobals()->current_channel, this);
-
- bool handled;
- if (message.should_unblock())
- in_unblock_dispatch_++;
- if (message.routing_id() == MSG_ROUTING_CONTROL) {
- handled = OnControlMessageReceived(message);
- } else {
- handled = router_.RouteMessage(message);
- if (!handled && message.is_sync()) {
- // The listener has gone away, so we must respond or else the caller will
- // hang waiting for a reply.
- IPC::Message* reply = IPC::SyncMessage::GenerateReply(&message);
- reply->set_reply_error();
- Send(reply);
- }
- }
- if (message.should_unblock())
- in_unblock_dispatch_--;
-
- return handled;
-}
-
-void NPChannelBase::OnChannelConnected(int32_t peer_pid) {
- peer_pid_ = peer_pid;
-}
-
-void NPChannelBase::AddRoute(int route_id, IPC::Listener* listener) {
- non_npobject_count_++;
- router_.AddRoute(route_id, listener);
-}
-
-void NPChannelBase::RemoveRoute(int route_id) {
- router_.RemoveRoute(route_id);
-
- non_npobject_count_--;
- DCHECK(non_npobject_count_ >= 0);
-
- if (!non_npobject_count_) {
- for (ChannelMap::iterator iter = GetChannelMap()->begin();
- iter != GetChannelMap()->end(); ++iter) {
- if (iter->second.get() == this) {
- GetChannelMap()->erase(iter);
- return;
- }
- }
-
- NOTREACHED();
- }
-}
-
-bool NPChannelBase::OnControlMessageReceived(const IPC::Message& msg) {
- NOTREACHED() <<
- "should override in subclass if you care about control messages";
- return false;
-}
-
-void NPChannelBase::OnChannelError() {
- channel_valid_ = false;
-
- // TODO(shess): http://crbug.com/97285
- // Once an error is seen on a channel, remap the channel to prevent
- // it from being vended again. Keep the channel in the map so
- // RemoveRoute() can clean things up correctly.
- for (ChannelMap::iterator iter = GetChannelMap()->begin();
- iter != GetChannelMap()->end(); ++iter) {
- if (iter->second.get() == this) {
- // Insert new element before invalidating |iter|.
- (*GetChannelMap())[iter->first + "-error"] = iter->second;
- GetChannelMap()->erase(iter);
- break;
- }
- }
-}
-
-} // namespace content
« no previous file with comments | « content/child/npapi/np_channel_base.h ('k') | content/child/npapi/plugin_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698