OLD | NEW |
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 <set> | 7 #include <set> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 // TabContents to the guest. | 103 // TabContents to the guest. |
104 // | 104 // |
105 // For GTK and Aura this is necessary to get proper renderer configuration | 105 // For GTK and Aura this is necessary to get proper renderer configuration |
106 // values for caret blinking interval, colors related to selection and | 106 // values for caret blinking interval, colors related to selection and |
107 // focus. | 107 // focus. |
108 *guest_renderer_prefs = *web_contents()->GetMutableRendererPrefs(); | 108 *guest_renderer_prefs = *web_contents()->GetMutableRendererPrefs(); |
109 | 109 |
110 guest_renderer_prefs->throttle_input_events = false; | 110 guest_renderer_prefs->throttle_input_events = false; |
111 AddGuest(instance_id, guest_web_contents); | 111 AddGuest(instance_id, guest_web_contents); |
112 guest_web_contents->SetDelegate(guest); | 112 guest_web_contents->SetDelegate(guest); |
| 113 |
| 114 // Create a swapped out RenderView for the guest in the embedder render |
| 115 // process, so that the embedder can access the guest's window object. |
| 116 int guest_routing_id = |
| 117 static_cast<WebContentsImpl*>(guest->GetWebContents())-> |
| 118 CreateSwappedOutRenderView(web_contents()->GetSiteInstance()); |
| 119 render_view_host->Send(new BrowserPluginMsg_GuestContentWindowReady( |
| 120 instance_id, guest_routing_id)); |
113 } | 121 } |
114 | 122 |
115 void BrowserPluginEmbedder::NavigateGuest( | 123 void BrowserPluginEmbedder::NavigateGuest( |
116 RenderViewHost* render_view_host, | 124 RenderViewHost* render_view_host, |
117 int instance_id, | 125 int instance_id, |
118 const std::string& src, | 126 const std::string& src, |
119 const BrowserPluginHostMsg_ResizeGuest_Params& resize_params) { | 127 const BrowserPluginHostMsg_ResizeGuest_Params& resize_params) { |
120 BrowserPluginGuest* guest = GetGuestByInstanceID(instance_id); | 128 BrowserPluginGuest* guest = GetGuestByInstanceID(instance_id); |
121 CHECK(guest); | 129 CHECK(guest); |
122 GURL url(src); | 130 GURL url(src); |
123 WebContentsImpl* guest_web_contents = | 131 WebContentsImpl* guest_web_contents = |
124 static_cast<WebContentsImpl*>(guest->GetWebContents()); | 132 static_cast<WebContentsImpl*>(guest->GetWebContents()); |
125 | 133 |
126 // We do not load empty urls in web_contents. | 134 // We do not load empty urls in web_contents. |
127 // If a guest sets empty src attribute after it has navigated to some | 135 // If a guest sets empty src attribute after it has navigated to some |
128 // non-empty page, the action is considered no-op. This empty src navigation | 136 // non-empty page, the action is considered no-op. This empty src navigation |
129 // should never be sent to BrowserPluginEmbedder (browser process). | 137 // should never be sent to BrowserPluginEmbedder (browser process). |
130 DCHECK(!src.empty()); | 138 DCHECK(!src.empty()); |
131 if (!src.empty()) { | 139 if (!src.empty()) { |
132 // TODO(creis): Check the validity of the URL: http://crbug.com/139397. | 140 // TODO(creis): Check the validity of the URL: http://crbug.com/139397. |
133 guest_web_contents->GetController().LoadURL(url, | 141 guest_web_contents->GetController().LoadURL(url, |
134 Referrer(), | 142 Referrer(), |
135 PAGE_TRANSITION_AUTO_SUBFRAME, | 143 PAGE_TRANSITION_AUTO_TOPLEVEL, |
136 std::string()); | 144 std::string()); |
137 } | 145 } |
138 | 146 |
139 // Resize the guest if the resize parameter was set from the renderer. | 147 // Resize the guest if the resize parameter was set from the renderer. |
140 ResizeGuest(render_view_host, instance_id, resize_params); | 148 ResizeGuest(render_view_host, instance_id, resize_params); |
141 } | 149 } |
142 | 150 |
143 void BrowserPluginEmbedder::UpdateRectACK(int instance_id, | 151 void BrowserPluginEmbedder::UpdateRectACK(int instance_id, |
144 int message_id, | 152 int message_id, |
145 const gfx::Size& size) { | 153 const gfx::Size& size) { |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 WebContents* guest_web_contents = guest->GetWebContents(); | 245 WebContents* guest_web_contents = guest->GetWebContents(); |
238 | 246 |
239 // Destroy the guest's web_contents. | 247 // Destroy the guest's web_contents. |
240 delete guest_web_contents; | 248 delete guest_web_contents; |
241 guest_web_contents_by_instance_id_.erase(instance_id); | 249 guest_web_contents_by_instance_id_.erase(instance_id); |
242 } | 250 } |
243 } | 251 } |
244 | 252 |
245 void BrowserPluginEmbedder::RenderViewDeleted( | 253 void BrowserPluginEmbedder::RenderViewDeleted( |
246 RenderViewHost* render_view_host) { | 254 RenderViewHost* render_view_host) { |
247 DestroyGuests(); | |
248 } | 255 } |
249 | 256 |
250 void BrowserPluginEmbedder::RenderViewGone(base::TerminationStatus status) { | 257 void BrowserPluginEmbedder::RenderViewGone(base::TerminationStatus status) { |
251 DestroyGuests(); | 258 DestroyGuests(); |
252 } | 259 } |
253 | 260 |
254 void BrowserPluginEmbedder::WebContentsVisibilityChanged(bool visible) { | 261 void BrowserPluginEmbedder::WebContentsVisibilityChanged(bool visible) { |
255 visible_ = visible; | 262 visible_ = visible; |
256 // If the embedder is hidden we need to hide the guests as well. | 263 // If the embedder is hidden we need to hide the guests as well. |
257 for (ContainerInstanceMap::const_iterator it = | 264 for (ContainerInstanceMap::const_iterator it = |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 bool visible = *Details<bool>(details).ptr(); | 324 bool visible = *Details<bool>(details).ptr(); |
318 WebContentsVisibilityChanged(visible); | 325 WebContentsVisibilityChanged(visible); |
319 break; | 326 break; |
320 } | 327 } |
321 default: | 328 default: |
322 NOTREACHED() << "Unexpected notification type: " << type; | 329 NOTREACHED() << "Unexpected notification type: " << type; |
323 } | 330 } |
324 } | 331 } |
325 | 332 |
326 } // namespace content | 333 } // namespace content |
OLD | NEW |