summaryrefslogtreecommitdiffstats
path: root/WebKit/android/jni
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/android/jni')
-rw-r--r--WebKit/android/jni/PictureSet.cpp98
-rw-r--r--WebKit/android/jni/PictureSet.h6
-rw-r--r--WebKit/android/jni/WebCoreFrameBridge.cpp3
-rw-r--r--WebKit/android/jni/WebHistory.cpp5
-rw-r--r--WebKit/android/jni/WebViewCore.cpp140
-rw-r--r--WebKit/android/jni/WebViewCore.h9
6 files changed, 135 insertions, 126 deletions
diff --git a/WebKit/android/jni/PictureSet.cpp b/WebKit/android/jni/PictureSet.cpp
index 6f57c67..410769e 100644
--- a/WebKit/android/jni/PictureSet.cpp
+++ b/WebKit/android/jni/PictureSet.cpp
@@ -76,9 +76,9 @@ void PictureSet::add(const Pictures* temp)
void PictureSet::add(const SkRegion& area, SkPicture* picture,
uint32_t elapsed, bool split)
{
- DBG_SET_LOGD("%p {%d,%d,r=%d,b=%d} elapsed=%d split=%d", this,
+ DBG_SET_LOGD("%p area={%d,%d,r=%d,b=%d} pict=%p elapsed=%d split=%d", this,
area.getBounds().fLeft, area.getBounds().fTop,
- area.getBounds().fRight, area.getBounds().fBottom,
+ area.getBounds().fRight, area.getBounds().fBottom, picture,
elapsed, split);
picture->safeRef();
/* if nothing is drawn beneath part of the new picture, mark it as a base */
@@ -207,7 +207,7 @@ void PictureSet::checkDimensions(int width, int height, SkRegion* inval)
void PictureSet::clear()
{
- // dump(__FUNCTION__);
+ DBG_SET_LOG("");
Pictures* last = mPictures.end();
for (Pictures* working = mPictures.begin(); working != last; working++) {
working->mArea.setEmpty();
@@ -219,7 +219,6 @@ void PictureSet::clear()
bool PictureSet::draw(SkCanvas* canvas)
{
- DBG_SET_LOG("");
validate(__FUNCTION__);
Pictures* first = mPictures.begin();
Pictures* last = mPictures.end();
@@ -242,7 +241,7 @@ bool PictureSet::draw(SkCanvas* canvas)
break;
}
}
- DBG_SET_LOGD("first=%d last=%d", first - mPictures.begin(),
+ DBG_SET_LOGD("%p first=%d last=%d", this, first - mPictures.begin(),
last - mPictures.begin());
uint32_t maxElapsed = 0;
for (working = first; working != last; working++) {
@@ -309,20 +308,32 @@ bool PictureSet::draw(SkCanvas* canvas)
void PictureSet::dump(const char* label) const
{
#if PICTURE_SET_DUMP
- DBG_SET_LOGD("%p %s (%d)", this, label, mPictures.size());
+ DBG_SET_LOGD("%p %s (%d) (w=%d,h=%d)", this, label, mPictures.size(),
+ mWidth, mHeight);
const Pictures* last = mPictures.end();
for (const Pictures* working = mPictures.begin(); working != last; working++) {
const SkIRect& bounds = working->mArea.getBounds();
+ const SkIRect& unsplit = working->mUnsplit;
MeasureStream measure;
if (working->mPicture != NULL)
working->mPicture->serialize(&measure);
- LOGD(" [%d] {%d,%d,r=%d,b=%d} elapsed=%d split=%s"
- " wroteElapsed=%s base=%s pictSize=%d",
+ LOGD(" [%d]"
+ " mArea.bounds={%d,%d,r=%d,b=%d}"
+ " mPicture=%p"
+ " mUnsplit={%d,%d,r=%d,b=%d}"
+ " mElapsed=%d"
+ " mSplit=%s"
+ " mWroteElapsed=%s"
+ " mBase=%s"
+ " pict-size=%d",
working - mPictures.begin(),
bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom,
+ working->mPicture,
+ unsplit.fLeft, unsplit.fTop, unsplit.fRight, unsplit.fBottom,
working->mElapsed, working->mSplit ? "true" : "false",
- working->mWroteElapsed ? "true" : "false",
- working->mBase ? "true" : "false", measure.mTotal);
+ working->mWroteElapsed ? "true" : "false",
+ working->mBase ? "true" : "false",
+ measure.mTotal);
}
#endif
}
@@ -465,7 +476,7 @@ bool PictureSet::reuseSubdivided(const SkRegion& inval)
void PictureSet::set(const PictureSet& src)
{
- DBG_SET_LOG("start");
+ DBG_SET_LOGD("start %p src=%p", this, &src);
clear();
mWidth = src.mWidth;
mHeight = src.mHeight;
@@ -514,55 +525,35 @@ void PictureSet::setPicture(size_t i, SkPicture* p)
void PictureSet::split(PictureSet* out) const
{
dump(__FUNCTION__);
+ DBG_SET_LOGD("%p", this);
SkIRect totalBounds;
out->mWidth = mWidth;
out->mHeight = mHeight;
totalBounds.set(0, 0, mWidth, mHeight);
SkRegion* total = new SkRegion(totalBounds);
const Pictures* last = mPictures.end();
+ const Pictures* working;
uint32_t balance = 0;
- bool firstTime = true;
- const Pictures* singleton = NULL;
- int singleOut = -1;
- for (const Pictures* working = mPictures.begin(); working != last; working++) {
+ int multiUnsplitFastPictures = 0; // > 1 has more than 1
+ for (working = mPictures.begin(); working != last; working++) {
+ if (working->mElapsed >= MAX_DRAW_TIME || working->mSplit)
+ continue;
+ if (++multiUnsplitFastPictures > 1)
+ break;
+ }
+ for (working = mPictures.begin(); working != last; working++) {
uint32_t elapsed = working->mElapsed;
if (elapsed < MAX_DRAW_TIME) {
- if (working->mSplit) {
+ bool split = working->mSplit;
+ DBG_SET_LOGD("elapsed=%d working=%p total->getBounds()="
+ "{%d,%d,r=%d,b=%d} split=%s", elapsed, working,
+ total->getBounds().fLeft, total->getBounds().fTop,
+ total->getBounds().fRight, total->getBounds().fBottom,
+ split ? "true" : "false");
+ if (multiUnsplitFastPictures <= 1 || split) {
total->op(working->mArea, SkRegion::kDifference_Op);
- DBG_SET_LOGD("%p total->getBounds()={%d,%d,r=%d,b=%d", this,
- total->getBounds().fLeft, total->getBounds().fTop,
- total->getBounds().fRight, total->getBounds().fBottom);
- singleOut = out->mPictures.end() - out->mPictures.begin();
- out->add(working->mArea, working->mPicture, elapsed, true);
- continue;
- }
- if (firstTime) {
- singleton = working;
- DBG_SET_LOGD("%p firstTime working=%p working->mArea="
- "{%d,%d,r=%d,b=%d}", this, working,
- working->mArea.getBounds().fLeft,
- working->mArea.getBounds().fTop,
- working->mArea.getBounds().fRight,
- working->mArea.getBounds().fBottom);
- out->add(working->mArea, working->mPicture, elapsed, false);
- firstTime = false;
- } else {
- if (singleOut >= 0) {
- Pictures& outWork = out->mPictures[singleOut];
- DBG_SET_LOGD("%p clear singleton outWork=%p outWork->mArea="
- "{%d,%d,r=%d,b=%d}", this, &outWork,
- outWork.mArea.getBounds().fLeft,
- outWork.mArea.getBounds().fTop,
- outWork.mArea.getBounds().fRight,
- outWork.mArea.getBounds().fBottom);
- outWork.mArea.setEmpty();
- outWork.mPicture->safeUnref();
- outWork.mPicture = NULL;
- singleOut = -1;
- }
- singleton = NULL;
- }
- if (balance < elapsed)
+ out->add(working->mArea, working->mPicture, elapsed, split);
+ } else if (balance < elapsed)
balance = elapsed;
continue;
}
@@ -600,9 +591,10 @@ void PictureSet::split(PictureSet* out) const
top = bottom;
}
}
- DBG_SET_LOGD("%p w=%d h=%d total->isEmpty()=%s singleton=%p",
- this, mWidth, mHeight, total->isEmpty() ? "true" : "false", singleton);
- if (total->isEmpty() == false && singleton == NULL)
+ DBG_SET_LOGD("%p w=%d h=%d total->isEmpty()=%s multiUnsplitFastPictures=%d",
+ this, mWidth, mHeight, total->isEmpty() ? "true" : "false",
+ multiUnsplitFastPictures);
+ if (!total->isEmpty() && multiUnsplitFastPictures > 1)
out->add(*total, NULL, balance, false);
delete total;
validate(__FUNCTION__);
diff --git a/WebKit/android/jni/PictureSet.h b/WebKit/android/jni/PictureSet.h
index 17a7b25..ce94fc0 100644
--- a/WebKit/android/jni/PictureSet.h
+++ b/WebKit/android/jni/PictureSet.h
@@ -57,7 +57,7 @@ namespace android {
virtual ~PictureSet();
void add(const SkRegion& area, SkPicture* picture,
uint32_t elapsed, bool split);
- const SkIRect& bounds(size_t i) {
+ const SkIRect& bounds(size_t i) const {
return mPictures[i].mArea.getBounds(); }
bool build();
// Update mWidth/mHeight, and adds any additional inval region
@@ -71,10 +71,10 @@ namespace android {
void set(const PictureSet& );
void setDrawTimes(const PictureSet& );
void setPicture(size_t i, SkPicture* p);
- size_t size() { return mPictures.size(); }
+ size_t size() const { return mPictures.size(); }
void split(PictureSet* result) const;
void toPicture(SkPicture* ) const;
- bool upToDate(size_t i) { return mPictures[i].mPicture != NULL; }
+ bool upToDate(size_t i) const { return mPictures[i].mPicture != NULL; }
int width() const { return mWidth; }
void dump(const char* label) const;
bool validate(const char* label) const;
diff --git a/WebKit/android/jni/WebCoreFrameBridge.cpp b/WebKit/android/jni/WebCoreFrameBridge.cpp
index 860109b..e14a534 100644
--- a/WebKit/android/jni/WebCoreFrameBridge.cpp
+++ b/WebKit/android/jni/WebCoreFrameBridge.cpp
@@ -687,6 +687,9 @@ static void CreateFrame(JNIEnv* env, jobject obj, jobject javaview, jobject jAss
InspectorClientAndroid* inspectorC = new InspectorClientAndroid;
// Create a new page
WebCore::Page* page = new WebCore::Page(chromeC, contextMenuC, editorC, dragC, inspectorC);
+ // css files without explicit MIMETYPE is treated as generic text files in
+ // the Java side. So we can't enforce CSS MIMETYPE.
+ page->settings()->setEnforceCSSMIMETypeInStrictMode(false);
/* TODO: Don't turn on PageCache until we can restore the ScrollView State.
* This caused bug http://b/issue?id=1202983
page->settings()->setUsesPageCache(true);
diff --git a/WebKit/android/jni/WebHistory.cpp b/WebKit/android/jni/WebHistory.cpp
index 028d62e..8a75230 100644
--- a/WebKit/android/jni/WebHistory.cpp
+++ b/WebKit/android/jni/WebHistory.cpp
@@ -231,10 +231,7 @@ jbyteArray WebHistory::Flatten(JNIEnv* env, WTF::Vector<char>& v, WebCore::Histo
return NULL;
// Write our flattened data to the java array.
- jbyte* bytes = env->GetByteArrayElements(b, NULL);
- if (bytes)
- memcpy(bytes, v.data(), v.size());
- env->ReleaseByteArrayElements(b, bytes, 0);
+ env->SetByteArrayRegion(b, 0, v.size(), (const jbyte*)v.data());
return b;
}
diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp
index 64bfd8f..12dc9ef 100644
--- a/WebKit/android/jni/WebViewCore.cpp
+++ b/WebKit/android/jni/WebViewCore.cpp
@@ -280,6 +280,7 @@ void WebViewCore::reset(bool fromConstructor)
m_useReplay = false;
m_skipContentDraw = false;
m_findIsUp = false;
+ m_domtree_version = 0;
}
static bool layoutIfNeededRecursive(WebCore::Frame* f)
@@ -382,16 +383,19 @@ void WebViewCore::recordPictureSet(PictureSet* content)
m_frameCacheOutOfDate = true;
WebCore::IntRect oldBounds = oldFocusNode ?
oldFocusNode->getRect() : WebCore::IntRect(0,0,0,0);
- DBG_NAV_LOGD_THROTTLE("m_lastFocused=%p oldFocusNode=%p"
+ DBG_NAV_LOGD("m_lastFocused=%p oldFocusNode=%p"
" m_lastFocusedBounds={%d,%d,%d,%d} oldBounds={%d,%d,%d,%d}",
m_lastFocused, oldFocusNode,
m_lastFocusedBounds.x(), m_lastFocusedBounds.y(), m_lastFocusedBounds.width(), m_lastFocusedBounds.height(),
oldBounds.x(), oldBounds.y(), oldBounds.width(), oldBounds.height());
+ unsigned latestVersion = m_mainFrame->document()->domTreeVersion();
if (m_lastFocused != oldFocusNode || m_lastFocusedBounds != oldBounds
- || m_findIsUp) {
+ || m_findIsUp || latestVersion != m_domtree_version) {
m_lastFocused = oldFocusNode;
m_lastFocusedBounds = oldBounds;
- DBG_NAV_LOG("call updateFrameCache");
+ DBG_NAV_LOGD("call updateFrameCache m_domtree_version=%d latest=%d",
+ m_domtree_version, latestVersion);
+ m_domtree_version = latestVersion;
updateFrameCache();
}
}
@@ -508,8 +512,8 @@ void WebViewCore::rebuildPictureSet(PictureSet* pictureSet)
if (pictureSet->upToDate(index))
continue;
const SkIRect& inval = pictureSet->bounds(index);
- DBG_SET_LOGD("draw [%d] {%d,%d,w=%d,h=%d}", index, inval.fLeft,
- inval.fTop, inval.width(), inval.height());
+ DBG_SET_LOGD("pictSet=%p [%d] {%d,%d,w=%d,h=%d}", pictureSet, index,
+ inval.fLeft, inval.fTop, inval.width(), inval.height());
pictureSet->setPicture(index, rebuildPicture(inval));
}
pictureSet->validate(__FUNCTION__);
@@ -599,21 +603,13 @@ void WebViewCore::sendRecomputeFocus()
checkException(env);
}
-void WebViewCore::viewInvalidate(const SkIRect& rect)
-{
- LOG_ASSERT(m_javaGlue->m_obj, "A Java widget was not associated with this view bridge!");
- JNIEnv* env = JSC::Bindings::getJNIEnv();
- env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_sendViewInvalidate,
- rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
- checkException(env);
-}
-
void WebViewCore::viewInvalidate(const WebCore::IntRect& rect)
-{
+{
LOG_ASSERT(m_javaGlue->m_obj, "A Java widget was not associated with this view bridge!");
JNIEnv* env = JSC::Bindings::getJNIEnv();
- env->CallVoidMethod(m_javaGlue->object(env).get(), m_javaGlue->m_sendViewInvalidate,
- rect.x(), rect.y(), rect.right(), rect.bottom());
+ env->CallVoidMethod(m_javaGlue->object(env).get(),
+ m_javaGlue->m_sendViewInvalidate,
+ rect.x(), rect.y(), rect.right(), rect.bottom());
checkException(env);
}
@@ -749,12 +745,12 @@ void WebViewCore::setScrollOffset(int dx, int dy)
if (m_scrollOffsetX != dx || m_scrollOffsetY != dy) {
m_scrollOffsetX = dx;
m_scrollOffsetY = dy;
- m_mainFrame->sendScrollEvent();
// The visible rect is located within our coordinate space so it
// contains the actual scroll position. Setting the location makes hit
// testing work correctly.
m_mainFrame->view()->platformWidget()->setLocation(m_scrollOffsetX,
m_scrollOffsetY);
+ m_mainFrame->sendScrollEvent();
}
}
@@ -1011,7 +1007,10 @@ void WebViewCore::drawPlugins()
if (!inval.isEmpty()) {
// inval.getBounds() is our rectangle
- this->viewInvalidate(inval.getBounds());
+ const SkIRect& bounds = inval.getBounds();
+ WebCore::IntRect r(bounds.fLeft, bounds.fTop,
+ bounds.width(), bounds.height());
+ this->viewInvalidate(r);
}
}
@@ -1021,7 +1020,7 @@ void WebViewCore::setFinalFocus(WebCore::Frame* frame, WebCore::Node* node,
int x, int y, bool block)
{
DBG_NAV_LOGD("frame=%p node=%p x=%d y=%d", frame, node, x, y);
- bool result = finalKitFocus(frame, node, x, y);
+ bool result = finalKitFocus(frame, node, x, y, false);
if (block) {
m_blockFocusChange = true;
if (!result && node)
@@ -1082,12 +1081,16 @@ bool WebViewCore::commonKitFocus(int generation, int buildGeneration,
releaseFrameCache(newCache);
if (!node && ignoreNullFocus)
return true;
- finalKitFocus(frame, node, x, y);
+ finalKitFocus(frame, node, x, y, false);
return true;
}
+// Update mouse position and may change focused node.
+// If donotChangeDOMFocus is true, the function does not changed focused node
+// in the DOM tree. Changing the focus in DOM may trigger onblur event
+// handler on the current focused node before firing mouse up and down events.
bool WebViewCore::finalKitFocus(WebCore::Frame* frame, WebCore::Node* node,
- int x, int y)
+ int x, int y, bool donotChangeDOMFocus)
{
if (!frame)
frame = m_mainFrame;
@@ -1103,41 +1106,48 @@ bool WebViewCore::finalKitFocus(WebCore::Frame* frame, WebCore::Node* node,
WebCore::MouseEventMoved, 1, false, false, false, false, WebCore::currentTime());
frame->eventHandler()->handleMouseMoveEvent(mouseEvent);
}
- WebCore::Document* oldDoc = oldFocusNode ? oldFocusNode->document() : 0;
- if (!node) {
- if (oldFocusNode)
- oldDoc->setFocusedNode(0);
- return false;
- } else if (!valid) {
- DBG_NAV_LOGD("sendMarkNodeInvalid node=%p", node);
- sendMarkNodeInvalid(node);
- if (oldFocusNode)
+
+ if (!donotChangeDOMFocus) {
+ WebCore::Document* oldDoc = oldFocusNode ? oldFocusNode->document() : 0;
+ if (!node) {
+ if (oldFocusNode)
+ oldDoc->setFocusedNode(0);
+ return false;
+ } else if (!valid) {
+ DBG_NAV_LOGD("sendMarkNodeInvalid node=%p", node);
+ sendMarkNodeInvalid(node);
+ if (oldFocusNode)
+ oldDoc->setFocusedNode(0);
+ return false;
+ }
+ // If we jump frames (docs), kill the focus on the old doc
+ if (oldFocusNode && node->document() != oldDoc) {
oldDoc->setFocusedNode(0);
- return false;
- }
- // If we jump frames (docs), kill the focus on the old doc
- builder.setLastFocus(node);
- if (oldFocusNode && node->document() != oldDoc) {
- oldDoc->setFocusedNode(0);
- }
- if (!node->isTextNode())
- static_cast<WebCore::Element*>(node)->focus(false);
- if (node->document()->focusedNode() != node) {
- // This happens when Element::focus() fails as we may try to set the
- // focus to a node which WebCore doesn't recognize as a focusable node.
- // So we need to do some extra work, as it does in Element::focus(),
- // besides calling Document::setFocusedNode.
- if (oldFocusNode) {
- // copied from clearSelectionIfNeeded in FocusController.cpp
- WebCore::SelectionController* s = oldDoc->frame()->selection();
- if (!s->isNone())
- s->clear();
}
- //setFocus on things that WebCore doesn't recognize as supporting focus
- //for instance, if there is an onclick element that does not support focus
- node->document()->setFocusedNode(node);
+ if (!node->isTextNode())
+ static_cast<WebCore::Element*>(node)->focus(false);
+ if (node->document()->focusedNode() != node) {
+ // This happens when Element::focus() fails as we may try to set the
+ // focus to a node which WebCore doesn't recognize as a focusable node.
+ // So we need to do some extra work, as it does in Element::focus(),
+ // besides calling Document::setFocusedNode.
+ if (oldFocusNode) {
+ // copied from clearSelectionIfNeeded in FocusController.cpp
+ WebCore::SelectionController* s = oldDoc->frame()->selection();
+ if (!s->isNone())
+ s->clear();
+ }
+ //setFocus on things that WebCore doesn't recognize as supporting focus
+ //for instance, if there is an onclick element that does not support focus
+ node->document()->setFocusedNode(node);
+ }
+ } else { // !donotChangeDOMFocus
+ if (!node || !valid)
+ return false;
}
+
DBG_NAV_LOGD("setFocusedNode node=%p", node);
+ builder.setLastFocus(node);
m_lastFocused = node;
m_lastFocusedBounds = node->getRect();
return true;
@@ -1175,7 +1185,7 @@ WebCore::Frame* WebViewCore::changedKitFocus(WebCore::Frame* frame,
WebCore::Node* current = FrameLoaderClientAndroid::get(m_mainFrame)->getCacheBuilder().currentFocus();
if (current == node)
return frame;
- return finalKitFocus(frame, node, x, y) ? frame : m_mainFrame;
+ return finalKitFocus(frame, node, x, y, false) ? frame : m_mainFrame;
}
static int findTextBoxIndex(WebCore::Node* node, const WebCore::IntPoint& pt)
@@ -1470,6 +1480,10 @@ public:
// index is listIndex of the selected item, or -1 if nothing is selected.
virtual void replyInt(int index)
{
+ if (-2 == index) {
+ // Special value for cancel. Do nothing.
+ return;
+ }
// If the select element no longer exists, do to a page change, etc, silently return.
if (!m_select || !FrameLoaderClientAndroid::get(m_viewImpl->m_mainFrame)->getCacheBuilder().validNode(m_frame, m_select))
return;
@@ -1493,8 +1507,8 @@ public:
}
// Response if the listbox allows multiple selection. array stores the listIndices
- // of selected positions.
- virtual void replyIntArray(const int* array, int count)
+ // of selected positions.
+ virtual void replyIntArray(const int* array, int count)
{
// If the select element no longer exists, do to a page change, etc, silently return.
if (!m_select || !FrameLoaderClientAndroid::get(m_viewImpl->m_mainFrame)->getCacheBuilder().validNode(m_frame, m_select))
@@ -1540,9 +1554,9 @@ static jobjectArray makeLabelArray(JNIEnv* env, const uint16_t** labels, size_t
void WebViewCore::listBoxRequest(WebCoreReply* reply, const uint16_t** labels, size_t count, const int enabled[], size_t enabledCount,
bool multiple, const int selected[], size_t selectedCountOrSelection)
{
- // Reuse m_popupReply
- Release(m_popupReply);
- m_popupReply = 0;
+ // If m_popupReply is not null, then we already have a list showing.
+ if (m_popupReply != 0)
+ return;
LOG_ASSERT(m_javaGlue->m_obj, "No java widget associated with this view!");
@@ -1661,7 +1675,7 @@ void WebViewCore::touchUp(int touchGeneration, int buildGeneration,
return; // short circuit if a newer touch has been generated
}
if (retry)
- finalKitFocus(frame, node, x, y);
+ finalKitFocus(frame, node, x, y, true); // don't change DOM focus
else if (!commonKitFocus(touchGeneration, buildGeneration,
frame, node, x, y, false)) {
return;
@@ -1692,7 +1706,7 @@ bool WebViewCore::handleMouseClick(WebCore::Frame* framePtr, WebCore::Node* node
// so when attempting to get the default, the point chosen would be follow the wrong link.
if (nodePtr->hasTagName(WebCore::HTMLNames::areaTag)) {
webFrame->setUserInitiatedClick(true);
- WebCore::EventTargetNodeCast(nodePtr)->dispatchSimulatedClick(0,
+ WebCore::EventTargetNodeCast(nodePtr)->dispatchSimulatedClick(0,
true, true);
webFrame->setUserInitiatedClick(false);
return true;
@@ -1940,7 +1954,7 @@ static void SetScrollOffset(JNIEnv *env, jobject obj, jint dx, jint dy)
viewImpl->setScrollOffset(dx, dy);
}
-static void SetGlobalBounds(JNIEnv *env, jobject obj, jint x, jint y, jint h,
+static void SetGlobalBounds(JNIEnv *env, jobject obj, jint x, jint y, jint h,
jint v)
{
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
@@ -1949,7 +1963,7 @@ static void SetGlobalBounds(JNIEnv *env, jobject obj, jint x, jint y, jint h,
viewImpl->setGlobalBounds(x, y, h, v);
}
-static jboolean Key(JNIEnv *env, jobject obj, jint keyCode, jint unichar,
+static jboolean Key(JNIEnv *env, jobject obj, jint keyCode, jint unichar,
jint repeatCount, jboolean isShift, jboolean isAlt, jboolean isDown)
{
#ifdef ANDROID_INSTRUMENT
diff --git a/WebKit/android/jni/WebViewCore.h b/WebKit/android/jni/WebViewCore.h
index fcd5574..29bdf37 100644
--- a/WebKit/android/jni/WebViewCore.h
+++ b/WebKit/android/jni/WebViewCore.h
@@ -119,9 +119,11 @@ namespace android {
*/
void contentDraw();
- // invalidate the view/display, NOT the content/DOM
+ /** Invalidate the view/screen, NOT the content/DOM, but expressed in
+ * content/DOM coordinates (i.e. they need to eventually be scaled,
+ * by webview into view.java coordinates
+ */
void viewInvalidate(const WebCore::IntRect& rect);
- void viewInvalidate(const SkIRect& rect);
/**
* Invalidate part of the content that may be offscreen at the moment
@@ -381,6 +383,7 @@ namespace android {
WebCore::Node* m_snapAnchorNode;
int m_screenWidth;
int m_scale;
+ unsigned m_domtree_version;
SkTDArray<PluginWidgetAndroid*> m_plugins;
WebCore::Timer<WebViewCore> m_pluginInvalTimer;
@@ -393,7 +396,7 @@ namespace android {
bool commonKitFocus(int generation, int buildGeneration,
WebCore::Frame* frame, WebCore::Node* node, int x, int y,
bool ignoreNullFocus);
- bool finalKitFocus(WebCore::Frame* frame, WebCore::Node* node, int x, int y);
+ bool finalKitFocus(WebCore::Frame* frame, WebCore::Node* node, int x, int y, bool donotChangeDOMFocus);
void doMaxScroll(CacheBuilder::Direction dir);
SkPicture* rebuildPicture(const SkIRect& inval);
void rebuildPictureSet(PictureSet* );