summaryrefslogtreecommitdiffstats
path: root/WebCore
diff options
context:
space:
mode:
authorCary Clark <cary@android.com>2010-11-08 11:35:24 -0500
committerCary Clark <cary@android.com>2010-11-08 15:33:48 -0500
commitf1610d01f92cb77827d2de13c0ed38554e4f0790 (patch)
tree4d10890cc77381af3dc3a55d98c0bf8a0b0866cd /WebCore
parent9934d5d8bbc7e1f13e620eac325528f9e92d67ee (diff)
downloadexternal_webkit-f1610d01f92cb77827d2de13c0ed38554e4f0790.zip
external_webkit-f1610d01f92cb77827d2de13c0ed38554e4f0790.tar.gz
external_webkit-f1610d01f92cb77827d2de13c0ed38554e4f0790.tar.bz2
update dom version on style change
The DOM version number is used to know when the nav cache is out of date. Webkit changes the version when DOM attributes change, but not when the CSS style property changes. Tracking the style version fixes Google properties like the 'Options' menu that is available on mobile devices after a search. Additionally, fix a crash if the root layer doesn't exist. And, rebuild the nav cache always on touch. bug:2628448 Change-Id: I50aa258c1b057ac7deed00f6eca37c0ee323efcf
Diffstat (limited to 'WebCore')
-rw-r--r--WebCore/config.h3
-rw-r--r--WebCore/dom/Document.cpp3
-rw-r--r--WebCore/dom/Document.h8
-rw-r--r--WebCore/dom/Element.cpp3
4 files changed, 17 insertions, 0 deletions
diff --git a/WebCore/config.h b/WebCore/config.h
index 70f8a20..5c3a48c 100644
--- a/WebCore/config.h
+++ b/WebCore/config.h
@@ -202,6 +202,9 @@
// apple-touch-icon support in <link> tags
#define ANDROID_APPLE_TOUCH_ICON
+// track changes to the style that may change what is drawn
+#define ANDROID_STYLE_VERSION
+
// Enable prefetching when specified via the rel element of <link> elements.
#define ENABLE_LINK_PREFETCH 1
diff --git a/WebCore/dom/Document.cpp b/WebCore/dom/Document.cpp
index 9dfe6a3..9ad263c 100644
--- a/WebCore/dom/Document.cpp
+++ b/WebCore/dom/Document.cpp
@@ -371,6 +371,9 @@ Document::Document(Frame* frame, const KURL& url, bool isXHTML, bool isHTML, con
, m_compatibilityMode(NoQuirksMode)
, m_compatibilityModeLocked(false)
, m_domTreeVersion(0)
+#ifdef ANDROID_STYLE_VERSION
+ , m_styleVersion(0)
+#endif
, m_styleSheets(StyleSheetList::create(this))
, m_readyState(Complete)
, m_styleRecalcTimer(this, &Document::styleRecalcTimerFired)
diff --git a/WebCore/dom/Document.h b/WebCore/dom/Document.h
index 1fb7079..25122b5 100644
--- a/WebCore/dom/Document.h
+++ b/WebCore/dom/Document.h
@@ -873,6 +873,11 @@ public:
void incDOMTreeVersion() { ++m_domTreeVersion; }
unsigned domTreeVersion() const { return m_domTreeVersion; }
+#ifdef ANDROID_STYLE_VERSION
+ void incStyleVersion() { ++m_styleVersion; }
+ unsigned styleVersion() const { return m_styleVersion; }
+#endif
+
void setDocType(PassRefPtr<DocumentType>);
#if ENABLE(XPATH)
@@ -1164,6 +1169,9 @@ private:
mutable RefPtr<Element> m_documentElement;
unsigned m_domTreeVersion;
+#ifdef ANDROID_STYLE_VERSION
+ unsigned m_styleVersion;
+#endif
HashSet<NodeIterator*> m_nodeIterators;
HashSet<Range*> m_ranges;
diff --git a/WebCore/dom/Element.cpp b/WebCore/dom/Element.cpp
index 83e129e..10ba71b 100644
--- a/WebCore/dom/Element.cpp
+++ b/WebCore/dom/Element.cpp
@@ -930,6 +930,9 @@ void Element::recalcStyle(StyleChange change)
#endif
if ((change > NoChange || needsStyleRecalc())) {
+#ifdef ANDROID_STYLE_VERSION
+ document()->incStyleVersion();
+#endif
if (hasRareData())
rareData()->resetComputedStyle();
}