WebView.cpp revision d8be9016b7fda67a91b4ee17b3b2e7ba692ee553
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*));
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    jclass clazz = env->FindClass("android/webkit/WebView");
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.
1421e1dfe84b38ed080c7bb7ac00fd9e3c6c590a147dTeng-Hui Zhu        if (level >= TRIM_MEMORY_MODERATE
1422886eb87d34570b706a0f17fa944d98870ed6a2afTeng-Hui Zhu            && !TilesManager::instance()->highEndGfx()) {
1423e1dfe84b38ed080c7bb7ac00fd9e3c6c590a147dTeng-Hui Zhu            TilesManager::instance()->transferQueue()->emptyQueue();
1424886eb87d34570b706a0f17fa944d98870ed6a2afTeng-Hui Zhu            TilesManager::instance()->setContextChanged(true);
1425886eb87d34570b706a0f17fa944d98870ed6a2afTeng-Hui Zhu        }
1426e1dfe84b38ed080c7bb7ac00fd9e3c6c590a147dTeng-Hui Zhu
1427a3a38731f4eeb01d2a42965b6c875d957999969dChris Craik        bool freeAllTextures = (level > TRIM_MEMORY_UI_HIDDEN), glTextures = true;
1428a3a38731f4eeb01d2a42965b6c875d957999969dChris Craik        TilesManager::instance()->discardTextures(freeAllTextures, glTextures);
14292986d27084d881dbe6f9c3ae35430a5978b7e659Chris Craik    }
143052f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck}
143152f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck
14328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void nativeDumpDisplayTree(JNIEnv* env, jobject jwebview, jstring jurl)
14338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
14348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef ANDROID_DUMP_DISPLAY_TREE
14358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebView* view = GET_NATIVE_VIEW(env, jwebview);
14366dd76b804786ec760bb04b137a6bf017064226dcSteve Block    ALOG_ASSERT(view, "view not set in %s", __FUNCTION__);
14378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1438bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed    if (view && view->getWebViewCore()) {
1439bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed        FILE* file = fopen(DISPLAY_TREE_LOG_FILE, "w");
1440bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed        if (file) {
1441bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed            SkFormatDumper dumper(dumpToFile, file);
1442bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed            // dump the URL
1443bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed            if (jurl) {
1444bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed                const char* str = env->GetStringUTFChars(jurl, 0);
1445bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed                SkDebugf("Dumping %s to %s\n", str, DISPLAY_TREE_LOG_FILE);
1446bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed                dumpToFile(str, file);
1447bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed                env->ReleaseStringUTFChars(jurl, str);
14488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            }
1449bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed            // now dump the display tree
1450bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed            SkDumpCanvas canvas(&dumper);
1451bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed            // this will playback the picture into the canvas, which will
1452bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed            // spew its contents to the dumper
1453dea0c131566f424923425970fe5621305d136e5aJohn Reck            view->draw(&canvas, 0, WebView::DrawExtrasNone, false);
1454bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed            // we're done with the file now
1455bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed            fwrite("\n", 1, 1, file);
1456bc34c827fb04edf4fb309ff7e0fc4fceb474809eMike Reed            fclose(file);
14578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
1458859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard#if USE(ACCELERATED_COMPOSITING)
14596d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba        const LayerAndroid* rootLayer = view->compositeRoot();
1460f4cefb9302ee62602c19cdfbdb6cc1fbdf540953Cary Clark        if (rootLayer) {
1461859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard          FILE* file = fopen(LAYERS_TREE_LOG_FILE,"w");
1462859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard          if (file) {
1463859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard              rootLayer->dumpLayers(file, 0);
1464859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard              fclose(file);
1465859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard          }
1466859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard        }
1467859c5759717164a923c2267b9ee8437a4dafe5c4Nicolas Roard#endif
14688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
14698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
14708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
14718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1472f81c672a4f5c06621000a6df0984cde689397d94Cary Clarkstatic int nativeScrollableLayer(JNIEnv* env, jobject jwebview, jint x, jint y,
1473f81c672a4f5c06621000a6df0984cde689397d94Cary Clark    jobject rect, jobject bounds)
1474a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott{
1475a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott    WebView* view = GET_NATIVE_VIEW(env, jwebview);
14766dd76b804786ec760bb04b137a6bf017064226dcSteve Block    ALOG_ASSERT(view, "view not set in %s", __FUNCTION__);
1477f81c672a4f5c06621000a6df0984cde689397d94Cary Clark    SkIRect nativeRect, nativeBounds;
1478f81c672a4f5c06621000a6df0984cde689397d94Cary Clark    int id = view->scrollableLayer(x, y, &nativeRect, &nativeBounds);
1479f0425628b4e83bf9e1c8275d809d433baeaf768cLeon Scroggins    if (rect)
1480f0425628b4e83bf9e1c8275d809d433baeaf768cLeon Scroggins        GraphicsJNI::irect_to_jrect(nativeRect, env, rect);
1481f0425628b4e83bf9e1c8275d809d433baeaf768cLeon Scroggins    if (bounds)
1482f0425628b4e83bf9e1c8275d809d433baeaf768cLeon Scroggins        GraphicsJNI::irect_to_jrect(nativeBounds, env, bounds);
148322e283368b8dfd19cf2caa342a5c921397f0dc41Patrick Scott    return id;
1484a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott}
1485a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott
148622e283368b8dfd19cf2caa342a5c921397f0dc41Patrick Scottstatic bool nativeScrollLayer(JNIEnv* env, jobject obj, jint layerId, jint x,
148722e283368b8dfd19cf2caa342a5c921397f0dc41Patrick Scott        jint y)
1488a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott{
1489a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL)
1490a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott    WebView* view = GET_NATIVE_VIEW(env, obj);
149170adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craik    view->scrollLayer(layerId, x, y);
149270adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craik
149370adfd756fa5e71bd6913f3a1d8223ca26d8ec92Chris Craik    //TODO: the below only needed for the SW rendering path
14948598c9fb9f861f25ab14efde9efb19cb91d7df1cPatrick Scott    LayerAndroid* root = view->compositeRoot();
14958598c9fb9f861f25ab14efde9efb19cb91d7df1cPatrick Scott    if (!root)
14968598c9fb9f861f25ab14efde9efb19cb91d7df1cPatrick Scott        return false;
14978598c9fb9f861f25ab14efde9efb19cb91d7df1cPatrick Scott    LayerAndroid* layer = root->findById(layerId);
1498fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott    if (!layer || !layer->contentIsScrollable())
1499a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott        return false;
1500fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott    return static_cast<ScrollableLayerAndroid*>(layer)->scrollTo(x, y);
1501a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott#endif
1502a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott    return false;
1503a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott}
1504a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott
1505f51a51f6ea307f4311a04aa865a42b233269540bChris Craikstatic void nativeSetIsScrolling(JNIEnv* env, jobject jwebview, jboolean isScrolling)
1506f51a51f6ea307f4311a04aa865a42b233269540bChris Craik{
1507f51a51f6ea307f4311a04aa865a42b233269540bChris Craik    WebView* view = GET_NATIVE_VIEW(env, jwebview);
15086dd76b804786ec760bb04b137a6bf017064226dcSteve Block    ALOG_ASSERT(view, "view not set in %s", __FUNCTION__);
1509f51a51f6ea307f4311a04aa865a42b233269540bChris Craik    view->setIsScrolling(isScrolling);
1510f51a51f6ea307f4311a04aa865a42b233269540bChris Craik}
1511f51a51f6ea307f4311a04aa865a42b233269540bChris Craik
1512c7e578330aece3c556ef205365c24676687223e2Derek Sollenbergerstatic void nativeUseHardwareAccelSkia(JNIEnv*, jobject, jboolean enabled)
1513c7e578330aece3c556ef205365c24676687223e2Derek Sollenberger{
1514c7e578330aece3c556ef205365c24676687223e2Derek Sollenberger    BaseRenderer::setCurrentRendererType(enabled ? BaseRenderer::Ganesh : BaseRenderer::Raster);
1515c7e578330aece3c556ef205365c24676687223e2Derek Sollenberger}
1516c7e578330aece3c556ef205365c24676687223e2Derek Sollenberger
15175e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reckstatic int nativeGetBackgroundColor(JNIEnv* env, jobject obj)
15185e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck{
15195e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck    WebView* view = GET_NATIVE_VIEW(env, obj);
15205e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck    BaseLayerAndroid* baseLayer = view->getBaseLayer();
15215e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck    if (baseLayer) {
15225e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck        WebCore::Color color = baseLayer->getBackgroundColor();
15235e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck        if (color.isValid())
15245e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck            return SkColorSetARGB(color.alpha(), color.red(),
15255e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck                                  color.green(), color.blue());
15265e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck    }
15275e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck    return SK_ColorWHITE;
15285e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck}
15295e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck
1530d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reckstatic void nativeSetPauseDrawing(JNIEnv *env, jobject obj, jint nativeView,
1531d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck                                      jboolean pause)
1532d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck{
1533d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck    ((WebView*)nativeView)->m_isDrawingPaused = pause;
1534d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck}
1535d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck
1536a263300f202a4456570ae6e29e589b5e85309a7bJohn Reckstatic bool nativeDisableNavcache(JNIEnv *env, jobject obj)
1537a263300f202a4456570ae6e29e589b5e85309a7bJohn Reck{
1538a263300f202a4456570ae6e29e589b5e85309a7bJohn Reck    return true;
1539a263300f202a4456570ae6e29e589b5e85309a7bJohn Reck}
1540a263300f202a4456570ae6e29e589b5e85309a7bJohn Reck
1541dea0c131566f424923425970fe5621305d136e5aJohn Reckstatic void nativeSetTextSelection(JNIEnv *env, jobject obj, jint nativeView,
1542dea0c131566f424923425970fe5621305d136e5aJohn Reck                                   jint selectionPtr)
1543dea0c131566f424923425970fe5621305d136e5aJohn Reck{
1544dea0c131566f424923425970fe5621305d136e5aJohn Reck    SelectText* selection = reinterpret_cast<SelectText*>(selectionPtr);
1545dea0c131566f424923425970fe5621305d136e5aJohn Reck    reinterpret_cast<WebView*>(nativeView)->setTextSelection(selection);
1546dea0c131566f424923425970fe5621305d136e5aJohn Reck}
1547dea0c131566f424923425970fe5621305d136e5aJohn Reck
1548dea0c131566f424923425970fe5621305d136e5aJohn Reckstatic jint nativeGetHandleLayerId(JNIEnv *env, jobject obj, jint nativeView,
1549dea0c131566f424923425970fe5621305d136e5aJohn Reck                                     jint handleIndex, jobject cursorRect)
1550dea0c131566f424923425970fe5621305d136e5aJohn Reck{
1551dea0c131566f424923425970fe5621305d136e5aJohn Reck    WebView* webview = reinterpret_cast<WebView*>(nativeView);
1552dea0c131566f424923425970fe5621305d136e5aJohn Reck    SkIRect nativeRect;
1553dea0c131566f424923425970fe5621305d136e5aJohn Reck    int layerId = webview->getHandleLayerId((SelectText::HandleId) handleIndex, nativeRect);
1554dea0c131566f424923425970fe5621305d136e5aJohn Reck    if (cursorRect)
1555dea0c131566f424923425970fe5621305d136e5aJohn Reck        GraphicsJNI::irect_to_jrect(nativeRect, env, cursorRect);
1556dea0c131566f424923425970fe5621305d136e5aJohn Reck    return layerId;
1557dea0c131566f424923425970fe5621305d136e5aJohn Reck}
1558dea0c131566f424923425970fe5621305d136e5aJohn Reck
1559dea0c131566f424923425970fe5621305d136e5aJohn Reckstatic jboolean nativeIsBaseFirst(JNIEnv *env, jobject obj, jint nativeView)
1560dea0c131566f424923425970fe5621305d136e5aJohn Reck{
1561dea0c131566f424923425970fe5621305d136e5aJohn Reck    WebView* webview = reinterpret_cast<WebView*>(nativeView);
1562dea0c131566f424923425970fe5621305d136e5aJohn Reck    SelectText* select = static_cast<SelectText*>(
1563dea0c131566f424923425970fe5621305d136e5aJohn Reck            webview->getDrawExtra(WebView::DrawExtrasSelection));
1564dea0c131566f424923425970fe5621305d136e5aJohn Reck    return select ? select->isBaseFirst() : false;
1565dea0c131566f424923425970fe5621305d136e5aJohn Reck}
1566dea0c131566f424923425970fe5621305d136e5aJohn Reck
15678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
15688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * JNI registration
15698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
15708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic JNINativeMethod gJavaWebViewMethods[] = {
1571d4924af12855cd19162ba1442a6055664c98ca32Cary Clark    { "nativeCacheHitFramePointer", "()I",
1572d4924af12855cd19162ba1442a6055664c98ca32Cary Clark        (void*) nativeCacheHitFramePointer },
1573b57c3a124715a89ac026e86f4fd3890529525d11Cary Clark    { "nativeCacheHitIsPlugin", "()Z",
1574b57c3a124715a89ac026e86f4fd3890529525d11Cary Clark        (void*) nativeCacheHitIsPlugin },
1575d4924af12855cd19162ba1442a6055664c98ca32Cary Clark    { "nativeCacheHitNodeBounds", "()Landroid/graphics/Rect;",
1576d4924af12855cd19162ba1442a6055664c98ca32Cary Clark        (void*) nativeCacheHitNodeBounds },
1577d4924af12855cd19162ba1442a6055664c98ca32Cary Clark    { "nativeCacheHitNodePointer", "()I",
1578d4924af12855cd19162ba1442a6055664c98ca32Cary Clark        (void*) nativeCacheHitNodePointer },
1579c3fe941b7eb7da66bcea91b3513053d2ea60586fCary Clark    { "nativeClearCursor", "()V",
1580bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins        (void*) nativeClearCursor },
158155b4bdbd661ac94fd05ab40de08250bf242d5346John Reck    { "nativeCreate", "(ILjava/lang/String;Z)V",
15828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (void*) nativeCreate },
158346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeCursorFramePointer", "()I",
158446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeCursorFramePointer },
15851cc2f5523913bd14a01c0c85710dcd6f0d7b5bb8Leon Scroggins    { "nativePageShouldHandleShiftAndArrows", "()Z",
15861cc2f5523913bd14a01c0c85710dcd6f0d7b5bb8Leon Scroggins        (void*) nativePageShouldHandleShiftAndArrows },
158746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeCursorNodeBounds", "()Landroid/graphics/Rect;",
158846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeCursorNodeBounds },
158946dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeCursorNodePointer", "()I",
159046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeCursorNodePointer },
159146dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeCursorIntersects", "(Landroid/graphics/Rect;)Z",
159246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeCursorIntersects },
159346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeCursorIsAnchor", "()Z",
159446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeCursorIsAnchor },
159546dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeCursorIsTextInput", "()Z",
159646dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeCursorIsTextInput },
159736747fa778285f57f2f53c047028be83e9d8776dCary Clark    { "nativeCursorPosition", "()Landroid/graphics/Point;",
159836747fa778285f57f2f53c047028be83e9d8776dCary Clark        (void*) nativeCursorPosition },
159946dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeCursorText", "()Ljava/lang/String;",
160046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeCursorText },
1601f4669cac3858848a9247e801b6106aeae6d406e8Cary Clark    { "nativeCursorWantsKeyEvents", "()Z",
1602f4669cac3858848a9247e801b6106aeae6d406e8Cary Clark        (void*)nativeCursorWantsKeyEvents },
16038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    { "nativeDebugDump", "()V",
16048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (void*) nativeDebugDump },
16058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    { "nativeDestroy", "()V",
16068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (void*) nativeDestroy },
1607a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount    { "nativeDraw", "(Landroid/graphics/Canvas;Landroid/graphics/RectF;IIZ)I",
16086d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba        (void*) nativeDraw },
1609a5e649bc4d58bf3da959deae077307c487e2a3a6George Mount    { "nativeGetDrawGLFunction", "(ILandroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/RectF;FI)I",
1610908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase        (void*) nativeGetDrawGLFunction },
1611d0a011b30b97598ee74f329aaa217a6ab733f1f1Teng-Hui Zhu    { "nativeUpdateDrawGLFunction", "(Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/RectF;F)V",
1612908703e420f4931f74527aaeb3d5faabdd66c28aChet Haase        (void*) nativeUpdateDrawGLFunction },
161346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeDumpDisplayTree", "(Ljava/lang/String;)V",
161446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeDumpDisplayTree },
1615223589b3e07f05960e8da16a5addce6fbfbfa9dfJohn Reck    { "nativeEvaluateLayersAnimations", "(I)Z",
161687962ce00229855c098ba12cee8d5c015a835289Cary Clark        (void*) nativeEvaluateLayersAnimations },
161749e856e5d5e86855d12326294cb6b57235a2e9a1Cary Clark    { "nativeFocusCandidateFramePointer", "()I",
161849e856e5d5e86855d12326294cb6b57235a2e9a1Cary Clark        (void*) nativeFocusCandidateFramePointer },
16192194b17e89b2ad4c0624f7612e417db6d69150adLeon Scroggins    { "nativeFocusCandidateHasNextTextfield", "()Z",
16202194b17e89b2ad4c0624f7612e417db6d69150adLeon Scroggins        (void*) focusCandidateHasNextTextfield },
1621bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins    { "nativeFocusCandidateIsPassword", "()Z",
1622bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins        (void*) nativeFocusCandidateIsPassword },
1623bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins    { "nativeFocusCandidateIsRtlText", "()Z",
1624bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins        (void*) nativeFocusCandidateIsRtlText },
1625bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins    { "nativeFocusCandidateIsTextInput", "()Z",
1626bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins        (void*) nativeFocusCandidateIsTextInput },
1627d8fcffded6ee266e903e4e191ed95a07007fac74Leon Scroggins    { "nativeFocusCandidateLineHeight", "()I",
1628d8fcffded6ee266e903e4e191ed95a07007fac74Leon Scroggins        (void*) nativeFocusCandidateLineHeight },
1629bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins    { "nativeFocusCandidateMaxLength", "()I",
1630bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins        (void*) nativeFocusCandidateMaxLength },
1631ba87d726a9663788c0c5eae2ddb6c3ee24c4a740Leon Scroggins    { "nativeFocusCandidateIsAutoComplete", "()Z",
1632ba87d726a9663788c0c5eae2ddb6c3ee24c4a740Leon Scroggins        (void*) nativeFocusCandidateIsAutoComplete },
163385e3844824444f304a15e57f62d2e5670fb3bf47Michael Kolb    { "nativeFocusCandidateIsSpellcheck", "()Z",
163485e3844824444f304a15e57f62d2e5670fb3bf47Michael Kolb        (void*) nativeFocusCandidateIsSpellcheck },
1635bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins    { "nativeFocusCandidateName", "()Ljava/lang/String;",
1636bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins        (void*) nativeFocusCandidateName },
1637bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins    { "nativeFocusCandidateNodeBounds", "()Landroid/graphics/Rect;",
1638bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins        (void*) nativeFocusCandidateNodeBounds },
1639390c2b5702d131f0875199fdca1c3ba5010d7659Leon Scroggins    { "nativeFocusCandidatePaddingRect", "()Landroid/graphics/Rect;",
1640390c2b5702d131f0875199fdca1c3ba5010d7659Leon Scroggins        (void*) nativeFocusCandidatePaddingRect },
1641bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins    { "nativeFocusCandidatePointer", "()I",
1642bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins        (void*) nativeFocusCandidatePointer },
1643bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins    { "nativeFocusCandidateText", "()Ljava/lang/String;",
1644bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins        (void*) nativeFocusCandidateText },
16453a3b28707d2d6a06afe9f3137e9bedc07246d600Leon Scroggins    { "nativeFocusCandidateTextSize", "()F",
1646bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins        (void*) nativeFocusCandidateTextSize },
164774757b62fce144f27c25cc7744df82cd7411b2dcLeon Scroggins    { "nativeFocusCandidateType", "()I",
164874757b62fce144f27c25cc7744df82cd7411b2dcLeon Scroggins        (void*) nativeFocusCandidateType },
1649d635c32628b7d9760bf786613cbe3eddf98a1272Michael Kolb    { "nativeFocusCandidateLayerId", "()I",
1650d635c32628b7d9760bf786613cbe3eddf98a1272Michael Kolb        (void*) nativeFocusCandidateLayerId },
1651c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger    { "nativeFocusIsPlugin", "()Z",
1652c7d9090583638605a2c8a779642ad09d1a228520Derek Sollenberger        (void*) nativeFocusIsPlugin },
16538026280044128436d8e89736519a0b32b6540201Cary Clark    { "nativeFocusNodeBounds", "()Landroid/graphics/Rect;",
16548026280044128436d8e89736519a0b32b6540201Cary Clark        (void*) nativeFocusNodeBounds },
1655539427bc7572dfd8b28579c67460186406dcb246Leon Scroggins    { "nativeFocusNodePointer", "()I",
1656539427bc7572dfd8b28579c67460186406dcb246Leon Scroggins        (void*) nativeFocusNodePointer },
165746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeGetCursorRingBounds", "()Landroid/graphics/Rect;",
165846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeGetCursorRingBounds },
16595e5962825729a211e093fd615ddc9e5b0bec10bdCary Clark    { "nativeGetSelection", "()Ljava/lang/String;",
166046dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeGetSelection },
166146dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeHasCursorNode", "()Z",
166246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeHasCursorNode },
166346dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeHasFocusNode", "()Z",
166446dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeHasFocusNode },
1665c3fe941b7eb7da66bcea91b3513053d2ea60586fCary Clark    { "nativeHideCursor", "()V",
1666c3fe941b7eb7da66bcea91b3513053d2ea60586fCary Clark        (void*) nativeHideCursor },
166746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeImageURI", "(II)Ljava/lang/String;",
166846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeImageURI },
16699092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark    { "nativeLayerBounds", "(I)Landroid/graphics/Rect;",
16709092f30ce1d2ad138d0095acddc2f5f4b2a025f9Cary Clark        (void*) nativeLayerBounds },
1671d48434fc633d173b549b97b1c614072adc9648a8Cary Clark    { "nativeMotionUp", "(III)Z",
16728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (void*) nativeMotionUp },
1673bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins    { "nativeMoveCursor", "(IIZ)Z",
1674bc0656f7505db89baea5835febb882daf32f32a6Leon Scroggins        (void*) nativeMoveCursor },
16758480ea3097f295aeccf7c088a06cceea543238b7Leon Scroggins    { "nativeMoveCursorToNextTextInput", "()Z",
1676e3635bdd4530eeff44657cb1423a0572482381ceLeon Scroggins        (void*) nativeMoveCursorToNextTextInput },
167746dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeMoveGeneration", "()I",
167846dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeMoveGeneration },
1679d4924af12855cd19162ba1442a6055664c98ca32Cary Clark    { "nativePointInNavCache", "(III)Z",
1680d4924af12855cd19162ba1442a6055664c98ca32Cary Clark        (void*) nativePointInNavCache },
16818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    { "nativeSelectBestAt", "(Landroid/graphics/Rect;)V",
16828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (void*) nativeSelectBestAt },
16831b7a61602d4e5a47094a3eaf8d1d9d12fb78402dSvetoslav Ganov    { "nativeSelectAt", "(II)V",
16841b7a61602d4e5a47094a3eaf8d1d9d12fb78402dSvetoslav Ganov        (void*) nativeSelectAt },
1685afa40c89b27e6edbc28a5ad400eb8bb9176a88a8Cary Clark    { "nativeSetFindIsUp", "(Z)V",
1686d74d4ceff106be90d9eaf08ec191a96bd87a7007Cary Clark        (void*) nativeSetFindIsUp },
16878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    { "nativeSetHeightCanMeasure", "(Z)V",
16888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        (void*) nativeSetHeightCanMeasure },
1689246bd5b4427d0a0feaa2e1a128be9ad53100631cChris Craik    { "nativeSetBaseLayer", "(IILandroid/graphics/Region;ZZ)Z",
16906d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba        (void*) nativeSetBaseLayer },
16914212fae38ffee2bbb657dd19e4ae8b7c735f4953John Reck    { "nativeGetBaseLayer", "()I",
16924212fae38ffee2bbb657dd19e4ae8b7c735f4953John Reck        (void*) nativeGetBaseLayer },
16936d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba    { "nativeReplaceBaseContent", "(I)V",
16946d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba        (void*) nativeReplaceBaseContent },
16956d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba    { "nativeCopyBaseContentToPicture", "(Landroid/graphics/Picture;)V",
16966d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba        (void*) nativeCopyBaseContentToPicture },
16976d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba    { "nativeHasContent", "()Z",
16986d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba        (void*) nativeHasContent },
169932dffb883f56b18019afa7a01b2564b993b3fe8eCary Clark    { "nativeShowCursorTimed", "()V",
170032dffb883f56b18019afa7a01b2564b993b3fe8eCary Clark        (void*) nativeShowCursorTimed },
1701a3a38731f4eeb01d2a42965b6c875d957999969dChris Craik    { "nativeDiscardAllTextures", "()V",
1702a3a38731f4eeb01d2a42965b6c875d957999969dChris Craik        (void*) nativeDiscardAllTextures },
17035dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik    { "nativeTileProfilingStart", "()V",
17045dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik        (void*) nativeTileProfilingStart },
17055dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik    { "nativeTileProfilingStop", "()F",
17065dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik        (void*) nativeTileProfilingStop },
17075dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik    { "nativeTileProfilingClear", "()V",
17085dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik        (void*) nativeTileProfilingClear },
17095dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik    { "nativeTileProfilingNumFrames", "()I",
17105dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik        (void*) nativeTileProfilingNumFrames },
17115dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik    { "nativeTileProfilingNumTilesInFrame", "(I)I",
17125dcd286d3e3e60f6a090f775a1fdceb40f578b75Chris Craik        (void*) nativeTileProfilingNumTilesInFrame },
1713687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik    { "nativeTileProfilingGetInt", "(IILjava/lang/String;)I",
1714687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik        (void*) nativeTileProfilingGetInt },
1715687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik    { "nativeTileProfilingGetFloat", "(IILjava/lang/String;)F",
1716687472b6cb489b5d3ea6a9a2fff110a685c27a79Chris Craik        (void*) nativeTileProfilingGetFloat },
17178360bc9c9facd690e42379610cbbb368d3d705efCary Clark    { "nativeStopGL", "()V",
17188360bc9c9facd690e42379610cbbb368d3d705efCary Clark        (void*) nativeStopGL },
1719cc4e3c422964c7d999e8f340057f303140d845ddCary Clark    { "nativeSubtractLayers", "(Landroid/graphics/Rect;)Landroid/graphics/Rect;",
1720cc4e3c422964c7d999e8f340057f303140d845ddCary Clark        (void*) nativeSubtractLayers },
172146dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark    { "nativeTextGeneration", "()I",
172246dfee13b2bec1b39f46c138df565b2207ccbc86Cary Clark        (void*) nativeTextGeneration },
17238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    { "nativeUpdateCachedTextfield", "(Ljava/lang/String;I)V",
1724b6631b666120e63a9ceee4a77613cf962fa37b1fCary Clark        (void*) nativeUpdateCachedTextfield },
1725fa768f11d82c34980cce020f442329299efb08caCary Clark    { "nativeGetBlockLeftEdge", "(IIF)I",
1726a50885e6d06f2cfdee3bf43b1fb367bca126c5dcGrace Kloba        (void*) nativeGetBlockLeftEdge },
1727f81c672a4f5c06621000a6df0984cde689397d94Cary Clark    { "nativeScrollableLayer", "(IILandroid/graphics/Rect;Landroid/graphics/Rect;)I",
1728a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott        (void*) nativeScrollableLayer },
1729a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott    { "nativeScrollLayer", "(III)Z",
1730a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott        (void*) nativeScrollLayer },
1731f51a51f6ea307f4311a04aa865a42b233269540bChris Craik    { "nativeSetIsScrolling", "(Z)V",
1732f51a51f6ea307f4311a04aa865a42b233269540bChris Craik        (void*) nativeSetIsScrolling },
1733c7e578330aece3c556ef205365c24676687223e2Derek Sollenberger    { "nativeUseHardwareAccelSkia", "(Z)V",
1734c7e578330aece3c556ef205365c24676687223e2Derek Sollenberger        (void*) nativeUseHardwareAccelSkia },
17355e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck    { "nativeGetBackgroundColor", "()I",
17365e21d2b8b3bc9de06626a4cb28f37f06322c9f56John Reck        (void*) nativeGetBackgroundColor },
1737f1ab740d0427ebb5c42b8b72fa3102b037a109f0Nicolas Roard    { "nativeSetProperty", "(Ljava/lang/String;Ljava/lang/String;)Z",
1738d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck        (void*) nativeSetProperty },
1739d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck    { "nativeGetProperty", "(Ljava/lang/String;)Ljava/lang/String;",
1740d2c2030045e0e26787ff8b9935d449e3be8a71ccJohn Reck        (void*) nativeGetProperty },
174152f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck    { "nativeOnTrimMemory", "(I)V",
174252f5c337d737fdbaa361fc46b3e0aff2bb27cbaeJohn Reck        (void*) nativeOnTrimMemory },
1743d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck    { "nativeSetPauseDrawing", "(IZ)V",
1744d355e69574bd6cae6a03fbfeee0c7da61aa7a98cJohn Reck        (void*) nativeSetPauseDrawing },
1745a263300f202a4456570ae6e29e589b5e85309a7bJohn Reck    { "nativeDisableNavcache", "()Z",
1746a263300f202a4456570ae6e29e589b5e85309a7bJohn Reck        (void*) nativeDisableNavcache },
17477c77e50c5cdcaa7074e8db703224450fef254107George Mount    { "nativeFocusCandidateIsEditableText", "(I)Z",
17487c77e50c5cdcaa7074e8db703224450fef254107George Mount        (void*) nativeFocusCandidateIsEditableText },
1749dea0c131566f424923425970fe5621305d136e5aJohn Reck    { "nativeSetTextSelection", "(II)V",
1750dea0c131566f424923425970fe5621305d136e5aJohn Reck        (void*) nativeSetTextSelection },
1751dea0c131566f424923425970fe5621305d136e5aJohn Reck    { "nativeGetHandleLayerId", "(IILandroid/graphics/Rect;)I",
1752dea0c131566f424923425970fe5621305d136e5aJohn Reck        (void*) nativeGetHandleLayerId },
1753dea0c131566f424923425970fe5621305d136e5aJohn Reck    { "nativeIsBaseFirst", "(I)Z",
1754dea0c131566f424923425970fe5621305d136e5aJohn Reck        (void*) nativeIsBaseFirst },
17558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
17568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1757b92850e0391d674b9c4826b66105aaa3dd3eef96Steve Blockint registerWebView(JNIEnv* env)
17588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
17598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    jclass clazz = env->FindClass("android/webkit/WebView");
17606dd76b804786ec760bb04b137a6bf017064226dcSteve Block    ALOG_ASSERT(clazz, "Unable to find class android/webkit/WebView");
17618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    gWebViewField = env->GetFieldID(clazz, "mNativeClass", "I");
17626dd76b804786ec760bb04b137a6bf017064226dcSteve Block    ALOG_ASSERT(gWebViewField, "Unable to find android/webkit/WebView.mNativeClass");
1763bf3f67c4fcfd68df256e5c001c67969997a63e28Steve Block    env->DeleteLocalRef(clazz);
17648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return jniRegisterNativeMethods(env, "android/webkit/WebView", gJavaWebViewMethods, NELEM(gJavaWebViewMethods));
17668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
17678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace android
1769