| 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_guest.h" | 5 #include "content/browser/browser_plugin/browser_plugin_guest.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 RequestNewWindowPermission(params.disposition, gfx::Rect(), | 334 RequestNewWindowPermission(params.disposition, gfx::Rect(), |
| 335 params.user_gesture, new_guest->GetWebContents()); | 335 params.user_gesture, new_guest->GetWebContents()); |
| 336 | 336 |
| 337 return new_guest; | 337 return new_guest; |
| 338 } | 338 } |
| 339 | 339 |
| 340 base::WeakPtr<BrowserPluginGuest> BrowserPluginGuest::AsWeakPtr() { | 340 base::WeakPtr<BrowserPluginGuest> BrowserPluginGuest::AsWeakPtr() { |
| 341 return weak_ptr_factory_.GetWeakPtr(); | 341 return weak_ptr_factory_.GetWeakPtr(); |
| 342 } | 342 } |
| 343 | 343 |
| 344 bool BrowserPluginGuest::LockMouse(bool allowed) { |
| 345 if (!attached() || (mouse_locked_ == allowed)) |
| 346 return false; |
| 347 |
| 348 return embedder_web_contents()->GotResponseToLockMouseRequest(allowed); |
| 349 } |
| 350 |
| 344 void BrowserPluginGuest::EmbedderDestroyed() { | 351 void BrowserPluginGuest::EmbedderDestroyed() { |
| 345 embedder_web_contents_ = NULL; | 352 embedder_web_contents_ = NULL; |
| 346 if (delegate_) | 353 if (delegate_) |
| 347 delegate_->EmbedderDestroyed(); | 354 delegate_->EmbedderDestroyed(); |
| 348 Destroy(); | 355 Destroy(); |
| 349 } | 356 } |
| 350 | 357 |
| 351 void BrowserPluginGuest::Destroy() { | 358 void BrowserPluginGuest::Destroy() { |
| 352 is_in_destruction_ = true; | 359 is_in_destruction_ = true; |
| 353 if (!attached() && GetOpener()) | 360 if (!attached() && GetOpener()) |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 648 return delegate_->HandleContextMenu(context_menu_params); | 655 return delegate_->HandleContextMenu(context_menu_params); |
| 649 } | 656 } |
| 650 | 657 |
| 651 // Will be handled by WebContentsViewGuest. | 658 // Will be handled by WebContentsViewGuest. |
| 652 return false; | 659 return false; |
| 653 } | 660 } |
| 654 | 661 |
| 655 void BrowserPluginGuest::HandleKeyboardEvent( | 662 void BrowserPluginGuest::HandleKeyboardEvent( |
| 656 WebContents* source, | 663 WebContents* source, |
| 657 const NativeWebKeyboardEvent& event) { | 664 const NativeWebKeyboardEvent& event) { |
| 658 if (!attached()) | 665 if (!delegate_) |
| 659 return; | 666 return; |
| 660 | 667 |
| 661 if (UnlockMouseIfNecessary(event)) | 668 delegate_->HandleKeyboardEvent(event); |
| 662 return; | |
| 663 | |
| 664 if (delegate_ && delegate_->HandleKeyboardEvent(event)) | |
| 665 return; | |
| 666 | |
| 667 if (!embedder_web_contents_->GetDelegate()) | |
| 668 return; | |
| 669 | |
| 670 // Send the unhandled keyboard events back to the embedder to reprocess them. | |
| 671 // TODO(fsamuel): This introduces the possibility of out-of-order keyboard | |
| 672 // events because the guest may be arbitrarily delayed when responding to | |
| 673 // keyboard events. In that time, the embedder may have received and processed | |
| 674 // additional key events. This needs to be fixed as soon as possible. | |
| 675 // See http://crbug.com/229882. | |
| 676 embedder_web_contents_->GetDelegate()->HandleKeyboardEvent( | |
| 677 web_contents(), event); | |
| 678 } | 669 } |
| 679 | 670 |
| 680 void BrowserPluginGuest::SetZoom(double zoom_factor) { | 671 void BrowserPluginGuest::SetZoom(double zoom_factor) { |
| 681 if (delegate_) | 672 if (delegate_) |
| 682 delegate_->SetZoom(zoom_factor); | 673 delegate_->SetZoom(zoom_factor); |
| 683 } | 674 } |
| 684 | 675 |
| 685 void BrowserPluginGuest::PointerLockPermissionResponse(bool allow) { | 676 void BrowserPluginGuest::PointerLockPermissionResponse(bool allow) { |
| 686 SendMessageToEmbedder( | 677 SendMessageToEmbedder( |
| 687 new BrowserPluginMsg_SetMouseLock(instance_id(), allow)); | 678 new BrowserPluginMsg_SetMouseLock(instance_id(), allow)); |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 816 request_info.Set(browser_plugin::kWindowOpenDisposition, | 807 request_info.Set(browser_plugin::kWindowOpenDisposition, |
| 817 base::Value::CreateStringValue( | 808 base::Value::CreateStringValue( |
| 818 WindowOpenDispositionToString(disposition))); | 809 WindowOpenDispositionToString(disposition))); |
| 819 | 810 |
| 820 RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW, | 811 RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW, |
| 821 new NewWindowRequest(weak_ptr_factory_.GetWeakPtr(), | 812 new NewWindowRequest(weak_ptr_factory_.GetWeakPtr(), |
| 822 guest->instance_id()), | 813 guest->instance_id()), |
| 823 request_info); | 814 request_info); |
| 824 } | 815 } |
| 825 | 816 |
| 826 bool BrowserPluginGuest::UnlockMouseIfNecessary( | |
| 827 const NativeWebKeyboardEvent& event) { | |
| 828 if (!mouse_locked_) | |
| 829 return false; | |
| 830 | |
| 831 embedder_web_contents()->GotResponseToLockMouseRequest(false); | |
| 832 return true; | |
| 833 } | |
| 834 | |
| 835 void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) { | 817 void BrowserPluginGuest::SendMessageToEmbedder(IPC::Message* msg) { |
| 836 if (!attached()) { | 818 if (!attached()) { |
| 837 // Some pages such as data URLs, javascript URLs, and about:blank | 819 // Some pages such as data URLs, javascript URLs, and about:blank |
| 838 // do not load external resources and so they load prior to attachment. | 820 // do not load external resources and so they load prior to attachment. |
| 839 // As a result, we must save all these IPCs until attachment and then | 821 // As a result, we must save all these IPCs until attachment and then |
| 840 // forward them so that the embedder gets a chance to see and process | 822 // forward them so that the embedder gets a chance to see and process |
| 841 // the load events. | 823 // the load events. |
| 842 pending_messages_.push(msg); | 824 pending_messages_.push(msg); |
| 843 return; | 825 return; |
| 844 } | 826 } |
| (...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1517 void BrowserPluginGuest::OnImeCompositionRangeChanged( | 1499 void BrowserPluginGuest::OnImeCompositionRangeChanged( |
| 1518 const gfx::Range& range, | 1500 const gfx::Range& range, |
| 1519 const std::vector<gfx::Rect>& character_bounds) { | 1501 const std::vector<gfx::Rect>& character_bounds) { |
| 1520 static_cast<RenderWidgetHostViewBase*>( | 1502 static_cast<RenderWidgetHostViewBase*>( |
| 1521 web_contents()->GetRenderWidgetHostView())->ImeCompositionRangeChanged( | 1503 web_contents()->GetRenderWidgetHostView())->ImeCompositionRangeChanged( |
| 1522 range, character_bounds); | 1504 range, character_bounds); |
| 1523 } | 1505 } |
| 1524 #endif | 1506 #endif |
| 1525 | 1507 |
| 1526 } // namespace content | 1508 } // namespace content |
| OLD | NEW |