WebView.cpp revision 57ae1393d3097edada2640b40c895396b69cc919
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright 2007, The Android Open Source Project 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * * Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * * Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 163298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define LOG_TAG "webviewglue" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2820ab751acc0d49d74648373f701f3d0c4ff187c0Steve Block#include "config.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#include "AndroidAnimation.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "AndroidLog.h" 326d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba#include "BaseLayerAndroid.h" 3387962ce00229855c098ba12cee8d5c015a835289Cary Clark#include "DrawExtra.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "GraphicsJNI.h" 36dcbb033aafed2abc472f0d88520869a6b1f1945bLeon Scroggins#include "HTMLInputElement.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "IntPoint.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "IntRect.h" 39797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#include "LayerAndroid.h" 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Node.h" 41908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase#include "utils/Functor.h" 42d1f5cf1ad8b20860bd9cb34a483451019124d1f9Romain Guy#include "private/hwui/DrawGlInfo.h" 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformGraphicsContext.h" 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformString.h" 45fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott#include "ScrollableLayerAndroid.h" 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SelectText.h" 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SkCanvas.h" 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SkDumpCanvas.h" 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SkPicture.h" 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SkRect.h" 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SkTime.h" 52a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard#include "TilesManager.h" 5320ab751acc0d49d74648373f701f3d0c4ff187c0Steve Block#include "WebCoreJni.h" 540b84ecf50c01e0fbf7307ca7cae55ab3043c75a3Elliott Slaughter#include "WebRequestContext.h" 5520ab751acc0d49d74648373f701f3d0c4ff187c0Steve Block#include "WebViewCore.h" 5620ab751acc0d49d74648373f701f3d0c4ff187c0Steve Block#include "android_graphics.h" 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef GET_NATIVE_VIEW 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#undef GET_NATIVE_VIEW 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define GET_NATIVE_VIEW(env, obj) ((WebView*)env->GetIntField(obj, gWebViewField)) 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6420ab751acc0d49d74648373f701f3d0c4ff187c0Steve Block#include <JNIUtility.h> 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <JNIHelp.h> 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <jni.h> 6777e73dcd79e53291251ce5e67ba55ce911bb07f6Mathias Agopian#include <androidfw/KeycodeLabels.h> 68dd7ee22af4f03672fa823324323466054f19a054Iain Merrick#include <wtf/text/AtomicString.h> 6979768700a853c40c66ff0b0591957958667fdd9eSteve Block#include <wtf/text/CString.h> 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7152f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck// Free as much as we possible can 7252f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck#define TRIM_MEMORY_COMPLETE 80 7352f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck// Free a lot (all textures gone) 7452f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck#define TRIM_MEMORY_MODERATE 60 7552f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck// More moderate free (keep bare minimum to restore quickly-ish - possibly clear all textures) 7652f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck#define TRIM_MEMORY_BACKGROUND 40 7752f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck// Moderate free (clear cached tiles, keep visible ones) 7852f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck#define TRIM_MEMORY_UI_HIDDEN 20 79b31c03a968a578cc43e606ede80cefcd07e8ee07John Reck// Duration to show the pressed cursor ring 80b31c03a968a578cc43e606ede80cefcd07e8ee07John Reck#define PRESSED_STATE_DURATION 400 8152f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace android { 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic jfieldID gWebViewField; 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//------------------------------------- 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic jmethodID GetJMethod(JNIEnv* env, jclass clazz, const char name[], const char signature[]) 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jmethodID m = env->GetMethodID(clazz, name, signature); 916dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(m, "Could not find method %s", name); 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m; 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//------------------------------------- 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// This class provides JNI for making calls into native code from the UI side 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// of the multi-threaded WebView. 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass WebView 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum FrameCachePermission { 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DontAllowNewer, 103f92d7cf56380e421b81212d32a557bda707a9555Steve Block AllowNewer 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10666c40fc863939bd103a5256eb48e944508725c53Victoria Lease#define DRAW_EXTRAS_SIZE 2 10787962ce00229855c098ba12cee8d5c015a835289Cary Clarkenum DrawExtras { // keep this in sync with WebView.java 10887962ce00229855c098ba12cee8d5c015a835289Cary Clark DrawExtrasNone = 0, 10966c40fc863939bd103a5256eb48e944508725c53Victoria Lease DrawExtrasSelection = 1, 11066c40fc863939bd103a5256eb48e944508725c53Victoria Lease DrawExtrasCursorRing = 2 11187962ce00229855c098ba12cee8d5c015a835289Cary Clark}; 11287962ce00229855c098ba12cee8d5c015a835289Cary Clark 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct JavaGlue { 1143bce2a57ea5b637c5c69fb036f59b291750e4d91Patrick Scott jweak m_obj; 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jmethodID m_overrideLoading; 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jmethodID m_scrollBy; 117bf16ddc110ef3fde2cfa1ae43ab31d993377981dLeon Scroggins jmethodID m_sendMoveFocus; 11846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark jmethodID m_sendMoveMouse; 11946dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark jmethodID m_sendMoveMouseIfLatest; 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jmethodID m_sendMotionUp; 12195fa6e99128685c55e9be6f4362e67c288482a74Leon Scroggins jmethodID m_domChangedFocus; 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jmethodID m_getScaledMaxXScroll; 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jmethodID m_getScaledMaxYScroll; 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jmethodID m_getVisibleRect; 12594d36f098e1c65d69568e6fb00124c542e5c7f6fLeon Scroggins jmethodID m_rebuildWebTextView; 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jmethodID m_viewInvalidate; 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jmethodID m_viewInvalidateRect; 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jmethodID m_postInvalidateDelayed; 12996eef4d75f8a709cc252a69c4e8cb5bd4251187eChris Craik jmethodID m_pageSwapCallback; 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jfieldID m_rectLeft; 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jfieldID m_rectTop; 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jmethodID m_rectWidth; 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jmethodID m_rectHeight; 134ccac38a6b48843126402088a309597e682f40fe6Nicolas Roard jfieldID m_rectFLeft; 135ccac38a6b48843126402088a309597e682f40fe6Nicolas Roard jfieldID m_rectFTop; 136ccac38a6b48843126402088a309597e682f40fe6Nicolas Roard jmethodID m_rectFWidth; 137ccac38a6b48843126402088a309597e682f40fe6Nicolas Roard jmethodID m_rectFHeight; 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project AutoJObject object(JNIEnv* env) { 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return getRealObject(env, m_obj); 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} m_javaGlue; 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14355b4bdbd661ac94fd05ab40de08250bf242d5346John ReckWebView(JNIEnv* env, jobject javaWebView, int viewImpl, WTF::String drawableDir, 14439b886463564843ebfd0557dd12b07bf38cb6d83John Reck bool isHighEndGfx) 14539b886463564843ebfd0557dd12b07bf38cb6d83John Reck : m_isHighEndGfx(isHighEndGfx) 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 147dea0c131566f424923425970fe5621305d136e5aJohn Reck memset(m_extras, 0, DRAW_EXTRAS_SIZE * sizeof(DrawExtra*)); 14857ae1393d3097edada2640b40c895396b69cc919Jonathan Dixon jclass clazz = env->FindClass("android/webkit/WebViewClassic"); 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // m_javaGlue = new JavaGlue; 1503bce2a57ea5b637c5c69fb036f59b291750e4d91Patrick Scott m_javaGlue.m_obj = env->NewWeakGlobalRef(javaWebView); 15151c0d4c6b1b74fff7336d81451ba7d2fc132e31cLeon Scroggins m_javaGlue.m_scrollBy = GetJMethod(env, clazz, "setContentScrollBy", "(IIZ)Z"); 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_javaGlue.m_overrideLoading = GetJMethod(env, clazz, "overrideLoading", "(Ljava/lang/String;)V"); 153bf16ddc110ef3fde2cfa1ae43ab31d993377981dLeon Scroggins m_javaGlue.m_sendMoveFocus = GetJMethod(env, clazz, "sendMoveFocus", "(II)V"); 15446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark m_javaGlue.m_sendMoveMouse = GetJMethod(env, clazz, "sendMoveMouse", "(IIII)V"); 15594f12574c74b11db011b994e462f64a112952a47Leon Scroggins m_javaGlue.m_sendMoveMouseIfLatest = GetJMethod(env, clazz, "sendMoveMouseIfLatest", "(ZZ)V"); 156ee260612d8744993644f2e0b0f1fed51423be6dbLeon Scroggins m_javaGlue.m_sendMotionUp = GetJMethod(env, clazz, "sendMotionUp", "(IIIII)V"); 15795fa6e99128685c55e9be6f4362e67c288482a74Leon Scroggins m_javaGlue.m_domChangedFocus = GetJMethod(env, clazz, "domChangedFocus", "()V"); 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_javaGlue.m_getScaledMaxXScroll = GetJMethod(env, clazz, "getScaledMaxXScroll", "()I"); 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_javaGlue.m_getScaledMaxYScroll = GetJMethod(env, clazz, "getScaledMaxYScroll", "()I"); 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_javaGlue.m_getVisibleRect = GetJMethod(env, clazz, "sendOurVisibleRect", "()Landroid/graphics/Rect;"); 16194d36f098e1c65d69568e6fb00124c542e5c7f6fLeon Scroggins m_javaGlue.m_rebuildWebTextView = GetJMethod(env, clazz, "rebuildWebTextView", "()V"); 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_javaGlue.m_viewInvalidate = GetJMethod(env, clazz, "viewInvalidate", "()V"); 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_javaGlue.m_viewInvalidateRect = GetJMethod(env, clazz, "viewInvalidate", "(IIII)V"); 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_javaGlue.m_postInvalidateDelayed = GetJMethod(env, clazz, 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project "viewInvalidateDelayed", "(JIIII)V"); 166aeca53d3fee2e94ce013c1dc12648f0335284fbbChris Craik m_javaGlue.m_pageSwapCallback = GetJMethod(env, clazz, "pageSwapCallback", "(Z)V"); 167bf3f67c4fcfd68df256e5c001c67969997a63e28Steve Block env->DeleteLocalRef(clazz); 168bf3f67c4fcfd68df256e5c001c67969997a63e28Steve Block 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project jclass rectClass = env->FindClass("android/graphics/Rect"); 1706dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(rectClass, "Could not find Rect class"); 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_javaGlue.m_rectLeft = env->GetFieldID(rectClass, "left", "I"); 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_javaGlue.m_rectTop = env->GetFieldID(rectClass, "top", "I"); 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_javaGlue.m_rectWidth = GetJMethod(env, rectClass, "width", "()I"); 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_javaGlue.m_rectHeight = GetJMethod(env, rectClass, "height", "()I"); 175bf3f67c4fcfd68df256e5c001c67969997a63e28Steve Block env->DeleteLocalRef(rectClass); 176bf3f67c4fcfd68df256e5c001c67969997a63e28Steve Block 177ccac38a6b48843126402088a309597e682f40fe6Nicolas Roard jclass rectClassF = env->FindClass("android/graphics/RectF"); 1786dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(rectClassF, "Could not find RectF class"); 179ccac38a6b48843126402088a309597e682f40fe6Nicolas Roard m_javaGlue.m_rectFLeft = env->GetFieldID(rectClassF, "left", "F"); 180ccac38a6b48843126402088a309597e682f40fe6Nicolas Roard m_javaGlue.m_rectFTop = env->GetFieldID(rectClassF, "top", "F"); 181ccac38a6b48843126402088a309597e682f40fe6Nicolas Roard m_javaGlue.m_rectFWidth = GetJMethod(env, rectClassF, "width", "()F"); 182ccac38a6b48843126402088a309597e682f40fe6Nicolas Roard m_javaGlue.m_rectFHeight = GetJMethod(env, rectClassF, "height", "()F"); 183bf3f67c4fcfd68df256e5c001c67969997a63e28Steve Block env->DeleteLocalRef(rectClassF); 184bf3f67c4fcfd68df256e5c001c67969997a63e28Steve Block 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project env->SetIntField(javaWebView, gWebViewField, (jint)this); 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_viewImpl = (WebViewCore*) viewImpl; 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_generation = 0; 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_heightCanMeasure = false; 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_lastDx = 0; 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_lastDxTime = 0; 1916d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba m_baseLayer = 0; 192908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase m_glDrawFunctor = 0; 193d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck m_isDrawingPaused = false; 194c85ae2f04c704b80b18838059d2fc7b9a19d4921Derek Sollenberger#if USE(ACCELERATED_COMPOSITING) 195c85ae2f04c704b80b18838059d2fc7b9a19d4921Derek Sollenberger m_glWebViewState = 0; 196c85ae2f04c704b80b18838059d2fc7b9a19d4921Derek Sollenberger#endif 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project~WebView() 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_javaGlue.m_obj) 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JNIEnv* env = JSC::Bindings::getJNIEnv(); 2043bce2a57ea5b637c5c69fb036f59b291750e4d91Patrick Scott env->DeleteWeakGlobalRef(m_javaGlue.m_obj); 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_javaGlue.m_obj = 0; 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 20775394f5ee0aac2337cdff1597b4e686e22c52833Nicolas Roard#if USE(ACCELERATED_COMPOSITING) 208c85ae2f04c704b80b18838059d2fc7b9a19d4921Derek Sollenberger // We must remove the m_glWebViewState prior to deleting m_baseLayer. If we 209c85ae2f04c704b80b18838059d2fc7b9a19d4921Derek Sollenberger // do not remove it here, we risk having BaseTiles trying to paint using a 210c85ae2f04c704b80b18838059d2fc7b9a19d4921Derek Sollenberger // deallocated base layer. 2118360bc9c9facd690e42379610cbbb368d3d705efCary Clark stopGL(); 21275394f5ee0aac2337cdff1597b4e686e22c52833Nicolas Roard#endif 213b33016812afef21c69df5ab3d5b85eab5fef7c5cDerek Sollenberger SkSafeUnref(m_baseLayer); 214908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase delete m_glDrawFunctor; 215dea0c131566f424923425970fe5621305d136e5aJohn Reck for (int i = 0; i < DRAW_EXTRAS_SIZE; i++) 216dea0c131566f424923425970fe5621305d136e5aJohn Reck delete m_extras[i]; 217dea0c131566f424923425970fe5621305d136e5aJohn Reck} 218dea0c131566f424923425970fe5621305d136e5aJohn Reck 219dea0c131566f424923425970fe5621305d136e5aJohn ReckDrawExtra* getDrawExtra(DrawExtras extras) 220dea0c131566f424923425970fe5621305d136e5aJohn Reck{ 221dea0c131566f424923425970fe5621305d136e5aJohn Reck if (extras == DrawExtrasNone) 222dea0c131566f424923425970fe5621305d136e5aJohn Reck return 0; 223dea0c131566f424923425970fe5621305d136e5aJohn Reck return m_extras[extras - 1]; 224dea0c131566f424923425970fe5621305d136e5aJohn Reck} 225dea0c131566f424923425970fe5621305d136e5aJohn Reck 2268360bc9c9facd690e42379610cbbb368d3d705efCary Clarkvoid stopGL() 2278360bc9c9facd690e42379610cbbb368d3d705efCary Clark{ 2288360bc9c9facd690e42379610cbbb368d3d705efCary Clark#if USE(ACCELERATED_COMPOSITING) 2298360bc9c9facd690e42379610cbbb368d3d705efCary Clark delete m_glWebViewState; 2308360bc9c9facd690e42379610cbbb368d3d705efCary Clark m_glWebViewState = 0; 2318360bc9c9facd690e42379610cbbb368d3d705efCary Clark#endif 2328360bc9c9facd690e42379610cbbb368d3d705efCary Clark} 2338360bc9c9facd690e42379610cbbb368d3d705efCary Clark 234bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike ReedWebViewCore* getWebViewCore() const { 235bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed return m_viewImpl; 236bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed} 237bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed 238afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clarkvoid scrollRectOnScreen(const IntRect& rect) 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 240afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clark if (rect.isEmpty()) 241afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clark return; 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int dx = 0; 243afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clark int left = rect.x(); 2441ed8c4d16ac986307f1c0589a3a720a37e60f313Steve Block int right = rect.maxX(); 245a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount if (left < m_visibleRect.fLeft) 246a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount dx = left - m_visibleRect.fLeft; 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Only scroll right if the entire width can fit on screen. 248a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount else if (right > m_visibleRect.fRight 249a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount && right - left < m_visibleRect.width()) 250a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount dx = right - m_visibleRect.fRight; 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int dy = 0; 252afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clark int top = rect.y(); 2531ed8c4d16ac986307f1c0589a3a720a37e60f313Steve Block int bottom = rect.maxY(); 254a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount if (top < m_visibleRect.fTop) 255a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount dy = top - m_visibleRect.fTop; 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Only scroll down if the entire height can fit on screen 257a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount else if (bottom > m_visibleRect.fBottom 258a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount && bottom - top < m_visibleRect.height()) 259a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount dy = bottom - m_visibleRect.fBottom; 26051c0d4c6b1b74fff7336d81451ba7d2fc132e31cLeon Scroggins if ((dx|dy) == 0 || !scrollBy(dx, dy)) 261afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clark return; 26251c0d4c6b1b74fff7336d81451ba7d2fc132e31cLeon Scroggins viewInvalidate(); 263e3635bdd4530eeff44657cb1423a0572482381ceLeon Scroggins} 264e3635bdd4530eeff44657cb1423a0572482381ceLeon Scroggins 265a5e649bc4d58bf3da959deae077307c487e2a3a6George Mountbool drawGL(WebCore::IntRect& viewRect, WebCore::IntRect* invalRect, 266a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount WebCore::IntRect& webViewRect, int titleBarHeight, 267a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount WebCore::IntRect& clip, float scale, int extras) 268a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard{ 269a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard#if USE(ACCELERATED_COMPOSITING) 270beeb8cbb217cca6094affa12a630bd75938909c9George Mount if (!m_baseLayer) 271a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard return false; 272a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard 273e47399f767707497dfc68fc64b14621a8ca9959fTeng-Hui Zhu if (!m_glWebViewState) { 274e1dfe84b38ed080c7bb7ac00fd9e3c6c590a147dTeng-Hui Zhu TilesManager::instance()->setHighEndGfx(m_isHighEndGfx); 27582ccbd8ce95211b4b5afad6a653462fd3beb771bJohn Reck m_glWebViewState = new GLWebViewState(); 276e47399f767707497dfc68fc64b14621a8ca9959fTeng-Hui Zhu if (m_baseLayer->content()) { 27767e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard SkRegion region; 27867e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard SkIRect rect; 27967e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard rect.set(0, 0, m_baseLayer->content()->width(), m_baseLayer->content()->height()); 28067e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard region.setRect(rect); 281246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik m_baseLayer->markAsDirty(region); 282246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik m_glWebViewState->setBaseLayer(m_baseLayer, false, true); 283e47399f767707497dfc68fc64b14621a8ca9959fTeng-Hui Zhu } 284e47399f767707497dfc68fc64b14621a8ca9959fTeng-Hui Zhu } 285c85ae2f04c704b80b18838059d2fc7b9a19d4921Derek Sollenberger 28639b886463564843ebfd0557dd12b07bf38cb6d83John Reck DrawExtra* extra = getDrawExtra((DrawExtras) extras); 287a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard 288c85ae2f04c704b80b18838059d2fc7b9a19d4921Derek Sollenberger unsigned int pic = m_glWebViewState->currentPictureCounter(); 289fcb01cd64de0a1d6f8f8c897d16cc2628be53960John Reck m_glWebViewState->glExtras()->setDrawExtra(extra); 2900ca8045217bb9b308ddb407d7a9ce17d92d9f9fbNicolas Roard 291d68563709fdf68c90c730155149f6149b084730aJohn Reck // Make sure we have valid coordinates. We might not have valid coords 292d68563709fdf68c90c730155149f6149b084730aJohn Reck // if the zoom manager is still initializing. We will be redrawn 293d68563709fdf68c90c730155149f6149b084730aJohn Reck // once the correct scale is set 2942857538e8cd8c752b06ee75dd039791a186455b3Derek Sollenberger if (!m_visibleRect.isFinite()) 295d68563709fdf68c90c730155149f6149b084730aJohn Reck return false; 296aeca53d3fee2e94ce013c1dc12648f0335284fbbChris Craik bool treesSwapped = false; 297aeca53d3fee2e94ce013c1dc12648f0335284fbbChris Craik bool newTreeHasAnim = false; 298a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount bool ret = m_glWebViewState->drawGL(viewRect, m_visibleRect, invalRect, 29996eef4d75f8a709cc252a69c4e8cb5bd4251187eChris Craik webViewRect, titleBarHeight, clip, scale, 300aeca53d3fee2e94ce013c1dc12648f0335284fbbChris Craik &treesSwapped, &newTreeHasAnim); 301246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik if (treesSwapped) { 3026dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(m_javaGlue.m_obj, "A java object was not associated with this native WebView!"); 30396eef4d75f8a709cc252a69c4e8cb5bd4251187eChris Craik JNIEnv* env = JSC::Bindings::getJNIEnv(); 30496eef4d75f8a709cc252a69c4e8cb5bd4251187eChris Craik AutoJObject javaObject = m_javaGlue.object(env); 30596eef4d75f8a709cc252a69c4e8cb5bd4251187eChris Craik if (javaObject.get()) { 306aeca53d3fee2e94ce013c1dc12648f0335284fbbChris Craik env->CallVoidMethod(javaObject.get(), m_javaGlue.m_pageSwapCallback, newTreeHasAnim); 30796eef4d75f8a709cc252a69c4e8cb5bd4251187eChris Craik checkException(env); 30896eef4d75f8a709cc252a69c4e8cb5bd4251187eChris Craik } 30996eef4d75f8a709cc252a69c4e8cb5bd4251187eChris Craik } 310c85ae2f04c704b80b18838059d2fc7b9a19d4921Derek Sollenberger if (ret || m_glWebViewState->currentPictureCounter() != pic) 311d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck return !m_isDrawingPaused; 312a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard#endif 313a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard return false; 314a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard} 315a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard 316dea0c131566f424923425970fe5621305d136e5aJohn ReckPictureSet* draw(SkCanvas* canvas, SkColor bgColor, DrawExtras extras, bool split) 31787962ce00229855c098ba12cee8d5c015a835289Cary Clark{ 3186d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba PictureSet* ret = 0; 3196d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba if (!m_baseLayer) { 3206d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba canvas->drawColor(bgColor); 3216d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba return ret; 3226d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba } 3236d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba 3246d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba // draw the content of the base layer first 3256d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba PictureSet* content = m_baseLayer->content(); 3266d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba int sc = canvas->save(SkCanvas::kClip_SaveFlag); 3276d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba canvas->clipRect(SkRect::MakeLTRB(0, 0, content->width(), 3286d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba content->height()), SkRegion::kDifference_Op); 3296d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba canvas->drawColor(bgColor); 3306d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba canvas->restoreToCount(sc); 3316d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba if (content->draw(canvas)) 3326d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba ret = split ? new PictureSet(*content) : 0; 3336d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba 33439b886463564843ebfd0557dd12b07bf38cb6d83John Reck DrawExtra* extra = getDrawExtra(extras); 335dea0c131566f424923425970fe5621305d136e5aJohn Reck if (extra) 336dea0c131566f424923425970fe5621305d136e5aJohn Reck extra->draw(canvas, 0); 337dea0c131566f424923425970fe5621305d136e5aJohn Reck 33842051e3a21322f4843268b4bc09c85b7e9250d6dJohn Reck#if USE(ACCELERATED_COMPOSITING) 33942051e3a21322f4843268b4bc09c85b7e9250d6dJohn Reck LayerAndroid* compositeLayer = compositeRoot(); 34042051e3a21322f4843268b4bc09c85b7e9250d6dJohn Reck if (compositeLayer) { 34142051e3a21322f4843268b4bc09c85b7e9250d6dJohn Reck // call this to be sure we've adjusted for any scrolling or animations 34242051e3a21322f4843268b4bc09c85b7e9250d6dJohn Reck // before we actually draw 343a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount compositeLayer->updateFixedLayersPositions(m_visibleRect); 34442051e3a21322f4843268b4bc09c85b7e9250d6dJohn Reck compositeLayer->updatePositions(); 34542051e3a21322f4843268b4bc09c85b7e9250d6dJohn Reck // We have to set the canvas' matrix on the base layer 34642051e3a21322f4843268b4bc09c85b7e9250d6dJohn Reck // (to have fixed layers work as intended) 34742051e3a21322f4843268b4bc09c85b7e9250d6dJohn Reck SkAutoCanvasRestore restore(canvas, true); 34842051e3a21322f4843268b4bc09c85b7e9250d6dJohn Reck m_baseLayer->setMatrix(canvas->getTotalMatrix()); 34942051e3a21322f4843268b4bc09c85b7e9250d6dJohn Reck canvas->resetMatrix(); 350dea0c131566f424923425970fe5621305d136e5aJohn Reck m_baseLayer->draw(canvas, extra); 3517023010bb63a565357556a480114a0db229c7b33John Reck } 3527023010bb63a565357556a480114a0db229c7b33John Reck if (extra) { 3537023010bb63a565357556a480114a0db229c7b33John Reck IntRect dummy; // inval area, unused for now 354dea0c131566f424923425970fe5621305d136e5aJohn Reck extra->drawLegacy(canvas, compositeLayer, &dummy); 35542051e3a21322f4843268b4bc09c85b7e9250d6dJohn Reck } 35642051e3a21322f4843268b4bc09c85b7e9250d6dJohn Reck#endif 3576d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba return ret; 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint getScaledMaxXScroll() 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3626dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(m_javaGlue.m_obj, "A java object was not associated with this native WebView!"); 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JNIEnv* env = JSC::Bindings::getJNIEnv(); 364b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block AutoJObject javaObject = m_javaGlue.object(env); 365b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block if (!javaObject.get()) 366b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block return 0; 367b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block int result = env->CallIntMethod(javaObject.get(), m_javaGlue.m_getScaledMaxXScroll); 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint getScaledMaxYScroll() 3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3746dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(m_javaGlue.m_obj, "A java object was not associated with this native WebView!"); 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JNIEnv* env = JSC::Bindings::getJNIEnv(); 376b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block AutoJObject javaObject = m_javaGlue.object(env); 377b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block if (!javaObject.get()) 378b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block return 0; 379b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block int result = env->CallIntMethod(javaObject.get(), m_javaGlue.m_getScaledMaxYScroll); 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 384af03a3d6830584ef606be2d1c64845815dadb146Cary ClarkIntRect getVisibleRect() 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 386af03a3d6830584ef606be2d1c64845815dadb146Cary Clark IntRect rect; 3876dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(m_javaGlue.m_obj, "A java object was not associated with this native WebView!"); 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JNIEnv* env = JSC::Bindings::getJNIEnv(); 389b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block AutoJObject javaObject = m_javaGlue.object(env); 390b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block if (!javaObject.get()) 391b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block return rect; 392b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block jobject jRect = env->CallObjectMethod(javaObject.get(), m_javaGlue.m_getVisibleRect); 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 394af03a3d6830584ef606be2d1c64845815dadb146Cary Clark rect.setX(env->GetIntField(jRect, m_javaGlue.m_rectLeft)); 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 396af03a3d6830584ef606be2d1c64845815dadb146Cary Clark rect.setY(env->GetIntField(jRect, m_javaGlue.m_rectTop)); 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 398af03a3d6830584ef606be2d1c64845815dadb146Cary Clark rect.setWidth(env->CallIntMethod(jRect, m_javaGlue.m_rectWidth)); 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 400af03a3d6830584ef606be2d1c64845815dadb146Cary Clark rect.setHeight(env->CallIntMethod(jRect, m_javaGlue.m_rectHeight)); 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project env->DeleteLocalRef(jRect); 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 404af03a3d6830584ef606be2d1c64845815dadb146Cary Clark return rect; 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid notifyProgressFinished() 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 40995fa6e99128685c55e9be6f4362e67c288482a74Leon Scroggins rebuildWebTextView(); 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41282f247bdbb98dd80c44209d87692c650c3704617Patrick Scott#if USE(ACCELERATED_COMPOSITING) 413f81c672a4f5c06621000a6df0984cde689397d94Cary Clarkstatic const ScrollableLayerAndroid* findScrollableLayer( 414f81c672a4f5c06621000a6df0984cde689397d94Cary Clark const LayerAndroid* parent, int x, int y, SkIRect* foundBounds) { 41582f247bdbb98dd80c44209d87692c650c3704617Patrick Scott SkRect bounds; 41682f247bdbb98dd80c44209d87692c650c3704617Patrick Scott parent->bounds(&bounds); 41782f247bdbb98dd80c44209d87692c650c3704617Patrick Scott // Check the parent bounds first; this will clip to within a masking layer's 41882f247bdbb98dd80c44209d87692c650c3704617Patrick Scott // bounds. 419fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott if (parent->masksToBounds() && !bounds.contains(x, y)) 42082f247bdbb98dd80c44209d87692c650c3704617Patrick Scott return 0; 42182f247bdbb98dd80c44209d87692c650c3704617Patrick Scott // Move the hit test local to parent. 42282f247bdbb98dd80c44209d87692c650c3704617Patrick Scott x -= bounds.fLeft; 42382f247bdbb98dd80c44209d87692c650c3704617Patrick Scott y -= bounds.fTop; 42482f247bdbb98dd80c44209d87692c650c3704617Patrick Scott int count = parent->countChildren(); 4251a8ec29fc0211a6b5c53a8cd9ce20be5e630b005Patrick Scott while (count--) { 4261a8ec29fc0211a6b5c53a8cd9ce20be5e630b005Patrick Scott const LayerAndroid* child = parent->getChild(count); 427f81c672a4f5c06621000a6df0984cde689397d94Cary Clark const ScrollableLayerAndroid* result = findScrollableLayer(child, x, y, 428f81c672a4f5c06621000a6df0984cde689397d94Cary Clark foundBounds); 429f81c672a4f5c06621000a6df0984cde689397d94Cary Clark if (result) { 430f81c672a4f5c06621000a6df0984cde689397d94Cary Clark foundBounds->offset(bounds.fLeft, bounds.fTop); 431f81c672a4f5c06621000a6df0984cde689397d94Cary Clark if (parent->masksToBounds()) { 432f81c672a4f5c06621000a6df0984cde689397d94Cary Clark if (bounds.width() < foundBounds->width()) 433f81c672a4f5c06621000a6df0984cde689397d94Cary Clark foundBounds->fRight = foundBounds->fLeft + bounds.width(); 434f81c672a4f5c06621000a6df0984cde689397d94Cary Clark if (bounds.height() < foundBounds->height()) 435f81c672a4f5c06621000a6df0984cde689397d94Cary Clark foundBounds->fBottom = foundBounds->fTop + bounds.height(); 436f81c672a4f5c06621000a6df0984cde689397d94Cary Clark } 43782f247bdbb98dd80c44209d87692c650c3704617Patrick Scott return result; 438f81c672a4f5c06621000a6df0984cde689397d94Cary Clark } 43982f247bdbb98dd80c44209d87692c650c3704617Patrick Scott } 440f81c672a4f5c06621000a6df0984cde689397d94Cary Clark if (parent->contentIsScrollable()) { 441f81c672a4f5c06621000a6df0984cde689397d94Cary Clark foundBounds->set(0, 0, bounds.width(), bounds.height()); 442fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott return static_cast<const ScrollableLayerAndroid*>(parent); 443f81c672a4f5c06621000a6df0984cde689397d94Cary Clark } 44482f247bdbb98dd80c44209d87692c650c3704617Patrick Scott return 0; 44582f247bdbb98dd80c44209d87692c650c3704617Patrick Scott} 44682f247bdbb98dd80c44209d87692c650c3704617Patrick Scott#endif 44782f247bdbb98dd80c44209d87692c650c3704617Patrick Scott 448f81c672a4f5c06621000a6df0984cde689397d94Cary Clarkint scrollableLayer(int x, int y, SkIRect* layerRect, SkIRect* bounds) 449a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott{ 45082f247bdbb98dd80c44209d87692c650c3704617Patrick Scott#if USE(ACCELERATED_COMPOSITING) 451af03a3d6830584ef606be2d1c64845815dadb146Cary Clark const LayerAndroid* layerRoot = compositeRoot(); 452af03a3d6830584ef606be2d1c64845815dadb146Cary Clark if (!layerRoot) 453a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott return 0; 454f81c672a4f5c06621000a6df0984cde689397d94Cary Clark const ScrollableLayerAndroid* result = findScrollableLayer(layerRoot, x, y, 455f81c672a4f5c06621000a6df0984cde689397d94Cary Clark bounds); 45622e283368b8dfd19cf2caa342a5c921397f0dc41Patrick Scott if (result) { 45722e283368b8dfd19cf2caa342a5c921397f0dc41Patrick Scott result->getScrollRect(layerRect); 4588598c9fb9f861f25ab14efde9efb19cb91d7df1cPatrick Scott return result->uniqueId(); 45922e283368b8dfd19cf2caa342a5c921397f0dc41Patrick Scott } 460a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott#endif 461a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott return 0; 462a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott} 463a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott 46470adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craikvoid scrollLayer(int layerId, int x, int y) 46570adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craik{ 46670adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craik if (m_glWebViewState) 46770adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craik m_glWebViewState->scrollLayer(layerId, x, y); 46870adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craik} 46970adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craik 47045b64f60af3cbfa8c78388e35e9b669a0c284bdcBen Murdochvoid overrideUrlLoading(const WTF::String& url) 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JNIEnv* env = JSC::Bindings::getJNIEnv(); 473b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block AutoJObject javaObject = m_javaGlue.object(env); 474b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block if (!javaObject.get()) 475b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block return; 47679b35ce109b9fdca7c7e3af24996c1a2a612f1a4Steve Block jstring jName = wtfStringToJstring(env, url); 477b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block env->CallVoidMethod(javaObject.get(), m_javaGlue.m_overrideLoading, jName); 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project env->DeleteLocalRef(jName); 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid setFindIsUp(bool up) 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_viewImpl->m_findIsUp = up; 484afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clark} 485afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clark 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid setHeightCanMeasure(bool measure) 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_heightCanMeasure = measure; 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49187962ce00229855c098ba12cee8d5c015a835289Cary ClarkString getSelection() 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 493dea0c131566f424923425970fe5621305d136e5aJohn Reck SelectText* select = static_cast<SelectText*>( 494dea0c131566f424923425970fe5621305d136e5aJohn Reck getDrawExtra(WebView::DrawExtrasSelection)); 495dea0c131566f424923425970fe5621305d136e5aJohn Reck if (select) 496dea0c131566f424923425970fe5621305d136e5aJohn Reck return select->getText(); 497dea0c131566f424923425970fe5621305d136e5aJohn Reck return String(); 4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 500bf16ddc110ef3fde2cfa1ae43ab31d993377981dLeon Scrogginsvoid sendMoveFocus(WebCore::Frame* framePtr, WebCore::Node* nodePtr) 501bf16ddc110ef3fde2cfa1ae43ab31d993377981dLeon Scroggins{ 502bf16ddc110ef3fde2cfa1ae43ab31d993377981dLeon Scroggins JNIEnv* env = JSC::Bindings::getJNIEnv(); 503b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block AutoJObject javaObject = m_javaGlue.object(env); 504b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block if (!javaObject.get()) 505b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block return; 506b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block env->CallVoidMethod(javaObject.get(), m_javaGlue.m_sendMoveFocus, (jint) framePtr, (jint) nodePtr); 507bf16ddc110ef3fde2cfa1ae43ab31d993377981dLeon Scroggins checkException(env); 508bf16ddc110ef3fde2cfa1ae43ab31d993377981dLeon Scroggins} 509bf16ddc110ef3fde2cfa1ae43ab31d993377981dLeon Scroggins 51046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkvoid sendMoveMouse(WebCore::Frame* framePtr, WebCore::Node* nodePtr, int x, int y) 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JNIEnv* env = JSC::Bindings::getJNIEnv(); 513b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block AutoJObject javaObject = m_javaGlue.object(env); 514b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block if (!javaObject.get()) 515b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block return; 516b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block env->CallVoidMethod(javaObject.get(), m_javaGlue.m_sendMoveMouse, reinterpret_cast<jint>(framePtr), reinterpret_cast<jint>(nodePtr), x, y); 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52094f12574c74b11db011b994e462f64a112952a47Leon Scrogginsvoid sendMoveMouseIfLatest(bool clearTextEntry, bool stopPaintingCaret) 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5226dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(m_javaGlue.m_obj, "A java object was not associated with this native WebView!"); 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JNIEnv* env = JSC::Bindings::getJNIEnv(); 524b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block AutoJObject javaObject = m_javaGlue.object(env); 525b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block if (!javaObject.get()) 526b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block return; 527b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block env->CallVoidMethod(javaObject.get(), m_javaGlue.m_sendMoveMouseIfLatest, clearTextEntry, stopPaintingCaret); 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 531b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Blockvoid sendMotionUp(WebCore::Frame* framePtr, WebCore::Node* nodePtr, int x, int y) 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5336dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(m_javaGlue.m_obj, "A WebView was not associated with this WebViewNative!"); 534b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JNIEnv* env = JSC::Bindings::getJNIEnv(); 536b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block AutoJObject javaObject = m_javaGlue.object(env); 537b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block if (!javaObject.get()) 538b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block return; 539b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block m_viewImpl->m_touchGeneration = ++m_generation; 540b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block env->CallVoidMethod(javaObject.get(), m_javaGlue.m_sendMotionUp, m_generation, (jint) framePtr, (jint) nodePtr, x, y); 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54451c0d4c6b1b74fff7336d81451ba7d2fc132e31cLeon Scrogginsbool scrollBy(int dx, int dy) 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5466dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(m_javaGlue.m_obj, "A java object was not associated with this native WebView!"); 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JNIEnv* env = JSC::Bindings::getJNIEnv(); 549b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block AutoJObject javaObject = m_javaGlue.object(env); 550b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block if (!javaObject.get()) 551b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block return false; 552b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block bool result = env->CallBooleanMethod(javaObject.get(), m_javaGlue.m_scrollBy, dx, dy, true); 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 55451c0d4c6b1b74fff7336d81451ba7d2fc132e31cLeon Scroggins return result; 5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 557f51a51f6ea307f4311a04aa865a42b233269540bChris Craikvoid setIsScrolling(bool isScrolling) 558f51a51f6ea307f4311a04aa865a42b233269540bChris Craik{ 559ec7cadd6477635dceb9ef29175fbb0bc55659462Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 560ec7cadd6477635dceb9ef29175fbb0bc55659462Ben Murdoch if (m_glWebViewState) 561ec7cadd6477635dceb9ef29175fbb0bc55659462Ben Murdoch m_glWebViewState->setIsScrolling(isScrolling); 562ec7cadd6477635dceb9ef29175fbb0bc55659462Ben Murdoch#endif 563f51a51f6ea307f4311a04aa865a42b233269540bChris Craik} 564f51a51f6ea307f4311a04aa865a42b233269540bChris Craik 56595fa6e99128685c55e9be6f4362e67c288482a74Leon Scrogginsvoid rebuildWebTextView() 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JNIEnv* env = JSC::Bindings::getJNIEnv(); 568b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block AutoJObject javaObject = m_javaGlue.object(env); 569b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block if (!javaObject.get()) 570b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block return; 571b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block env->CallVoidMethod(javaObject.get(), m_javaGlue.m_rebuildWebTextView); 5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid viewInvalidate() 5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JNIEnv* env = JSC::Bindings::getJNIEnv(); 578b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block AutoJObject javaObject = m_javaGlue.object(env); 579b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block if (!javaObject.get()) 580b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block return; 581b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block env->CallVoidMethod(javaObject.get(), m_javaGlue.m_viewInvalidate); 5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid viewInvalidateRect(int l, int t, int r, int b) 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JNIEnv* env = JSC::Bindings::getJNIEnv(); 588b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block AutoJObject javaObject = m_javaGlue.object(env); 589b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block if (!javaObject.get()) 590b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block return; 591b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block env->CallVoidMethod(javaObject.get(), m_javaGlue.m_viewInvalidateRect, l, r, t, b); 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid postInvalidateDelayed(int64_t delay, const WebCore::IntRect& bounds) 5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JNIEnv* env = JSC::Bindings::getJNIEnv(); 598b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block AutoJObject javaObject = m_javaGlue.object(env); 599b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block if (!javaObject.get()) 600b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block return; 601b4d178df818e8b6e7a1cfbb0e34bbf7bb9d74ec9Steve Block env->CallVoidMethod(javaObject.get(), m_javaGlue.m_postInvalidateDelayed, 6021ed8c4d16ac986307f1c0589a3a720a37e60f313Steve Block delay, bounds.x(), bounds.y(), bounds.maxX(), bounds.maxY()); 6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkException(env); 6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 60646dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkint moveGeneration() 60746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 60846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark return m_viewImpl->m_moveGeneration; 60946dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 61046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 6116d43b9ceb777071c088fe12ee94af80e34816bcfGrace KlobaLayerAndroid* compositeRoot() const 612f4cefb9302ee62602c19cdfbdb6cc1fbdf540953Cary Clark{ 6136dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(!m_baseLayer || m_baseLayer->countChildren() == 1, 6146d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba "base layer can't have more than one child %s", __FUNCTION__); 6156d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba if (m_baseLayer && m_baseLayer->countChildren() == 1) 6166d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba return static_cast<LayerAndroid*>(m_baseLayer->getChild(0)); 6176d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba else 6186d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba return 0; 619f4cefb9302ee62602c19cdfbdb6cc1fbdf540953Cary Clark} 620f4cefb9302ee62602c19cdfbdb6cc1fbdf540953Cary Clark 62182f247bdbb98dd80c44209d87692c650c3704617Patrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL) 622a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scottstatic void copyScrollPositionRecursive(const LayerAndroid* from, 623a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott LayerAndroid* root) 624a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott{ 625a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott if (!from || !root) 626a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott return; 627a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott for (int i = 0; i < from->countChildren(); i++) { 628a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott const LayerAndroid* l = from->getChild(i); 629a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott if (l->contentIsScrollable()) { 63082f247bdbb98dd80c44209d87692c650c3704617Patrick Scott const SkPoint& pos = l->getPosition(); 63182f247bdbb98dd80c44209d87692c650c3704617Patrick Scott LayerAndroid* match = root->findById(l->uniqueId()); 63282f247bdbb98dd80c44209d87692c650c3704617Patrick Scott if (match && match->contentIsScrollable()) 63382f247bdbb98dd80c44209d87692c650c3704617Patrick Scott match->setPosition(pos.fX, pos.fY); 634a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott } 635a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott copyScrollPositionRecursive(l, root); 636a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott } 637a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott} 63882f247bdbb98dd80c44209d87692c650c3704617Patrick Scott#endif 639a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott 640246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craikbool setBaseLayer(BaseLayerAndroid* layer, SkRegion& inval, bool showVisualIndicator, 641246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik bool isPictureAfterFirstLayout) 642f4cefb9302ee62602c19cdfbdb6cc1fbdf540953Cary Clark{ 643246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik bool queueFull = false; 644a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard#if USE(ACCELERATED_COMPOSITING) 645246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik if (m_glWebViewState) { 646246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik if (layer) 647246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik layer->markAsDirty(inval); 648246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik queueFull = m_glWebViewState->setBaseLayer(layer, showVisualIndicator, 649246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik isPictureAfterFirstLayout); 650246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik } 651a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard#endif 652a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard 65382f247bdbb98dd80c44209d87692c650c3704617Patrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL) 654cf6e10e145f44cab3eb70f3782b51a92cf61ae7dShimeng (Simon) Wang if (layer) { 6557962416088590b8449c81a02f0a882ad29840cbeChris Craik // TODO: the below tree copies are only necessary in software rendering 65682f247bdbb98dd80c44209d87692c650c3704617Patrick Scott LayerAndroid* newCompositeRoot = static_cast<LayerAndroid*>(layer->getChild(0)); 65782f247bdbb98dd80c44209d87692c650c3704617Patrick Scott copyScrollPositionRecursive(compositeRoot(), newCompositeRoot); 658cf6e10e145f44cab3eb70f3782b51a92cf61ae7dShimeng (Simon) Wang } 65982f247bdbb98dd80c44209d87692c650c3704617Patrick Scott#endif 660b33016812afef21c69df5ab3d5b85eab5fef7c5cDerek Sollenberger SkSafeUnref(m_baseLayer); 6616d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba m_baseLayer = layer; 662246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik 663246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik return queueFull; 6646d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba} 6656d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba 6666d43b9ceb777071c088fe12ee94af80e34816bcfGrace Klobavoid replaceBaseContent(PictureSet* set) 6676d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba{ 6686d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba if (!m_baseLayer) 6696d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba return; 6706d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba m_baseLayer->setContent(*set); 6716d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba delete set; 6726d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba} 6736d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba 6746d43b9ceb777071c088fe12ee94af80e34816bcfGrace Klobavoid copyBaseContentToPicture(SkPicture* picture) 6756d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba{ 6766d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba if (!m_baseLayer) 6776d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba return; 6786d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba PictureSet* content = m_baseLayer->content(); 679e59ed3e2c930c8eeed844aa0365e8285d956a8f2Nicolas Roard m_baseLayer->drawCanvas(picture->beginRecording(content->width(), content->height(), 6806d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba SkPicture::kUsePathBoundsForClip_RecordingFlag)); 6816d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba picture->endRecording(); 6826d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba} 6836d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba 6846d43b9ceb777071c088fe12ee94af80e34816bcfGrace Klobabool hasContent() { 6856d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba if (!m_baseLayer) 6866d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba return false; 6876d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba return !m_baseLayer->content()->isEmpty(); 688f4cefb9302ee62602c19cdfbdb6cc1fbdf540953Cary Clark} 689f4cefb9302ee62602c19cdfbdb6cc1fbdf540953Cary Clark 690908703e420f4931f74527aaeb3d5faabdd66c28aChet Haasevoid setFunctor(Functor* functor) { 691908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase delete m_glDrawFunctor; 692908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase m_glDrawFunctor = functor; 693908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase} 694908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase 695908703e420f4931f74527aaeb3d5faabdd66c28aChet HaaseFunctor* getFunctor() { 696908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase return m_glDrawFunctor; 697908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase} 698908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase 6994212fae38ffee2bbb657dd19e4ae8b7c735f4953John ReckBaseLayerAndroid* getBaseLayer() { 7004212fae38ffee2bbb657dd19e4ae8b7c735f4953John Reck return m_baseLayer; 7014212fae38ffee2bbb657dd19e4ae8b7c735f4953John Reck} 7024212fae38ffee2bbb657dd19e4ae8b7c735f4953John Reck 703a5e649bc4d58bf3da959deae077307c487e2a3a6George Mountvoid setVisibleRect(SkRect& visibleRect) { 704a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount m_visibleRect = visibleRect; 705a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount} 706a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount 707dea0c131566f424923425970fe5621305d136e5aJohn Reckvoid setDrawExtra(DrawExtra *extra, DrawExtras type) 708dea0c131566f424923425970fe5621305d136e5aJohn Reck{ 709dea0c131566f424923425970fe5621305d136e5aJohn Reck if (type == DrawExtrasNone) 710dea0c131566f424923425970fe5621305d136e5aJohn Reck return; 711dea0c131566f424923425970fe5621305d136e5aJohn Reck DrawExtra* old = m_extras[type - 1]; 712dea0c131566f424923425970fe5621305d136e5aJohn Reck m_extras[type - 1] = extra; 713dea0c131566f424923425970fe5621305d136e5aJohn Reck if (old != extra) { 714dea0c131566f424923425970fe5621305d136e5aJohn Reck delete old; 715dea0c131566f424923425970fe5621305d136e5aJohn Reck } 716dea0c131566f424923425970fe5621305d136e5aJohn Reck} 717dea0c131566f424923425970fe5621305d136e5aJohn Reck 718dea0c131566f424923425970fe5621305d136e5aJohn Reckvoid setTextSelection(SelectText *selection) { 719dea0c131566f424923425970fe5621305d136e5aJohn Reck setDrawExtra(selection, DrawExtrasSelection); 720dea0c131566f424923425970fe5621305d136e5aJohn Reck} 721dea0c131566f424923425970fe5621305d136e5aJohn Reck 722dea0c131566f424923425970fe5621305d136e5aJohn Reckint getHandleLayerId(SelectText::HandleId handleId, SkIRect& cursorRect) { 723dea0c131566f424923425970fe5621305d136e5aJohn Reck SelectText* selectText = static_cast<SelectText*>(getDrawExtra(DrawExtrasSelection)); 724fba5bad67c2589216f05da70a7f2fbd537637672John Reck if (!selectText || !m_baseLayer) 725dea0c131566f424923425970fe5621305d136e5aJohn Reck return -1; 726dea0c131566f424923425970fe5621305d136e5aJohn Reck int layerId = selectText->caretLayerId(handleId); 727df71abcaa1e7975b2fbc7522d006829223093825John Reck IntRect rect = selectText->caretRect(handleId); 728dea0c131566f424923425970fe5621305d136e5aJohn Reck if (layerId != -1) { 729df71abcaa1e7975b2fbc7522d006829223093825John Reck // We need to make sure the drawTransform is up to date as this is 730df71abcaa1e7975b2fbc7522d006829223093825John Reck // called before a draw() or drawGL() 731df71abcaa1e7975b2fbc7522d006829223093825John Reck m_baseLayer->updateLayerPositions(m_visibleRect); 732dea0c131566f424923425970fe5621305d136e5aJohn Reck LayerAndroid* root = compositeRoot(); 733dea0c131566f424923425970fe5621305d136e5aJohn Reck LayerAndroid* layer = root ? root->findById(layerId) : 0; 734ca8907cd631723128e1c3a8718e8d059998cb143John Reck if (layer && layer->drawTransform()) 735ca8907cd631723128e1c3a8718e8d059998cb143John Reck rect = layer->drawTransform()->mapRect(rect); 736dea0c131566f424923425970fe5621305d136e5aJohn Reck } 737df71abcaa1e7975b2fbc7522d006829223093825John Reck cursorRect.set(rect.x(), rect.y(), rect.maxX(), rect.maxY()); 738dea0c131566f424923425970fe5621305d136e5aJohn Reck return layerId; 739dea0c131566f424923425970fe5621305d136e5aJohn Reck} 740dea0c131566f424923425970fe5621305d136e5aJohn Reck 741d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck bool m_isDrawingPaused; 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: // local state for WebView 7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // private to getFrameCache(); other functions operate in a different thread 7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebViewCore* m_viewImpl; 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int m_generation; // associate unique ID with sent kit focus to match with ui 7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Corresponds to the same-named boolean on the java side. 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_heightCanMeasure; 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int m_lastDx; 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SkMSec m_lastDxTime; 750dea0c131566f424923425970fe5621305d136e5aJohn Reck DrawExtra* m_extras[DRAW_EXTRAS_SIZE]; 7516d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba BaseLayerAndroid* m_baseLayer; 752908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase Functor* m_glDrawFunctor; 753a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard#if USE(ACCELERATED_COMPOSITING) 754c85ae2f04c704b80b18838059d2fc7b9a19d4921Derek Sollenberger GLWebViewState* m_glWebViewState; 755a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard#endif 756a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount SkRect m_visibleRect; 75755b4bdbd661ac94fd05ab40de08250bf242d5346John Reck bool m_isHighEndGfx; 7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; // end of WebView class 7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 760908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase 761908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase/** 762908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase * This class holds a function pointer and parameters for calling drawGL into a specific 763908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase * viewport. The pointer to the Functor will be put on a framework display list to be called 764908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase * when the display list is replayed. 765908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase */ 766908703e420f4931f74527aaeb3d5faabdd66c28aChet Haaseclass GLDrawFunctor : Functor { 767908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase public: 768908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase GLDrawFunctor(WebView* _wvInstance, 769a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount bool(WebView::*_funcPtr)(WebCore::IntRect&, WebCore::IntRect*, 770beeb8cbb217cca6094affa12a630bd75938909c9George Mount WebCore::IntRect&, int, WebCore::IntRect&, jfloat, jint), 771908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase WebCore::IntRect _viewRect, float _scale, int _extras) { 772908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase wvInstance = _wvInstance; 773908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase funcPtr = _funcPtr; 774908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase viewRect = _viewRect; 775908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase scale = _scale; 776908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase extras = _extras; 777908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase }; 77879d8e0434bfe00a793e8041f96dc02ec1d98e694Romain Guy status_t operator()(int messageId, void* data) { 77979d8e0434bfe00a793e8041f96dc02ec1d98e694Romain Guy if (viewRect.isEmpty()) { 780821e0038ef13763a4ccfc038809b8cd02a2e1cf3Chet Haase // NOOP operation if viewport is empty 781821e0038ef13763a4ccfc038809b8cd02a2e1cf3Chet Haase return 0; 782821e0038ef13763a4ccfc038809b8cd02a2e1cf3Chet Haase } 78379d8e0434bfe00a793e8041f96dc02ec1d98e694Romain Guy 7849f5143f9ae49a8e5fdb7ea626c4efad66096b020Nicolas Roard WebCore::IntRect inval; 7859f5143f9ae49a8e5fdb7ea626c4efad66096b020Nicolas Roard int titlebarHeight = webViewRect.height() - viewRect.height(); 786b1444e524d3f5e888d1ae3300b2658321fc56349Russell Brenner 787b1444e524d3f5e888d1ae3300b2658321fc56349Russell Brenner uirenderer::DrawGlInfo* info = reinterpret_cast<uirenderer::DrawGlInfo*>(data); 788b1444e524d3f5e888d1ae3300b2658321fc56349Russell Brenner WebCore::IntRect localViewRect = viewRect; 789b1444e524d3f5e888d1ae3300b2658321fc56349Russell Brenner if (info->isLayer) 790b1444e524d3f5e888d1ae3300b2658321fc56349Russell Brenner localViewRect.move(-1 * localViewRect.x(), -1 * localViewRect.y()); 791b1444e524d3f5e888d1ae3300b2658321fc56349Russell Brenner 792be61abb47b98988ca94bd839a1e17c3267365dc9Nicolas Roard WebCore::IntRect clip(info->clipLeft, info->clipTop, 793be61abb47b98988ca94bd839a1e17c3267365dc9Nicolas Roard info->clipRight - info->clipLeft, 794be61abb47b98988ca94bd839a1e17c3267365dc9Nicolas Roard info->clipBottom - info->clipTop); 795e7770b07e6dd4b0edff8725bc0f7a505417dd4f1Teng-Hui Zhu TilesManager::instance()->shader()->setWebViewMatrix(info->transform, info->isLayer); 796be61abb47b98988ca94bd839a1e17c3267365dc9Nicolas Roard 797a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount bool retVal = (*wvInstance.*funcPtr)(localViewRect, &inval, webViewRect, 798a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount titlebarHeight, clip, scale, extras); 799b5ec18911e853fdea87aad8900400c01e6493f5fRomain Guy if (retVal) { 8009f5143f9ae49a8e5fdb7ea626c4efad66096b020Nicolas Roard IntRect finalInval; 8019f5143f9ae49a8e5fdb7ea626c4efad66096b020Nicolas Roard if (inval.isEmpty()) { 8029f5143f9ae49a8e5fdb7ea626c4efad66096b020Nicolas Roard finalInval = webViewRect; 803be25f896a5c754e96c6c0d4719a79d523293d40fNicolas Roard retVal = true; 8049f5143f9ae49a8e5fdb7ea626c4efad66096b020Nicolas Roard } else { 8059f5143f9ae49a8e5fdb7ea626c4efad66096b020Nicolas Roard finalInval.setX(webViewRect.x() + inval.x()); 806be61abb47b98988ca94bd839a1e17c3267365dc9Nicolas Roard finalInval.setY(webViewRect.y() + titlebarHeight + inval.y()); 8079f5143f9ae49a8e5fdb7ea626c4efad66096b020Nicolas Roard finalInval.setWidth(inval.width()); 8089f5143f9ae49a8e5fdb7ea626c4efad66096b020Nicolas Roard finalInval.setHeight(inval.height()); 8099f5143f9ae49a8e5fdb7ea626c4efad66096b020Nicolas Roard } 810d1f5cf1ad8b20860bd9cb34a483451019124d1f9Romain Guy info->dirtyLeft = finalInval.x(); 811d1f5cf1ad8b20860bd9cb34a483451019124d1f9Romain Guy info->dirtyTop = finalInval.y(); 8121ed8c4d16ac986307f1c0589a3a720a37e60f313Steve Block info->dirtyRight = finalInval.maxX(); 8131ed8c4d16ac986307f1c0589a3a720a37e60f313Steve Block info->dirtyBottom = finalInval.maxY(); 814b5ec18911e853fdea87aad8900400c01e6493f5fRomain Guy } 815908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase // return 1 if invalidation needed, 0 otherwise 816908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase return retVal ? 1 : 0; 817908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase } 818908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase void updateRect(WebCore::IntRect& _viewRect) { 819908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase viewRect = _viewRect; 820908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase } 821b5ec18911e853fdea87aad8900400c01e6493f5fRomain Guy void updateViewRect(WebCore::IntRect& _viewRect) { 822b5ec18911e853fdea87aad8900400c01e6493f5fRomain Guy webViewRect = _viewRect; 823b5ec18911e853fdea87aad8900400c01e6493f5fRomain Guy } 824d0a011b30b97598ee74f329aaa217a6ab733f1f1Teng-Hui Zhu void updateScale(float _scale) { 825d0a011b30b97598ee74f329aaa217a6ab733f1f1Teng-Hui Zhu scale = _scale; 826d0a011b30b97598ee74f329aaa217a6ab733f1f1Teng-Hui Zhu } 827908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase private: 828908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase WebView* wvInstance; 829a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount bool (WebView::*funcPtr)(WebCore::IntRect&, WebCore::IntRect*, 830a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount WebCore::IntRect&, int, WebCore::IntRect&, float, int); 831908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase WebCore::IntRect viewRect; 832b5ec18911e853fdea87aad8900400c01e6493f5fRomain Guy WebCore::IntRect webViewRect; 833908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase jfloat scale; 834908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase jint extras; 835908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase}; 836908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase 8378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 8388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Native JNI methods 8398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 840d4924af12855cd19162ba1442a6055664c98ca32Cary Clarkstatic int nativeCacheHitFramePointer(JNIEnv *env, jobject obj) 841d4924af12855cd19162ba1442a6055664c98ca32Cary Clark{ 8427aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 843d4924af12855cd19162ba1442a6055664c98ca32Cary Clark} 844d4924af12855cd19162ba1442a6055664c98ca32Cary Clark 845d4924af12855cd19162ba1442a6055664c98ca32Cary Clarkstatic jobject nativeCacheHitNodeBounds(JNIEnv *env, jobject obj) 846d4924af12855cd19162ba1442a6055664c98ca32Cary Clark{ 8477aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 848d4924af12855cd19162ba1442a6055664c98ca32Cary Clark} 849d4924af12855cd19162ba1442a6055664c98ca32Cary Clark 850d4924af12855cd19162ba1442a6055664c98ca32Cary Clarkstatic int nativeCacheHitNodePointer(JNIEnv *env, jobject obj) 851d4924af12855cd19162ba1442a6055664c98ca32Cary Clark{ 8527aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 853d4924af12855cd19162ba1442a6055664c98ca32Cary Clark} 854d4924af12855cd19162ba1442a6055664c98ca32Cary Clark 855b57c3a124715a89ac026e86f4fd3890529525d11Cary Clarkstatic bool nativeCacheHitIsPlugin(JNIEnv *env, jobject obj) 856b57c3a124715a89ac026e86f4fd3890529525d11Cary Clark{ 8577aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 858b57c3a124715a89ac026e86f4fd3890529525d11Cary Clark} 859b57c3a124715a89ac026e86f4fd3890529525d11Cary Clark 860c3fe941b7eb7da66bcea91b3513053d2ea60586fCary Clarkstatic void nativeClearCursor(JNIEnv *env, jobject obj) 8618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 86455b4bdbd661ac94fd05ab40de08250bf242d5346John Reckstatic void nativeCreate(JNIEnv *env, jobject obj, int viewImpl, 86555b4bdbd661ac94fd05ab40de08250bf242d5346John Reck jstring drawableDir, jboolean isHighEndGfx) 8668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8674de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins WTF::String dir = jstringToWtfString(env, drawableDir); 868894aaa1bd5446eebf8169efa1998fbe6964c18d0Chris Craik new WebView(env, obj, viewImpl, dir, isHighEndGfx); 8698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // NEED THIS OR SOMETHING LIKE IT! 8708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project //Release(obj); 8718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 87346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkstatic jint nativeCursorFramePointer(JNIEnv *env, jobject obj) 87446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 8757aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 876f886bc57020d37942e84b74ff878bdc1498a09c7Cary Clark} 877f886bc57020d37942e84b74ff878bdc1498a09c7Cary Clark 8782194b17e89b2ad4c0624f7612e417db6d69150adLeon Scrogginsstatic bool focusCandidateHasNextTextfield(JNIEnv *env, jobject obj) 8792194b17e89b2ad4c0624f7612e417db6d69150adLeon Scroggins{ 8807aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 8811d330120b6c2ee2d3f1c25300d0e3d446ef8c640Cary Clark} 8821d330120b6c2ee2d3f1c25300d0e3d446ef8c640Cary Clark 8831cc2f5523913bd14a01c0c85710dcd6f0d7b5bb8Leon Scrogginsstatic jboolean nativePageShouldHandleShiftAndArrows(JNIEnv *env, jobject obj) 8841cc2f5523913bd14a01c0c85710dcd6f0d7b5bb8Leon Scroggins{ 885ceeeab6161d7d8bf970ecf98affa4f4966df6f01John Reck return true; 8861cc2f5523913bd14a01c0c85710dcd6f0d7b5bb8Leon Scroggins} 8871cc2f5523913bd14a01c0c85710dcd6f0d7b5bb8Leon Scroggins 88846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkstatic jobject nativeCursorNodeBounds(JNIEnv *env, jobject obj) 88946dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 8907aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 89146dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 89246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 89346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkstatic jint nativeCursorNodePointer(JNIEnv *env, jobject obj) 89446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 8957aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 89646dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 89746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 89836747fa778285f57f2f53c047028be83e9d8776dCary Clarkstatic jobject nativeCursorPosition(JNIEnv *env, jobject obj) 89936747fa778285f57f2f53c047028be83e9d8776dCary Clark{ 9007aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 90136747fa778285f57f2f53c047028be83e9d8776dCary Clark} 90236747fa778285f57f2f53c047028be83e9d8776dCary Clark 90346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkstatic WebCore::IntRect jrect_to_webrect(JNIEnv* env, jobject obj) 90446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 905a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount if (obj) { 906a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount int L, T, R, B; 907a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount GraphicsJNI::get_jrect(env, obj, &L, &T, &R, &B); 908a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount return WebCore::IntRect(L, T, R - L, B - T); 909a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount } else 910a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount return WebCore::IntRect(); 911a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount} 912a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount 913a5e649bc4d58bf3da959deae077307c487e2a3a6George Mountstatic SkRect jrectf_to_rect(JNIEnv* env, jobject obj) 914a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount{ 915a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount SkRect rect = SkRect::MakeEmpty(); 916a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount if (obj) 917a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount GraphicsJNI::jrectf_to_rect(env, obj, &rect); 918a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount return rect; 91946dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 92046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 92146dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkstatic bool nativeCursorIntersects(JNIEnv *env, jobject obj, jobject visRect) 92246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 9237aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 92446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 92546dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 92646dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkstatic bool nativeCursorIsAnchor(JNIEnv *env, jobject obj) 92746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 9287aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 92946dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 93046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 93146dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkstatic bool nativeCursorIsTextInput(JNIEnv *env, jobject obj) 93246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 9337aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 93446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 93546dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 93646dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkstatic jobject nativeCursorText(JNIEnv *env, jobject obj) 93746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 9387aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 93946dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 94046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 9418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void nativeDebugDump(JNIEnv *env, jobject obj) 9428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 945a5e649bc4d58bf3da959deae077307c487e2a3a6George Mountstatic jint nativeDraw(JNIEnv *env, jobject obj, jobject canv, 946a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount jobject visible, jint color, 9476d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba jint extras, jboolean split) { 9488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SkCanvas* canvas = GraphicsJNI::getNativeCanvas(env, canv); 949a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount WebView* webView = GET_NATIVE_VIEW(env, obj); 950a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount SkRect visibleRect = jrectf_to_rect(env, visible); 951a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount webView->setVisibleRect(visibleRect); 952dea0c131566f424923425970fe5621305d136e5aJohn Reck PictureSet* pictureSet = webView->draw(canvas, color, 953dea0c131566f424923425970fe5621305d136e5aJohn Reck static_cast<WebView::DrawExtras>(extras), split); 954a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount return reinterpret_cast<jint>(pictureSet); 9558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 957223589b3e07f05960e8da16a5addce6fbfbfa9dfJohn Reckstatic jint nativeGetDrawGLFunction(JNIEnv *env, jobject obj, jint nativeView, 958223589b3e07f05960e8da16a5addce6fbfbfa9dfJohn Reck jobject jrect, jobject jviewrect, 959a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount jobject jvisiblerect, 960223589b3e07f05960e8da16a5addce6fbfbfa9dfJohn Reck jfloat scale, jint extras) { 961a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount WebCore::IntRect viewRect = jrect_to_webrect(env, jrect); 962223589b3e07f05960e8da16a5addce6fbfbfa9dfJohn Reck WebView *wvInstance = (WebView*) nativeView; 963a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount SkRect visibleRect = jrectf_to_rect(env, jvisiblerect); 964a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount wvInstance->setVisibleRect(visibleRect); 965a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount 966a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount GLDrawFunctor* functor = new GLDrawFunctor(wvInstance, 967a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount &android::WebView::drawGL, viewRect, scale, extras); 968908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase wvInstance->setFunctor((Functor*) functor); 969b5ec18911e853fdea87aad8900400c01e6493f5fRomain Guy 970a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount WebCore::IntRect webViewRect = jrect_to_webrect(env, jviewrect); 971b5ec18911e853fdea87aad8900400c01e6493f5fRomain Guy functor->updateViewRect(webViewRect); 972b5ec18911e853fdea87aad8900400c01e6493f5fRomain Guy 973908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase return (jint)functor; 974908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase} 975908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase 976a5e649bc4d58bf3da959deae077307c487e2a3a6George Mountstatic void nativeUpdateDrawGLFunction(JNIEnv *env, jobject obj, jobject jrect, 977d0a011b30b97598ee74f329aaa217a6ab733f1f1Teng-Hui Zhu jobject jviewrect, jobject jvisiblerect, jfloat scale) { 978908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase WebView *wvInstance = GET_NATIVE_VIEW(env, obj); 979a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount if (wvInstance) { 980908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase GLDrawFunctor* functor = (GLDrawFunctor*) wvInstance->getFunctor(); 981a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount if (functor) { 982a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount WebCore::IntRect viewRect = jrect_to_webrect(env, jrect); 983908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase functor->updateRect(viewRect); 984b5ec18911e853fdea87aad8900400c01e6493f5fRomain Guy 985a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount SkRect visibleRect = jrectf_to_rect(env, jvisiblerect); 986a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount wvInstance->setVisibleRect(visibleRect); 987a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount 988a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount WebCore::IntRect webViewRect = jrect_to_webrect(env, jviewrect); 989b5ec18911e853fdea87aad8900400c01e6493f5fRomain Guy functor->updateViewRect(webViewRect); 990d0a011b30b97598ee74f329aaa217a6ab733f1f1Teng-Hui Zhu 991d0a011b30b97598ee74f329aaa217a6ab733f1f1Teng-Hui Zhu functor->updateScale(scale); 992908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase } 993908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase } 994908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase} 995908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase 996223589b3e07f05960e8da16a5addce6fbfbfa9dfJohn Reckstatic bool nativeEvaluateLayersAnimations(JNIEnv *env, jobject obj, jint nativeView) 997797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard{ 998c6151a04881a67d08d91237891fbc7cb82927219John Reck // only call in software rendering, initialize and evaluate animations 999797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#if USE(ACCELERATED_COMPOSITING) 1000223589b3e07f05960e8da16a5addce6fbfbfa9dfJohn Reck LayerAndroid* root = ((WebView*)nativeView)->compositeRoot(); 1001c6151a04881a67d08d91237891fbc7cb82927219John Reck if (root) { 1002c6151a04881a67d08d91237891fbc7cb82927219John Reck root->initAnimations(); 100387962ce00229855c098ba12cee8d5c015a835289Cary Clark return root->evaluateAnimations(); 1004c6151a04881a67d08d91237891fbc7cb82927219John Reck } 1005797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#endif 1006797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard return false; 1007797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard} 1008797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard 1009246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craikstatic bool nativeSetBaseLayer(JNIEnv *env, jobject obj, jint nativeView, jint layer, jobject inval, 1010246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik jboolean showVisualIndicator, 1011246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik jboolean isPictureAfterFirstLayout) 1012f4cefb9302ee62602c19cdfbdb6cc1fbdf540953Cary Clark{ 10136d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba BaseLayerAndroid* layerImpl = reinterpret_cast<BaseLayerAndroid*>(layer); 101467e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard SkRegion invalRegion; 101567e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard if (inval) 101667e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard invalRegion = *GraphicsJNI::getNativeRegion(env, inval); 1017246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik return ((WebView*)nativeView)->setBaseLayer(layerImpl, invalRegion, showVisualIndicator, 1018246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik isPictureAfterFirstLayout); 10196d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba} 10206d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba 10214212fae38ffee2bbb657dd19e4ae8b7c735f4953John Reckstatic BaseLayerAndroid* nativeGetBaseLayer(JNIEnv *env, jobject obj) 10224212fae38ffee2bbb657dd19e4ae8b7c735f4953John Reck{ 10234212fae38ffee2bbb657dd19e4ae8b7c735f4953John Reck return GET_NATIVE_VIEW(env, obj)->getBaseLayer(); 10244212fae38ffee2bbb657dd19e4ae8b7c735f4953John Reck} 10254212fae38ffee2bbb657dd19e4ae8b7c735f4953John Reck 10266d43b9ceb777071c088fe12ee94af80e34816bcfGrace Klobastatic void nativeReplaceBaseContent(JNIEnv *env, jobject obj, jint content) 10276d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba{ 10286d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba PictureSet* set = reinterpret_cast<PictureSet*>(content); 10296d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba GET_NATIVE_VIEW(env, obj)->replaceBaseContent(set); 10306d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba} 10316d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba 10326d43b9ceb777071c088fe12ee94af80e34816bcfGrace Klobastatic void nativeCopyBaseContentToPicture(JNIEnv *env, jobject obj, jobject pict) 10336d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba{ 10346d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba SkPicture* picture = GraphicsJNI::getNativePicture(env, pict); 10356d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba GET_NATIVE_VIEW(env, obj)->copyBaseContentToPicture(picture); 10366d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba} 10376d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba 10386d43b9ceb777071c088fe12ee94af80e34816bcfGrace Klobastatic bool nativeHasContent(JNIEnv *env, jobject obj) 10396d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba{ 10406d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba return GET_NATIVE_VIEW(env, obj)->hasContent(); 1041f4cefb9302ee62602c19cdfbdb6cc1fbdf540953Cary Clark} 1042f4cefb9302ee62602c19cdfbdb6cc1fbdf540953Cary Clark 10438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic jobject nativeImageURI(JNIEnv *env, jobject obj, jint x, jint y) 10448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10457aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 10468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 104849e856e5d5e86855d12326294cb6b57235a2e9a1Cary Clarkstatic jint nativeFocusCandidateFramePointer(JNIEnv *env, jobject obj) 104949e856e5d5e86855d12326294cb6b57235a2e9a1Cary Clark{ 10507aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 105149e856e5d5e86855d12326294cb6b57235a2e9a1Cary Clark} 105249e856e5d5e86855d12326294cb6b57235a2e9a1Cary Clark 10537c77e50c5cdcaa7074e8db703224450fef254107George Mountstatic bool nativeFocusCandidateIsEditableText(JNIEnv* env, jobject obj, 10547c77e50c5cdcaa7074e8db703224450fef254107George Mount jint nativeClass) 10557c77e50c5cdcaa7074e8db703224450fef254107George Mount{ 10567aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 10577c77e50c5cdcaa7074e8db703224450fef254107George Mount} 10587c77e50c5cdcaa7074e8db703224450fef254107George Mount 1059bc0656f7505db89baea5835febb882daf32f32a6Leon Scrogginsstatic bool nativeFocusCandidateIsPassword(JNIEnv *env, jobject obj) 106046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 10617aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 106246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 106346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 1064bc0656f7505db89baea5835febb882daf32f32a6Leon Scrogginsstatic bool nativeFocusCandidateIsRtlText(JNIEnv *env, jobject obj) 106546dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 10667aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 106746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 106846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 1069bc0656f7505db89baea5835febb882daf32f32a6Leon Scrogginsstatic bool nativeFocusCandidateIsTextInput(JNIEnv *env, jobject obj) 107046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 10717aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 107246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 107346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 1074bc0656f7505db89baea5835febb882daf32f32a6Leon Scrogginsstatic jint nativeFocusCandidateMaxLength(JNIEnv *env, jobject obj) 107546dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 10767aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 107746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 107846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 1079ba87d726a9663788c0c5eae2ddb6c3ee24c4a740Leon Scrogginsstatic jint nativeFocusCandidateIsAutoComplete(JNIEnv *env, jobject obj) 1080ba87d726a9663788c0c5eae2ddb6c3ee24c4a740Leon Scroggins{ 10817aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 1082ba87d726a9663788c0c5eae2ddb6c3ee24c4a740Leon Scroggins} 1083ba87d726a9663788c0c5eae2ddb6c3ee24c4a740Leon Scroggins 1084bc0656f7505db89baea5835febb882daf32f32a6Leon Scrogginsstatic jobject nativeFocusCandidateName(JNIEnv *env, jobject obj) 108546dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 10867aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 108746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 108846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 1089bc0656f7505db89baea5835febb882daf32f32a6Leon Scrogginsstatic jobject nativeFocusCandidateNodeBounds(JNIEnv *env, jobject obj) 109046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 10917aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 1092390c2b5702d131f0875199fdca1c3ba5010d7659Leon Scroggins} 1093390c2b5702d131f0875199fdca1c3ba5010d7659Leon Scroggins 1094390c2b5702d131f0875199fdca1c3ba5010d7659Leon Scrogginsstatic jobject nativeFocusCandidatePaddingRect(JNIEnv *env, jobject obj) 1095390c2b5702d131f0875199fdca1c3ba5010d7659Leon Scroggins{ 10967aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 109746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 109846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 1099bc0656f7505db89baea5835febb882daf32f32a6Leon Scrogginsstatic jint nativeFocusCandidatePointer(JNIEnv *env, jobject obj) 110046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 11017aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 110246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 110346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 110485e3844824444f304a15e57f62d2e5670fb3bf47Michael Kolbstatic jint nativeFocusCandidateIsSpellcheck(JNIEnv *env, jobject obj) 110585e3844824444f304a15e57f62d2e5670fb3bf47Michael Kolb{ 11067aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 110785e3844824444f304a15e57f62d2e5670fb3bf47Michael Kolb} 110885e3844824444f304a15e57f62d2e5670fb3bf47Michael Kolb 1109bc0656f7505db89baea5835febb882daf32f32a6Leon Scrogginsstatic jobject nativeFocusCandidateText(JNIEnv *env, jobject obj) 111046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 11117aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 111246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 111346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 1114d8fcffded6ee266e903e4e191ed95a07007fac74Leon Scrogginsstatic int nativeFocusCandidateLineHeight(JNIEnv *env, jobject obj) 1115d8fcffded6ee266e903e4e191ed95a07007fac74Leon Scroggins{ 11167aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 1117d8fcffded6ee266e903e4e191ed95a07007fac74Leon Scroggins} 1118d8fcffded6ee266e903e4e191ed95a07007fac74Leon Scroggins 11193a3b28707d2d6a06afe9f3137e9bedc07246d600Leon Scrogginsstatic jfloat nativeFocusCandidateTextSize(JNIEnv *env, jobject obj) 112046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 11217aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0.f; 112246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 112346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 112474757b62fce144f27c25cc7744df82cd7411b2dcLeon Scrogginsstatic int nativeFocusCandidateType(JNIEnv *env, jobject obj) 112574757b62fce144f27c25cc7744df82cd7411b2dcLeon Scroggins{ 11267aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 112774757b62fce144f27c25cc7744df82cd7411b2dcLeon Scroggins} 112874757b62fce144f27c25cc7744df82cd7411b2dcLeon Scroggins 1129d635c32628b7d9760bf786613cbe3eddf98a1272Michael Kolbstatic int nativeFocusCandidateLayerId(JNIEnv *env, jobject obj) 1130d635c32628b7d9760bf786613cbe3eddf98a1272Michael Kolb{ 11317aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 1132d635c32628b7d9760bf786613cbe3eddf98a1272Michael Kolb} 1133d635c32628b7d9760bf786613cbe3eddf98a1272Michael Kolb 1134c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenbergerstatic bool nativeFocusIsPlugin(JNIEnv *env, jobject obj) 1135c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger{ 11367aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 1137c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger} 1138c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger 11398026280044128436d8e89736519a0b32b6540201Cary Clarkstatic jobject nativeFocusNodeBounds(JNIEnv *env, jobject obj) 11408026280044128436d8e89736519a0b32b6540201Cary Clark{ 11417aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 11428026280044128436d8e89736519a0b32b6540201Cary Clark} 11438026280044128436d8e89736519a0b32b6540201Cary Clark 1144539427bc7572dfd8b28579c67460186406dcb246Leon Scrogginsstatic jint nativeFocusNodePointer(JNIEnv *env, jobject obj) 1145539427bc7572dfd8b28579c67460186406dcb246Leon Scroggins{ 11467aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 1147539427bc7572dfd8b28579c67460186406dcb246Leon Scroggins} 1148539427bc7572dfd8b28579c67460186406dcb246Leon Scroggins 1149f4669cac3858848a9247e801b6106aeae6d406e8Cary Clarkstatic bool nativeCursorWantsKeyEvents(JNIEnv* env, jobject jwebview) { 11507aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 11518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1153c3fe941b7eb7da66bcea91b3513053d2ea60586fCary Clarkstatic void nativeHideCursor(JNIEnv *env, jobject obj) 1154c3fe941b7eb7da66bcea91b3513053d2ea60586fCary Clark{ 1155c3fe941b7eb7da66bcea91b3513053d2ea60586fCary Clark} 1156c3fe941b7eb7da66bcea91b3513053d2ea60586fCary Clark 11578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void nativeSelectBestAt(JNIEnv *env, jobject obj, jobject jrect) 11588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 11598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11611b7a61602d4e5a47094a3eaf8d1d9d12fb78402dSvetoslav Ganovstatic void nativeSelectAt(JNIEnv *env, jobject obj, jint x, jint y) 11621b7a61602d4e5a47094a3eaf8d1d9d12fb78402dSvetoslav Ganov{ 11631b7a61602d4e5a47094a3eaf8d1d9d12fb78402dSvetoslav Ganov} 11641b7a61602d4e5a47094a3eaf8d1d9d12fb78402dSvetoslav Ganov 11659092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clarkstatic jobject nativeLayerBounds(JNIEnv* env, jobject obj, jint jlayer) 11669092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark{ 11679092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark SkRect r; 11689092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark#if USE(ACCELERATED_COMPOSITING) 11699092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark LayerAndroid* layer = (LayerAndroid*) jlayer; 11709092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark r = layer->bounds(); 11719092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark#else 11729092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark r.setEmpty(); 11739092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark#endif 11749092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark SkIRect irect; 11759092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark r.round(&irect); 11769092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark jclass rectClass = env->FindClass("android/graphics/Rect"); 11779092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark jmethodID init = env->GetMethodID(rectClass, "<init>", "(IIII)V"); 11789092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark jobject rect = env->NewObject(rectClass, init, irect.fLeft, irect.fTop, 11799092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark irect.fRight, irect.fBottom); 11809092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark env->DeleteLocalRef(rectClass); 11819092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark return rect; 11829092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark} 11839092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark 1184cc4e3c422964c7d999e8f340057f303140d845ddCary Clarkstatic jobject nativeSubtractLayers(JNIEnv* env, jobject obj, jobject jrect) 1185cc4e3c422964c7d999e8f340057f303140d845ddCary Clark{ 1186cc4e3c422964c7d999e8f340057f303140d845ddCary Clark SkIRect irect = jrect_to_webrect(env, jrect); 1187cc4e3c422964c7d999e8f340057f303140d845ddCary Clark#if USE(ACCELERATED_COMPOSITING) 11886d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba LayerAndroid* root = GET_NATIVE_VIEW(env, obj)->compositeRoot(); 1189cc4e3c422964c7d999e8f340057f303140d845ddCary Clark if (root) { 1190cc4e3c422964c7d999e8f340057f303140d845ddCary Clark SkRect rect; 1191cc4e3c422964c7d999e8f340057f303140d845ddCary Clark rect.set(irect); 1192cc4e3c422964c7d999e8f340057f303140d845ddCary Clark rect = root->subtractLayers(rect); 1193cc4e3c422964c7d999e8f340057f303140d845ddCary Clark rect.round(&irect); 1194cc4e3c422964c7d999e8f340057f303140d845ddCary Clark } 1195cc4e3c422964c7d999e8f340057f303140d845ddCary Clark#endif 1196cc4e3c422964c7d999e8f340057f303140d845ddCary Clark jclass rectClass = env->FindClass("android/graphics/Rect"); 1197cc4e3c422964c7d999e8f340057f303140d845ddCary Clark jmethodID init = env->GetMethodID(rectClass, "<init>", "(IIII)V"); 1198bf3f67c4fcfd68df256e5c001c67969997a63e28Steve Block jobject rect = env->NewObject(rectClass, init, irect.fLeft, irect.fTop, 1199cc4e3c422964c7d999e8f340057f303140d845ddCary Clark irect.fRight, irect.fBottom); 1200bf3f67c4fcfd68df256e5c001c67969997a63e28Steve Block env->DeleteLocalRef(rectClass); 1201bf3f67c4fcfd68df256e5c001c67969997a63e28Steve Block return rect; 1202cc4e3c422964c7d999e8f340057f303140d845ddCary Clark} 1203cc4e3c422964c7d999e8f340057f303140d845ddCary Clark 120446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkstatic jint nativeTextGeneration(JNIEnv *env, jobject obj) 120546dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 12067aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 120746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 120846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 1209d4924af12855cd19162ba1442a6055664c98ca32Cary Clarkstatic bool nativePointInNavCache(JNIEnv *env, jobject obj, 1210d4924af12855cd19162ba1442a6055664c98ca32Cary Clark int x, int y, int slop) 1211d4924af12855cd19162ba1442a6055664c98ca32Cary Clark{ 12127aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 1213d4924af12855cd19162ba1442a6055664c98ca32Cary Clark} 1214d4924af12855cd19162ba1442a6055664c98ca32Cary Clark 12158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic bool nativeMotionUp(JNIEnv *env, jobject obj, 1216d48434fc633d173b549b97b1c614072adc9648a8Cary Clark int x, int y, int slop) 12178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12187aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 12198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 122146dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkstatic bool nativeHasCursorNode(JNIEnv *env, jobject obj) 12228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12237aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 12248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 122646dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkstatic bool nativeHasFocusNode(JNIEnv *env, jobject obj) 12278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12287aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 12298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1231bc0656f7505db89baea5835febb882daf32f32a6Leon Scrogginsstatic bool nativeMoveCursor(JNIEnv *env, jobject obj, 123246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark int key, int count, bool ignoreScroll) 12338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12347aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 12358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1237afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clarkstatic void nativeSetFindIsUp(JNIEnv *env, jobject obj, jboolean isUp) 12388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebView* view = GET_NATIVE_VIEW(env, obj); 12406dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(view, "view not set in %s", __FUNCTION__); 1241afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clark view->setFindIsUp(isUp); 1242afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clark} 1243afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clark 124432dffb883f56b18019afa7a01b2564b993b3fe8eCary Clarkstatic void nativeShowCursorTimed(JNIEnv *env, jobject obj) 12458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void nativeSetHeightCanMeasure(JNIEnv *env, jobject obj, bool measure) 12498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebView* view = GET_NATIVE_VIEW(env, obj); 12516dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(view, "view not set in nativeSetHeightCanMeasure"); 12528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project view->setHeightCanMeasure(measure); 12538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 125546dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkstatic jobject nativeGetCursorRingBounds(JNIEnv *env, jobject obj) 12568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12577aa185beae07b9034037a1b8325cb73c53ed4650John Reck return 0; 12588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void nativeUpdateCachedTextfield(JNIEnv *env, jobject obj, jstring updatedText, jint generation) 12618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1264fa768f11d82c34980cce020f442329299efb08caCary Clarkstatic jint nativeGetBlockLeftEdge(JNIEnv *env, jobject obj, jint x, jint y, 1265fa768f11d82c34980cce020f442329299efb08caCary Clark jfloat scale) 1266a50885e6d06f2cfdee3bf43b1fb367bca126c5dcGrace Kloba{ 12677aa185beae07b9034037a1b8325cb73c53ed4650John Reck return -1; 1268a50885e6d06f2cfdee3bf43b1fb367bca126c5dcGrace Kloba} 1269a50885e6d06f2cfdee3bf43b1fb367bca126c5dcGrace Kloba 12708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void nativeDestroy(JNIEnv *env, jobject obj) 12718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebView* view = GET_NATIVE_VIEW(env, obj); 1273a09e7cf49f43950a799f936bf42a9912d696547bSteve Block ALOGD("nativeDestroy view: %p", view); 12746dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(view, "view not set in nativeDestroy"); 12758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete view; 12768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12788360bc9c9facd690e42379610cbbb368d3d705efCary Clarkstatic void nativeStopGL(JNIEnv *env, jobject obj) 12798360bc9c9facd690e42379610cbbb368d3d705efCary Clark{ 12808360bc9c9facd690e42379610cbbb368d3d705efCary Clark GET_NATIVE_VIEW(env, obj)->stopGL(); 12818360bc9c9facd690e42379610cbbb368d3d705efCary Clark} 12828360bc9c9facd690e42379610cbbb368d3d705efCary Clark 12838480ea3097f295aeccf7c088a06cceea543238b7Leon Scrogginsstatic bool nativeMoveCursorToNextTextInput(JNIEnv *env, jobject obj) 1284e3635bdd4530eeff44657cb1423a0572482381ceLeon Scroggins{ 12857aa185beae07b9034037a1b8325cb73c53ed4650John Reck return false; 1286e3635bdd4530eeff44657cb1423a0572482381ceLeon Scroggins} 1287e3635bdd4530eeff44657cb1423a0572482381ceLeon Scroggins 128846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clarkstatic int nativeMoveGeneration(JNIEnv *env, jobject obj) 128946dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark{ 129036747fa778285f57f2f53c047028be83e9d8776dCary Clark WebView* view = GET_NATIVE_VIEW(env, obj); 129136747fa778285f57f2f53c047028be83e9d8776dCary Clark if (!view) 129236747fa778285f57f2f53c047028be83e9d8776dCary Clark return 0; 1293b6631b666120e63a9ceee4a77613cf962fa37b1fCary Clark return view->moveGeneration(); 129446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark} 129546dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark 12968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic jobject nativeGetSelection(JNIEnv *env, jobject obj) 12978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebView* view = GET_NATIVE_VIEW(env, obj); 12996dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(view, "view not set in %s", __FUNCTION__); 13005e5962825729a211e093fd615ddc9e5b0bec10bdCary Clark String selection = view->getSelection(); 130179b35ce109b9fdca7c7e3af24996c1a2a612f1a4Steve Block return wtfStringToJstring(env, selection); 13028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1304a3a38731f4eeb01d2a42965b6c875d957999969dChris Craikstatic void nativeDiscardAllTextures(JNIEnv *env, jobject obj) 1305a3a38731f4eeb01d2a42965b6c875d957999969dChris Craik{ 1306a3a38731f4eeb01d2a42965b6c875d957999969dChris Craik //discard all textures for debugging/test purposes, but not gl backing memory 1307a3a38731f4eeb01d2a42965b6c875d957999969dChris Craik bool allTextures = true, deleteGLTextures = false; 1308a3a38731f4eeb01d2a42965b6c875d957999969dChris Craik TilesManager::instance()->discardTextures(allTextures, deleteGLTextures); 1309af33356e96e56310c66b47b6db913e1a61981ca3Chris Craik} 1310af33356e96e56310c66b47b6db913e1a61981ca3Chris Craik 13115dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craikstatic void nativeTileProfilingStart(JNIEnv *env, jobject obj) 13125dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik{ 1313687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik TilesManager::instance()->getProfiler()->start(); 13145dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik} 13155dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik 13165dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craikstatic float nativeTileProfilingStop(JNIEnv *env, jobject obj) 13175dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik{ 1318687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik return TilesManager::instance()->getProfiler()->stop(); 13195dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik} 13205dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik 13215dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craikstatic void nativeTileProfilingClear(JNIEnv *env, jobject obj) 13225dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik{ 1323687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik TilesManager::instance()->getProfiler()->clear(); 13245dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik} 13255dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik 13265dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craikstatic int nativeTileProfilingNumFrames(JNIEnv *env, jobject obj) 13275dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik{ 1328687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik return TilesManager::instance()->getProfiler()->numFrames(); 13295dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik} 13305dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik 13315dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craikstatic int nativeTileProfilingNumTilesInFrame(JNIEnv *env, jobject obj, int frame) 13325dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik{ 1333687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik return TilesManager::instance()->getProfiler()->numTilesInFrame(frame); 13345dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik} 13355dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik 1336687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craikstatic int nativeTileProfilingGetInt(JNIEnv *env, jobject obj, int frame, int tile, jstring jkey) 13375dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik{ 1338687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik WTF::String key = jstringToWtfString(env, jkey); 1339687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik TileProfileRecord* record = TilesManager::instance()->getProfiler()->getTile(frame, tile); 1340687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik 1341687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik if (key == "left") 1342687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik return record->left; 1343687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik if (key == "top") 1344687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik return record->top; 1345687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik if (key == "right") 1346687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik return record->right; 1347687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik if (key == "bottom") 1348687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik return record->bottom; 1349687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik if (key == "level") 1350687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik return record->level; 1351687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik if (key == "isReady") 1352687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik return record->isReady ? 1 : 0; 1353687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik return -1; 13545dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik} 13555dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik 1356687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craikstatic float nativeTileProfilingGetFloat(JNIEnv *env, jobject obj, int frame, int tile, jstring jkey) 13575dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik{ 1358687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik TileProfileRecord* record = TilesManager::instance()->getProfiler()->getTile(frame, tile); 1359687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik return record->scale; 13605dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik} 13615dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik 13628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef ANDROID_DUMP_DISPLAY_TREE 13638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void dumpToFile(const char text[], void* file) { 13648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fwrite(text, 1, strlen(text), reinterpret_cast<FILE*>(file)); 13658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project fwrite("\n", 1, 1, reinterpret_cast<FILE*>(file)); 13668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 13688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1369f1ab740d0427ebb5c42b8b72fa3102b037a109f0Nicolas Roardstatic bool nativeSetProperty(JNIEnv *env, jobject obj, jstring jkey, jstring jvalue) 1370d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck{ 1371d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck WTF::String key = jstringToWtfString(env, jkey); 1372d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck WTF::String value = jstringToWtfString(env, jvalue); 1373ef238925ea0ba6305e4540aff5c6953503993f3bNicolas Roard if (key == "inverted") { 1374bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik bool shouldInvert = (value == "true"); 1375bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik TilesManager::instance()->setInvertedScreen(shouldInvert); 1376f1ab740d0427ebb5c42b8b72fa3102b037a109f0Nicolas Roard return true; 1377d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck } 13788852b0905b1a50ca045eb4bd19b2589aad663b5cTeng-Hui Zhu else if (key == "inverted_contrast") { 1379bbb9caa2571e2c0192861a336c358412e9e7f0c7Nicolas Roard float contrast = value.toFloat(); 1380bbb9caa2571e2c0192861a336c358412e9e7f0c7Nicolas Roard TilesManager::instance()->setInvertedScreenContrast(contrast); 1381f1ab740d0427ebb5c42b8b72fa3102b037a109f0Nicolas Roard return true; 1382bbb9caa2571e2c0192861a336c358412e9e7f0c7Nicolas Roard } 13838852b0905b1a50ca045eb4bd19b2589aad663b5cTeng-Hui Zhu else if (key == "enable_cpu_upload_path") { 13840960fe0e966317c4728542e9cfaa259523665900Teng-Hui Zhu TilesManager::instance()->transferQueue()->setTextureUploadType( 13850960fe0e966317c4728542e9cfaa259523665900Teng-Hui Zhu value == "true" ? CpuUpload : GpuUpload); 13860960fe0e966317c4728542e9cfaa259523665900Teng-Hui Zhu return true; 13870960fe0e966317c4728542e9cfaa259523665900Teng-Hui Zhu } 13888852b0905b1a50ca045eb4bd19b2589aad663b5cTeng-Hui Zhu else if (key == "use_minimal_memory") { 13898852b0905b1a50ca045eb4bd19b2589aad663b5cTeng-Hui Zhu TilesManager::instance()->setUseMinimalMemory(value == "true"); 13908852b0905b1a50ca045eb4bd19b2589aad663b5cTeng-Hui Zhu return true; 13918852b0905b1a50ca045eb4bd19b2589aad663b5cTeng-Hui Zhu } 1392bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik else if (key == "use_double_buffering") { 1393bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik TilesManager::instance()->setUseDoubleBuffering(value == "true"); 1394bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik return true; 1395bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik } 1396bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik else if (key == "tree_updates") { 1397d8be9016b7fda67a91b4ee17b3b2e7ba692ee553Chris Craik TilesManager::instance()->clearContentUpdates(); 1398bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik return true; 1399bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik } 1400f1ab740d0427ebb5c42b8b72fa3102b037a109f0Nicolas Roard return false; 1401d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck} 1402d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck 1403bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craikstatic jstring nativeGetProperty(JNIEnv *env, jobject obj, jstring jkey) 1404d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck{ 1405bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik WTF::String key = jstringToWtfString(env, jkey); 1406bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik if (key == "tree_updates") { 1407d8be9016b7fda67a91b4ee17b3b2e7ba692ee553Chris Craik int updates = TilesManager::instance()->getContentUpdates(); 1408bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik WTF::String wtfUpdates = WTF::String::number(updates); 1409bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik return wtfStringToJstring(env, wtfUpdates); 1410bac79a8ecce7b3aaf3bc4964957c9c59f163de38Chris Craik } 1411d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck return 0; 1412d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck} 1413d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck 141452f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reckstatic void nativeOnTrimMemory(JNIEnv *env, jobject obj, jint level) 141552f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck{ 14162986d27084d881dbe6f9c3ae35430a5978b7e659Chris Craik if (TilesManager::hardwareAccelerationEnabled()) { 1417e1dfe84b38ed080c7bb7ac00fd9e3c6c590a147dTeng-Hui Zhu // When we got TRIM_MEMORY_MODERATE or TRIM_MEMORY_COMPLETE, we should 1418e1dfe84b38ed080c7bb7ac00fd9e3c6c590a147dTeng-Hui Zhu // make sure the transfer queue is empty and then abandon the Surface 1419e1dfe84b38ed080c7bb7ac00fd9e3c6c590a147dTeng-Hui Zhu // Texture to avoid ANR b/c framework may destroy the EGL context. 1420e1dfe84b38ed080c7bb7ac00fd9e3c6c590a147dTeng-Hui Zhu // Refer to WindowManagerImpl.java for conditions we followed. 142100144be011338276839a08a66ae79b14629b268bTeng-Hui Zhu TilesManager* tilesManager = TilesManager::instance(); 1422e1dfe84b38ed080c7bb7ac00fd9e3c6c590a147dTeng-Hui Zhu if (level >= TRIM_MEMORY_MODERATE 142300144be011338276839a08a66ae79b14629b268bTeng-Hui Zhu && !tilesManager->highEndGfx()) { 14240f1c02efd8cc889db10575dff2749d103ceeaf87Teng-Hui Zhu ALOGD("OnTrimMemory with EGL Context %p", eglGetCurrentContext()); 142500144be011338276839a08a66ae79b14629b268bTeng-Hui Zhu tilesManager->transferQueue()->emptyQueue(); 142600144be011338276839a08a66ae79b14629b268bTeng-Hui Zhu tilesManager->shader()->cleanupGLResources(); 142700144be011338276839a08a66ae79b14629b268bTeng-Hui Zhu tilesManager->videoLayerManager()->cleanupGLResources(); 1428886eb87d34570b706a0f17fa944d98870ed6a2afTeng-Hui Zhu } 1429e1dfe84b38ed080c7bb7ac00fd9e3c6c590a147dTeng-Hui Zhu 1430a3a38731f4eeb01d2a42965b6c875d957999969dChris Craik bool freeAllTextures = (level > TRIM_MEMORY_UI_HIDDEN), glTextures = true; 143100144be011338276839a08a66ae79b14629b268bTeng-Hui Zhu tilesManager->discardTextures(freeAllTextures, glTextures); 14322986d27084d881dbe6f9c3ae35430a5978b7e659Chris Craik } 143352f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck} 143452f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck 14358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void nativeDumpDisplayTree(JNIEnv* env, jobject jwebview, jstring jurl) 14368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef ANDROID_DUMP_DISPLAY_TREE 14388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebView* view = GET_NATIVE_VIEW(env, jwebview); 14396dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(view, "view not set in %s", __FUNCTION__); 14408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1441bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed if (view && view->getWebViewCore()) { 1442bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed FILE* file = fopen(DISPLAY_TREE_LOG_FILE, "w"); 1443bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed if (file) { 1444bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed SkFormatDumper dumper(dumpToFile, file); 1445bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed // dump the URL 1446bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed if (jurl) { 1447bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed const char* str = env->GetStringUTFChars(jurl, 0); 1448bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed SkDebugf("Dumping %s to %s\n", str, DISPLAY_TREE_LOG_FILE); 1449bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed dumpToFile(str, file); 1450bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed env->ReleaseStringUTFChars(jurl, str); 14518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1452bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed // now dump the display tree 1453bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed SkDumpCanvas canvas(&dumper); 1454bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed // this will playback the picture into the canvas, which will 1455bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed // spew its contents to the dumper 1456dea0c131566f424923425970fe5621305d136e5aJohn Reck view->draw(&canvas, 0, WebView::DrawExtrasNone, false); 1457bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed // we're done with the file now 1458bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed fwrite("\n", 1, 1, file); 1459bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed fclose(file); 14608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1461859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard#if USE(ACCELERATED_COMPOSITING) 14626d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba const LayerAndroid* rootLayer = view->compositeRoot(); 1463f4cefb9302ee62602c19cdfbdb6cc1fbdf540953Cary Clark if (rootLayer) { 1464859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard FILE* file = fopen(LAYERS_TREE_LOG_FILE,"w"); 1465859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard if (file) { 1466859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard rootLayer->dumpLayers(file, 0); 1467859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard fclose(file); 1468859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard } 1469859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard } 1470859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard#endif 14718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 14728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 14738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1475f81c672a4f5c06621000a6df0984cde689397d94Cary Clarkstatic int nativeScrollableLayer(JNIEnv* env, jobject jwebview, jint x, jint y, 1476f81c672a4f5c06621000a6df0984cde689397d94Cary Clark jobject rect, jobject bounds) 1477a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott{ 1478a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott WebView* view = GET_NATIVE_VIEW(env, jwebview); 14796dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(view, "view not set in %s", __FUNCTION__); 1480f81c672a4f5c06621000a6df0984cde689397d94Cary Clark SkIRect nativeRect, nativeBounds; 1481f81c672a4f5c06621000a6df0984cde689397d94Cary Clark int id = view->scrollableLayer(x, y, &nativeRect, &nativeBounds); 1482f0425628b4e83bf9e1c8275d809d433baeaf768cLeon Scroggins if (rect) 1483f0425628b4e83bf9e1c8275d809d433baeaf768cLeon Scroggins GraphicsJNI::irect_to_jrect(nativeRect, env, rect); 1484f0425628b4e83bf9e1c8275d809d433baeaf768cLeon Scroggins if (bounds) 1485f0425628b4e83bf9e1c8275d809d433baeaf768cLeon Scroggins GraphicsJNI::irect_to_jrect(nativeBounds, env, bounds); 148622e283368b8dfd19cf2caa342a5c921397f0dc41Patrick Scott return id; 1487a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott} 1488a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott 148922e283368b8dfd19cf2caa342a5c921397f0dc41Patrick Scottstatic bool nativeScrollLayer(JNIEnv* env, jobject obj, jint layerId, jint x, 149022e283368b8dfd19cf2caa342a5c921397f0dc41Patrick Scott jint y) 1491a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott{ 1492a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL) 1493a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott WebView* view = GET_NATIVE_VIEW(env, obj); 149470adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craik view->scrollLayer(layerId, x, y); 149570adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craik 149670adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craik //TODO: the below only needed for the SW rendering path 14978598c9fb9f861f25ab14efde9efb19cb91d7df1cPatrick Scott LayerAndroid* root = view->compositeRoot(); 14988598c9fb9f861f25ab14efde9efb19cb91d7df1cPatrick Scott if (!root) 14998598c9fb9f861f25ab14efde9efb19cb91d7df1cPatrick Scott return false; 15008598c9fb9f861f25ab14efde9efb19cb91d7df1cPatrick Scott LayerAndroid* layer = root->findById(layerId); 1501fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott if (!layer || !layer->contentIsScrollable()) 1502a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott return false; 1503fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott return static_cast<ScrollableLayerAndroid*>(layer)->scrollTo(x, y); 1504a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott#endif 1505a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott return false; 1506a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott} 1507a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott 1508f51a51f6ea307f4311a04aa865a42b233269540bChris Craikstatic void nativeSetIsScrolling(JNIEnv* env, jobject jwebview, jboolean isScrolling) 1509f51a51f6ea307f4311a04aa865a42b233269540bChris Craik{ 1510f51a51f6ea307f4311a04aa865a42b233269540bChris Craik WebView* view = GET_NATIVE_VIEW(env, jwebview); 15116dd76b804786ec760bb04b137a6bf017064226dcSteve Block ALOG_ASSERT(view, "view not set in %s", __FUNCTION__); 1512f51a51f6ea307f4311a04aa865a42b233269540bChris Craik view->setIsScrolling(isScrolling); 1513f51a51f6ea307f4311a04aa865a42b233269540bChris Craik} 1514f51a51f6ea307f4311a04aa865a42b233269540bChris Craik 1515c7e578330aece3c556ef205365c24676687223e2Derek Sollenbergerstatic void nativeUseHardwareAccelSkia(JNIEnv*, jobject, jboolean enabled) 1516c7e578330aece3c556ef205365c24676687223e2Derek Sollenberger{ 1517c7e578330aece3c556ef205365c24676687223e2Derek Sollenberger BaseRenderer::setCurrentRendererType(enabled ? BaseRenderer::Ganesh : BaseRenderer::Raster); 1518c7e578330aece3c556ef205365c24676687223e2Derek Sollenberger} 1519c7e578330aece3c556ef205365c24676687223e2Derek Sollenberger 15205e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reckstatic int nativeGetBackgroundColor(JNIEnv* env, jobject obj) 15215e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck{ 15225e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck WebView* view = GET_NATIVE_VIEW(env, obj); 15235e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck BaseLayerAndroid* baseLayer = view->getBaseLayer(); 15245e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck if (baseLayer) { 15255e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck WebCore::Color color = baseLayer->getBackgroundColor(); 15265e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck if (color.isValid()) 15275e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck return SkColorSetARGB(color.alpha(), color.red(), 15285e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck color.green(), color.blue()); 15295e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck } 15305e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck return SK_ColorWHITE; 15315e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck} 15325e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck 1533d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reckstatic void nativeSetPauseDrawing(JNIEnv *env, jobject obj, jint nativeView, 1534d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck jboolean pause) 1535d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck{ 1536d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck ((WebView*)nativeView)->m_isDrawingPaused = pause; 1537d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck} 1538d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck 1539a263300f202a4456570ae6e29e589b5e85309a7bJohn Reckstatic bool nativeDisableNavcache(JNIEnv *env, jobject obj) 1540a263300f202a4456570ae6e29e589b5e85309a7bJohn Reck{ 1541a263300f202a4456570ae6e29e589b5e85309a7bJohn Reck return true; 1542a263300f202a4456570ae6e29e589b5e85309a7bJohn Reck} 1543a263300f202a4456570ae6e29e589b5e85309a7bJohn Reck 1544dea0c131566f424923425970fe5621305d136e5aJohn Reckstatic void nativeSetTextSelection(JNIEnv *env, jobject obj, jint nativeView, 1545dea0c131566f424923425970fe5621305d136e5aJohn Reck jint selectionPtr) 1546dea0c131566f424923425970fe5621305d136e5aJohn Reck{ 1547dea0c131566f424923425970fe5621305d136e5aJohn Reck SelectText* selection = reinterpret_cast<SelectText*>(selectionPtr); 1548dea0c131566f424923425970fe5621305d136e5aJohn Reck reinterpret_cast<WebView*>(nativeView)->setTextSelection(selection); 1549dea0c131566f424923425970fe5621305d136e5aJohn Reck} 1550dea0c131566f424923425970fe5621305d136e5aJohn Reck 1551dea0c131566f424923425970fe5621305d136e5aJohn Reckstatic jint nativeGetHandleLayerId(JNIEnv *env, jobject obj, jint nativeView, 1552dea0c131566f424923425970fe5621305d136e5aJohn Reck jint handleIndex, jobject cursorRect) 1553dea0c131566f424923425970fe5621305d136e5aJohn Reck{ 1554dea0c131566f424923425970fe5621305d136e5aJohn Reck WebView* webview = reinterpret_cast<WebView*>(nativeView); 1555dea0c131566f424923425970fe5621305d136e5aJohn Reck SkIRect nativeRect; 1556dea0c131566f424923425970fe5621305d136e5aJohn Reck int layerId = webview->getHandleLayerId((SelectText::HandleId) handleIndex, nativeRect); 1557dea0c131566f424923425970fe5621305d136e5aJohn Reck if (cursorRect) 1558dea0c131566f424923425970fe5621305d136e5aJohn Reck GraphicsJNI::irect_to_jrect(nativeRect, env, cursorRect); 1559dea0c131566f424923425970fe5621305d136e5aJohn Reck return layerId; 1560dea0c131566f424923425970fe5621305d136e5aJohn Reck} 1561dea0c131566f424923425970fe5621305d136e5aJohn Reck 1562dea0c131566f424923425970fe5621305d136e5aJohn Reckstatic jboolean nativeIsBaseFirst(JNIEnv *env, jobject obj, jint nativeView) 1563dea0c131566f424923425970fe5621305d136e5aJohn Reck{ 1564dea0c131566f424923425970fe5621305d136e5aJohn Reck WebView* webview = reinterpret_cast<WebView*>(nativeView); 1565dea0c131566f424923425970fe5621305d136e5aJohn Reck SelectText* select = static_cast<SelectText*>( 1566dea0c131566f424923425970fe5621305d136e5aJohn Reck webview->getDrawExtra(WebView::DrawExtrasSelection)); 1567dea0c131566f424923425970fe5621305d136e5aJohn Reck return select ? select->isBaseFirst() : false; 1568dea0c131566f424923425970fe5621305d136e5aJohn Reck} 1569dea0c131566f424923425970fe5621305d136e5aJohn Reck 15708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 15718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * JNI registration 15728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 15738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic JNINativeMethod gJavaWebViewMethods[] = { 1574d4924af12855cd19162ba1442a6055664c98ca32Cary Clark { "nativeCacheHitFramePointer", "()I", 1575d4924af12855cd19162ba1442a6055664c98ca32Cary Clark (void*) nativeCacheHitFramePointer }, 1576b57c3a124715a89ac026e86f4fd3890529525d11Cary Clark { "nativeCacheHitIsPlugin", "()Z", 1577b57c3a124715a89ac026e86f4fd3890529525d11Cary Clark (void*) nativeCacheHitIsPlugin }, 1578d4924af12855cd19162ba1442a6055664c98ca32Cary Clark { "nativeCacheHitNodeBounds", "()Landroid/graphics/Rect;", 1579d4924af12855cd19162ba1442a6055664c98ca32Cary Clark (void*) nativeCacheHitNodeBounds }, 1580d4924af12855cd19162ba1442a6055664c98ca32Cary Clark { "nativeCacheHitNodePointer", "()I", 1581d4924af12855cd19162ba1442a6055664c98ca32Cary Clark (void*) nativeCacheHitNodePointer }, 1582c3fe941b7eb7da66bcea91b3513053d2ea60586fCary Clark { "nativeClearCursor", "()V", 1583bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins (void*) nativeClearCursor }, 158455b4bdbd661ac94fd05ab40de08250bf242d5346John Reck { "nativeCreate", "(ILjava/lang/String;Z)V", 15858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (void*) nativeCreate }, 158646dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeCursorFramePointer", "()I", 158746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeCursorFramePointer }, 15881cc2f5523913bd14a01c0c85710dcd6f0d7b5bb8Leon Scroggins { "nativePageShouldHandleShiftAndArrows", "()Z", 15891cc2f5523913bd14a01c0c85710dcd6f0d7b5bb8Leon Scroggins (void*) nativePageShouldHandleShiftAndArrows }, 159046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeCursorNodeBounds", "()Landroid/graphics/Rect;", 159146dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeCursorNodeBounds }, 159246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeCursorNodePointer", "()I", 159346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeCursorNodePointer }, 159446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeCursorIntersects", "(Landroid/graphics/Rect;)Z", 159546dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeCursorIntersects }, 159646dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeCursorIsAnchor", "()Z", 159746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeCursorIsAnchor }, 159846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeCursorIsTextInput", "()Z", 159946dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeCursorIsTextInput }, 160036747fa778285f57f2f53c047028be83e9d8776dCary Clark { "nativeCursorPosition", "()Landroid/graphics/Point;", 160136747fa778285f57f2f53c047028be83e9d8776dCary Clark (void*) nativeCursorPosition }, 160246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeCursorText", "()Ljava/lang/String;", 160346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeCursorText }, 1604f4669cac3858848a9247e801b6106aeae6d406e8Cary Clark { "nativeCursorWantsKeyEvents", "()Z", 1605f4669cac3858848a9247e801b6106aeae6d406e8Cary Clark (void*)nativeCursorWantsKeyEvents }, 16068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { "nativeDebugDump", "()V", 16078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (void*) nativeDebugDump }, 16088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { "nativeDestroy", "()V", 16098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (void*) nativeDestroy }, 1610a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount { "nativeDraw", "(Landroid/graphics/Canvas;Landroid/graphics/RectF;IIZ)I", 16116d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba (void*) nativeDraw }, 1612a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount { "nativeGetDrawGLFunction", "(ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/RectF;FI)I", 1613908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase (void*) nativeGetDrawGLFunction }, 1614d0a011b30b97598ee74f329aaa217a6ab733f1f1Teng-Hui Zhu { "nativeUpdateDrawGLFunction", "(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/RectF;F)V", 1615908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase (void*) nativeUpdateDrawGLFunction }, 161646dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeDumpDisplayTree", "(Ljava/lang/String;)V", 161746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeDumpDisplayTree }, 1618223589b3e07f05960e8da16a5addce6fbfbfa9dfJohn Reck { "nativeEvaluateLayersAnimations", "(I)Z", 161987962ce00229855c098ba12cee8d5c015a835289Cary Clark (void*) nativeEvaluateLayersAnimations }, 162049e856e5d5e86855d12326294cb6b57235a2e9a1Cary Clark { "nativeFocusCandidateFramePointer", "()I", 162149e856e5d5e86855d12326294cb6b57235a2e9a1Cary Clark (void*) nativeFocusCandidateFramePointer }, 16222194b17e89b2ad4c0624f7612e417db6d69150adLeon Scroggins { "nativeFocusCandidateHasNextTextfield", "()Z", 16232194b17e89b2ad4c0624f7612e417db6d69150adLeon Scroggins (void*) focusCandidateHasNextTextfield }, 1624bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins { "nativeFocusCandidateIsPassword", "()Z", 1625bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins (void*) nativeFocusCandidateIsPassword }, 1626bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins { "nativeFocusCandidateIsRtlText", "()Z", 1627bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins (void*) nativeFocusCandidateIsRtlText }, 1628bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins { "nativeFocusCandidateIsTextInput", "()Z", 1629bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins (void*) nativeFocusCandidateIsTextInput }, 1630d8fcffded6ee266e903e4e191ed95a07007fac74Leon Scroggins { "nativeFocusCandidateLineHeight", "()I", 1631d8fcffded6ee266e903e4e191ed95a07007fac74Leon Scroggins (void*) nativeFocusCandidateLineHeight }, 1632bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins { "nativeFocusCandidateMaxLength", "()I", 1633bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins (void*) nativeFocusCandidateMaxLength }, 1634ba87d726a9663788c0c5eae2ddb6c3ee24c4a740Leon Scroggins { "nativeFocusCandidateIsAutoComplete", "()Z", 1635ba87d726a9663788c0c5eae2ddb6c3ee24c4a740Leon Scroggins (void*) nativeFocusCandidateIsAutoComplete }, 163685e3844824444f304a15e57f62d2e5670fb3bf47Michael Kolb { "nativeFocusCandidateIsSpellcheck", "()Z", 163785e3844824444f304a15e57f62d2e5670fb3bf47Michael Kolb (void*) nativeFocusCandidateIsSpellcheck }, 1638bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins { "nativeFocusCandidateName", "()Ljava/lang/String;", 1639bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins (void*) nativeFocusCandidateName }, 1640bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins { "nativeFocusCandidateNodeBounds", "()Landroid/graphics/Rect;", 1641bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins (void*) nativeFocusCandidateNodeBounds }, 1642390c2b5702d131f0875199fdca1c3ba5010d7659Leon Scroggins { "nativeFocusCandidatePaddingRect", "()Landroid/graphics/Rect;", 1643390c2b5702d131f0875199fdca1c3ba5010d7659Leon Scroggins (void*) nativeFocusCandidatePaddingRect }, 1644bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins { "nativeFocusCandidatePointer", "()I", 1645bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins (void*) nativeFocusCandidatePointer }, 1646bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins { "nativeFocusCandidateText", "()Ljava/lang/String;", 1647bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins (void*) nativeFocusCandidateText }, 16483a3b28707d2d6a06afe9f3137e9bedc07246d600Leon Scroggins { "nativeFocusCandidateTextSize", "()F", 1649bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins (void*) nativeFocusCandidateTextSize }, 165074757b62fce144f27c25cc7744df82cd7411b2dcLeon Scroggins { "nativeFocusCandidateType", "()I", 165174757b62fce144f27c25cc7744df82cd7411b2dcLeon Scroggins (void*) nativeFocusCandidateType }, 1652d635c32628b7d9760bf786613cbe3eddf98a1272Michael Kolb { "nativeFocusCandidateLayerId", "()I", 1653d635c32628b7d9760bf786613cbe3eddf98a1272Michael Kolb (void*) nativeFocusCandidateLayerId }, 1654c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger { "nativeFocusIsPlugin", "()Z", 1655c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger (void*) nativeFocusIsPlugin }, 16568026280044128436d8e89736519a0b32b6540201Cary Clark { "nativeFocusNodeBounds", "()Landroid/graphics/Rect;", 16578026280044128436d8e89736519a0b32b6540201Cary Clark (void*) nativeFocusNodeBounds }, 1658539427bc7572dfd8b28579c67460186406dcb246Leon Scroggins { "nativeFocusNodePointer", "()I", 1659539427bc7572dfd8b28579c67460186406dcb246Leon Scroggins (void*) nativeFocusNodePointer }, 166046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeGetCursorRingBounds", "()Landroid/graphics/Rect;", 166146dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeGetCursorRingBounds }, 16625e5962825729a211e093fd615ddc9e5b0bec10bdCary Clark { "nativeGetSelection", "()Ljava/lang/String;", 166346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeGetSelection }, 166446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeHasCursorNode", "()Z", 166546dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeHasCursorNode }, 166646dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeHasFocusNode", "()Z", 166746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeHasFocusNode }, 1668c3fe941b7eb7da66bcea91b3513053d2ea60586fCary Clark { "nativeHideCursor", "()V", 1669c3fe941b7eb7da66bcea91b3513053d2ea60586fCary Clark (void*) nativeHideCursor }, 167046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeImageURI", "(II)Ljava/lang/String;", 167146dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeImageURI }, 16729092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark { "nativeLayerBounds", "(I)Landroid/graphics/Rect;", 16739092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark (void*) nativeLayerBounds }, 1674d48434fc633d173b549b97b1c614072adc9648a8Cary Clark { "nativeMotionUp", "(III)Z", 16758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (void*) nativeMotionUp }, 1676bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins { "nativeMoveCursor", "(IIZ)Z", 1677bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins (void*) nativeMoveCursor }, 16788480ea3097f295aeccf7c088a06cceea543238b7Leon Scroggins { "nativeMoveCursorToNextTextInput", "()Z", 1679e3635bdd4530eeff44657cb1423a0572482381ceLeon Scroggins (void*) nativeMoveCursorToNextTextInput }, 168046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeMoveGeneration", "()I", 168146dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeMoveGeneration }, 1682d4924af12855cd19162ba1442a6055664c98ca32Cary Clark { "nativePointInNavCache", "(III)Z", 1683d4924af12855cd19162ba1442a6055664c98ca32Cary Clark (void*) nativePointInNavCache }, 16848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { "nativeSelectBestAt", "(Landroid/graphics/Rect;)V", 16858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (void*) nativeSelectBestAt }, 16861b7a61602d4e5a47094a3eaf8d1d9d12fb78402dSvetoslav Ganov { "nativeSelectAt", "(II)V", 16871b7a61602d4e5a47094a3eaf8d1d9d12fb78402dSvetoslav Ganov (void*) nativeSelectAt }, 1688afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clark { "nativeSetFindIsUp", "(Z)V", 1689d74d4ceff106be90d9eaf08ec191a96bd87a7007Cary Clark (void*) nativeSetFindIsUp }, 16908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { "nativeSetHeightCanMeasure", "(Z)V", 16918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (void*) nativeSetHeightCanMeasure }, 1692246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik { "nativeSetBaseLayer", "(IILandroid/graphics/Region;ZZ)Z", 16936d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba (void*) nativeSetBaseLayer }, 16944212fae38ffee2bbb657dd19e4ae8b7c735f4953John Reck { "nativeGetBaseLayer", "()I", 16954212fae38ffee2bbb657dd19e4ae8b7c735f4953John Reck (void*) nativeGetBaseLayer }, 16966d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba { "nativeReplaceBaseContent", "(I)V", 16976d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba (void*) nativeReplaceBaseContent }, 16986d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba { "nativeCopyBaseContentToPicture", "(Landroid/graphics/Picture;)V", 16996d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba (void*) nativeCopyBaseContentToPicture }, 17006d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba { "nativeHasContent", "()Z", 17016d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba (void*) nativeHasContent }, 170232dffb883f56b18019afa7a01b2564b993b3fe8eCary Clark { "nativeShowCursorTimed", "()V", 170332dffb883f56b18019afa7a01b2564b993b3fe8eCary Clark (void*) nativeShowCursorTimed }, 1704a3a38731f4eeb01d2a42965b6c875d957999969dChris Craik { "nativeDiscardAllTextures", "()V", 1705a3a38731f4eeb01d2a42965b6c875d957999969dChris Craik (void*) nativeDiscardAllTextures }, 17065dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik { "nativeTileProfilingStart", "()V", 17075dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik (void*) nativeTileProfilingStart }, 17085dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik { "nativeTileProfilingStop", "()F", 17095dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik (void*) nativeTileProfilingStop }, 17105dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik { "nativeTileProfilingClear", "()V", 17115dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik (void*) nativeTileProfilingClear }, 17125dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik { "nativeTileProfilingNumFrames", "()I", 17135dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik (void*) nativeTileProfilingNumFrames }, 17145dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik { "nativeTileProfilingNumTilesInFrame", "(I)I", 17155dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik (void*) nativeTileProfilingNumTilesInFrame }, 1716687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik { "nativeTileProfilingGetInt", "(IILjava/lang/String;)I", 1717687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik (void*) nativeTileProfilingGetInt }, 1718687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik { "nativeTileProfilingGetFloat", "(IILjava/lang/String;)F", 1719687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik (void*) nativeTileProfilingGetFloat }, 17208360bc9c9facd690e42379610cbbb368d3d705efCary Clark { "nativeStopGL", "()V", 17218360bc9c9facd690e42379610cbbb368d3d705efCary Clark (void*) nativeStopGL }, 1722cc4e3c422964c7d999e8f340057f303140d845ddCary Clark { "nativeSubtractLayers", "(Landroid/graphics/Rect;)Landroid/graphics/Rect;", 1723cc4e3c422964c7d999e8f340057f303140d845ddCary Clark (void*) nativeSubtractLayers }, 172446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark { "nativeTextGeneration", "()I", 172546dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark (void*) nativeTextGeneration }, 17268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { "nativeUpdateCachedTextfield", "(Ljava/lang/String;I)V", 1727b6631b666120e63a9ceee4a77613cf962fa37b1fCary Clark (void*) nativeUpdateCachedTextfield }, 1728fa768f11d82c34980cce020f442329299efb08caCary Clark { "nativeGetBlockLeftEdge", "(IIF)I", 1729a50885e6d06f2cfdee3bf43b1fb367bca126c5dcGrace Kloba (void*) nativeGetBlockLeftEdge }, 1730f81c672a4f5c06621000a6df0984cde689397d94Cary Clark { "nativeScrollableLayer", "(IILandroid/graphics/Rect;Landroid/graphics/Rect;)I", 1731a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott (void*) nativeScrollableLayer }, 1732a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott { "nativeScrollLayer", "(III)Z", 1733a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott (void*) nativeScrollLayer }, 1734f51a51f6ea307f4311a04aa865a42b233269540bChris Craik { "nativeSetIsScrolling", "(Z)V", 1735f51a51f6ea307f4311a04aa865a42b233269540bChris Craik (void*) nativeSetIsScrolling }, 1736c7e578330aece3c556ef205365c24676687223e2Derek Sollenberger { "nativeUseHardwareAccelSkia", "(Z)V", 1737c7e578330aece3c556ef205365c24676687223e2Derek Sollenberger (void*) nativeUseHardwareAccelSkia }, 17385e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck { "nativeGetBackgroundColor", "()I", 17395e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck (void*) nativeGetBackgroundColor }, 1740f1ab740d0427ebb5c42b8b72fa3102b037a109f0Nicolas Roard { "nativeSetProperty", "(Ljava/lang/String;Ljava/lang/String;)Z", 1741d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck (void*) nativeSetProperty }, 1742d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck { "nativeGetProperty", "(Ljava/lang/String;)Ljava/lang/String;", 1743d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck (void*) nativeGetProperty }, 174452f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck { "nativeOnTrimMemory", "(I)V", 174552f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck (void*) nativeOnTrimMemory }, 1746d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck { "nativeSetPauseDrawing", "(IZ)V", 1747d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck (void*) nativeSetPauseDrawing }, 1748a263300f202a4456570ae6e29e589b5e85309a7bJohn Reck { "nativeDisableNavcache", "()Z", 1749a263300f202a4456570ae6e29e589b5e85309a7bJohn Reck (void*) nativeDisableNavcache }, 17507c77e50c5cdcaa7074e8db703224450fef254107George Mount { "nativeFocusCandidateIsEditableText", "(I)Z", 17517c77e50c5cdcaa7074e8db703224450fef254107George Mount (void*) nativeFocusCandidateIsEditableText }, 1752dea0c131566f424923425970fe5621305d136e5aJohn Reck { "nativeSetTextSelection", "(II)V", 1753dea0c131566f424923425970fe5621305d136e5aJohn Reck (void*) nativeSetTextSelection }, 1754dea0c131566f424923425970fe5621305d136e5aJohn Reck { "nativeGetHandleLayerId", "(IILandroid/graphics/Rect;)I", 1755dea0c131566f424923425970fe5621305d136e5aJohn Reck (void*) nativeGetHandleLayerId }, 1756dea0c131566f424923425970fe5621305d136e5aJohn Reck { "nativeIsBaseFirst", "(I)Z", 1757dea0c131566f424923425970fe5621305d136e5aJohn Reck (void*) nativeIsBaseFirst }, 17588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 17598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1760b92850e0391d674b9c4826b66105aaa3dd3eef96Steve Blockint registerWebView(JNIEnv* env) 17618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 176257ae1393d3097edada2640b40c895396b69cc919Jonathan Dixon jclass clazz = env->FindClass("android/webkit/WebViewClassic"); 176357ae1393d3097edada2640b40c895396b69cc919Jonathan Dixon ALOG_ASSERT(clazz, "Unable to find class android/webkit/WebViewClassic"); 17648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gWebViewField = env->GetFieldID(clazz, "mNativeClass", "I"); 176557ae1393d3097edada2640b40c895396b69cc919Jonathan Dixon ALOG_ASSERT(gWebViewField, "Unable to find android/webkit/WebViewClassic.mNativeClass"); 1766bf3f67c4fcfd68df256e5c001c67969997a63e28Steve Block env->DeleteLocalRef(clazz); 17678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 176857ae1393d3097edada2640b40c895396b69cc919Jonathan Dixon return jniRegisterNativeMethods(env, "android/webkit/WebViewClassic", gJavaWebViewMethods, NELEM(gJavaWebViewMethods)); 17698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 17708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace android 1772