Title: [164678] trunk/Source
Revision
164678
Author
[email protected]
Date
2014-02-25 15:28:36 -0800 (Tue, 25 Feb 2014)

Log Message

Simplify visited link style invalidation
https://bugs.webkit.org/show_bug.cgi?id=129340

Reviewed by Dan Bernstein.

Source/WebCore:

Get rid of the static Page::allVisitedStateChanged and Page::visitedStateChanged
member functions and add functions to invalidate all styles on a single page or the style
for a single link hash on a single page.

* WebCore.exp.in:
* page/Page.cpp:
(WebCore::Page::invalidateStylesForAllLinks):
(WebCore::Page::invalidateStylesForLink):
* page/Page.h:
* page/PageGroup.cpp:
(WebCore::PageGroup::addVisitedLink):
(WebCore::PageGroup::removeVisitedLink):
(WebCore::PageGroup::removeVisitedLinks):

Source/WebKit2:

* UIProcess/VisitedLinkProvider.cpp:
(WebKit::VisitedLinkProvider::addVisitedLink):
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::visitedLinkStateChanged):
(WebKit::WebProcess::allVisitedLinkStateChanged):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (164677 => 164678)


--- trunk/Source/WebCore/ChangeLog	2014-02-25 23:17:08 UTC (rev 164677)
+++ trunk/Source/WebCore/ChangeLog	2014-02-25 23:28:36 UTC (rev 164678)
@@ -1,3 +1,24 @@
+2014-02-25  Anders Carlsson  <[email protected]>
+
+        Simplify visited link style invalidation
+        https://bugs.webkit.org/show_bug.cgi?id=129340
+
+        Reviewed by Dan Bernstein.
+
+        Get rid of the static Page::allVisitedStateChanged and Page::visitedStateChanged
+        member functions and add functions to invalidate all styles on a single page or the style
+        for a single link hash on a single page.
+
+        * WebCore.exp.in:
+        * page/Page.cpp:
+        (WebCore::Page::invalidateStylesForAllLinks):
+        (WebCore::Page::invalidateStylesForLink):
+        * page/Page.h:
+        * page/PageGroup.cpp:
+        (WebCore::PageGroup::addVisitedLink):
+        (WebCore::PageGroup::removeVisitedLink):
+        (WebCore::PageGroup::removeVisitedLinks):
+
 2014-02-25  Andreas Kling  <[email protected]>
 
         Remove unused ThreadSpecificInspectorCounters.

Modified: trunk/Source/WebCore/WebCore.exp.in (164677 => 164678)


--- trunk/Source/WebCore/WebCore.exp.in	2014-02-25 23:17:08 UTC (rev 164677)
+++ trunk/Source/WebCore/WebCore.exp.in	2014-02-25 23:28:36 UTC (rev 164678)
@@ -1021,19 +1021,19 @@
 __ZN7WebCore4Page19addHeaderWithHeightEi
 #endif
 __ZN7WebCore4Page19addLayoutMilestonesEj
-__ZN7WebCore4Page19visitedStateChangedEPNS_9PageGroupEy
 __ZN7WebCore4Page20setDeviceScaleFactorEf
 __ZN7WebCore4Page20unmarkAllTextMatchesEv
 __ZN7WebCore4Page21markAllMatchesForTextERKN3WTF6StringEjbj
 __ZN7WebCore4Page21resumeAnimatingImagesEv
-__ZN7WebCore4Page22allVisitedStateChangedEPNS_9PageGroupE
 __ZN7WebCore4Page22nonFastScrollableRectsEPKNS_5FrameE
 __ZN7WebCore4Page22removeLayoutMilestonesEj
 __ZN7WebCore4Page23clearUndoRedoOperationsEv
+__ZN7WebCore4Page23invalidateStylesForLinkEy
 __ZN7WebCore4Page24findStringMatchingRangesERKN3WTF6StringEjiPNS1_6VectorINS1_6RefPtrINS_5RangeEEELm0ENS1_15CrashOnOverflowEEERi
 __ZN7WebCore4Page24resumeScriptedAnimationsEv
 __ZN7WebCore4Page24scrollingStateTreeAsTextEv
 __ZN7WebCore4Page25suspendScriptedAnimationsEv
