| 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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 OnCompositorFrameSwapped(message)) | 110 OnCompositorFrameSwapped(message)) |
| 111 IPC_MESSAGE_HANDLER(BrowserPluginMsg_CopyFromCompositingSurface, | 111 IPC_MESSAGE_HANDLER(BrowserPluginMsg_CopyFromCompositingSurface, |
| 112 OnCopyFromCompositingSurface) | 112 OnCopyFromCompositingSurface) |
| 113 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestContentWindowReady, | 113 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestContentWindowReady, |
| 114 OnGuestContentWindowReady) | 114 OnGuestContentWindowReady) |
| 115 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestGone, OnGuestGone) | 115 IPC_MESSAGE_HANDLER(BrowserPluginMsg_GuestGone, OnGuestGone) |
| 116 IPC_MESSAGE_HANDLER(BrowserPluginMsg_SetCursor, OnSetCursor) | 116 IPC_MESSAGE_HANDLER(BrowserPluginMsg_SetCursor, OnSetCursor) |
| 117 IPC_MESSAGE_HANDLER(BrowserPluginMsg_SetMouseLock, OnSetMouseLock) | 117 IPC_MESSAGE_HANDLER(BrowserPluginMsg_SetMouseLock, OnSetMouseLock) |
| 118 IPC_MESSAGE_HANDLER(BrowserPluginMsg_ShouldAcceptTouchEvents, | 118 IPC_MESSAGE_HANDLER(BrowserPluginMsg_ShouldAcceptTouchEvents, |
| 119 OnShouldAcceptTouchEvents) | 119 OnShouldAcceptTouchEvents) |
| 120 IPC_MESSAGE_HANDLER(BrowserPluginMsg_UpdatedName, OnUpdatedName) | |
| 121 IPC_MESSAGE_HANDLER(BrowserPluginMsg_UpdateRect, OnUpdateRect) | 120 IPC_MESSAGE_HANDLER(BrowserPluginMsg_UpdateRect, OnUpdateRect) |
| 122 IPC_MESSAGE_UNHANDLED(handled = false) | 121 IPC_MESSAGE_UNHANDLED(handled = false) |
| 123 IPC_END_MESSAGE_MAP() | 122 IPC_END_MESSAGE_MAP() |
| 124 return handled; | 123 return handled; |
| 125 } | 124 } |
| 126 | 125 |
| 127 void BrowserPlugin::UpdateDOMAttribute(const std::string& attribute_name, | 126 void BrowserPlugin::UpdateDOMAttribute(const std::string& attribute_name, |
| 128 const std::string& attribute_value) { | 127 const std::string& attribute_value) { |
| 129 if (!container()) | 128 if (!container()) |
| 130 return; | 129 return; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 158 } | 157 } |
| 159 | 158 |
| 160 bool BrowserPlugin::HasDOMAttribute(const std::string& attribute_name) const { | 159 bool BrowserPlugin::HasDOMAttribute(const std::string& attribute_name) const { |
| 161 if (!container()) | 160 if (!container()) |
| 162 return false; | 161 return false; |
| 163 | 162 |
| 164 return container()->element().hasAttribute( | 163 return container()->element().hasAttribute( |
| 165 blink::WebString::fromUTF8(attribute_name)); | 164 blink::WebString::fromUTF8(attribute_name)); |
| 166 } | 165 } |
| 167 | 166 |
| 168 std::string BrowserPlugin::GetNameAttribute() const { | |
| 169 return GetDOMAttributeValue(browser_plugin::kAttributeName); | |
| 170 } | |
| 171 | |
| 172 bool BrowserPlugin::GetAllowTransparencyAttribute() const { | 167 bool BrowserPlugin::GetAllowTransparencyAttribute() const { |
| 173 return HasDOMAttribute(browser_plugin::kAttributeAllowTransparency); | 168 return HasDOMAttribute(browser_plugin::kAttributeAllowTransparency); |
| 174 } | 169 } |
| 175 | 170 |
| 176 std::string BrowserPlugin::GetSrcAttribute() const { | 171 std::string BrowserPlugin::GetSrcAttribute() const { |
| 177 return GetDOMAttributeValue(browser_plugin::kAttributeSrc); | 172 return GetDOMAttributeValue(browser_plugin::kAttributeSrc); |
| 178 } | 173 } |
| 179 | 174 |
| 180 bool BrowserPlugin::GetAutoSizeAttribute() const { | 175 bool BrowserPlugin::GetAutoSizeAttribute() const { |
| 181 return HasDOMAttribute(browser_plugin::kAttributeAutoSize); | 176 return HasDOMAttribute(browser_plugin::kAttributeAutoSize); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 // unset (or set to 0), we set it to the container size. | 229 // unset (or set to 0), we set it to the container size. |
| 235 min_width = min_width ? min_width : width(); | 230 min_width = min_width ? min_width : width(); |
| 236 // For autosize, minWidth should not be bigger than maxWidth. | 231 // For autosize, minWidth should not be bigger than maxWidth. |
| 237 return std::min(min_width, GetAdjustedMaxWidth()); | 232 return std::min(min_width, GetAdjustedMaxWidth()); |
| 238 } | 233 } |
| 239 | 234 |
| 240 std::string BrowserPlugin::GetPartitionAttribute() const { | 235 std::string BrowserPlugin::GetPartitionAttribute() const { |
| 241 return GetDOMAttributeValue(browser_plugin::kAttributePartition); | 236 return GetDOMAttributeValue(browser_plugin::kAttributePartition); |
| 242 } | 237 } |
| 243 | 238 |
| 244 void BrowserPlugin::ParseNameAttribute() { | |
| 245 if (!HasGuestInstanceID()) | |
| 246 return; | |
| 247 browser_plugin_manager()->Send( | |
| 248 new BrowserPluginHostMsg_SetName(render_view_routing_id_, | |
| 249 guest_instance_id_, | |
| 250 GetNameAttribute())); | |
| 251 } | |
| 252 | |
| 253 void BrowserPlugin::ParseAllowTransparencyAttribute() { | 239 void BrowserPlugin::ParseAllowTransparencyAttribute() { |
| 254 if (!HasGuestInstanceID()) | 240 if (!HasGuestInstanceID()) |
| 255 return; | 241 return; |
| 256 | 242 |
| 257 bool opaque = !GetAllowTransparencyAttribute(); | 243 bool opaque = !GetAllowTransparencyAttribute(); |
| 258 | 244 |
| 259 if (compositing_helper_) | 245 if (compositing_helper_) |
| 260 compositing_helper_->SetContentsOpaque(opaque); | 246 compositing_helper_->SetContentsOpaque(opaque); |
| 261 | 247 |
| 262 browser_plugin_manager()->Send(new BrowserPluginHostMsg_SetContentsOpaque( | 248 browser_plugin_manager()->Send(new BrowserPluginHostMsg_SetContentsOpaque( |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 // This API may be called directly without setting the src attribute. | 359 // This API may be called directly without setting the src attribute. |
| 374 // In that case, we need to make sure we don't allocate another instance ID. | 360 // In that case, we need to make sure we don't allocate another instance ID. |
| 375 before_first_navigation_ = false; | 361 before_first_navigation_ = false; |
| 376 guest_instance_id_ = guest_instance_id; | 362 guest_instance_id_ = guest_instance_id; |
| 377 browser_plugin_manager()->AddBrowserPlugin(guest_instance_id, this); | 363 browser_plugin_manager()->AddBrowserPlugin(guest_instance_id, this); |
| 378 | 364 |
| 379 BrowserPluginHostMsg_Attach_Params attach_params; | 365 BrowserPluginHostMsg_Attach_Params attach_params; |
| 380 attach_params.focused = ShouldGuestBeFocused(); | 366 attach_params.focused = ShouldGuestBeFocused(); |
| 381 attach_params.visible = visible_; | 367 attach_params.visible = visible_; |
| 382 attach_params.opaque = !GetAllowTransparencyAttribute(); | 368 attach_params.opaque = !GetAllowTransparencyAttribute(); |
| 383 attach_params.name = GetNameAttribute(); | |
| 384 attach_params.storage_partition_id = storage_partition_id_; | 369 attach_params.storage_partition_id = storage_partition_id_; |
| 385 attach_params.persist_storage = persist_storage_; | 370 attach_params.persist_storage = persist_storage_; |
| 386 attach_params.src = GetSrcAttribute(); | 371 attach_params.src = GetSrcAttribute(); |
| 387 attach_params.embedder_frame_url = embedder_frame_url_; | 372 attach_params.embedder_frame_url = embedder_frame_url_; |
| 388 GetSizeParams(&attach_params.auto_size_params, | 373 GetSizeParams(&attach_params.auto_size_params, |
| 389 &attach_params.resize_guest_params, | 374 &attach_params.resize_guest_params, |
| 390 false); | 375 false); |
| 391 | 376 |
| 392 browser_plugin_manager()->Send( | 377 browser_plugin_manager()->Send( |
| 393 new BrowserPluginHostMsg_Attach(render_view_routing_id_, | 378 new BrowserPluginHostMsg_Attach(render_view_routing_id_, |
| 394 guest_instance_id_, attach_params, | 379 guest_instance_id_, attach_params, |
| 395 *extra_params)); | 380 *extra_params)); |
| 396 } | 381 } |
| 397 | 382 |
| 398 void BrowserPlugin::DidCommitCompositorFrame() { | 383 void BrowserPlugin::DidCommitCompositorFrame() { |
| 399 if (compositing_helper_.get()) | 384 if (compositing_helper_.get()) |
| 400 compositing_helper_->DidCommitCompositorFrame(); | 385 compositing_helper_->DidCommitCompositorFrame(); |
| 401 } | 386 } |
| 402 | 387 |
| 403 void BrowserPlugin::OnAdvanceFocus(int guest_instance_id, bool reverse) { | 388 void BrowserPlugin::OnAdvanceFocus(int guest_instance_id, bool reverse) { |
| 404 DCHECK(render_view_.get()); | 389 DCHECK(render_view_.get()); |
| 405 render_view_->GetWebView()->advanceFocus(reverse); | 390 render_view_->GetWebView()->advanceFocus(reverse); |
| 406 } | 391 } |
| 407 | 392 |
| 408 void BrowserPlugin::OnAttachACK( | 393 void BrowserPlugin::OnAttachACK( |
| 409 int guest_instance_id, | 394 int guest_instance_id, |
| 410 const BrowserPluginMsg_Attach_ACK_Params& params) { | 395 const BrowserPluginMsg_Attach_ACK_Params& params) { |
| 411 // Update BrowserPlugin attributes to match the state of the guest. | |
| 412 if (!params.name.empty()) | |
| 413 OnUpdatedName(guest_instance_id, params.name); | |
| 414 if (!params.storage_partition_id.empty()) { | 396 if (!params.storage_partition_id.empty()) { |
| 415 std::string partition_name = | 397 std::string partition_name = |
| 416 (params.persist_storage ? browser_plugin::kPersistPrefix : "") + | 398 (params.persist_storage ? browser_plugin::kPersistPrefix : "") + |
| 417 params.storage_partition_id; | 399 params.storage_partition_id; |
| 418 UpdateDOMAttribute(browser_plugin::kAttributePartition, partition_name); | 400 UpdateDOMAttribute(browser_plugin::kAttributePartition, partition_name); |
| 419 } | 401 } |
| 420 attached_ = true; | 402 attached_ = true; |
| 421 } | 403 } |
| 422 | 404 |
| 423 void BrowserPlugin::OnBuffersSwapped( | 405 void BrowserPlugin::OnBuffersSwapped( |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 509 | 491 |
| 510 void BrowserPlugin::OnShouldAcceptTouchEvents(int guest_instance_id, | 492 void BrowserPlugin::OnShouldAcceptTouchEvents(int guest_instance_id, |
| 511 bool accept) { | 493 bool accept) { |
| 512 if (container()) { | 494 if (container()) { |
| 513 container()->requestTouchEventType(accept ? | 495 container()->requestTouchEventType(accept ? |
| 514 blink::WebPluginContainer::TouchEventRequestTypeRaw : | 496 blink::WebPluginContainer::TouchEventRequestTypeRaw : |
| 515 blink::WebPluginContainer::TouchEventRequestTypeNone); | 497 blink::WebPluginContainer::TouchEventRequestTypeNone); |
| 516 } | 498 } |
| 517 } | 499 } |
| 518 | 500 |
| 519 void BrowserPlugin::OnUpdatedName(int guest_instance_id, | |
| 520 const std::string& name) { | |
| 521 UpdateDOMAttribute(browser_plugin::kAttributeName, name); | |
| 522 } | |
| 523 | |
| 524 void BrowserPlugin::OnUpdateRect( | 501 void BrowserPlugin::OnUpdateRect( |
| 525 int guest_instance_id, | 502 int guest_instance_id, |
| 526 const BrowserPluginMsg_UpdateRect_Params& params) { | 503 const BrowserPluginMsg_UpdateRect_Params& params) { |
| 527 // Note that there is no need to send ACK for this message. | 504 // Note that there is no need to send ACK for this message. |
| 528 // If the guest has updated pixels then it is no longer crashed. | 505 // If the guest has updated pixels then it is no longer crashed. |
| 529 guest_crashed_ = false; | 506 guest_crashed_ = false; |
| 530 | 507 |
| 531 bool auto_size = GetAutoSizeAttribute(); | 508 bool auto_size = GetAutoSizeAttribute(); |
| 532 // We receive a resize ACK in regular mode, but not in autosize. | 509 // We receive a resize ACK in regular mode, but not in autosize. |
| 533 // In Compositing mode, we need to do it here so we can continue sending | 510 // In Compositing mode, we need to do it here so we can continue sending |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 862 case BrowserPluginMsg_AdvanceFocus::ID: | 839 case BrowserPluginMsg_AdvanceFocus::ID: |
| 863 case BrowserPluginMsg_Attach_ACK::ID: | 840 case BrowserPluginMsg_Attach_ACK::ID: |
| 864 case BrowserPluginMsg_BuffersSwapped::ID: | 841 case BrowserPluginMsg_BuffersSwapped::ID: |
| 865 case BrowserPluginMsg_CompositorFrameSwapped::ID: | 842 case BrowserPluginMsg_CompositorFrameSwapped::ID: |
| 866 case BrowserPluginMsg_CopyFromCompositingSurface::ID: | 843 case BrowserPluginMsg_CopyFromCompositingSurface::ID: |
| 867 case BrowserPluginMsg_GuestContentWindowReady::ID: | 844 case BrowserPluginMsg_GuestContentWindowReady::ID: |
| 868 case BrowserPluginMsg_GuestGone::ID: | 845 case BrowserPluginMsg_GuestGone::ID: |
| 869 case BrowserPluginMsg_SetCursor::ID: | 846 case BrowserPluginMsg_SetCursor::ID: |
| 870 case BrowserPluginMsg_SetMouseLock::ID: | 847 case BrowserPluginMsg_SetMouseLock::ID: |
| 871 case BrowserPluginMsg_ShouldAcceptTouchEvents::ID: | 848 case BrowserPluginMsg_ShouldAcceptTouchEvents::ID: |
| 872 case BrowserPluginMsg_UpdatedName::ID: | |
| 873 case BrowserPluginMsg_UpdateRect::ID: | 849 case BrowserPluginMsg_UpdateRect::ID: |
| 874 return true; | 850 return true; |
| 875 default: | 851 default: |
| 876 break; | 852 break; |
| 877 } | 853 } |
| 878 return false; | 854 return false; |
| 879 } | 855 } |
| 880 | 856 |
| 881 void BrowserPlugin::updateGeometry( | 857 void BrowserPlugin::updateGeometry( |
| 882 const WebRect& window_rect, | 858 const WebRect& window_rect, |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1174 const blink::WebMouseEvent& event) { | 1150 const blink::WebMouseEvent& event) { |
| 1175 browser_plugin_manager()->Send( | 1151 browser_plugin_manager()->Send( |
| 1176 new BrowserPluginHostMsg_HandleInputEvent(render_view_routing_id_, | 1152 new BrowserPluginHostMsg_HandleInputEvent(render_view_routing_id_, |
| 1177 guest_instance_id_, | 1153 guest_instance_id_, |
| 1178 plugin_rect_, | 1154 plugin_rect_, |
| 1179 &event)); | 1155 &event)); |
| 1180 return true; | 1156 return true; |
| 1181 } | 1157 } |
| 1182 | 1158 |
| 1183 } // namespace content | 1159 } // namespace content |
| OLD | NEW |