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

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

Issue 324883002: Merge 275861 "Revert 274770 "Ensure that in-process plugins can'..." (Closed) Base URL: svn://svn.chromium.org/chrome/branches/2041/src/
Patch Set: Created 6 years, 6 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 | « no previous file | content/renderer/pepper/pepper_plugin_instance_impl.cc » ('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_in_process_router.h" 5 #include "content/renderer/pepper/pepper_in_process_router.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "content/public/renderer/render_thread.h" 9 #include "content/public/renderer/render_thread.h"
10 #include "content/renderer/pepper/renderer_ppapi_host_impl.h" 10 #include "content/renderer/pepper/renderer_ppapi_host_impl.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 // If the resource doesn't exist, it may have been destroyed so just ignore 96 // If the resource doesn't exist, it may have been destroyed so just ignore
97 // the message. 97 // the message.
98 if (resource) 98 if (resource)
99 resource->OnReplyReceived(reply_params, nested_msg); 99 resource->OnReplyReceived(reply_params, nested_msg);
100 return true; 100 return true;
101 } 101 }
102 102
103 bool PepperInProcessRouter::SendToHost(IPC::Message* msg) { 103 bool PepperInProcessRouter::SendToHost(IPC::Message* msg) {
104 scoped_ptr<IPC::Message> message(msg); 104 scoped_ptr<IPC::Message> message(msg);
105 105
106 // Unpack the message so we can peek at its nested type.
107 uint32 call_type = 0;
108 if (message->type() == PpapiHostMsg_ResourceCall::ID) {
109 ppapi::proxy::ResourceMessageCallParams call_params;
110 IPC::Message nested_msg;
111 if (!UnpackMessage<PpapiHostMsg_ResourceCall>(*msg, &call_params,
112 &nested_msg)) {
113 NOTREACHED();
114 return false;
115 }
116 call_type = nested_msg.type();
117 // Repack the message.
118 message.reset(new PpapiHostMsg_ResourceCall(call_params, nested_msg));
119 }
120
121 if (!message->is_sync()) { 106 if (!message->is_sync()) {
107 // If this is a resource destroyed message, post a task to dispatch it.
108 // Dispatching it synchronously can cause the host to re-enter the proxy
109 // code while we're still in the resource destructor, leading to a crash.
110 // http://crbug.com/276368.
111 // This won't cause message reordering problems because the resource
112 // destroyed message is always the last one sent for a resource.
122 if (message->type() == PpapiHostMsg_ResourceDestroyed::ID) { 113 if (message->type() == PpapiHostMsg_ResourceDestroyed::ID) {
123 // If this is a resource destroyed message, post a task to dispatch it.
124 // Dispatching it synchronously can cause the host to re-enter the proxy
125 // code while we're still in the resource destructor, leading to a crash.
126 // http://crbug.com/276368.
127 // This won't cause message reordering problems because the resource
128 // destroyed message is always the last one sent for a resource.
129 base::MessageLoop::current()->PostTask(
130 FROM_HERE,
131 base::Bind(&PepperInProcessRouter::DispatchHostMsg,
132 weak_factory_.GetWeakPtr(),
133 base::Owned(message.release())));
134 return true;
135 } else if (call_type == PpapiHostMsg_URLLoader_Close::ID) {
136 // If this is a PpapiHostMsg_URLLoader_Close, it could trigger the
137 // destruction of the instance (crbug.com/372548) so post a task to
138 // dispatch it as well. Because PpapiHostMsg_ResourceDestroyed messages
139 // are also posted above, ordering with respect to those messages will
140 // still be correct. Ordering with respect to other messages should not
141 // be important.
142 base::MessageLoop::current()->PostTask( 114 base::MessageLoop::current()->PostTask(
143 FROM_HERE, 115 FROM_HERE,
144 base::Bind(&PepperInProcessRouter::DispatchHostMsg, 116 base::Bind(&PepperInProcessRouter::DispatchHostMsg,
145 weak_factory_.GetWeakPtr(), 117 weak_factory_.GetWeakPtr(),
146 base::Owned(message.release()))); 118 base::Owned(message.release())));
147 return true; 119 return true;
148 } else { 120 } else {
149 bool result = host_impl_->GetPpapiHost()->OnMessageReceived(*message); 121 bool result = host_impl_->GetPpapiHost()->OnMessageReceived(*message);
150 DCHECK(result) << "The message was not handled by the host."; 122 DCHECK(result) << "The message was not handled by the host.";
151 return true; 123 return true;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 void PepperInProcessRouter::DispatchPluginMsg(IPC::Message* msg) { 163 void PepperInProcessRouter::DispatchPluginMsg(IPC::Message* msg) {
192 bool handled = OnPluginMsgReceived(*msg); 164 bool handled = OnPluginMsgReceived(*msg);
193 DCHECK(handled); 165 DCHECK(handled);
194 } 166 }
195 167
196 bool PepperInProcessRouter::SendToBrowser(IPC::Message* msg) { 168 bool PepperInProcessRouter::SendToBrowser(IPC::Message* msg) {
197 return RenderThread::Get()->Send(msg); 169 return RenderThread::Get()->Send(msg);
198 } 170 }
199 171
200 } // namespace content 172 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/renderer/pepper/pepper_plugin_instance_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698