summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/android/nav/WebView.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit/android/nav/WebView.cpp')
-rw-r--r--Source/WebKit/android/nav/WebView.cpp75
1 files changed, 53 insertions, 22 deletions
diff --git a/Source/WebKit/android/nav/WebView.cpp b/Source/WebKit/android/nav/WebView.cpp
index 9bf95e5..b1ca2ac 100644
--- a/Source/WebKit/android/nav/WebView.cpp
+++ b/Source/WebKit/android/nav/WebView.cpp
@@ -305,7 +305,7 @@ void scrollToCurrentMatch()
}
SkRect matchBounds = m_findOnPage.currentMatchBounds();
- LayerAndroid* rootLayer = getFrameCache(DontAllowNewer)->rootLayer();
+ LayerAndroid* rootLayer = compositeRoot();
if (!rootLayer)
return;
@@ -581,10 +581,10 @@ PictureSet* draw(SkCanvas* canvas, SkColor bgColor, int extras, bool split)
m_baseLayer->setMatrix(canvas->getTotalMatrix());
canvas->resetMatrix();
m_baseLayer->draw(canvas);
- if (extra) {
- IntRect dummy; // inval area, unused for now
- extra->draw(canvas, compositeLayer, &dummy);
- }
+ }
+ if (extra) {
+ IntRect dummy; // inval area, unused for now
+ extra->draw(canvas, compositeLayer, &dummy);
}
#endif
return ret;
@@ -1983,6 +1983,25 @@ static jint nativeFocusCandidateFramePointer(JNIEnv *env, jobject obj)
return reinterpret_cast<int>(frame ? frame->framePointer() : 0);
}
+static bool nativeFocusCandidateIsEditableText(JNIEnv* env, jobject obj,
+ jint nativeClass)
+{
+ WebView* view = reinterpret_cast<WebView*>(nativeClass);
+ CachedRoot* root = view->getFrameCache(WebView::DontAllowNewer);
+ bool isEditable = false;
+ if (root) {
+ const CachedFrame* frame = NULL;
+ const CachedNode* cursor = root->currentCursor(&frame);
+ const CachedNode* focus = cursor;
+ if (!cursor || !cursor->wantsKeyEvents())
+ focus = root->currentFocus(&frame);
+ if (focus) {
+ isEditable = (focus->isTextInput() || focus->isContentEditable());
+ }
+ }
+ return isEditable;
+}
+
static bool nativeFocusCandidateIsPassword(JNIEnv *env, jobject obj)
{
const CachedInput* input = getInputCandidate(env, obj);
@@ -2295,8 +2314,9 @@ static int nativeFindAll(JNIEnv *env, jobject obj, jstring findLower,
}
WebView* view = GET_NATIVE_VIEW(env, obj);
ALOG_ASSERT(view, "view not set in nativeFindAll");
- CachedRoot* root = view->getFrameCache(WebView::AllowNewer);
- if (!root) {
+ BaseLayerAndroid* baseLayer = view->getBaseLayer();
+ android::PictureSet* pictureSet = baseLayer ? baseLayer->content() : 0;
+ if (!pictureSet) {
env->ReleaseStringChars(findLower, findLowerChars);
env->ReleaseStringChars(findUpper, findUpperChars);
checkException(env);
@@ -2311,8 +2331,8 @@ static int nativeFindAll(JNIEnv *env, jobject obj, jstring findLower,
checkException(env);
return 0;
}
- int width = root->documentWidth();
- int height = root->documentHeight();
+ int width = pictureSet->width();
+ int height = pictureSet->height();
// Create a FindCanvas, which allows us to fake draw into it so we can
// figure out where our search string is rendered (and how many times).
FindCanvas canvas(width, height, (const UChar*) findLowerChars,
@@ -2321,14 +2341,11 @@ static int nativeFindAll(JNIEnv *env, jobject obj, jstring findLower,
bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
canvas.setBitmapDevice(bitmap);
FindOnPage& findOnPage = view->findOnPage();
- BaseLayerAndroid* baseLayer = view->getBaseLayer();
- if (baseLayer) {
- canvas.setLayerId(-1);
- unsigned matchesBegin = canvas.found();
- baseLayer->drawCanvas(&canvas);
- findOnPage.setLayerMatchRange(-1,
- std::pair<unsigned, unsigned>(matchesBegin, canvas.found()));
- }
+ canvas.setLayerId(-1);
+ unsigned matchesBegin = canvas.found();
+ baseLayer->drawCanvas(&canvas);
+ findOnPage.setLayerMatchRange(-1,
+ std::pair<unsigned, unsigned>(matchesBegin, canvas.found()));
#if USE(ACCELERATED_COMPOSITING)
LayerAndroid* compositeLayer = view->compositeRoot();
if (compositeLayer)
@@ -2583,10 +2600,8 @@ static bool nativeSetProperty(JNIEnv *env, jobject obj, jstring jkey, jstring jv
WTF::String key = jstringToWtfString(env, jkey);
WTF::String value = jstringToWtfString(env, jvalue);
if (key == "inverted") {
- if (value == "true")
- TilesManager::instance()->setInvertedScreen(true);
- else
- TilesManager::instance()->setInvertedScreen(false);
+ bool shouldInvert = (value == "true");
+ TilesManager::instance()->setInvertedScreen(shouldInvert);
return true;
}
else if (key == "inverted_contrast") {
@@ -2603,11 +2618,25 @@ static bool nativeSetProperty(JNIEnv *env, jobject obj, jstring jkey, jstring jv
TilesManager::instance()->setUseMinimalMemory(value == "true");
return true;
}
+ else if (key == "use_double_buffering") {
+ TilesManager::instance()->setUseDoubleBuffering(value == "true");
+ return true;
+ }
+ else if (key == "tree_updates") {
+ TilesManager::instance()->clearTreeUpdates();
+ return true;
+ }
return false;
}
-static jstring nativeGetProperty(JNIEnv *env, jobject obj, jstring key)
+static jstring nativeGetProperty(JNIEnv *env, jobject obj, jstring jkey)
{
+ WTF::String key = jstringToWtfString(env, jkey);
+ if (key == "tree_updates") {
+ int updates = TilesManager::instance()->getTreeUpdates();
+ WTF::String wtfUpdates = WTF::String::number(updates);
+ return wtfStringToJstring(env, wtfUpdates);
+ }
return 0;
}
@@ -2950,6 +2979,8 @@ static JNINativeMethod gJavaWebViewMethods[] = {
(void*) nativeSetPauseDrawing },
{ "nativeDisableNavcache", "()Z",
(void*) nativeDisableNavcache },
+ { "nativeFocusCandidateIsEditableText", "(I)Z",
+ (void*) nativeFocusCandidateIsEditableText },
};
int registerWebView(JNIEnv* env)