diff options
author | Cary Clark <cary@android.com> | 2010-11-08 11:35:24 -0500 |
---|---|---|
committer | Cary Clark <cary@android.com> | 2010-11-08 15:33:48 -0500 |
commit | f1610d01f92cb77827d2de13c0ed38554e4f0790 (patch) | |
tree | 4d10890cc77381af3dc3a55d98c0bf8a0b0866cd /WebCore | |
parent | 9934d5d8bbc7e1f13e620eac325528f9e92d67ee (diff) | |
download | external_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.h | 3 | ||||
-rw-r--r-- | WebCore/dom/Document.cpp | 3 | ||||
-rw-r--r-- | WebCore/dom/Document.h | 8 | ||||
-rw-r--r-- | WebCore/dom/Element.cpp | 3 |
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(); } |