18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright 2009, The Android Open Source Project 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 8e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * * Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 10e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * * Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 14e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 26e03118fd5d9b776df29de3f96232ed6b5395c845Steve Block 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define LOG_TAG "WebCore" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginView.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Document.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Element.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "EventNames.h" 352c02e355bf0631c0bec3496fab67f45710c5cd21Grace Kloba#include "FocusController.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameLoader.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameLoadRequest.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameTree.h" 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h" 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameView.h" 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "GraphicsContext.h" 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLNames.h" 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLPlugInElement.h" 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Image.h" 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "KeyboardEvent.h" 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "MIMETypeRegistry.h" 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "MouseEvent.h" 48ba96c5ad9d140287cc378faec6bd9384836a00e6The Android Open Source Project#include "NetworkStateNotifier.h" 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "NotImplemented.h" 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Page.h" 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformGraphicsContext.h" 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformKeyboardEvent.h" 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginMainThreadScheduler.h" 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginPackage.h" 55f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch#include "Touch.h" 5656ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger#include "TouchEvent.h" 57f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch#include "TouchList.h" 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "android_graphics.h" 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SkCanvas.h" 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "npruntime_impl.h" 61109a58c31072b14f5b2c0493ed6c5a1855f82fd7Feng Qian// #include "runtime_root.h" 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "utils/SystemClock.h" 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ScriptController.h" 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Settings.h" 65109a58c31072b14f5b2c0493ed6c5a1855f82fd7Feng Qian 66109a58c31072b14f5b2c0493ed6c5a1855f82fd7Feng Qian#if USE(JSC) 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <runtime/JSLock.h> 68109a58c31072b14f5b2c0493ed6c5a1855f82fd7Feng Qian#endif 69109a58c31072b14f5b2c0493ed6c5a1855f82fd7Feng Qian 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/ASCIICType.h> 71109a58c31072b14f5b2c0493ed6c5a1855f82fd7Feng Qian// #include "runtime.h" 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebViewCore.h" 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 74a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger/* Controls the printing of log messages in this file. This must be defined 75a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger before PluginDebugAndroid.h is included. 76a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger */ 77d68483b2c8871634da4f12a5c7c272c47ee8e646Grace Kloba// #define PLUGIN_DEBUG_LOCAL 78a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger#define TRACE_KEY_EVENTS 0 79a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginDebug.h" 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginDebugAndroid.h" 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginViewBridgeAndroid.h" 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginWidgetAndroid.h" 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "android_npapi.h" 862c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger#include "ANPNativeWindow_npapi.h" 8710d4052577e66430f5a3716ec51a401f1b4b21c2Derek Sollenberger#include "ANPSurface_npapi.h" 88f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger#include "ANPSystem_npapi.h" 89136290ef021ff9a9bf9152124a5fa42069acfdfcDerek Sollenberger#include "ANPVideo_npapi.h" 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SkANP.h" 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SkFlipPixelRef.h" 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern void ANPAudioTrackInterfaceV0_Init(ANPInterface* value); 9649bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenbergerextern void ANPAudioTrackInterfaceV1_Init(ANPInterface* value); 97a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reedextern void ANPBitmapInterfaceV0_Init(ANPInterface* value); 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern void ANPCanvasInterfaceV0_Init(ANPInterface* value); 99d026980fde6eb3b01c1fe49441174e89cd1be298Mike Reedextern void ANPEventInterfaceV0_Init(ANPInterface* value); 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern void ANPLogInterfaceV0_Init(ANPInterface* value); 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern void ANPMatrixInterfaceV0_Init(ANPInterface* value); 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern void ANPOffscreenInterfaceV0_Init(ANPInterface* value); 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern void ANPPaintInterfaceV0_Init(ANPInterface* value); 1042ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reedextern void ANPPathInterfaceV0_Init(ANPInterface* value); 105f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenbergerextern void ANPSurfaceInterfaceV0_Init(ANPInterface* value); 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern void ANPTypefaceInterfaceV0_Init(ANPInterface* value); 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern void ANPWindowInterfaceV0_Init(ANPInterface* value); 1081f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenbergerextern void ANPWindowInterfaceV1_Init(ANPInterface* value); 109efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenbergerextern void ANPWindowInterfaceV2_Init(ANPInterface* value); 1100a2bed53555947aea37912d694f9c7c376490808Grace Klobaextern void ANPSystemInterfaceV0_Init(ANPInterface* value); 1119bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenbergerextern void ANPSystemInterfaceV1_Init(ANPInterface* value); 1122ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenbergerextern void ANPSystemInterfaceV2_Init(ANPInterface* value); 1132c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenbergerextern void ANPNativeWindowInterfaceV0_Init(ANPInterface* value); 114136290ef021ff9a9bf9152124a5fa42069acfdfcDerek Sollenbergerextern void ANPVideoInterfaceV0_Init(ANPInterface* value); 115b8c086775bdf98e932daead992eb960767248f44Derek Sollenbergerextern void ANPVideoInterfaceV1_Init(ANPInterface* value); 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct VarProcPair { 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int enumValue; 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project size_t size; 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void (*proc)(ANPInterface*); 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define VARPROCLINE(name) \ 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project k##name##_ANPGetValue, sizeof(ANP##name), ANP##name##_Init 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic const VarProcPair gVarProcs[] = { 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { VARPROCLINE(AudioTrackInterfaceV0) }, 12849bf866973cb3b2a6c74c0eab864e9562e4cbab1Derek Sollenberger { VARPROCLINE(AudioTrackInterfaceV1) }, 129a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed { VARPROCLINE(BitmapInterfaceV0) }, 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { VARPROCLINE(CanvasInterfaceV0) }, 131d026980fde6eb3b01c1fe49441174e89cd1be298Mike Reed { VARPROCLINE(EventInterfaceV0) }, 132a6ac9647bf473365f8d817790e11aeda7374a6d8Mike Reed { VARPROCLINE(LogInterfaceV0) }, 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { VARPROCLINE(MatrixInterfaceV0) }, 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { VARPROCLINE(PaintInterfaceV0) }, 1352ca6453fc4f0b0ba77f29630f3036d1765db9702Mike Reed { VARPROCLINE(PathInterfaceV0) }, 136f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger { VARPROCLINE(SurfaceInterfaceV0) }, 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { VARPROCLINE(TypefaceInterfaceV0) }, 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { VARPROCLINE(WindowInterfaceV0) }, 1391f7eee5350a1e078daa31e06b09a911f3fc6cb37Derek Sollenberger { VARPROCLINE(WindowInterfaceV1) }, 140efe71a4f8c22057f6b18aca6c3cd46769d23468cDerek Sollenberger { VARPROCLINE(WindowInterfaceV2) }, 1410a2bed53555947aea37912d694f9c7c376490808Grace Kloba { VARPROCLINE(SystemInterfaceV0) }, 1429bd15c56f90a9621fccfd28b9017ef1c3dba5ad7Derek Sollenberger { VARPROCLINE(SystemInterfaceV1) }, 1432ba37aad78022aacc4d5eca0063532222ed6b444Derek Sollenberger { VARPROCLINE(SystemInterfaceV2) }, 1442c05b037dcbc9de2f41781747422c2098c42c16eDerek Sollenberger { VARPROCLINE(NativeWindowInterfaceV0) }, 145136290ef021ff9a9bf9152124a5fa42069acfdfcDerek Sollenberger { VARPROCLINE(VideoInterfaceV0) }, 146b8c086775bdf98e932daead992eb960767248f44Derek Sollenberger { VARPROCLINE(VideoInterfaceV1) }, 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* return true if var was an interface request (error will be set accordingly) 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false if var is not a recognized interface (and ignore error param) 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic bool anp_getInterface(NPNVariable var, void* value, NPError* error) { 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const VarProcPair* iter = gVarProcs; 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const VarProcPair* stop = gVarProcs + SK_ARRAY_COUNT(gVarProcs); 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while (iter < stop) { 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (iter->enumValue == var) { 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPInterface* i = reinterpret_cast<ANPInterface*>(value); 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (i->inSize < iter->size) { 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SkDebugf("------- interface %d, expected size %d, allocated %d\n", 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var, iter->size, i->inSize); 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *error = NPERR_INCOMPATIBLE_VERSION_ERROR; 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project iter->proc(i); 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *error = NPERR_NO_ERROR; 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project iter += 1; 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SkDebugf("------ unknown NPNVariable %d\n", var); 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/////////////////////////////////////////////////////////////////////////////// 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing std::min; 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WTF; 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace HTMLNames; 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid PluginView::platformInit() 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setPlatformWidget(new PluginViewBridgeAndroid()); 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_isWindowed = false; // we don't support windowed yet 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_window = new PluginWidgetAndroid(this); 191a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_npWindow.type = NPWindowTypeDrawable; 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_npWindow.window = 0; 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 195a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 1968667eaf175b0748a1d8783beeeecedfaa983a074Steve Blockbool PluginView::platformStart() 197b32f88b61a9162a5194ab02c12fc3aff6140e30eBen Murdoch{ 1988667eaf175b0748a1d8783beeeecedfaa983a074Steve Block return true; 199b32f88b61a9162a5194ab02c12fc3aff6140e30eBen Murdoch} 200b32f88b61a9162a5194ab02c12fc3aff6140e30eBen Murdoch 2018667eaf175b0748a1d8783beeeecedfaa983a074Steve Blockvoid PluginView::platformDestroy() 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete m_window; 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2066ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek SollenbergerPlatformLayer* PluginView::platformLayer() const 2076ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger{ 2086ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger return (PlatformLayer*) m_window->getLayer(); 2096ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger} 2106ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger 211a9cf40bab64a29201b65761ca30f9ff0c7e3e271Steve Block#if ENABLE(TOUCH_EVENTS) 21256ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenbergervoid PluginView::handleTouchEvent(TouchEvent* event) 21356ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger{ 21456ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger if (!m_window->isAcceptingEvent(kTouch_ANPEventFlag)) 21556ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger return; 21656ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger 2176ed4a4e9a23ead7c910239171daf02b8fbecc17bLeon Scroggins if (!m_window->inFullScreen() && m_parentFrame->document()->focusedNode() != m_element) 2186ed4a4e9a23ead7c910239171daf02b8fbecc17bLeon Scroggins return; 2196ed4a4e9a23ead7c910239171daf02b8fbecc17bLeon Scroggins 22056ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger ANPEvent evt; 22136d976165f994e4071601d8824987f25a0a8da07Huahui Wu SkANP::InitEvent(&evt, kMultiTouch_ANPEventType); 22256ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger 22356ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger const AtomicString& type = event->type(); 22456ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger if (eventNames().touchstartEvent == type) 22536d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.action = kDown_ANPTouchAction; 22656ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger else if (eventNames().touchendEvent == type) 22736d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.action = kUp_ANPTouchAction; 22856ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger else if (eventNames().touchmoveEvent == type) 22936d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.action = kMove_ANPTouchAction; 23056ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger else if (eventNames().touchcancelEvent == type) 23136d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.action = kCancel_ANPTouchAction; 2326ed4a4e9a23ead7c910239171daf02b8fbecc17bLeon Scroggins else if (eventNames().touchlongpressEvent == type) 23336d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.action = kLongPress_ANPTouchAction; 2346ed4a4e9a23ead7c910239171daf02b8fbecc17bLeon Scroggins else if (eventNames().touchdoubletapEvent == type) 23536d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.action = kDoubleTap_ANPTouchAction; 2366ed4a4e9a23ead7c910239171daf02b8fbecc17bLeon Scroggins else 23756ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger return; 23856ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger 23936d976165f994e4071601d8824987f25a0a8da07Huahui Wu // set the id and timestamp 24036d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.id = 0; // TODO 24136d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.timestamp = 0; // TODO 242d5e46442a26bd94d35230562671fc1979b3bb7a0Derek Sollenberger 2439c3f8716aa3ce8ca612b4200c02a8530cfd599baBen Murdoch // In the event of a touchend (up) or touchcancel event, we must ask the changedTouch for the 244f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch // co-ordinates as there is no touch in touches anymore. 24536d976165f994e4071601d8824987f25a0a8da07Huahui Wu TouchList* touches = (evt.data.multiTouch.action == kUp_ANPTouchAction 24636d976165f994e4071601d8824987f25a0a8da07Huahui Wu || evt.data.multiTouch.action == kCancel_ANPTouchAction) ? event->changedTouches() : event->touches(); 247f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch 24836d976165f994e4071601d8824987f25a0a8da07Huahui Wu // set each touchPoint 24936d976165f994e4071601d8824987f25a0a8da07Huahui Wu int pointerCount = touches->length(); 25036d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.pointerCount = pointerCount; 25136d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.touchPoint = new TouchPoint[pointerCount]; 25236d976165f994e4071601d8824987f25a0a8da07Huahui Wu 25336d976165f994e4071601d8824987f25a0a8da07Huahui Wu for (int x = 0; x < evt.data.multiTouch.pointerCount; x++) { 25436d976165f994e4071601d8824987f25a0a8da07Huahui Wu Touch* touch = touches->item(x); 25536d976165f994e4071601d8824987f25a0a8da07Huahui Wu // Convert to coordinates that are relative to the plugin. 25636d976165f994e4071601d8824987f25a0a8da07Huahui Wu IntPoint localPos = roundedIntPoint(m_element->renderer()->absoluteToLocal(IntPoint(touch->pageX(), touch->pageY()))); 25736d976165f994e4071601d8824987f25a0a8da07Huahui Wu 25836d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.touchPoint[x].id = touch->identifier(); 25936d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.touchPoint[x].x = localPos.x(); 26036d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.touchPoint[x].y = localPos.y(); 26136d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.touchPoint[x].pressure = 1; // TODO 26236d976165f994e4071601d8824987f25a0a8da07Huahui Wu evt.data.multiTouch.touchPoint[x].size = 1; // TODO 26336d976165f994e4071601d8824987f25a0a8da07Huahui Wu } 26456ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger 2656ed4a4e9a23ead7c910239171daf02b8fbecc17bLeon Scroggins if (m_window->sendEvent(evt)) 2663d0d3fdaa1308448b47592c03cda81c7f9e1f789Grace Kloba event->preventDefault(); 26736d976165f994e4071601d8824987f25a0a8da07Huahui Wu 26836d976165f994e4071601d8824987f25a0a8da07Huahui Wu // cleanup the touch points we allocated 26936d976165f994e4071601d8824987f25a0a8da07Huahui Wu delete[] evt.data.multiTouch.touchPoint; 27056ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger} 271a9cf40bab64a29201b65761ca30f9ff0c7e3e271Steve Block#endif 27256ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid PluginView::handleMouseEvent(MouseEvent* event) 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const AtomicString& type = event->type(); 276d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger bool isUp = (eventNames().mouseupEvent == type); 277d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger bool isDown = (eventNames().mousedownEvent == type); 278a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPEvent evt; 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2813a9f8eaff978cf1a11c725266c852f8d43755539Derek Sollenberger if (isUp || isDown) { 2826ed4a4e9a23ead7c910239171daf02b8fbecc17bLeon Scroggins SkANP::InitEvent(&evt, kMouse_ANPEventType); 283d3fd788536f3fe65035a8fbba4ede47701716c43Derek Sollenberger evt.data.mouse.action = isUp ? kUp_ANPMouseAction : kDown_ANPMouseAction; 284d5e46442a26bd94d35230562671fc1979b3bb7a0Derek Sollenberger 285f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch // Convert to coordinates that are relative to the plugin. 286f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch IntPoint localPos = roundedIntPoint(m_element->renderer()->absoluteToLocal(event->absoluteLocation())); 287f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch evt.data.mouse.x = localPos.x(); 288f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch evt.data.mouse.y = localPos.y(); 289f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch 2902c02e355bf0631c0bec3496fab67f45710c5cd21Grace Kloba if (isDown) { 291a622a48d6cc2bea33d2467de9d31feb1b03b03ebGrace Kloba // The plugin needs focus to receive keyboard and touch events 292a622a48d6cc2bea33d2467de9d31feb1b03b03ebGrace Kloba m_element->focus(); 293a622a48d6cc2bea33d2467de9d31feb1b03b03ebGrace Kloba event->setDefaultHandled(); 2942c02e355bf0631c0bec3496fab67f45710c5cd21Grace Kloba } 295a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger } 296a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger else { 297a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger return; 298a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger } 299a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 3002eb76d0bcdf5cdc45cf6188c8bb76a409612235bDerek Sollenberger if (m_window->sendEvent(evt)) { 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project event->setDefaultHandled(); 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic ANPKeyModifier make_modifiers(bool shift, bool alt) { 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPKeyModifier mod = 0; 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (shift) { 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mod |= kShift_ANPKeyModifier; 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (alt) { 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mod |= kAlt_ANPKeyModifier; 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return mod; 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 316c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenbergervoid PluginView::handleFocusEvent(bool hasFocus) 317c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger{ 318c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger ANPEvent evt; 319c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger SkANP::InitEvent(&evt, kLifecycle_ANPEventType); 320c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger evt.data.lifecycle.action = hasFocus ? kGainFocus_ANPLifecycleAction : 321c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger kLoseFocus_ANPLifecycleAction; 322c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger m_window->sendEvent(evt); 323c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger 324c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger // redraw the plugin which subsequently invalidates the nav cache 325c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger IntRect rect = IntRect(m_npWindow.x, m_npWindow.y, 326c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger m_npWindow.width, m_npWindow.height); 327c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger m_window->webViewCore()->contentInvalidate(rect); 328c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger} 329c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid PluginView::handleKeyboardEvent(KeyboardEvent* event) 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 33256ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger if (!m_window->isAcceptingEvent(kKey_ANPEventFlag)) 33356ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger return; 33456ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const PlatformKeyboardEvent* pke = event->keyEvent(); 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (NULL == pke) { 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 340939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger bool ignoreEvent = false; 341939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPEvent evt; 3436ed4a4e9a23ead7c910239171daf02b8fbecc17bLeon Scroggins SkANP::InitEvent(&evt, kKey_ANPEventType); 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (pke->type()) { 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case PlatformKeyboardEvent::KeyDown: 347a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger#if TRACE_KEY_EVENTS 348a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger PLUGIN_LOG("--------- KeyDown, ignore\n"); 3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 350939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger ignoreEvent = true; 351939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger break; 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case PlatformKeyboardEvent::RawKeyDown: 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project evt.data.key.action = kDown_ANPKeyAction; 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case PlatformKeyboardEvent::Char: 356a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger#if TRACE_KEY_EVENTS 357a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger PLUGIN_LOG("--------- Char, ignore\n"); 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 359939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger ignoreEvent = true; 360939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger break; 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case PlatformKeyboardEvent::KeyUp: 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project evt.data.key.action = kUp_ANPKeyAction; 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 365a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger#if TRACE_KEY_EVENTS 366a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger PLUGIN_LOG("------ unexpected keyevent type %d\n", pke->type()); 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 368939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger ignoreEvent = true; 369939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger break; 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 371939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger 372939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger /* the plugin should be the only party able to return nav control to the 373939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger * browser UI. Therefore, if we discard an event on behalf of the plugin 374939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger * we should mark the event as being handled. 375939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger */ 376939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger if (ignoreEvent) { 377939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger int keyCode = pke->nativeVirtualKeyCode(); 378939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger if (keyCode >= kDpadUp_ANPKeyCode && keyCode <= kDpadCenter_ANPKeyCode) 379939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger event->setDefaultHandled(); 380939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger return; 381939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger } 382939b5797c66ea70736c01eaec2dc694c909035d3Derek Sollenberger 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project evt.data.key.nativeCode = pke->nativeVirtualKeyCode(); 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project evt.data.key.virtualCode = pke->windowsVirtualKeyCode(); 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project evt.data.key.repeatCount = pke->repeatCount(); 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project evt.data.key.modifiers = make_modifiers(pke->shiftKey(), pke->altKey()); 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project evt.data.key.unichar = pke->unichar(); 388a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 3892eb76d0bcdf5cdc45cf6188c8bb76a409612235bDerek Sollenberger if (m_window->sendEvent(evt)) { 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project event->setDefaultHandled(); 391fcce71fa296bf3b42bfc978caa059c55ce8df998Grace Kloba } else if (m_window->inFullScreen()){ 392fcce71fa296bf3b42bfc978caa059c55ce8df998Grace Kloba // while in the full screen mode, always consumes the key events and 393fcce71fa296bf3b42bfc978caa059c55ce8df998Grace Kloba // keeps the document focus 394fcce71fa296bf3b42bfc978caa059c55ce8df998Grace Kloba event->setDefaultHandled(); 395c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger } else { 396c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger // remove the plugin from the document's focus 397c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger m_parentFrame->document()->focusedNodeRemoved(); 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 401c02eba192362e2ea83fdfbe0be51a08429ec4123Ben MurdochNPError PluginView::handlePostReadFile(Vector<char>& buffer, uint32_t len, const char* buf) 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NPERR_GENERIC_ERROR; 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 407cb5893797cc223f846046c4bd0875a894edab5c0Steve Blockbool PluginView::platformGetValueStatic(NPNVariable variable, void* value, NPError* result) 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // our interface query is valid with no NPP instance 410cb5893797cc223f846046c4bd0875a894edab5c0Steve Block *result = NPERR_GENERIC_ERROR; 41127a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger 41227a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger switch (variable) { 41327a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger case NPNVisOfflineBool: { 41427a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger if (value != NULL) { 41527a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger bool* retValue = static_cast<bool*>(value); 41627a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger *retValue = !networkStateNotifier().onLine(); 417cb5893797cc223f846046c4bd0875a894edab5c0Steve Block *result = NPERR_NO_ERROR; 418cb5893797cc223f846046c4bd0875a894edab5c0Steve Block return true; 41927a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger } 4208e08406dc0936ffd02b77605bb1a638553a8b568Cary Clark break; 42127a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger } 42227a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger case kJavaContext_ANPGetValue: { 42327a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger jobject* retObject = static_cast<jobject*>(value); 42427a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger *retObject = android::WebViewCore::getApplicationContext(); 425cb5893797cc223f846046c4bd0875a894edab5c0Steve Block *result = NPERR_NO_ERROR; 426cb5893797cc223f846046c4bd0875a894edab5c0Steve Block return true; 42727a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger } 4288e08406dc0936ffd02b77605bb1a638553a8b568Cary Clark default: 4298e08406dc0936ffd02b77605bb1a638553a8b568Cary Clark ; // do nothing 430ba96c5ad9d140287cc378faec6bd9384836a00e6The Android Open Source Project } 43127a298a6476fbd78e67f35441e1428bc878a969dDerek Sollenberger 432cb5893797cc223f846046c4bd0875a894edab5c0Steve Block (void)anp_getInterface(variable, value, result); 433cb5893797cc223f846046c4bd0875a894edab5c0Steve Block return true; 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid PluginView::setParent(ScrollView* parent) 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 438a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger PLUGIN_LOG("--%p SetParent old=[%p], new=[%p] \n", instance(), this->parent(), parent); 439a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Widget::setParent(parent); 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 442f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger if (parent) { 443f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger // the widget needs initialized now so that the plugin has access to 444f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger // WebViewCore when NPP_New is called 445f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger if (m_window && !m_window->webViewCore()) { 446f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger android::WebViewCore* c = android::WebViewCore::getWebViewCore(this->parent()); 447f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger m_window->init(c); 448f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger } 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project init(); 450f7acc0456b574d63f33aaad3bbbec5344f74ce4bDerek Sollenberger 451f7acc0456b574d63f33aaad3bbbec5344f74ce4bDerek Sollenberger /* Our widget needs to recompute its m_windowRect which then sets 452f7acc0456b574d63f33aaad3bbbec5344f74ce4bDerek Sollenberger the NPWindowRect if necessary. This ensures that if NPWindowRect 453f7acc0456b574d63f33aaad3bbbec5344f74ce4bDerek Sollenberger is set prior to parent() being set that we still (1) notify the 454f7acc0456b574d63f33aaad3bbbec5344f74ce4bDerek Sollenberger plugin of its current rect and (2) that we execute our logic in 455f7acc0456b574d63f33aaad3bbbec5344f74ce4bDerek Sollenberger PluginWidgetAndroid in response to changes to NPWindowRect. 456f7acc0456b574d63f33aaad3bbbec5344f74ce4bDerek Sollenberger */ 457f7acc0456b574d63f33aaad3bbbec5344f74ce4bDerek Sollenberger updatePluginWidget(); 458f2a6f2e2f867d06fd84e859cdc37c3293357a6ffDerek Sollenberger } 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4611f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Klobavoid PluginView::setNPWindowRect(const IntRect&) 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4631f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Kloba setNPWindowIfNeeded(); 4641f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Kloba} 465a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 4661f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Klobavoid PluginView::setNPWindowIfNeeded() 4671f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Kloba{ 468a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger PLUGIN_LOG("--%p SetWindow isStarted=[%d] \n", instance(), m_isStarted); 469a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger 4701f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Kloba if (!m_isStarted || !parent()) 4711f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Kloba return; 472a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 4731f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Kloba // in Android, plugin always get the setwindow() in the page coordinate. 4741f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Kloba 4751f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Kloba // the m_npWindow is relative to the page 4763d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba m_npWindow.x = m_pageRect.x(); 4773d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba m_npWindow.y = m_pageRect.y(); 4783d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba m_npWindow.width = m_pageRect.width(); 4793d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba m_npWindow.height = m_pageRect.height(); 4801f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Kloba 4813d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba m_npWindow.clipRect.left = m_pageRect.x(); 4823d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba m_npWindow.clipRect.top = m_pageRect.y(); 4833d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba m_npWindow.clipRect.right = m_pageRect.x() + m_pageRect.width(); 4843d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba m_npWindow.clipRect.bottom = m_pageRect.y() + m_pageRect.height(); 485635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_plugin->pluginFuncs()->setwindow) { 487a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger#if USE(JSC) 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JSC::JSLock::DropAllLocks dropAllLocks(false); 489a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger#endif 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setCallingPlugin(true); 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_plugin->pluginFuncs()->setwindow(m_instance, &m_npWindow); 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setCallingPlugin(false); 4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 494a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 495e0204f4150fd9c321f119dc78d9e23e3164b4b1dDerek Sollenberger m_window->setWindow(&m_npWindow, m_isTransparent); 4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498cb5893797cc223f846046c4bd0875a894edab5c0Steve Blockbool PluginView::platformGetValue(NPNVariable variable, void* value, NPError* result) 4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (variable) { 5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case NPNVWindowNPObject: { 5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPObject* windowScriptObject = 5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_parentFrame->script()->windowScriptNPObject(); 5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Return value is expected to be retained, as described 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // here: 5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // <http://www.mozilla.org/projects/plugin/npruntime.html> 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (windowScriptObject) 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _NPN_RetainObject(windowScriptObject); 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void** v = (void**)value; 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *v = windowScriptObject; 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 514cb5893797cc223f846046c4bd0875a894edab5c0Steve Block *result = NPERR_NO_ERROR; 515cb5893797cc223f846046c4bd0875a894edab5c0Steve Block return true; 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case NPNVPluginElementNPObject: { 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPObject* pluginScriptObject = 0; 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_element->hasTagName(appletTag) || 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_element->hasTagName(embedTag) || 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_element->hasTagName(objectTag)) { 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HTMLPlugInElement* pluginElement = 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static_cast<HTMLPlugInElement*>(m_element); 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pluginScriptObject = pluginElement->getNPObject(); 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Return value is expected to be retained, as described 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // here: 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // <http://www.mozilla.org/projects/plugin/npruntime.html> 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (pluginScriptObject) 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _NPN_RetainObject(pluginScriptObject); 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void** v = (void**)value; 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *v = pluginScriptObject; 5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 538cb5893797cc223f846046c4bd0875a894edab5c0Steve Block *result = NPERR_NO_ERROR; 539cb5893797cc223f846046c4bd0875a894edab5c0Steve Block return true; 5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case NPNVnetscapeWindow: { 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Return the top level WebView Java object associated 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // with this instance. 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jobject *retObject = static_cast<jobject*>(value); 546b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block // TODO: Is it safe for this to be NULL? It looks from the NPNVWindowNPObject case that it is. 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *retObject = android::WebViewCore::getWebViewCore(parent())->getWebViewJavaObject(); 548cb5893797cc223f846046c4bd0875a894edab5c0Steve Block *result = NPERR_NO_ERROR; 549cb5893797cc223f846046c4bd0875a894edab5c0Steve Block return true; 5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 551ba96c5ad9d140287cc378faec6bd9384836a00e6The Android Open Source Project 552ba96c5ad9d140287cc378faec6bd9384836a00e6The Android Open Source Project case NPNVisOfflineBool: { 553ba96c5ad9d140287cc378faec6bd9384836a00e6The Android Open Source Project if (value == NULL) { 554cb5893797cc223f846046c4bd0875a894edab5c0Steve Block *result = NPERR_GENERIC_ERROR; 555cb5893797cc223f846046c4bd0875a894edab5c0Steve Block return true; 556ba96c5ad9d140287cc378faec6bd9384836a00e6The Android Open Source Project } 557ba96c5ad9d140287cc378faec6bd9384836a00e6The Android Open Source Project bool* retValue = static_cast<bool*>(value); 558ba96c5ad9d140287cc378faec6bd9384836a00e6The Android Open Source Project *retValue = !networkStateNotifier().onLine(); 559cb5893797cc223f846046c4bd0875a894edab5c0Steve Block *result = NPERR_NO_ERROR; 560cb5893797cc223f846046c4bd0875a894edab5c0Steve Block return true; 561ba96c5ad9d140287cc378faec6bd9384836a00e6The Android Open Source Project } 562a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kSupportedDrawingModel_ANPGetValue: { 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uint32_t* bits = reinterpret_cast<uint32_t*>(value); 565838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger *bits = kBitmap_ANPDrawingModel & kSurface_ANPDrawingModel; 566cb5893797cc223f846046c4bd0875a894edab5c0Steve Block *result = NPERR_NO_ERROR; 567cb5893797cc223f846046c4bd0875a894edab5c0Steve Block return true; 568838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger } 569838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger 570838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger case kJavaContext_ANPGetValue: { 571838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger jobject* retObject = static_cast<jobject*>(value); 572b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block // TODO: Is it safe for this to be NULL? It looks from the NPNVWindowNPObject case that it is. 573838afd1be683057ebaf5cf85359bf9a567602b7bDerek Sollenberger *retObject = android::WebViewCore::getWebViewCore(parent())->getContext(); 574cb5893797cc223f846046c4bd0875a894edab5c0Steve Block *result = NPERR_NO_ERROR; 575cb5893797cc223f846046c4bd0875a894edab5c0Steve Block return true; 5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 577a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: { 5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPError error = NPERR_GENERIC_ERROR; 5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (void)anp_getInterface(variable, value, &error); 581cb5893797cc223f846046c4bd0875a894edab5c0Steve Block *result = error; 582cb5893797cc223f846046c4bd0875a894edab5c0Steve Block return true; 5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNPError PluginView::platformSetValue(NPPVariable variable, void* value) 5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPError error = NPERR_GENERIC_ERROR; 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (variable) { 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case kRequestDrawingModel_ANPSetValue: { 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ANPDrawingModel model = reinterpret_cast<ANPDrawingModel>(value); 594f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger if (m_window->setDrawingModel(model)) 595f86737b0ce8c81f2b529503f83eb8b064769eecaDerek Sollenberger error = NPERR_NO_ERROR; 59656ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger break; 59756ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger } 59856ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger case kAcceptEvents_ANPSetValue : { 59956ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger if(value) { 60056ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger ANPEventFlags flags = *reinterpret_cast<ANPEventFlags*>(value); 60156ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger m_window->updateEventFlags(flags); 60256ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger error = NPERR_NO_ERROR; 60356ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger } 60456ce2fa12f7492cf355cfb37b80b679d7921f6d4Derek Sollenberger break; 6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return error; 6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid PluginView::invalidateRect(const IntRect& r) 6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_window->inval(r, true); 6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid PluginView::invalidateRect(NPRect* rect) 6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect r; 6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (rect) { 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project r = IntRect(rect->left, rect->top, 6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project rect->right - rect->left, rect->bottom - rect->top); 6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project r = IntRect(0, 0, m_npWindow.width, m_npWindow.height); 6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_window->inval(r, true); 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid PluginView::invalidateRegion(NPRegion region) 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // we don't support/define regions (yet), so do nothing 6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid PluginView::forceRedraw() 6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this->invalidateRect(0); 6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 64188a30a51ea8b4aa85ab99022c9244e25c16623adBen Murdochvoid PluginView::setFocus(bool focused) 6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 64388a30a51ea8b4aa85ab99022c9244e25c16623adBen Murdoch Widget::setFocus(focused); 6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// SkDebugf("------------- setFocus %p\n", this); 6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid PluginView::show() 6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setSelfVisible(true); 6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Widget::show(); 651d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger 652d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger if (platformPluginWidget()) 6531d7ddf2fb889b97549e1041bbbf53e481b4ced2cDerek Sollenberger platformPluginWidget()->layoutSurface(); 654d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger 6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid PluginView::hide() 6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setSelfVisible(false); 6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Widget::hide(); 661d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger 662d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger if (platformPluginWidget()) 6631d7ddf2fb889b97549e1041bbbf53e481b4ced2cDerek Sollenberger platformPluginWidget()->layoutSurface(); 664d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger} 665d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger 666d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenbergervoid PluginView::setParentVisible(bool visible) { 667d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger 668d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger if (isParentVisible() == visible) 669d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger return; 670d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger 671d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger Widget::setParentVisible(visible); 672d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger 673d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger if (platformPluginWidget()) 6741d7ddf2fb889b97549e1041bbbf53e481b4ced2cDerek Sollenberger platformPluginWidget()->layoutSurface(); 675d3de9b89fbda35c06ad20c069229c2849ac5ff2dDerek Sollenberger 6768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid PluginView::paint(GraphicsContext* context, const IntRect& rect) 6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_isStarted) { 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Draw the "missing plugin" image 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paintMissingPluginIcon(context, rect); 6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 685a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect frame = frameRect(); 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!frame.width() || !frame.height()) { 688840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger PLUGIN_LOG("--%p FrameRect Dimensions are (0,0).\n", instance()); 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 691a2c69492fd11733119d4f6ce3540acdfee9bf88cDerek Sollenberger 692840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger if (m_window->isSurfaceDrawingModel()) { 693840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger /* the document position of the frame (e.g. iFrame) containing the 694840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger surface may have changed, which requires us to to update the global 695840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger coordinates of the surface. This is necessary because the plugin has 696840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger not moved within its parent frame and therefore will not get any 697840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger notification of its global position change. 698840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger */ 699840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger updatePluginWidget(); 7001d7ddf2fb889b97549e1041bbbf53e481b4ced2cDerek Sollenberger m_window->setSurfaceClip(context->platformContext()->mCanvas->getTotalClip().getBounds()); 701840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger } else { 702840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger m_window->inval(rect, false); 703840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger context->save(); 704840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger context->translate(frame.x(), frame.y()); 705840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger m_window->draw(android_gc2canvas(context)); 706840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger context->restore(); 707840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger } 708840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger 709840357963b3a1369006e7b640e829ff1dbc0118cDerek Sollenberger 7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 712635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid PluginView::updatePluginWidget() 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 714635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project FrameView* frameView = static_cast<FrameView*>(parent()); 715a506357ecbae5e506e0c3e46b6ebac632fd22328Derek Sollenberger PLUGIN_LOG("--%p UpdatePluginWidget frame=[%p] \n", instance(), frameView); 716635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (frameView) { 7171f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Kloba m_windowRect = frameView->contentsToWindow(frameRect()); 7181f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Kloba 7193d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba IntRect oldPageRect = m_pageRect; 7203d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba 7213d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba // only the top ScrollView can have the offset 7223d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba m_pageRect = m_windowRect; 7233d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba ScrollView* top = parent(); 7243d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba while (top->parent()) 7253d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba top = top->parent(); 7263d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba m_pageRect.move(top->scrollOffset()); 7273d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba 7283d6ec5413643e3b591840267fc122b1b88e1f278Grace Kloba if (m_pageRect != oldPageRect) 7291f15f3a9f6dc2a169bbd160e2e1abb161f9927d9Grace Kloba setNPWindowIfNeeded(); 730635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7336d0ea8657f54a650eefa9438bf9e2f4c0709b534Steve Blockvoid PluginView::halt() { 7346d0ea8657f54a650eefa9438bf9e2f4c0709b534Steve Block notImplemented(); 7356d0ea8657f54a650eefa9438bf9e2f4c0709b534Steve Block} 7366d0ea8657f54a650eefa9438bf9e2f4c0709b534Steve Block 7376d0ea8657f54a650eefa9438bf9e2f4c0709b534Steve Blockvoid PluginView::restart() { 7386d0ea8657f54a650eefa9438bf9e2f4c0709b534Steve Block notImplemented(); 7396d0ea8657f54a650eefa9438bf9e2f4c0709b534Steve Block} 7406d0ea8657f54a650eefa9438bf9e2f4c0709b534Steve Block 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 742