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

Side by Side Diff: content/renderer/npapi/plugin_channel_host.cc

Issue 1483733002: Remove support for NPObjects. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/npapi/plugin_channel_host.h" 5 #include "content/renderer/npapi/plugin_channel_host.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
11 #include "build/build_config.h" 11 #include "build/build_config.h"
12 #include "content/child/child_process.h" 12 #include "content/child/child_process.h"
13 #include "content/child/npapi/npobject_base.h"
14 #include "content/child/plugin_messages.h" 13 #include "content/child/plugin_messages.h"
15 14
16 #if defined(OS_POSIX) 15 #if defined(OS_POSIX)
17 #include "ipc/ipc_channel_posix.h" 16 #include "ipc/ipc_channel_posix.h"
18 #endif 17 #endif
19 18
20 #include "third_party/WebKit/public/web/WebBindings.h"
21
22 // TODO(shess): Debugging for http://crbug.com/97285 19 // TODO(shess): Debugging for http://crbug.com/97285
23 // 20 //
24 // The hypothesis at #55 requires that RemoveRoute() be called between 21 // The hypothesis at #55 requires that RemoveRoute() be called between
25 // sending ViewHostMsg_OpenChannelToPlugin to the browser, and calling 22 // sending ViewHostMsg_OpenChannelToPlugin to the browser, and calling
26 // GetPluginChannelHost() on the result. This code detects that case 23 // GetPluginChannelHost() on the result. This code detects that case
27 // and stores the backtrace of the RemoveRoute() in a breakpad key. 24 // and stores the backtrace of the RemoveRoute() in a breakpad key.
28 // The specific RemoveRoute() is not tracked (there could be multiple, 25 // The specific RemoveRoute() is not tracked (there could be multiple,
29 // and which is the one can't be known until the open completes), but 26 // and which is the one can't be known until the open completes), but
30 // the backtrace from any such nested call should be sufficient to 27 // the backtrace from any such nested call should be sufficient to
31 // drive a repro. 28 // drive a repro.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 return NPChannelBase::Init(ipc_task_runner, create_pipe_now, shutdown_event); 80 return NPChannelBase::Init(ipc_task_runner, create_pipe_now, shutdown_event);
84 } 81 }
85 82
86 int PluginChannelHost::GenerateRouteID() { 83 int PluginChannelHost::GenerateRouteID() {
87 int route_id = MSG_ROUTING_NONE; 84 int route_id = MSG_ROUTING_NONE;
88 Send(new PluginMsg_GenerateRouteID(&route_id)); 85 Send(new PluginMsg_GenerateRouteID(&route_id));
89 86
90 return route_id; 87 return route_id;
91 } 88 }
92 89
93 void PluginChannelHost::AddRoute(int route_id, 90 void PluginChannelHost::AddRoute(int route_id, IPC::Listener* listener) {
94 IPC::Listener* listener, 91 NPChannelBase::AddRoute(route_id, listener);
95 NPObjectBase* npobject) { 92 proxies_[route_id] = listener;
96 NPChannelBase::AddRoute(route_id, listener, npobject);
97
98 if (!npobject)
99 proxies_[route_id] = listener;
100 } 93 }
101 94
102 void PluginChannelHost::RemoveRoute(int route_id) { 95 void PluginChannelHost::RemoveRoute(int route_id) {
103 #if defined(OS_MACOSX) 96 #if defined(OS_MACOSX)
104 if (remove_tracking) { 97 if (remove_tracking) {
105 base::debug::StackTrace trace; 98 base::debug::StackTrace trace;
106 size_t count = 0; 99 size_t count = 0;
107 const void* const* addresses = trace.Addresses(&count); 100 const void* const* addresses = trace.Addresses(&count);
108 base::debug::SetCrashKeyFromAddresses( 101 base::debug::SetCrashKeyFromAddresses(
109 kRemoveRouteTraceKey, addresses, count); 102 kRemoveRouteTraceKey, addresses, count);
110 } 103 }
111 #endif 104 #endif
112 105
113 proxies_.erase(route_id); 106 proxies_.erase(route_id);
114 NPChannelBase::RemoveRoute(route_id); 107 NPChannelBase::RemoveRoute(route_id);
115 } 108 }
116 109
117 bool PluginChannelHost::OnControlMessageReceived(const IPC::Message& message) { 110 bool PluginChannelHost::OnControlMessageReceived(const IPC::Message& message) {
118 bool handled = true; 111 bool handled = true;
119 IPC_BEGIN_MESSAGE_MAP(PluginChannelHost, message) 112 IPC_BEGIN_MESSAGE_MAP(PluginChannelHost, message)
120 IPC_MESSAGE_HANDLER(PluginHostMsg_SetException, OnSetException)
121 IPC_MESSAGE_HANDLER(PluginHostMsg_PluginShuttingDown, OnPluginShuttingDown) 113 IPC_MESSAGE_HANDLER(PluginHostMsg_PluginShuttingDown, OnPluginShuttingDown)
122 IPC_MESSAGE_UNHANDLED(handled = false) 114 IPC_MESSAGE_UNHANDLED(handled = false)
123 IPC_END_MESSAGE_MAP() 115 IPC_END_MESSAGE_MAP()
124 DCHECK(handled); 116 DCHECK(handled);
125 return handled; 117 return handled;
126 } 118 }
127 119
128 void PluginChannelHost::OnSetException(const std::string& message) {
129 blink::WebBindings::setException(NULL, message.c_str());
130 }
131
132 void PluginChannelHost::OnPluginShuttingDown() { 120 void PluginChannelHost::OnPluginShuttingDown() {
133 expecting_shutdown_ = true; 121 expecting_shutdown_ = true;
134 } 122 }
135 123
136 bool PluginChannelHost::Send(IPC::Message* msg) { 124 bool PluginChannelHost::Send(IPC::Message* msg) {
137 if (msg->is_sync()) { 125 if (msg->is_sync()) {
138 base::TimeTicks start_time(base::TimeTicks::Now()); 126 base::TimeTicks start_time(base::TimeTicks::Now());
139 bool result = NPChannelBase::Send(msg); 127 bool result = NPChannelBase::Send(msg);
140 UMA_HISTOGRAM_TIMES("Plugin.SyncMessageTime", 128 UMA_HISTOGRAM_TIMES("Plugin.SyncMessageTime",
141 base::TimeTicks::Now() - start_time); 129 base::TimeTicks::Now() - start_time);
(...skipping 17 matching lines...) Expand all
159 147
160 for (ProxyMap::iterator iter = proxies_.begin(); 148 for (ProxyMap::iterator iter = proxies_.begin();
161 iter != proxies_.end(); iter++) { 149 iter != proxies_.end(); iter++) {
162 iter->second->OnChannelError(); 150 iter->second->OnChannelError();
163 } 151 }
164 152
165 proxies_.clear(); 153 proxies_.clear();
166 } 154 }
167 155
168 } // namespace content 156 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/npapi/plugin_channel_host.h ('k') | content/renderer/npapi/webplugin_delegate_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698