diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-27 22:59:20 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-27 22:59:20 +0000 |
commit | 6f496b2703a7ccb7bba1dbb14a2b9c00f02a853e (patch) | |
tree | 77586da8fc9d5dd3051b889a2f89d8e651924adc /chrome/renderer | |
parent | 0572d4f6ead89fd19176d0c8346ef1a281458073 (diff) | |
download | chromium_src-6f496b2703a7ccb7bba1dbb14a2b9c00f02a853e.zip chromium_src-6f496b2703a7ccb7bba1dbb14a2b9c00f02a853e.tar.gz chromium_src-6f496b2703a7ccb7bba1dbb14a2b9c00f02a853e.tar.bz2 |
Add a "Copy" API to Pepper, so that plugins don't have to hardcode the platform specific shortcut. Also, this makes copying through the page menu work on Mac and Linux.
Review URL: http://codereview.chromium.org/2329001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48443 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/render_view.cc | 6 | ||||
-rw-r--r-- | chrome/renderer/webplugin_delegate_pepper.cc | 22 | ||||
-rw-r--r-- | chrome/renderer/webplugin_delegate_pepper.h | 2 |
3 files changed, 29 insertions, 1 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 8a16d9e..174a119 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -1088,6 +1088,12 @@ void RenderView::OnCopy() { if (!webview()) return; + if (webview()->mainFrame()->document().isPluginDocument()) { + webkit_glue::WebPluginDelegate* delegate = GetDelegateForPluginDocument(); + delegate->Copy(); + return; + } + webview()->focusedFrame()->executeCommand(WebString::fromUTF8("Copy")); UserMetricsRecordAction("Copy"); } diff --git a/chrome/renderer/webplugin_delegate_pepper.cc b/chrome/renderer/webplugin_delegate_pepper.cc index d70608f..a2b229c 100644 --- a/chrome/renderer/webplugin_delegate_pepper.cc +++ b/chrome/renderer/webplugin_delegate_pepper.cc @@ -10,6 +10,7 @@ #include <vector> #include "base/file_util.h" +#include "base/keyboard_codes.h" #if defined(OS_MACOSX) #include "base/mac_util.h" #endif @@ -432,6 +433,13 @@ void WebPluginDelegatePepper::Zoom(int factor) { extensions->zoom(instance()->npp(), factor); } +void WebPluginDelegatePepper::Copy() { + NPPExtensions* extensions = NULL; + instance()->NPP_GetValue(NPPVPepperExtensions, &extensions); + if (extensions && extensions->copy) + extensions->copy(instance()->npp()); +} + NPError WebPluginDelegatePepper::Device2DQueryCapability(int32 capability, int32* value) { return NPERR_GENERIC_ERROR; @@ -1337,6 +1345,20 @@ void BuildMouseWheelEvent(const WebInputEvent* event, NPPepperEvent* npevent) { bool WebPluginDelegatePepper::HandleInputEvent(const WebInputEvent& event, WebCursorInfo* cursor_info) { + if (event.type == WebInputEvent::KeyDown) { + const WebKeyboardEvent* key_event = + reinterpret_cast<const WebKeyboardEvent*>(&event); +#if defined(OS_MACOSX) + if (key_event->modifiers == NPEventModifier_MetaKey && +#else + if (key_event->modifiers == NPEventModifier_ControlKey && +#endif + key_event->windowsKeyCode == base::VKEY_C) { + Copy(); + return true; + } + } + NPPepperEvent npevent; npevent.type = ConvertEventTypes(event.type); diff --git a/chrome/renderer/webplugin_delegate_pepper.h b/chrome/renderer/webplugin_delegate_pepper.h index 92287bc..d51678f 100644 --- a/chrome/renderer/webplugin_delegate_pepper.h +++ b/chrome/renderer/webplugin_delegate_pepper.h @@ -94,8 +94,8 @@ class WebPluginDelegatePepper : public webkit_glue::WebPluginDelegate, void* user_data); virtual NPWidgetExtensions* GetWidgetExtensions(); virtual bool SetCursor(NPCursorType type); - virtual void Zoom(int factor); + virtual void Copy(); // WebPlugin2DDeviceDelegate implementation. virtual NPError Device2DQueryCapability(int32 capability, int32* value); |