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

Side by Side Diff: content/renderer/pepper/pepper_plugin_delegate_impl.cc

Issue 21192002: Remove more methods from PluginDelegate. Some I moved the implementationto the callers. For others,… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 4 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/renderer/pepper/pepper_plugin_delegate_impl.h" 5 #include "content/renderer/pepper/pepper_plugin_delegate_impl.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <cstddef> 8 #include <cstddef>
9 #include <map> 9 #include <map>
10 #include <queue> 10 #include <queue>
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 #include "third_party/WebKit/public/web/WebView.h" 85 #include "third_party/WebKit/public/web/WebView.h"
86 #include "ui/gfx/size.h" 86 #include "ui/gfx/size.h"
87 #include "url/gurl.h" 87 #include "url/gurl.h"
88 88
89 using WebKit::WebFrame; 89 using WebKit::WebFrame;
90 90
91 namespace content { 91 namespace content {
92 92
93 namespace { 93 namespace {
94 94
95 class PluginInstanceLockTarget : public MouseLockDispatcher::LockTarget {
96 public:
97 PluginInstanceLockTarget(PepperPluginInstanceImpl* plugin)
98 : plugin_(plugin) {}
99
100 virtual void OnLockMouseACK(bool succeeded) OVERRIDE {
101 plugin_->OnLockMouseACK(succeeded);
102 }
103
104 virtual void OnMouseLockLost() OVERRIDE {
105 plugin_->OnMouseLockLost();
106 }
107
108 virtual bool HandleMouseLockedInputEvent(
109 const WebKit::WebMouseEvent &event) OVERRIDE {
110 plugin_->HandleMouseLockedInputEvent(event);
111 return true;
112 }
113
114 private:
115 PepperPluginInstanceImpl* plugin_;
116 };
117
118 void CreateHostForInProcessModule(RenderViewImpl* render_view, 95 void CreateHostForInProcessModule(RenderViewImpl* render_view,
119 PluginModule* module, 96 PluginModule* module,
120 const WebPluginInfo& webplugin_info) { 97 const WebPluginInfo& webplugin_info) {
121 // First time an in-process plugin was used, make a host for it. 98 // First time an in-process plugin was used, make a host for it.
122 const PepperPluginInfo* info = 99 const PepperPluginInfo* info =
123 PepperPluginRegistry::GetInstance()->GetInfoForPlugin(webplugin_info); 100 PepperPluginRegistry::GetInstance()->GetInfoForPlugin(webplugin_info);
124 DCHECK(!info->is_out_of_process); 101 DCHECK(!info->is_out_of_process);
125 102
126 ppapi::PpapiPermissions perms( 103 ppapi::PpapiPermissions perms(
127 PepperPluginRegistry::GetInstance()->GetInfoForPlugin( 104 PepperPluginRegistry::GetInstance()->GetInfoForPlugin(
128 webplugin_info)->permissions); 105 webplugin_info)->permissions);
129 RendererPpapiHostImpl* host_impl = 106 RendererPpapiHostImpl* host_impl =
130 RendererPpapiHostImpl::CreateOnModuleForInProcess( 107 RendererPpapiHostImpl::CreateOnModuleForInProcess(
131 module, perms); 108 module, perms);
132 render_view->PpapiPluginCreated(host_impl); 109 render_view->PpapiPluginCreated(host_impl);
133 } 110 }
134 111
135 } // namespace 112 } // namespace
136 113
137 PepperPluginDelegateImpl::PepperPluginDelegateImpl(RenderViewImpl* render_view) 114 PepperPluginDelegateImpl::PepperPluginDelegateImpl(RenderViewImpl* render_view)
138 : RenderViewObserver(render_view), 115 : RenderViewObserver(render_view),
139 render_view_(render_view), 116 render_view_(render_view),
140 pepper_browser_connection_(this), 117 pepper_browser_connection_(this),
141 focused_plugin_(NULL), 118 focused_plugin_(NULL),
142 last_mouse_event_target_(NULL) { 119 last_mouse_event_target_(NULL) {
143 } 120 }
144 121
145 PepperPluginDelegateImpl::~PepperPluginDelegateImpl() { 122 PepperPluginDelegateImpl::~PepperPluginDelegateImpl() {
146 DCHECK(mouse_lock_instances_.empty());
147 } 123 }
148 124
149 WebKit::WebPlugin* PepperPluginDelegateImpl::CreatePepperWebPlugin( 125 WebKit::WebPlugin* PepperPluginDelegateImpl::CreatePepperWebPlugin(
150 const WebPluginInfo& webplugin_info, 126 const WebPluginInfo& webplugin_info,
151 const WebKit::WebPluginParams& params) { 127 const WebKit::WebPluginParams& params) {
152 bool pepper_plugin_was_registered = false; 128 bool pepper_plugin_was_registered = false;
153 scoped_refptr<PluginModule> pepper_module( 129 scoped_refptr<PluginModule> pepper_module(
154 CreatePepperPluginModule(webplugin_info, &pepper_plugin_was_registered)); 130 CreatePepperPluginModule(webplugin_info, &pepper_plugin_was_registered));
155 131
156 if (pepper_plugin_was_registered) { 132 if (pepper_plugin_was_registered) {
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 bool PepperPluginDelegateImpl::IsPluginAcceptingCompositionEvents() const { 478 bool PepperPluginDelegateImpl::IsPluginAcceptingCompositionEvents() const {
503 if (!focused_plugin_) 479 if (!focused_plugin_)
504 return false; 480 return false;
505 return focused_plugin_->IsPluginAcceptingCompositionEvents(); 481 return focused_plugin_->IsPluginAcceptingCompositionEvents();
506 } 482 }
507 483
508 bool PepperPluginDelegateImpl::CanComposeInline() const { 484 bool PepperPluginDelegateImpl::CanComposeInline() const {
509 return IsPluginAcceptingCompositionEvents(); 485 return IsPluginAcceptingCompositionEvents();
510 } 486 }
511 487
512 void PepperPluginDelegateImpl::PluginCrashed(
513 PepperPluginInstanceImpl* instance) {
514 render_view_->PluginCrashed(instance->module()->path(),
515 instance->module()->GetPeerProcessId());
516 UnSetAndDeleteLockTargetAdapter(instance);
517 }
518
519 void PepperPluginDelegateImpl::InstanceCreated( 488 void PepperPluginDelegateImpl::InstanceCreated(
520 PepperPluginInstanceImpl* instance) { 489 PepperPluginInstanceImpl* instance) {
521 active_instances_.insert(instance); 490 active_instances_.insert(instance);
522 491
523 // Set the initial focus. 492 // Set the initial focus.
524 instance->SetContentAreaFocus(render_view_->has_focus()); 493 instance->SetContentAreaFocus(render_view_->has_focus());
525 } 494 }
526 495
527 void PepperPluginDelegateImpl::InstanceDeleted( 496 void PepperPluginDelegateImpl::InstanceDeleted(
528 PepperPluginInstanceImpl* instance) { 497 PepperPluginInstanceImpl* instance) {
529 active_instances_.erase(instance); 498 active_instances_.erase(instance);
530 UnSetAndDeleteLockTargetAdapter(instance);
531 499
532 if (last_mouse_event_target_ == instance) 500 if (last_mouse_event_target_ == instance)
533 last_mouse_event_target_ = NULL; 501 last_mouse_event_target_ = NULL;
534 if (focused_plugin_ == instance) 502 if (focused_plugin_ == instance)
535 PluginFocusChanged(instance, false); 503 PluginFocusChanged(instance, false);
536 } 504 }
537 505
538 // If a broker has not already been created for this plugin, creates one. 506 // If a broker has not already been created for this plugin, creates one.
539 PepperBroker* PepperPluginDelegateImpl::ConnectToBroker( 507 PepperBroker* PepperPluginDelegateImpl::ConnectToBroker(
540 PPB_Broker_Impl* client) { 508 PPB_Broker_Impl* client) {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 // event, it will notify us via DidReceiveMouseEvent() and set itself as 608 // event, it will notify us via DidReceiveMouseEvent() and set itself as
641 // |last_mouse_event_target_|. 609 // |last_mouse_event_target_|.
642 last_mouse_event_target_ = NULL; 610 last_mouse_event_target_ = NULL;
643 } 611 }
644 612
645 scoped_refptr<base::MessageLoopProxy> 613 scoped_refptr<base::MessageLoopProxy>
646 PepperPluginDelegateImpl::GetFileThreadMessageLoopProxy() { 614 PepperPluginDelegateImpl::GetFileThreadMessageLoopProxy() {
647 return RenderThreadImpl::current()->GetFileThreadMessageLoopProxy(); 615 return RenderThreadImpl::current()->GetFileThreadMessageLoopProxy();
648 } 616 }
649 617
650 uint32 PepperPluginDelegateImpl::TCPSocketCreate() {
651 // This was used for PPB_TCPSocket_Private creation. And it shouldn't be
652 // needed anymore.
653 // TODO(yzshen): Remove TCP socket-related contents from the plugin delegate.
654 uint32 socket_id = 0;
655 Send(new PpapiHostMsg_PPBTCPSocket_CreatePrivate(
656 routing_id(), 0, &socket_id));
657 return socket_id;
658 }
659
660 void PepperPluginDelegateImpl::TCPSocketConnect(
661 PPB_TCPSocket_Private_Impl* socket,
662 uint32 socket_id,
663 const std::string& host,
664 uint16_t port) {
665 RegisterTCPSocket(socket, socket_id);
666 Send(new PpapiHostMsg_PPBTCPSocket_Connect(
667 routing_id(), socket_id, host, port));
668 }
669
670 void PepperPluginDelegateImpl::TCPSocketConnectWithNetAddress(
671 PPB_TCPSocket_Private_Impl* socket,
672 uint32 socket_id,
673 const PP_NetAddress_Private& addr) {
674 RegisterTCPSocket(socket, socket_id);
675 Send(new PpapiHostMsg_PPBTCPSocket_ConnectWithNetAddress(
676 routing_id(), socket_id, addr));
677 }
678
679 void PepperPluginDelegateImpl::TCPSocketSSLHandshake(
680 uint32 socket_id,
681 const std::string& server_name,
682 uint16_t server_port,
683 const std::vector<std::vector<char> >& trusted_certs,
684 const std::vector<std::vector<char> >& untrusted_certs) {
685 DCHECK(tcp_sockets_.Lookup(socket_id));
686 Send(new PpapiHostMsg_PPBTCPSocket_SSLHandshake(
687 socket_id, server_name, server_port, trusted_certs, untrusted_certs));
688 }
689
690 void PepperPluginDelegateImpl::TCPSocketRead(uint32 socket_id,
691 int32_t bytes_to_read) {
692 DCHECK(tcp_sockets_.Lookup(socket_id));
693 Send(new PpapiHostMsg_PPBTCPSocket_Read(socket_id, bytes_to_read));
694 }
695
696 void PepperPluginDelegateImpl::TCPSocketWrite(uint32 socket_id,
697 const std::string& buffer) {
698 DCHECK(tcp_sockets_.Lookup(socket_id));
699 Send(new PpapiHostMsg_PPBTCPSocket_Write(socket_id, buffer));
700 }
701
702 void PepperPluginDelegateImpl::TCPSocketDisconnect(uint32 socket_id) {
703 // There is no DCHECK(tcp_sockets_.Lookup(socket_id)) because this method
704 // can be called before TCPSocketConnect or TCPSocketConnectWithNetAddress.
705 Send(new PpapiHostMsg_PPBTCPSocket_Disconnect(socket_id));
706 if (tcp_sockets_.Lookup(socket_id))
707 tcp_sockets_.Remove(socket_id);
708 }
709
710 void PepperPluginDelegateImpl::TCPSocketSetOption(
711 uint32 socket_id,
712 PP_TCPSocket_Option name,
713 const ppapi::SocketOptionData& value) {
714 DCHECK(tcp_sockets_.Lookup(socket_id));
715 Send(new PpapiHostMsg_PPBTCPSocket_SetOption(socket_id, name, value));
716 }
717
718 void PepperPluginDelegateImpl::RegisterTCPSocket( 618 void PepperPluginDelegateImpl::RegisterTCPSocket(
719 PPB_TCPSocket_Private_Impl* socket, 619 PPB_TCPSocket_Private_Impl* socket,
720 uint32 socket_id) { 620 uint32 socket_id) {
721 tcp_sockets_.AddWithID(socket, socket_id); 621 tcp_sockets_.AddWithID(socket, socket_id);
722 } 622 }
723 623
724 void PepperPluginDelegateImpl::TCPServerSocketListen( 624 void PepperPluginDelegateImpl::UnregisterTCPSocket(uint32 socket_id) {
725 PP_Resource socket_resource, 625 // There is no DCHECK(tcp_sockets_.Lookup(socket_id)) because this method
726 const PP_NetAddress_Private& addr, 626 // can be called before TCPSocketConnect or TCPSocketConnectWithNetAddress.
727 int32_t backlog) { 627 if (tcp_sockets_.Lookup(socket_id))
728 Send(new PpapiHostMsg_PPBTCPServerSocket_Listen( 628 tcp_sockets_.Remove(socket_id);
729 routing_id(), 0, socket_resource, addr, backlog));
730 } 629 }
731 630
732 void PepperPluginDelegateImpl::TCPServerSocketAccept(uint32 server_socket_id) { 631 void PepperPluginDelegateImpl::TCPServerSocketStopListening(uint32 socket_id) {
733 DCHECK(tcp_server_sockets_.Lookup(server_socket_id)); 632 tcp_server_sockets_.Remove(socket_id);
734 Send(new PpapiHostMsg_PPBTCPServerSocket_Accept(
735 routing_id(), server_socket_id));
736 }
737
738 void PepperPluginDelegateImpl::TCPServerSocketStopListening(
739 PP_Resource socket_resource,
740 uint32 socket_id) {
741 if (socket_id != 0) {
742 Send(new PpapiHostMsg_PPBTCPServerSocket_Destroy(socket_id));
743 tcp_server_sockets_.Remove(socket_id);
744 }
745 } 633 }
746 634
747 void PepperPluginDelegateImpl::HandleDocumentLoad( 635 void PepperPluginDelegateImpl::HandleDocumentLoad(
748 PepperPluginInstanceImpl* instance, 636 PepperPluginInstanceImpl* instance,
749 const WebKit::WebURLResponse& response) { 637 const WebKit::WebURLResponse& response) {
750 DCHECK(!instance->document_loader()); 638 DCHECK(!instance->document_loader());
751 639
752 PP_Instance pp_instance = instance->pp_instance(); 640 PP_Instance pp_instance = instance->pp_instance();
753 RendererPpapiHostImpl* host_impl = instance->module()->renderer_ppapi_host(); 641 RendererPpapiHostImpl* host_impl = instance->module()->renderer_ppapi_host();
754 642
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 // managed externally. 700 // managed externally.
813 return CreateOutOfProcessModule(module.get(), 701 return CreateOutOfProcessModule(module.get(),
814 path, 702 path,
815 permissions, 703 permissions,
816 channel_handle, 704 channel_handle,
817 peer_pid, 705 peer_pid,
818 plugin_child_id, 706 plugin_child_id,
819 true); // is_external = true 707 true); // is_external = true
820 } 708 }
821 709
822 bool PepperPluginDelegateImpl::LockMouse(PepperPluginInstanceImpl* instance) {
823 return GetMouseLockDispatcher(instance)->LockMouse(
824 GetOrCreateLockTargetAdapter(instance));
825 }
826
827 void PepperPluginDelegateImpl::UnlockMouse(PepperPluginInstanceImpl* instance) {
828 GetMouseLockDispatcher(instance)->UnlockMouse(
829 GetOrCreateLockTargetAdapter(instance));
830 }
831
832 bool PepperPluginDelegateImpl::IsMouseLocked(
833 PepperPluginInstanceImpl* instance) {
834 return GetMouseLockDispatcher(instance)->IsMouseLockedTo(
835 GetOrCreateLockTargetAdapter(instance));
836 }
837
838 void PepperPluginDelegateImpl::DidChangeCursor( 710 void PepperPluginDelegateImpl::DidChangeCursor(
839 PepperPluginInstanceImpl* instance, 711 PepperPluginInstanceImpl* instance,
840 const WebKit::WebCursorInfo& cursor) { 712 const WebKit::WebCursorInfo& cursor) {
841 // Update the cursor appearance immediately if the requesting plugin is the 713 // Update the cursor appearance immediately if the requesting plugin is the
842 // one which receives the last mouse event. Otherwise, the new cursor won't be 714 // one which receives the last mouse event. Otherwise, the new cursor won't be
843 // picked up until the plugin gets the next input event. That is bad if, e.g., 715 // picked up until the plugin gets the next input event. That is bad if, e.g.,
844 // the plugin would like to set an invisible cursor when there isn't any user 716 // the plugin would like to set an invisible cursor when there isn't any user
845 // input for a while. 717 // input for a while.
846 if (instance == last_mouse_event_target_) 718 if (instance == last_mouse_event_target_)
847 render_view_->didChangeCursor(cursor); 719 render_view_->didChangeCursor(cursor);
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
973 bool succeeded = (accepted_socket_id != 0); 845 bool succeeded = (accepted_socket_id != 0);
974 socket->OnAcceptCompleted(succeeded, 846 socket->OnAcceptCompleted(succeeded,
975 accepted_socket_id, 847 accepted_socket_id,
976 local_addr, 848 local_addr,
977 remote_addr); 849 remote_addr);
978 } else if (accepted_socket_id != 0) { 850 } else if (accepted_socket_id != 0) {
979 Send(new PpapiHostMsg_PPBTCPSocket_Disconnect(accepted_socket_id)); 851 Send(new PpapiHostMsg_PPBTCPSocket_Disconnect(accepted_socket_id));
980 } 852 }
981 } 853 }
982 854
983 int PepperPluginDelegateImpl::GetRoutingID() const {
984 return routing_id();
985 }
986
987 MouseLockDispatcher::LockTarget*
988 PepperPluginDelegateImpl::GetOrCreateLockTargetAdapter(
989 PepperPluginInstanceImpl* instance) {
990 MouseLockDispatcher::LockTarget* target = mouse_lock_instances_[instance];
991 if (target)
992 return target;
993
994 return mouse_lock_instances_[instance] =
995 new PluginInstanceLockTarget(instance);
996 }
997
998 void PepperPluginDelegateImpl::UnSetAndDeleteLockTargetAdapter(
999 PepperPluginInstanceImpl* instance) {
1000 LockTargetMap::iterator it = mouse_lock_instances_.find(instance);
1001 if (it != mouse_lock_instances_.end()) {
1002 MouseLockDispatcher::LockTarget* target = it->second;
1003 GetMouseLockDispatcher(instance)->OnLockTargetDestroyed(target);
1004 delete target;
1005 mouse_lock_instances_.erase(it);
1006 }
1007 }
1008
1009 MouseLockDispatcher* PepperPluginDelegateImpl::GetMouseLockDispatcher(
1010 PepperPluginInstanceImpl* instance) {
1011 if (instance->flash_fullscreen()) {
1012 RenderWidgetFullscreenPepper* container =
1013 static_cast<RenderWidgetFullscreenPepper*>(
1014 instance->fullscreen_container());
1015 return container->mouse_lock_dispatcher();
1016 } else {
1017 return render_view_->mouse_lock_dispatcher();
1018 }
1019 }
1020
1021 } // namespace content 855 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698