OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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/browser_plugin/browser_plugin.h" | 5 #include "content/renderer/browser_plugin/browser_plugin.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/json/json_string_value_serializer.h" | 8 #include "base/json/json_string_value_serializer.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 paint_ack_received_(true), | 79 paint_ack_received_(true), |
80 last_device_scale_factor_(1.0f), | 80 last_device_scale_factor_(1.0f), |
81 sad_guest_(NULL), | 81 sad_guest_(NULL), |
82 guest_crashed_(false), | 82 guest_crashed_(false), |
83 is_auto_size_state_dirty_(false), | 83 is_auto_size_state_dirty_(false), |
84 persist_storage_(false), | 84 persist_storage_(false), |
85 valid_partition_id_(true), | 85 valid_partition_id_(true), |
86 content_window_routing_id_(MSG_ROUTING_NONE), | 86 content_window_routing_id_(MSG_ROUTING_NONE), |
87 plugin_focused_(false), | 87 plugin_focused_(false), |
88 visible_(true), | 88 visible_(true), |
89 opaque_(true), | |
90 before_first_navigation_(true), | 89 before_first_navigation_(true), |
91 mouse_locked_(false), | 90 mouse_locked_(false), |
92 browser_plugin_manager_(render_view->GetBrowserPluginManager()), | 91 browser_plugin_manager_(render_view->GetBrowserPluginManager()), |
93 compositing_enabled_(false), | 92 compositing_enabled_(false), |
94 embedder_frame_url_(frame->document().url()), | 93 embedder_frame_url_(frame->document().url()), |
95 weak_ptr_factory_(this) { | 94 weak_ptr_factory_(this) { |
96 } | 95 } |
97 | 96 |
98 BrowserPlugin::~BrowserPlugin() { | 97 BrowserPlugin::~BrowserPlugin() { |
99 // If the BrowserPlugin has never navigated then the browser process and | 98 // If the BrowserPlugin has never navigated then the browser process and |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 return false; | 174 return false; |
176 | 175 |
177 return container()->element().hasAttribute( | 176 return container()->element().hasAttribute( |
178 blink::WebString::fromUTF8(attribute_name)); | 177 blink::WebString::fromUTF8(attribute_name)); |
179 } | 178 } |
180 | 179 |
181 std::string BrowserPlugin::GetNameAttribute() const { | 180 std::string BrowserPlugin::GetNameAttribute() const { |
182 return GetDOMAttributeValue(browser_plugin::kAttributeName); | 181 return GetDOMAttributeValue(browser_plugin::kAttributeName); |
183 } | 182 } |
184 | 183 |
| 184 bool BrowserPlugin::GetAllowTransparencyAttribute() const { |
| 185 return HasDOMAttribute(browser_plugin::kAttributeAllowTransparency); |
| 186 } |
| 187 |
185 std::string BrowserPlugin::GetSrcAttribute() const { | 188 std::string BrowserPlugin::GetSrcAttribute() const { |
186 return GetDOMAttributeValue(browser_plugin::kAttributeSrc); | 189 return GetDOMAttributeValue(browser_plugin::kAttributeSrc); |
187 } | 190 } |
188 | 191 |
189 bool BrowserPlugin::GetAutoSizeAttribute() const { | 192 bool BrowserPlugin::GetAutoSizeAttribute() const { |
190 return HasDOMAttribute(browser_plugin::kAttributeAutoSize); | 193 return HasDOMAttribute(browser_plugin::kAttributeAutoSize); |
191 } | 194 } |
192 | 195 |
193 int BrowserPlugin::GetMaxHeightAttribute() const { | 196 int BrowserPlugin::GetMaxHeightAttribute() const { |
194 int max_height; | 197 int max_height; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 | 255 |
253 void BrowserPlugin::ParseNameAttribute() { | 256 void BrowserPlugin::ParseNameAttribute() { |
254 if (!HasGuestInstanceID()) | 257 if (!HasGuestInstanceID()) |
255 return; | 258 return; |
256 browser_plugin_manager()->Send( | 259 browser_plugin_manager()->Send( |
257 new BrowserPluginHostMsg_SetName(render_view_routing_id_, | 260 new BrowserPluginHostMsg_SetName(render_view_routing_id_, |
258 guest_instance_id_, | 261 guest_instance_id_, |
259 GetNameAttribute())); | 262 GetNameAttribute())); |
260 } | 263 } |
261 | 264 |
| 265 void BrowserPlugin::ParseAllowTransparencyAttribute() { |
| 266 if (!HasGuestInstanceID()) |
| 267 return; |
| 268 |
| 269 bool opaque = !GetAllowTransparencyAttribute(); |
| 270 |
| 271 if (compositing_helper_) |
| 272 compositing_helper_->SetContentsOpaque(opaque); |
| 273 |
| 274 browser_plugin_manager()->Send(new BrowserPluginHostMsg_SetContentsOpaque( |
| 275 render_view_routing_id_, |
| 276 guest_instance_id_, |
| 277 opaque)); |
| 278 } |
| 279 |
262 bool BrowserPlugin::ParseSrcAttribute(std::string* error_message) { | 280 bool BrowserPlugin::ParseSrcAttribute(std::string* error_message) { |
263 if (!valid_partition_id_) { | 281 if (!valid_partition_id_) { |
264 *error_message = browser_plugin::kErrorInvalidPartition; | 282 *error_message = browser_plugin::kErrorInvalidPartition; |
265 return false; | 283 return false; |
266 } | 284 } |
267 std::string src = GetSrcAttribute(); | 285 std::string src = GetSrcAttribute(); |
268 if (src.empty()) | 286 if (src.empty()) |
269 return true; | 287 return true; |
270 | 288 |
271 // If we haven't created the guest yet, do so now. We will navigate it right | 289 // If we haven't created the guest yet, do so now. We will navigate it right |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 std::map<std::string, base::Value*> props; | 383 std::map<std::string, base::Value*> props; |
366 props[browser_plugin::kWindowID] = | 384 props[browser_plugin::kWindowID] = |
367 new base::FundamentalValue(guest_instance_id); | 385 new base::FundamentalValue(guest_instance_id); |
368 TriggerEvent(browser_plugin::kEventInternalInstanceIDAllocated, &props); | 386 TriggerEvent(browser_plugin::kEventInternalInstanceIDAllocated, &props); |
369 } | 387 } |
370 | 388 |
371 void BrowserPlugin::Attach(scoped_ptr<base::DictionaryValue> extra_params) { | 389 void BrowserPlugin::Attach(scoped_ptr<base::DictionaryValue> extra_params) { |
372 BrowserPluginHostMsg_Attach_Params attach_params; | 390 BrowserPluginHostMsg_Attach_Params attach_params; |
373 attach_params.focused = ShouldGuestBeFocused(); | 391 attach_params.focused = ShouldGuestBeFocused(); |
374 attach_params.visible = visible_; | 392 attach_params.visible = visible_; |
375 attach_params.opaque = opaque_; | 393 attach_params.opaque = !GetAllowTransparencyAttribute(); |
376 attach_params.name = GetNameAttribute(); | 394 attach_params.name = GetNameAttribute(); |
377 attach_params.storage_partition_id = storage_partition_id_; | 395 attach_params.storage_partition_id = storage_partition_id_; |
378 attach_params.persist_storage = persist_storage_; | 396 attach_params.persist_storage = persist_storage_; |
379 attach_params.src = GetSrcAttribute(); | 397 attach_params.src = GetSrcAttribute(); |
380 attach_params.embedder_frame_url = embedder_frame_url_; | 398 attach_params.embedder_frame_url = embedder_frame_url_; |
381 GetDamageBufferWithSizeParams(&attach_params.auto_size_params, | 399 GetDamageBufferWithSizeParams(&attach_params.auto_size_params, |
382 &attach_params.resize_guest_params, | 400 &attach_params.resize_guest_params, |
383 false); | 401 false); |
384 | 402 |
385 browser_plugin_manager()->Send( | 403 browser_plugin_manager()->Send( |
386 new BrowserPluginHostMsg_Attach(render_view_routing_id_, | 404 new BrowserPluginHostMsg_Attach(render_view_routing_id_, |
387 guest_instance_id_, attach_params, | 405 guest_instance_id_, attach_params, |
388 *extra_params)); | 406 *extra_params)); |
389 } | 407 } |
390 | 408 |
391 void BrowserPlugin::DidCommitCompositorFrame() { | 409 void BrowserPlugin::DidCommitCompositorFrame() { |
392 if (compositing_helper_.get()) | 410 if (compositing_helper_.get()) |
393 compositing_helper_->DidCommitCompositorFrame(); | 411 compositing_helper_->DidCommitCompositorFrame(); |
394 } | 412 } |
395 | 413 |
396 void BrowserPlugin::SetContentsOpaque(bool opaque) { | |
397 if (opaque_ == opaque) | |
398 return; | |
399 | |
400 opaque_ = opaque; | |
401 if (!HasGuestInstanceID()) | |
402 return; | |
403 | |
404 if (compositing_helper_) | |
405 compositing_helper_->SetContentsOpaque(opaque_); | |
406 | |
407 browser_plugin_manager()->Send(new BrowserPluginHostMsg_SetContentsOpaque( | |
408 render_view_routing_id_, | |
409 guest_instance_id_, | |
410 opaque_)); | |
411 } | |
412 | |
413 void BrowserPlugin::OnAdvanceFocus(int guest_instance_id, bool reverse) { | 414 void BrowserPlugin::OnAdvanceFocus(int guest_instance_id, bool reverse) { |
414 DCHECK(render_view_.get()); | 415 DCHECK(render_view_.get()); |
415 render_view_->GetWebView()->advanceFocus(reverse); | 416 render_view_->GetWebView()->advanceFocus(reverse); |
416 } | 417 } |
417 | 418 |
418 void BrowserPlugin::OnAttachACK( | 419 void BrowserPlugin::OnAttachACK( |
419 int guest_instance_id, | 420 int guest_instance_id, |
420 const BrowserPluginMsg_Attach_ACK_Params& params) { | 421 const BrowserPluginMsg_Attach_ACK_Params& params) { |
421 // Update BrowserPlugin attributes to match the state of the guest. | 422 // Update BrowserPlugin attributes to match the state of the guest. |
422 if (!params.name.empty()) | 423 if (!params.name.empty()) |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
915 plugin_rect(), | 916 plugin_rect(), |
916 true /* needs_repaint */); | 917 true /* needs_repaint */); |
917 paint_ack_received_ = false; | 918 paint_ack_received_ = false; |
918 browser_plugin_manager()->Send(new BrowserPluginHostMsg_ResizeGuest( | 919 browser_plugin_manager()->Send(new BrowserPluginHostMsg_ResizeGuest( |
919 render_view_routing_id_, | 920 render_view_routing_id_, |
920 guest_instance_id_, | 921 guest_instance_id_, |
921 params)); | 922 params)); |
922 } | 923 } |
923 } | 924 } |
924 compositing_helper_->EnableCompositing(enable); | 925 compositing_helper_->EnableCompositing(enable); |
925 compositing_helper_->SetContentsOpaque(opaque_); | 926 compositing_helper_->SetContentsOpaque(!GetAllowTransparencyAttribute()); |
926 } | 927 } |
927 | 928 |
928 void BrowserPlugin::destroy() { | 929 void BrowserPlugin::destroy() { |
929 // If the plugin was initialized then it has a valid |npp_| identifier, and | 930 // If the plugin was initialized then it has a valid |npp_| identifier, and |
930 // the |container_| must clear references to the plugin's script objects. | 931 // the |container_| must clear references to the plugin's script objects. |
931 DCHECK(!npp_ || container_); | 932 DCHECK(!npp_ || container_); |
932 if (container_) | 933 if (container_) |
933 container_->clearScriptObjects(); | 934 container_->clearScriptObjects(); |
934 | 935 |
935 // The BrowserPlugin's WebPluginContainer is deleted immediately after this | 936 // The BrowserPlugin's WebPluginContainer is deleted immediately after this |
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1337 const blink::WebMouseEvent& event) { | 1338 const blink::WebMouseEvent& event) { |
1338 browser_plugin_manager()->Send( | 1339 browser_plugin_manager()->Send( |
1339 new BrowserPluginHostMsg_HandleInputEvent(render_view_routing_id_, | 1340 new BrowserPluginHostMsg_HandleInputEvent(render_view_routing_id_, |
1340 guest_instance_id_, | 1341 guest_instance_id_, |
1341 plugin_rect_, | 1342 plugin_rect_, |
1342 &event)); | 1343 &event)); |
1343 return true; | 1344 return true; |
1344 } | 1345 } |
1345 | 1346 |
1346 } // namespace content | 1347 } // namespace content |
OLD | NEW |