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

Side by Side Diff: content/browser/browser_plugin/browser_plugin_embedder.cc

Issue 11956022: Browser Plugin: Allocate Instance IDs in BrowserPluginEmbedder instead of BrowserPluginManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed creis' comments 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
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/browser/browser_plugin/browser_plugin_embedder.h" 5 #include "content/browser/browser_plugin/browser_plugin_embedder.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "content/browser/browser_plugin/browser_plugin_guest.h" 8 #include "content/browser/browser_plugin/browser_plugin_guest.h"
9 #include "content/browser/browser_plugin/browser_plugin_host_factory.h" 9 #include "content/browser/browser_plugin/browser_plugin_host_factory.h"
10 #include "content/browser/renderer_host/render_view_host_impl.h" 10 #include "content/browser/renderer_host/render_view_host_impl.h"
(...skipping 13 matching lines...) Expand all
24 24
25 // static 25 // static
26 BrowserPluginHostFactory* BrowserPluginEmbedder::factory_ = NULL; 26 BrowserPluginHostFactory* BrowserPluginEmbedder::factory_ = NULL;
27 27
28 BrowserPluginEmbedder::BrowserPluginEmbedder( 28 BrowserPluginEmbedder::BrowserPluginEmbedder(
29 WebContentsImpl* web_contents, 29 WebContentsImpl* web_contents,
30 RenderViewHost* render_view_host) 30 RenderViewHost* render_view_host)
31 : WebContentsObserver(web_contents), 31 : WebContentsObserver(web_contents),
32 render_view_host_(render_view_host), 32 render_view_host_(render_view_host),
33 visible_(true), 33 visible_(true),
34 next_get_render_view_request_id_(0) { 34 next_get_render_view_request_id_(0),
35 next_instance_id_(0) {
35 // Listen to visibility changes so that an embedder hides its guests 36 // Listen to visibility changes so that an embedder hides its guests
36 // as well. 37 // as well.
37 registrar_.Add(this, 38 registrar_.Add(this,
38 NOTIFICATION_WEB_CONTENTS_VISIBILITY_CHANGED, 39 NOTIFICATION_WEB_CONTENTS_VISIBILITY_CHANGED,
39 Source<WebContents>(web_contents)); 40 Source<WebContents>(web_contents));
40 } 41 }
41 42
42 BrowserPluginEmbedder::~BrowserPluginEmbedder() { 43 BrowserPluginEmbedder::~BrowserPluginEmbedder() {
43 CleanUp(); 44 CleanUp();
44 } 45 }
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 149
149 // Create a swapped out RenderView for the guest in the embedder render 150 // Create a swapped out RenderView for the guest in the embedder render
150 // process, so that the embedder can access the guest's window object. 151 // process, so that the embedder can access the guest's window object.
151 int guest_routing_id = 152 int guest_routing_id =
152 static_cast<WebContentsImpl*>(guest->GetWebContents())-> 153 static_cast<WebContentsImpl*>(guest->GetWebContents())->
153 CreateSwappedOutRenderView(web_contents()->GetSiteInstance()); 154 CreateSwappedOutRenderView(web_contents()->GetSiteInstance());
154 render_view_host_->Send(new BrowserPluginMsg_GuestContentWindowReady( 155 render_view_host_->Send(new BrowserPluginMsg_GuestContentWindowReady(
155 render_view_host_->GetRoutingID(), instance_id, guest_routing_id)); 156 render_view_host_->GetRoutingID(), instance_id, guest_routing_id));
156 157
157 guest->Initialize(params, guest_web_contents->GetRenderViewHost()); 158 guest->Initialize(params, guest_web_contents->GetRenderViewHost());
159
160 if (params.src.empty())
161 return;
162
163 BrowserPluginHostMsg_NavigateGuest navigate_msg(
164 render_view_host_->GetRoutingID(), instance_id, params.src);
165 GetGuestByInstanceID(instance_id)->
166 OnMessageReceivedFromEmbedder(navigate_msg);
158 } 167 }
159 168
160 BrowserPluginGuest* BrowserPluginEmbedder::GetGuestByInstanceID( 169 BrowserPluginGuest* BrowserPluginEmbedder::GetGuestByInstanceID(
161 int instance_id) const { 170 int instance_id) const {
162 ContainerInstanceMap::const_iterator it = 171 ContainerInstanceMap::const_iterator it =
163 guest_web_contents_by_instance_id_.find(instance_id); 172 guest_web_contents_by_instance_id_.find(instance_id);
164 if (it != guest_web_contents_by_instance_id_.end()) 173 if (it != guest_web_contents_by_instance_id_.end())
165 return static_cast<WebContentsImpl*>(it->second)->GetBrowserPluginGuest(); 174 return static_cast<WebContentsImpl*>(it->second)->GetBrowserPluginGuest();
166 return NULL; 175 return NULL;
167 } 176 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 // All allowed messages must have instance_id as their first parameter. 213 // All allowed messages must have instance_id as their first parameter.
205 PickleIterator iter(message); 214 PickleIterator iter(message);
206 bool success = iter.ReadInt(&instance_id); 215 bool success = iter.ReadInt(&instance_id);
207 DCHECK(success); 216 DCHECK(success);
208 BrowserPluginGuest* guest = GetGuestByInstanceID(instance_id); 217 BrowserPluginGuest* guest = GetGuestByInstanceID(instance_id);
209 if (guest && guest->OnMessageReceivedFromEmbedder(message)) 218 if (guest && guest->OnMessageReceivedFromEmbedder(message))
210 return true; 219 return true;
211 } 220 }
212 bool handled = true; 221 bool handled = true;
213 IPC_BEGIN_MESSAGE_MAP(BrowserPluginEmbedder, message) 222 IPC_BEGIN_MESSAGE_MAP(BrowserPluginEmbedder, message)
223 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_AllocateInstanceID,
224 OnAllocateInstanceID)
214 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_CreateGuest, 225 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_CreateGuest,
215 OnCreateGuest) 226 OnCreateGuest)
216 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_PluginAtPositionResponse, 227 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_PluginAtPositionResponse,
217 OnPluginAtPositionResponse) 228 OnPluginAtPositionResponse)
218 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_PluginDestroyed, 229 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_PluginDestroyed,
219 OnPluginDestroyed) 230 OnPluginDestroyed)
220 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_BuffersSwappedACK, 231 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_BuffersSwappedACK,
221 OnSwapBuffersACK) 232 OnSwapBuffersACK)
222 IPC_MESSAGE_UNHANDLED(handled = false) 233 IPC_MESSAGE_UNHANDLED(handled = false)
223 IPC_END_MESSAGE_MAP() 234 IPC_END_MESSAGE_MAP()
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 case BrowserPluginHostMsg_Stop::ID: 298 case BrowserPluginHostMsg_Stop::ID:
288 case BrowserPluginHostMsg_TerminateGuest::ID: 299 case BrowserPluginHostMsg_TerminateGuest::ID:
289 case BrowserPluginHostMsg_UpdateRect_ACK::ID: 300 case BrowserPluginHostMsg_UpdateRect_ACK::ID:
290 return true; 301 return true;
291 default: 302 default:
292 break; 303 break;
293 } 304 }
294 return false; 305 return false;
295 } 306 }
296 307
308 void BrowserPluginEmbedder::OnAllocateInstanceID(int request_id) {
309 int instance_id = ++next_instance_id_;
310 render_view_host_->Send(new BrowserPluginMsg_AllocateInstanceID_ACK(
311 render_view_host_->GetRoutingID(), request_id, instance_id));
312 }
313
297 void BrowserPluginEmbedder::OnCreateGuest( 314 void BrowserPluginEmbedder::OnCreateGuest(
298 int instance_id, 315 int instance_id,
299 const BrowserPluginHostMsg_CreateGuest_Params& params) { 316 const BrowserPluginHostMsg_CreateGuest_Params& params) {
300 CreateGuest(instance_id, MSG_ROUTING_NONE, NULL, params); 317 CreateGuest(instance_id, MSG_ROUTING_NONE, NULL, params);
301 } 318 }
302 319
303 void BrowserPluginEmbedder::OnPluginAtPositionResponse( 320 void BrowserPluginEmbedder::OnPluginAtPositionResponse(
304 int instance_id, int request_id, const gfx::Point& position) { 321 int instance_id, int request_id, const gfx::Point& position) {
305 const std::map<int, WebContents::GetRenderViewHostCallback>::iterator 322 const std::map<int, WebContents::GetRenderViewHostCallback>::iterator
306 callback_iter = pending_get_render_view_callbacks_.find(request_id); 323 callback_iter = pending_get_render_view_callbacks_.find(request_id);
(...skipping 21 matching lines...) Expand all
328 uint32 sync_point) { 345 uint32 sync_point) {
329 AcceleratedSurfaceMsg_BufferPresented_Params ack_params; 346 AcceleratedSurfaceMsg_BufferPresented_Params ack_params;
330 ack_params.mailbox_name = mailbox_name; 347 ack_params.mailbox_name = mailbox_name;
331 ack_params.sync_point = sync_point; 348 ack_params.sync_point = sync_point;
332 RenderWidgetHostImpl::AcknowledgeBufferPresent(route_id, 349 RenderWidgetHostImpl::AcknowledgeBufferPresent(route_id,
333 gpu_host_id, 350 gpu_host_id,
334 ack_params); 351 ack_params);
335 } 352 }
336 353
337 } // namespace content 354 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698