+__ZN7WebCore4Page27invalidateStylesForAllLinksEv
 __ZN7WebCore4Page33synchronousScrollingReasonsAsTextEv
 __ZN7WebCore4Page32setMemoryCacheClientCallsEnabledEb
 __ZN7WebCore4Page35resumeActiveDOMObjectsAndAnimationsEv

Modified: trunk/Source/WebCore/page/Page.cpp (164677 => 164678)


--- trunk/Source/WebCore/page/Page.cpp	2014-02-25 23:17:08 UTC (rev 164677)
+++ trunk/Source/WebCore/page/Page.cpp	2014-02-25 23:28:36 UTC (rev 164678)
@@ -932,36 +932,16 @@
         (*it)->removeVisitedLinks();
 }
 
-void Page::allVisitedStateChanged(PageGroup* group)
+void Page::invalidateStylesForAllLinks()
 {
-    ASSERT(group);
-    if (!allPages)
-        return;
-
-    HashSet<Page*>::iterator pagesEnd = allPages->end();
-    for (HashSet<Page*>::iterator it = allPages->begin(); it != pagesEnd; ++it) {
-        Page* page = *it;
-        if (page->m_group != group)
-            continue;
-        for (Frame* frame = page->m_mainFrame.get(); frame; frame = frame->tree().traverseNext())
-            frame->document()->visitedLinkState().invalidateStyleForAllLinks();
-    }
+    for (Frame* frame = m_mainFrame.get(); frame; frame = frame->tree().traverseNext())
+        frame->document()->visitedLinkState().invalidateStyleForAllLinks();
 }
 
-void Page::visitedStateChanged(PageGroup* group, LinkHash linkHash)
+void Page::invalidateStylesForLink(LinkHash linkHash)
 {
-    ASSERT(group);
-    if (!allPages)
-        return;
-
-    HashSet<Page*>::iterator pagesEnd = allPages->end();
-    for (HashSet<Page*>::iterator it = allPages->begin(); it != pagesEnd; ++it) {
-        Page* page = *it;
-        if (page->m_group != group)
-            continue;
-        for (Frame* frame = page->m_mainFrame.get(); frame; frame = frame->tree().traverseNext())
-            frame->document()->visitedLinkState().invalidateStyleForLink(linkHash);
-    }
+    for (Frame* frame = m_mainFrame.get(); frame; frame = frame->tree().traverseNext())
+        frame->document()->visitedLinkState().invalidateStyleForLink(linkHash);
 }
 
 void Page::setDebugger(JSC::Debugger* debugger)

Modified: trunk/Source/WebCore/page/Page.h (164677 => 164678)


--- trunk/Source/WebCore/page/Page.h	2014-02-25 23:17:08 UTC (rev 164677)
+++ trunk/Source/WebCore/page/Page.h	2014-02-25 23:28:36 UTC (rev 164678)
@@ -317,8 +317,8 @@
 
     static void removeAllVisitedLinks();
 
-    static void allVisitedStateChanged(PageGroup*);
-    static void visitedStateChanged(PageGroup*, LinkHash visitedHash);
+    void invalidateStylesForAllLinks();
+    void invalidateStylesForLink(LinkHash);
 
     StorageNamespace* sessionStorage(bool optionalCreate = true);
     void setSessionStorage(PassRefPtr<StorageNamespace>);

Modified: trunk/Source/WebCore/page/PageGroup.cpp (164677 => 164678)


--- trunk/Source/WebCore/page/PageGroup.cpp	2014-02-25 23:17:08 UTC (rev 164677)
+++ trunk/Source/WebCore/page/PageGroup.cpp	2014-02-25 23:28:36 UTC (rev 164678)
@@ -207,7 +207,8 @@
     ASSERT(shouldTrackVisitedLinks);
     if (!m_visitedLinkHashes.add(hash).isNewEntry)
         return;
