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

Side by Side Diff: chrome/renderer/pepper_plugin_delegate_impl.cc

Issue 6253017: Pepper/Flapper: First pass at context menu implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more browser-side sanity checking Created 9 years, 10 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/renderer/pepper_plugin_delegate_impl.h" 5 #include "chrome/renderer/pepper_plugin_delegate_impl.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "app/surface/transport_dib.h" 9 #include "app/surface/transport_dib.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 17 matching lines...) Expand all
28 #include "chrome/renderer/gpu_channel_host.h" 28 #include "chrome/renderer/gpu_channel_host.h"
29 #include "chrome/renderer/pepper_platform_context_3d_impl.h" 29 #include "chrome/renderer/pepper_platform_context_3d_impl.h"
30 #include "chrome/renderer/render_thread.h" 30 #include "chrome/renderer/render_thread.h"
31 #include "chrome/renderer/render_view.h" 31 #include "chrome/renderer/render_view.h"
32 #include "chrome/renderer/webgraphicscontext3d_command_buffer_impl.h" 32 #include "chrome/renderer/webgraphicscontext3d_command_buffer_impl.h"
33 #include "chrome/renderer/webplugin_delegate_proxy.h" 33 #include "chrome/renderer/webplugin_delegate_proxy.h"
34 #include "gfx/size.h" 34 #include "gfx/size.h"
35 #include "grit/locale_settings.h" 35 #include "grit/locale_settings.h"
36 #include "ipc/ipc_channel_handle.h" 36 #include "ipc/ipc_channel_handle.h"
37 #include "ppapi/c/dev/pp_video_dev.h" 37 #include "ppapi/c/dev/pp_video_dev.h"
38 #include "ppapi/c/pp_errors.h"
38 #include "ppapi/c/private/ppb_flash.h" 39 #include "ppapi/c/private/ppb_flash.h"
39 #include "ppapi/proxy/host_dispatcher.h" 40 #include "ppapi/proxy/host_dispatcher.h"
40 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFileChooserComplet ion.h" 41 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFileChooserComplet ion.h"
41 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFileChooserParams. h" 42 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFileChooserParams. h"
42 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h" 43 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h"
43 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" 44 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
44 #include "ui/base/l10n/l10n_util.h" 45 #include "ui/base/l10n/l10n_util.h"
45 #include "webkit/fileapi/file_system_callback_dispatcher.h" 46 #include "webkit/fileapi/file_system_callback_dispatcher.h"
47 #include "webkit/glue/context_menu.h"
46 #include "webkit/plugins/npapi/webplugin.h" 48 #include "webkit/plugins/npapi/webplugin.h"
47 #include "webkit/plugins/ppapi/ppb_file_io_impl.h" 49 #include "webkit/plugins/ppapi/ppb_file_io_impl.h"
48 #include "webkit/plugins/ppapi/plugin_module.h" 50 #include "webkit/plugins/ppapi/plugin_module.h"
49 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" 51 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
50 #include "webkit/plugins/ppapi/ppb_flash_impl.h" 52 #include "webkit/plugins/ppapi/ppb_flash_impl.h"
51 53
52 #if defined(OS_MACOSX) 54 #if defined(OS_MACOSX)
53 #include "chrome/renderer/render_thread.h" 55 #include "chrome/renderer/render_thread.h"
54 #endif 56 #endif
55 57
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 dispatcher_.reset(); 371 dispatcher_.reset();
370 return false; 372 return false;
371 } 373 }
372 return true; 374 return true;
373 } 375 }
374 376
375 } // namespace 377 } // namespace
376 378
377 PepperPluginDelegateImpl::PepperPluginDelegateImpl(RenderView* render_view) 379 PepperPluginDelegateImpl::PepperPluginDelegateImpl(RenderView* render_view)
378 : render_view_(render_view), 380 : render_view_(render_view),
381 has_saved_context_menu_action_(false),
382 saved_context_menu_action_(0),
379 id_generator_(0) { 383 id_generator_(0) {
380 } 384 }
381 385
382 PepperPluginDelegateImpl::~PepperPluginDelegateImpl() { 386 PepperPluginDelegateImpl::~PepperPluginDelegateImpl() {
383 } 387 }
384 388
385 scoped_refptr<webkit::ppapi::PluginModule> 389 scoped_refptr<webkit::ppapi::PluginModule>
386 PepperPluginDelegateImpl::CreatePepperPlugin(const FilePath& path) { 390 PepperPluginDelegateImpl::CreatePepperPlugin(const FilePath& path) {
387 // See if a module has already been loaded for this plugin. 391 // See if a module has already been loaded for this plugin.
388 scoped_refptr<webkit::ppapi::PluginModule> module = 392 scoped_refptr<webkit::ppapi::PluginModule> module =
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 webkit::ppapi::PPB_Flash_NetConnector_Impl* connector, 815 webkit::ppapi::PPB_Flash_NetConnector_Impl* connector,
812 const char* host, 816 const char* host,
813 uint16_t port) { 817 uint16_t port) {
814 int request_id = pending_connect_tcps_.Add( 818 int request_id = pending_connect_tcps_.Add(
815 new scoped_refptr<webkit::ppapi::PPB_Flash_NetConnector_Impl>(connector)); 819 new scoped_refptr<webkit::ppapi::PPB_Flash_NetConnector_Impl>(connector));
816 IPC::Message* msg = 820 IPC::Message* msg =
817 new PepperMsg_ConnectTcp(render_view_->routing_id(), 821 new PepperMsg_ConnectTcp(render_view_->routing_id(),
818 request_id, 822 request_id,
819 std::string(host), 823 std::string(host),
820 port); 824 port);
821 if (!render_view_->Send(msg)) 825 if (!render_view_->Send(msg)) {
826 pending_connect_tcps_.Remove(request_id);
822 return PP_ERROR_FAILED; 827 return PP_ERROR_FAILED;
828 }
823 829
824 return PP_ERROR_WOULDBLOCK; 830 return PP_ERROR_WOULDBLOCK;
825 } 831 }
826 832
827 int32_t PepperPluginDelegateImpl::ConnectTcpAddress( 833 int32_t PepperPluginDelegateImpl::ConnectTcpAddress(
828 webkit::ppapi::PPB_Flash_NetConnector_Impl* connector, 834 webkit::ppapi::PPB_Flash_NetConnector_Impl* connector,
829 const struct PP_Flash_NetAddress* addr) { 835 const struct PP_Flash_NetAddress* addr) {
830 int request_id = pending_connect_tcps_.Add( 836 int request_id = pending_connect_tcps_.Add(
831 new scoped_refptr<webkit::ppapi::PPB_Flash_NetConnector_Impl>(connector)); 837 new scoped_refptr<webkit::ppapi::PPB_Flash_NetConnector_Impl>(connector));
832 IPC::Message* msg = 838 IPC::Message* msg =
833 new PepperMsg_ConnectTcpAddress(render_view_->routing_id(), 839 new PepperMsg_ConnectTcpAddress(render_view_->routing_id(),
834 request_id, 840 request_id,
835 *addr); 841 *addr);
836 if (!render_view_->Send(msg)) 842 if (!render_view_->Send(msg)) {
843 pending_connect_tcps_.Remove(request_id);
837 return PP_ERROR_FAILED; 844 return PP_ERROR_FAILED;
845 }
838 846
839 return PP_ERROR_WOULDBLOCK; 847 return PP_ERROR_WOULDBLOCK;
840 } 848 }
841 849
842 void PepperPluginDelegateImpl::OnConnectTcpACK( 850 void PepperPluginDelegateImpl::OnConnectTcpACK(
843 int request_id, 851 int request_id,
844 base::PlatformFile socket, 852 base::PlatformFile socket,
845 const PP_Flash_NetAddress& local_addr, 853 const PP_Flash_NetAddress& local_addr,
846 const PP_Flash_NetAddress& remote_addr) { 854 const PP_Flash_NetAddress& remote_addr) {
847 scoped_refptr<webkit::ppapi::PPB_Flash_NetConnector_Impl> connector = 855 scoped_refptr<webkit::ppapi::PPB_Flash_NetConnector_Impl> connector =
848 *pending_connect_tcps_.Lookup(request_id); 856 *pending_connect_tcps_.Lookup(request_id);
849 pending_connect_tcps_.Remove(request_id); 857 pending_connect_tcps_.Remove(request_id);
850 858
851 connector->CompleteConnectTcp(socket, local_addr, remote_addr); 859 connector->CompleteConnectTcp(socket, local_addr, remote_addr);
852 } 860 }
853 861
862 int32_t PepperPluginDelegateImpl::ShowContextMenu(
863 webkit::ppapi::PPB_Flash_Menu_Impl* menu,
864 const gfx::Point& position) {
865 int request_id = pending_context_menus_.Add(
866 new scoped_refptr<webkit::ppapi::PPB_Flash_Menu_Impl>(menu));
867
868 ContextMenuParams params;
869 params.x = position.x();
870 params.y = position.y();
871 params.custom_context.is_pepper_menu = true;
872 params.custom_context.request_id = request_id;
873 params.custom_items = menu->menu_data();
874
875 IPC::Message* msg = new ViewHostMsg_ContextMenu(render_view_->routing_id(),
876 params);
877 if (!render_view_->Send(msg)) {
878 pending_context_menus_.Remove(request_id);
879 return PP_ERROR_FAILED;
880 }
881
882 return PP_ERROR_WOULDBLOCK;
883 }
884
885 void PepperPluginDelegateImpl::OnContextMenuClosed(
886 const webkit_glue::CustomContextMenuContext& custom_context) {
887 int request_id = custom_context.request_id;
888 scoped_refptr<webkit::ppapi::PPB_Flash_Menu_Impl> menu =
889 *pending_context_menus_.Lookup(request_id);
890 if (!menu) {
891 NOTREACHED() << "CompleteShowContextMenu() called twice for the same menu.";
892 return;
893 }
894 pending_context_menus_.Remove(request_id);
895
896 if (has_saved_context_menu_action_) {
897 menu->CompleteShow(PP_OK, saved_context_menu_action_);
898 has_saved_context_menu_action_ = false;
899 saved_context_menu_action_ = 0;
900 } else {
901 menu->CompleteShow(PP_ERROR_USERCANCEL, 0);
902 }
903 }
904
905 void PepperPluginDelegateImpl::OnCustomContextMenuAction(
906 const webkit_glue::CustomContextMenuContext& custom_context,
907 unsigned action) {
908 // Just save the action.
909 DCHECK(!has_saved_context_menu_action_);
910 has_saved_context_menu_action_ = true;
911 saved_context_menu_action_ = action;
912 }
913
854 webkit::ppapi::FullscreenContainer* 914 webkit::ppapi::FullscreenContainer*
855 PepperPluginDelegateImpl::CreateFullscreenContainer( 915 PepperPluginDelegateImpl::CreateFullscreenContainer(
856 webkit::ppapi::PluginInstance* instance) { 916 webkit::ppapi::PluginInstance* instance) {
857 return render_view_->CreatePepperFullscreenContainer(instance); 917 return render_view_->CreatePepperFullscreenContainer(instance);
858 } 918 }
859 919
860 std::string PepperPluginDelegateImpl::GetDefaultEncoding() { 920 std::string PepperPluginDelegateImpl::GetDefaultEncoding() {
861 // TODO(brettw) bug 56615: Somehow get the preference for the default 921 // TODO(brettw) bug 56615: Somehow get the preference for the default
862 // encoding here rather than using the global default for the UI language. 922 // encoding here rather than using the global default for the UI language.
863 return l10n_util::GetStringUTF8(IDS_DEFAULT_ENCODING); 923 return l10n_util::GetStringUTF8(IDS_DEFAULT_ENCODING);
(...skipping 25 matching lines...) Expand all
889 949
890 void PepperPluginDelegateImpl::SetContentRestriction(int restrictions) { 950 void PepperPluginDelegateImpl::SetContentRestriction(int restrictions) {
891 render_view_->Send(new ViewHostMsg_UpdateContentRestrictions( 951 render_view_->Send(new ViewHostMsg_UpdateContentRestrictions(
892 render_view_->routing_id(), restrictions)); 952 render_view_->routing_id(), restrictions));
893 } 953 }
894 954
895 void PepperPluginDelegateImpl::HasUnsupportedFeature() { 955 void PepperPluginDelegateImpl::HasUnsupportedFeature() {
896 render_view_->Send(new ViewHostMsg_PDFHasUnsupportedFeature( 956 render_view_->Send(new ViewHostMsg_PDFHasUnsupportedFeature(
897 render_view_->routing_id())); 957 render_view_->routing_id()));
898 } 958 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698