| Index: webkit/glue/webplugin_impl.cc
|
| ===================================================================
|
| --- webkit/glue/webplugin_impl.cc (revision 16673)
|
| +++ webkit/glue/webplugin_impl.cc (working copy)
|
| @@ -30,7 +30,9 @@
|
| #include "Page.h"
|
| #include "PlatformContextSkia.h"
|
| #include "PlatformMouseEvent.h"
|
| +#include "PlatformKeyboardEvent.h"
|
| #include "PlatformString.h"
|
| +#include "PlatformWidget.h"
|
| #include "RenderBox.h"
|
| #include "ResourceHandle.h"
|
| #include "ResourceHandleClient.h"
|
| @@ -47,11 +49,13 @@
|
| #include "base/string_util.h"
|
| #include "base/sys_string_conversions.h"
|
| #include "net/base/escape.h"
|
| +#include "webkit/api/public/WebInputEvent.h"
|
| #include "webkit/api/public/WebKit.h"
|
| #include "webkit/api/public/WebKitClient.h"
|
| #include "webkit/api/public/WebString.h"
|
| #include "webkit/api/public/WebURL.h"
|
| #include "webkit/glue/chrome_client_impl.h"
|
| +#include "webkit/glue/event_conversion.h"
|
| #include "webkit/glue/glue_util.h"
|
| #include "webkit/glue/multipart_response_delegate.h"
|
| #include "webkit/glue/webcursor.h"
|
| @@ -62,6 +66,10 @@
|
| #include "webkit/glue/webview_impl.h"
|
| #include "googleurl/src/gurl.h"
|
|
|
| +using WebKit::WebKeyboardEvent;
|
| +using WebKit::WebInputEvent;
|
| +using WebKit::WebMouseEvent;
|
| +
|
| // This class handles individual multipart responses. It is instantiated when
|
| // we receive HTTP status code 206 in the HTTP response. This indicates
|
| // that the response could have multiple parts each separated by a boundary
|
| @@ -768,42 +776,16 @@
|
| }
|
|
|
| void WebPluginImpl::handleMouseEvent(WebCore::MouseEvent* event) {
|
| -#if defined(OS_WIN)
|
| DCHECK(parent()->isFrameView());
|
| // We cache the parent FrameView here as the plugin widget could be deleted
|
| // in the call to HandleEvent. See http://b/issue?id=1362948
|
| WebCore::FrameView* parent_view = static_cast<WebCore::FrameView*>(parent());
|
|
|
| - WebCore::IntPoint p =
|
| - parent_view->contentsToWindow(WebCore::IntPoint(event->pageX(),
|
| - event->pageY()));
|
| - NPEvent np_event;
|
| - np_event.lParam = static_cast<uint32>(MAKELPARAM(p.x(), p.y()));
|
| - np_event.wParam = 0;
|
| + WebMouseEvent web_event;
|
| + if (!ToWebMouseEvent(*parent_view, *event, &web_event))
|
| + return;
|
|
|
| - if (event->ctrlKey())
|
| - np_event.wParam |= MK_CONTROL;
|
| - if (event->shiftKey())
|
| - np_event.wParam |= MK_SHIFT;
|
| -
|
| - if ((event->type() == WebCore::eventNames().mousemoveEvent) ||
|
| - (event->type() == WebCore::eventNames().mouseoutEvent) ||
|
| - (event->type() == WebCore::eventNames().mouseoverEvent)) {
|
| - np_event.event = WM_MOUSEMOVE;
|
| - if (event->buttonDown()) {
|
| - switch (event->button()) {
|
| - case WebCore::LeftButton:
|
| - np_event.wParam |= MK_LBUTTON;
|
| - break;
|
| - case WebCore::MiddleButton:
|
| - np_event.wParam |= MK_MBUTTON;
|
| - break;
|
| - case WebCore::RightButton:
|
| - np_event.wParam |= MK_RBUTTON;
|
| - break;
|
| - }
|
| - }
|
| - } else if (event->type() == WebCore::eventNames().mousedownEvent) {
|
| + if (event->type() == WebCore::eventNames().mousedownEvent) {
|
| // Ensure that the frame containing the plugin has focus.
|
| WebCore::Frame* containing_frame = webframe_->frame();
|
| if (WebCore::Page* current_page = containing_frame->page()) {
|
| @@ -811,46 +793,13 @@
|
| }
|
| // Give focus to our containing HTMLPluginElement.
|
| containing_frame->document()->setFocusedNode(element_);
|
| -
|
| - // Ideally we'd translate to WM_xBUTTONDBLCLK here if the click count were
|
| - // a multiple of 2. But there seems to be no way to get at the click count
|
| - // or the original Windows message from the WebCore::Event.
|
| - switch (event->button()) {
|
| - case WebCore::LeftButton:
|
| - np_event.event = WM_LBUTTONDOWN;
|
| - np_event.wParam |= MK_LBUTTON;
|
| - break;
|
| - case WebCore::MiddleButton:
|
| - np_event.event = WM_MBUTTONDOWN;
|
| - np_event.wParam |= MK_MBUTTON;
|
| - break;
|
| - case WebCore::RightButton:
|
| - np_event.event = WM_RBUTTONDOWN;
|
| - np_event.wParam |= MK_RBUTTON;
|
| - break;
|
| - }
|
| - } else if (event->type() == WebCore::eventNames().mouseupEvent) {
|
| - switch (event->button()) {
|
| - case WebCore::LeftButton:
|
| - np_event.event = WM_LBUTTONUP;
|
| - break;
|
| - case WebCore::MiddleButton:
|
| - np_event.event = WM_MBUTTONUP;
|
| - break;
|
| - case WebCore::RightButton:
|
| - np_event.event = WM_RBUTTONUP;
|
| - break;
|
| - }
|
| - } else {
|
| - // Skip all other mouse events.
|
| - return;
|
| }
|
|
|
| // TODO(pkasting): http://b/1119691 This conditional seems exactly backwards,
|
| // but it matches Safari's code, and if I reverse it, giving focus to a
|
| // transparent (windowless) plugin fails.
|
| WebCursor cursor;
|
| - if (!delegate_->HandleEvent(&np_event, &cursor))
|
| + if (!delegate_->HandleInputEvent(web_event, &cursor))
|
| event->setDefaultHandled();
|
|
|
| WebCore::Page* page = parent_view->frame()->page();
|
| @@ -864,35 +813,16 @@
|
| // event. We need to reflect the changed cursor in the frame view as the
|
| // mouse is moved in the boundaries of the windowless plugin.
|
| chrome_client->SetCursorForPlugin(cursor);
|
| -
|
| -#else
|
| - NOTIMPLEMENTED();
|
| -#endif
|
| }
|
|
|
| void WebPluginImpl::handleKeyboardEvent(WebCore::KeyboardEvent* event) {
|
| -#if defined(OS_WIN)
|
| - NPEvent np_event;
|
| - np_event.wParam = event->keyCode();
|
| -
|
| - if (event->type() == WebCore::eventNames().keydownEvent) {
|
| - np_event.event = WM_KEYDOWN;
|
| - np_event.lParam = 0;
|
| - } else if (event->type() == WebCore::eventNames().keyupEvent) {
|
| - np_event.event = WM_KEYUP;
|
| - np_event.lParam = 0x8000;
|
| - } else {
|
| - // Skip all other keyboard events.
|
| + WebKeyboardEvent web_event;
|
| + if (!ToWebKeyboardEvent(*event, &web_event))
|
| return;
|
| - }
|
| -
|
| // TODO(pkasting): http://b/1119691 See above.
|
| WebCursor current_web_cursor;
|
| - if (!delegate_->HandleEvent(&np_event, ¤t_web_cursor))
|
| + if (!delegate_->HandleInputEvent(web_event, ¤t_web_cursor))
|
| event->setDefaultHandled();
|
| -#else
|
| - NOTIMPLEMENTED();
|
| -#endif
|
| }
|
|
|
| NPObject* WebPluginImpl::GetPluginScriptableObject() {
|
|
|