-    Page::visitedStateChanged(this, hash);
+    for (auto& page : m_pages)
+        page->invalidateStylesForLink(hash);
     pageCache()->markPagesForVistedLinkStyleRecalc();
 }
 
@@ -232,7 +233,9 @@
     ASSERT(m_visitedLinkHashes.contains(hash));
     m_visitedLinkHashes.remove(hash);
 
-    Page::allVisitedStateChanged(this);
+    // FIXME: Why can't we just invalidate the single visited link hash here?
+    for (auto& page : m_pages)
+        page->invalidateStylesForAllLinks();
     pageCache()->markPagesForVistedLinkStyleRecalc();
 }
 
@@ -242,7 +245,9 @@
     if (m_visitedLinkHashes.isEmpty())
         return;
     m_visitedLinkHashes.clear();
-    Page::allVisitedStateChanged(this);
+
+    for (auto& page : m_pages)
+        page->invalidateStylesForAllLinks();
     pageCache()->markPagesForVistedLinkStyleRecalc();
 }
 

Modified: trunk/Source/WebKit2/ChangeLog (164677 => 164678)


--- trunk/Source/WebKit2/ChangeLog	2014-02-25 23:17:08 UTC (rev 164677)
+++ trunk/Source/WebKit2/ChangeLog	2014-02-25 23:28:36 UTC (rev 164678)
@@ -1,5 +1,18 @@
 2014-02-25  Anders Carlsson  <[email protected]>
 
+        Simplify visited link style invalidation
+        https://bugs.webkit.org/show_bug.cgi?id=129340
+
+        Reviewed by Dan Bernstein.
+
+        * UIProcess/VisitedLinkProvider.cpp:
+        (WebKit::VisitedLinkProvider::addVisitedLink):
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::visitedLinkStateChanged):
+        (WebKit::WebProcess::allVisitedLinkStateChanged):
+
+2014-02-25  Anders Carlsson  <[email protected]>
+
         Fix build.
 
         Remove VisitedLinkStrategy.

Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (164677 => 164678)


--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp	2014-02-25 23:17:08 UTC (rev 164677)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp	2014-02-25 23:28:36 UTC (rev 164678)
@@ -506,11 +506,11 @@
 void WebProcess::visitedLinkStateChanged(const Vector<WebCore::LinkHash>& linkHashes)
 {
     // FIXME: We may want to track visited links per WebPageGroup rather than per WebContext.
-    for (size_t i = 0; i < linkHashes.size(); ++i) {
-        HashMap<uint64_t, RefPtr<WebPageGroupProxy>>::const_iterator it = m_pageGroupMap.begin();
-        HashMap<uint64_t, RefPtr<WebPageGroupProxy>>::const_iterator end = m_pageGroupMap.end();
-        for (; it != end; ++it)
-            Page::visitedStateChanged(PageGroup::pageGroup(it->value->identifier()), linkHashes[i]);
+    for (const auto& webPage : m_pageMap.values()) {
+        if (Page* page = webPage->corePage()) {
+            for (auto linkHash : linkHashes)
+                page->invalidateStylesForLink(linkHash);
+        }
     }
 
     pageCache()->markPagesForVistedLinkStyleRecalc();
@@ -518,11 +518,10 @@
 
 void WebProcess::allVisitedLinkStateChanged()
 {
-    // FIXME: We may want to track visited links per WebPageGroup rather than per WebContext.
-    HashMap<uint64_t, RefPtr<WebPageGroupProxy>>::const_iterator it = m_pageGroupMap.begin();
-    HashMap<uint64_t, RefPtr<WebPageGroupProxy>>::const_iterator end = m_pageGroupMap.end();
-    for (; it != end; ++it)
-        Page::allVisitedStateChanged(PageGroup::pageGroup(it->value->identifier()));
+    for (const auto& webPage : m_pageMap.values()) {
+        if (Page* page = webPage->corePage())
+            page->invalidateStylesForAllLinks();
+    }
 
     pageCache()->markPagesForVistedLinkStyleRecalc();
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to