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

Side by Side Diff: content/renderer/pepper/pepper_plugin_delegate_impl.cc

Issue 11820009: Distinguish plugin disconnections from plugin crashes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « content/public/browser/web_contents_observer.h ('k') | content/renderer/render_view_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/pepper/pepper_plugin_delegate_impl.h" 5 #include "content/renderer/pepper/pepper_plugin_delegate_impl.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <cstddef> 8 #include <cstddef>
9 #include <map> 9 #include <map>
10 #include <queue> 10 #include <queue>
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 dispatcher_.reset(); 143 dispatcher_.reset();
144 dispatcher_delegate_.reset(); 144 dispatcher_delegate_.reset();
145 return false; 145 return false;
146 } 146 }
147 dispatcher_->channel()->SetRestrictDispatchChannelGroup( 147 dispatcher_->channel()->SetRestrictDispatchChannelGroup(
148 kRendererRestrictDispatchGroup_Pepper); 148 kRendererRestrictDispatchGroup_Pepper);
149 return true; 149 return true;
150 } 150 }
151 151
152 // OutOfProcessProxy implementation. 152 // OutOfProcessProxy implementation.
153 virtual const void* GetProxiedInterface(const char* name) { 153 virtual const void* GetProxiedInterface(const char* name) OVERRIDE {
154 return dispatcher_->GetProxiedInterface(name); 154 return dispatcher_->GetProxiedInterface(name);
155 } 155 }
156 virtual void AddInstance(PP_Instance instance) { 156 virtual void AddInstance(PP_Instance instance) OVERRIDE {
157 ppapi::proxy::HostDispatcher::SetForInstance(instance, dispatcher_.get()); 157 ppapi::proxy::HostDispatcher::SetForInstance(instance, dispatcher_.get());
158 158
159 RendererPpapiHostImpl* host = 159 RendererPpapiHostImpl* host =
160 RendererPpapiHostImpl::GetForPPInstance(instance); 160 RendererPpapiHostImpl::GetForPPInstance(instance);
161 // TODO(brettw) remove this null check when the old-style pepper-based 161 // TODO(brettw) remove this null check when the old-style pepper-based
162 // browser tag is removed from this file. Getting this notification should 162 // browser tag is removed from this file. Getting this notification should
163 // always give us an instance we can find in the map otherwise, but that 163 // always give us an instance we can find in the map otherwise, but that
164 // isn't true for browser tag support. 164 // isn't true for browser tag support.
165 if (host) { 165 if (host) {
166 RenderView* render_view = host->GetRenderViewForInstance(instance); 166 RenderView* render_view = host->GetRenderViewForInstance(instance);
167 webkit::ppapi::PluginInstance* plugin_instance = 167 webkit::ppapi::PluginInstance* plugin_instance =
168 host->GetPluginInstance(instance); 168 host->GetPluginInstance(instance);
169 render_view->Send(new ViewHostMsg_DidCreateOutOfProcessPepperInstance( 169 render_view->Send(new ViewHostMsg_DidCreateOutOfProcessPepperInstance(
170 plugin_child_id_, 170 plugin_child_id_,
171 instance, 171 instance,
172 PepperRendererInstanceData( 172 PepperRendererInstanceData(
173 0, // The render process id will be supplied in the browser. 173 0, // The render process id will be supplied in the browser.
174 render_view->GetRoutingID(), 174 render_view->GetRoutingID(),
175 plugin_instance->container()->element().document().url(), 175 plugin_instance->container()->element().document().url(),
176 plugin_instance->plugin_url()), 176 plugin_instance->plugin_url()),
177 is_external_)); 177 is_external_));
178 } 178 }
179 } 179 }
180 virtual void RemoveInstance(PP_Instance instance) { 180 virtual void RemoveInstance(PP_Instance instance) OVERRIDE {
181 ppapi::proxy::HostDispatcher::RemoveForInstance(instance); 181 ppapi::proxy::HostDispatcher::RemoveForInstance(instance);
182 182
183 RendererPpapiHostImpl* host = 183 RendererPpapiHostImpl* host =
184 RendererPpapiHostImpl::GetForPPInstance(instance); 184 RendererPpapiHostImpl::GetForPPInstance(instance);
185 // TODO(brettw) remove null check as described in AddInstance. 185 // TODO(brettw) remove null check as described in AddInstance.
186 if (host) { 186 if (host) {
187 RenderView* render_view = host->GetRenderViewForInstance(instance); 187 RenderView* render_view = host->GetRenderViewForInstance(instance);
188 render_view->Send(new ViewHostMsg_DidDeleteOutOfProcessPepperInstance( 188 render_view->Send(new ViewHostMsg_DidDeleteOutOfProcessPepperInstance(
189 plugin_child_id_, 189 plugin_child_id_,
190 instance, 190 instance,
191 is_external_)); 191 is_external_));
192 } 192 }
193 } 193 }
194 virtual base::ProcessId GetPeerProcessId() OVERRIDE {
195 return peer_pid_;
196 }
194 197
195 ppapi::proxy::HostDispatcher* dispatcher() { return dispatcher_.get(); } 198 ppapi::proxy::HostDispatcher* dispatcher() { return dispatcher_.get(); }
196 199
197 private: 200 private:
198 webkit::ppapi::PluginModule* module_; 201 webkit::ppapi::PluginModule* module_;
199 202
200 base::ProcessId peer_pid_; 203 base::ProcessId peer_pid_;
201 204
202 // ID that the browser process uses to idetify the child process for the 205 // ID that the browser process uses to idetify the child process for the
203 // plugin. This isn't directly useful from our process (the renderer) except 206 // plugin. This isn't directly useful from our process (the renderer) except
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
753 return false; 756 return false;
754 return focused_plugin_->IsPluginAcceptingCompositionEvents(); 757 return focused_plugin_->IsPluginAcceptingCompositionEvents();
755 } 758 }
756 759
757 bool PepperPluginDelegateImpl::CanComposeInline() const { 760 bool PepperPluginDelegateImpl::CanComposeInline() const {
758 return IsPluginAcceptingCompositionEvents(); 761 return IsPluginAcceptingCompositionEvents();
759 } 762 }
760 763
761 void PepperPluginDelegateImpl::PluginCrashed( 764 void PepperPluginDelegateImpl::PluginCrashed(
762 webkit::ppapi::PluginInstance* instance) { 765 webkit::ppapi::PluginInstance* instance) {
763 render_view_->PluginCrashed(instance->module()->path()); 766 render_view_->PluginCrashed(instance->module()->path(),
767 instance->module()->GetPeerProcessId());
764 UnSetAndDeleteLockTargetAdapter(instance); 768 UnSetAndDeleteLockTargetAdapter(instance);
765 } 769 }
766 770
767 void PepperPluginDelegateImpl::InstanceCreated( 771 void PepperPluginDelegateImpl::InstanceCreated(
768 webkit::ppapi::PluginInstance* instance) { 772 webkit::ppapi::PluginInstance* instance) {
769 active_instances_.insert(instance); 773 active_instances_.insert(instance);
770 774
771 // Set the initial focus. 775 // Set the initial focus.
772 instance->SetContentAreaFocus(render_view_->has_focus()); 776 instance->SetContentAreaFocus(render_view_->has_focus());
773 } 777 }
(...skipping 955 matching lines...) Expand 10 before | Expand all | Expand 10 after
1729 RenderWidgetFullscreenPepper* container = 1733 RenderWidgetFullscreenPepper* container =
1730 static_cast<RenderWidgetFullscreenPepper*>( 1734 static_cast<RenderWidgetFullscreenPepper*>(
1731 instance->fullscreen_container()); 1735 instance->fullscreen_container());
1732 return container->mouse_lock_dispatcher(); 1736 return container->mouse_lock_dispatcher();
1733 } else { 1737 } else {
1734 return render_view_->mouse_lock_dispatcher(); 1738 return render_view_->mouse_lock_dispatcher();
1735 } 1739 }
1736 } 1740 }
1737 1741
1738 } // namespace content 1742 } // namespace content
OLDNEW
« no previous file with comments | « content/public/browser/web_contents_observer.h ('k') | content/renderer/render_view_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698