diff options
Diffstat (limited to 'WebKit')
| -rw-r--r-- | WebKit/android/jni/WebViewCore.cpp | 19 | ||||
| -rw-r--r-- | WebKit/android/nav/WebView.cpp | 3 |
2 files changed, 18 insertions, 4 deletions
diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp index 4bba71a..5bcfae3 100644 --- a/WebKit/android/jni/WebViewCore.cpp +++ b/WebKit/android/jni/WebViewCore.cpp @@ -569,6 +569,11 @@ void WebViewCore::recordPictureSet(PictureSet* content) DBG_SET_LOG("!m_mainFrame->document()"); return; } + // If there is a pending style recalculation, just return. + if (m_mainFrame->document()->isPendingStyleRecalc()) { + LOGW("recordPictureSet: pending style recalc, ignoring."); + return; + } if (m_addInval.isEmpty()) { DBG_SET_LOG("m_addInval.isEmpty()"); return; @@ -1116,9 +1121,7 @@ void WebViewCore::requestKeyboard(bool showKeyboard) void WebViewCore::notifyProgressFinished() { - DBG_NAV_LOG("call updateFrameCache"); m_check_domtree_version = true; - updateFrameCache(); sendNotifyProgressFinished(); } @@ -1515,6 +1518,18 @@ void WebViewCore::updateFrameCache() DBG_NAV_LOG("!m_frameCacheOutOfDate"); return; } + + // If there is a pending style recalculation, do not update the frame cache. + // Until the recalculation is complete, there may be internal objects that + // are in an inconsistent state (such as font pointers). + // In any event, there's not much point to updating the cache while a style + // recalculation is pending, since it will simply have to be updated again + // once the recalculation is complete. + // TODO: Do we need to reschedule an update for after the style is recalculated? + if (m_mainFrame && m_mainFrame->document() && m_mainFrame->document()->isPendingStyleRecalc()) { + LOGW("updateFrameCache: pending style recalc, ignoring."); + return; + } #ifdef ANDROID_INSTRUMENT TimeCounterAuto counter(TimeCounter::WebViewCoreBuildNavTimeCounter); #endif diff --git a/WebKit/android/nav/WebView.cpp b/WebKit/android/nav/WebView.cpp index fe69eae..f4f8ce0 100644 --- a/WebKit/android/nav/WebView.cpp +++ b/WebKit/android/nav/WebView.cpp @@ -950,6 +950,7 @@ void selectBestAt(const WebCore::IntRect& rect) const CachedNode* node = findAt(root, rect, &frame, &rx, &ry); if (!node) { DBG_NAV_LOGD("no nodes found root=%p", root); + root->rootHistory()->setMouseBounds(rect); m_viewImpl->m_hasCursorBounds = false; root->setCursor(0, 0); viewInvalidate(); @@ -963,8 +964,6 @@ void selectBestAt(const WebCore::IntRect& rect) const_cast<CachedNode*>(node)); } sendMoveMouseIfLatest(false, false); - if (!node) - return; } const CachedNode* m_cacheHitNode; |
