<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[164624] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/164624">164624</a></dd>
<dt>Author</dt> <dd>andersca@apple.com</dd>
<dt>Date</dt> <dd>2014-02-24 19:33:27 -0800 (Mon, 24 Feb 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add a DefaultVisitedLinkProvider and route visited link actions through it
https://bugs.webkit.org/show_bug.cgi?id=129285

Reviewed by Dan Bernstein.

Source/WebCore:

DefaultVisitedLinkProvider currently just forwards everything to the visited link strategy,
but will soon take over the responsibilities of visited link handling from PageGroup.

* CMakeLists.txt:
* GNUmakefile.list.am:
* WebCore.vcxproj/WebCore.vcxproj:
* WebCore.vcxproj/WebCore.vcxproj.filters:
* WebCore.xcodeproj/project.pbxproj:
* dom/VisitedLinkState.cpp:
(WebCore::VisitedLinkState::determineLinkStateSlowCase):
* loader/HistoryController.cpp:
(WebCore::addVisitedLink):
(WebCore::HistoryController::updateForStandardLoad):
(WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
(WebCore::HistoryController::updateForClientRedirect):
(WebCore::HistoryController::updateForSameDocumentNavigation):
(WebCore::HistoryController::pushState):
(WebCore::HistoryController::replaceState):
* page/DefaultVisitedLinkProvider.cpp: Copied from Source/WebCore/page/VisitedLinkProvider.h.
(WebCore::DefaultVisitedLinkProvider::create):
(WebCore::DefaultVisitedLinkProvider::DefaultVisitedLinkProvider):
(WebCore::DefaultVisitedLinkProvider::~DefaultVisitedLinkProvider):
(WebCore::DefaultVisitedLinkProvider::isLinkVisited):
(WebCore::DefaultVisitedLinkProvider::addVisitedLink):
* page/DefaultVisitedLinkProvider.h: Copied from Source/WebCore/page/VisitedLinkProvider.h.
* page/Page.cpp:
(WebCore::Page::visitedLinkProvider):
* page/Page.h:
* page/PageGroup.cpp:
(WebCore::PageGroup::PageGroup):
(WebCore::PageGroup::visitedLinkProvider):
* page/PageGroup.h:
* page/VisitedLinkProvider.h:

Tools:

* MiniBrowser/mac/AppDelegate.m:
(-[BrowserAppDelegate applicationDidFinishLaunching:]):
Set a shared history so we'll get visited link tracking.

* MiniBrowser/mac/WK1BrowserWindowController.m:
(-[WK1BrowserWindowController awakeFromNib]):
Set a group name.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreGNUmakefilelistam">trunk/Source/WebCore/GNUmakefile.list.am</a></li>
<li><a href="#trunkSourceWebCoreWebCorevcxprojWebCorevcxproj">trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj</a></li>
<li><a href="#trunkSourceWebCoreWebCorevcxprojWebCorevcxprojfilters">trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoredomVisitedLinkStatecpp">trunk/Source/WebCore/dom/VisitedLinkState.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderHistoryControllercpp">trunk/Source/WebCore/loader/HistoryController.cpp</a></li>
<li><a href="#trunkSourceWebCorepagePagecpp">trunk/Source/WebCore/page/Page.cpp</a></li>
<li><a href="#trunkSourceWebCorepagePageh">trunk/Source/WebCore/page/Page.h</a></li>
<li><a href="#trunkSourceWebCorepagePageGroupcpp">trunk/Source/WebCore/page/PageGroup.cpp</a></li>
<li><a href="#trunkSourceWebCorepagePageGrouph">trunk/Source/WebCore/page/PageGroup.h</a></li>
<li><a href="#trunkSourceWebCorepageVisitedLinkProviderh">trunk/Source/WebCore/page/VisitedLinkProvider.h</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsMiniBrowsermacAppDelegatem">trunk/Tools/MiniBrowser/mac/AppDelegate.m</a></li>
<li><a href="#trunkToolsMiniBrowsermacWK1BrowserWindowControllerm">trunk/Tools/MiniBrowser/mac/WK1BrowserWindowController.m</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorepageDefaultVisitedLinkProvidercpp">trunk/Source/WebCore/page/DefaultVisitedLinkProvider.cpp</a></li>
<li><a href="#trunkSourceWebCorepageDefaultVisitedLinkProviderh">trunk/Source/WebCore/page/DefaultVisitedLinkProvider.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Source/WebCore/CMakeLists.txt        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -1699,6 +1699,7 @@
</span><span class="cx">     page/DOMWindow.cpp
</span><span class="cx">     page/DOMWindowExtension.cpp
</span><span class="cx">     page/DOMWindowProperty.cpp
</span><ins>+    page/DefaultVisitedLinkProvider.cpp
</ins><span class="cx">     page/DeviceController.cpp
</span><span class="cx">     page/DiagnosticLoggingKeys.cpp
</span><span class="cx">     page/DragController.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Source/WebCore/ChangeLog        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -1,3 +1,44 @@
</span><ins>+2014-02-24  Anders Carlsson  &lt;andersca@apple.com&gt;
+
+        Add a DefaultVisitedLinkProvider and route visited link actions through it
+        https://bugs.webkit.org/show_bug.cgi?id=129285
+
+        Reviewed by Dan Bernstein.
+
+        DefaultVisitedLinkProvider currently just forwards everything to the visited link strategy,
+        but will soon take over the responsibilities of visited link handling from PageGroup.
+        
+        * CMakeLists.txt:
+        * GNUmakefile.list.am:
+        * WebCore.vcxproj/WebCore.vcxproj:
+        * WebCore.vcxproj/WebCore.vcxproj.filters:
+        * WebCore.xcodeproj/project.pbxproj:
+        * dom/VisitedLinkState.cpp:
+        (WebCore::VisitedLinkState::determineLinkStateSlowCase):
+        * loader/HistoryController.cpp:
+        (WebCore::addVisitedLink):
+        (WebCore::HistoryController::updateForStandardLoad):
+        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
+        (WebCore::HistoryController::updateForClientRedirect):
+        (WebCore::HistoryController::updateForSameDocumentNavigation):
+        (WebCore::HistoryController::pushState):
+        (WebCore::HistoryController::replaceState):
+        * page/DefaultVisitedLinkProvider.cpp: Copied from Source/WebCore/page/VisitedLinkProvider.h.
+        (WebCore::DefaultVisitedLinkProvider::create):
+        (WebCore::DefaultVisitedLinkProvider::DefaultVisitedLinkProvider):
+        (WebCore::DefaultVisitedLinkProvider::~DefaultVisitedLinkProvider):
+        (WebCore::DefaultVisitedLinkProvider::isLinkVisited):
+        (WebCore::DefaultVisitedLinkProvider::addVisitedLink):
+        * page/DefaultVisitedLinkProvider.h: Copied from Source/WebCore/page/VisitedLinkProvider.h.
+        * page/Page.cpp:
+        (WebCore::Page::visitedLinkProvider):
+        * page/Page.h:
+        * page/PageGroup.cpp:
+        (WebCore::PageGroup::PageGroup):
+        (WebCore::PageGroup::visitedLinkProvider):
+        * page/PageGroup.h:
+        * page/VisitedLinkProvider.h:
+
</ins><span class="cx"> 2014-02-24  Jeremy Jones  &lt;jeremyj@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         WK2 AVKit fullscreen doesn't display video.
</span></span></pre></div>
<a id="trunkSourceWebCoreGNUmakefilelistam"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/GNUmakefile.list.am (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/GNUmakefile.list.am        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Source/WebCore/GNUmakefile.list.am        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -4070,6 +4070,8 @@
</span><span class="cx">         Source/WebCore/page/DOMWindowExtension.h \
</span><span class="cx">         Source/WebCore/page/DOMWindowProperty.cpp \
</span><span class="cx">         Source/WebCore/page/DOMWindowProperty.h \
</span><ins>+        Source/WebCore/page/DefaultVisitedLinkProvider.cpp \
+        Source/WebCore/page/DefaultVisitedLinkProvider.h \
</ins><span class="cx">         Source/WebCore/page/DragActions.h \
</span><span class="cx">         Source/WebCore/page/DragClient.h \
</span><span class="cx">         Source/WebCore/page/DragController.cpp \
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorevcxprojWebCorevcxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -6977,6 +6977,7 @@
</span><span class="cx">     &lt;ClCompile Include=&quot;..\page\DOMWindow.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\page\DOMWindowExtension.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\page\DOMWindowProperty.cpp&quot; /&gt;
</span><ins>+    &lt;ClCompile Include=&quot;..\page\DefaultVisitedLinkProvider.cpp&quot; /&gt;
</ins><span class="cx">     &lt;ClCompile Include=&quot;..\page\DragController.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\page\scrolling\coordinatedgraphics\ScrollingCoordinatorCoordinatedGraphics.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\page\scrolling\coordinatedgraphics\ScrollingStateNodeCoordinatedGraphics.cpp&quot; /&gt;
</span><span class="lines">@@ -18675,6 +18676,7 @@
</span><span class="cx">     &lt;ClInclude Include=&quot;..\page\DOMWindow.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\page\DOMWindowExtension.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\page\DOMWindowProperty.h&quot; /&gt;
</span><ins>+    &lt;ClInclude Include=&quot;..\page\DefaultVisitedLinkProvider.h&quot; /&gt;
</ins><span class="cx">     &lt;ClInclude Include=&quot;..\page\DragActions.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\page\DragClient.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\page\DragController.h&quot; /&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorevcxprojWebCorevcxprojfilters"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -702,6 +702,9 @@
</span><span class="cx">     &lt;ClCompile Include=&quot;..\page\DOMWindowProperty.cpp&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;page&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClCompile&gt;
</span><ins>+    &lt;ClCompile Include=&quot;..\page\DefaultVisitedLinkProvider.cpp&quot;&gt;
+      &lt;Filter&gt;page&lt;/Filter&gt;
+    &lt;/ClCompile&gt;
</ins><span class="cx">     &lt;ClCompile Include=&quot;..\page\DragController.cpp&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;page&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClCompile&gt;
</span><span class="lines">@@ -7505,6 +7508,9 @@
</span><span class="cx">     &lt;ClInclude Include=&quot;..\page\DOMWindowProperty.h&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;page&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClInclude&gt;
</span><ins>+    &lt;ClCompile Include=&quot;..\page\DefaultVisitedLinkProvider.h&quot;&gt;
+      &lt;Filter&gt;page&lt;/Filter&gt;
+    &lt;/ClCompile&gt;
</ins><span class="cx">     &lt;ClInclude Include=&quot;..\page\DragActions.h&quot;&gt;
</span><span class="cx">       &lt;Filter&gt;page&lt;/Filter&gt;
</span><span class="cx">     &lt;/ClInclude&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -798,7 +798,6 @@
</span><span class="cx">                 1ABA76CA11D20E50004C201C /* CSSPropertyNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E41EA038119836DB00710BC5 /* CSSPropertyNames.cpp */; };
</span><span class="cx">                 1ABA76CB11D20E57004C201C /* CSSValueKeywords.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E41EA0391198374900710BC5 /* CSSValueKeywords.cpp */; };
</span><span class="cx">                 1ABA80001897341200DCE9D6 /* VisitedLinkProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ABA7FFF1897341200DCE9D6 /* VisitedLinkProvider.h */; };
</span><del>-                1ABA80061897355500DCE9D6 /* VisitedLinkProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ABA80051897355500DCE9D6 /* VisitedLinkProvider.cpp */; };
</del><span class="cx">                 1ABC7109170E5E1B00F9A9D6 /* WorkerNavigatorStorageQuota.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ABC7108170E5E1B00F9A9D6 /* WorkerNavigatorStorageQuota.h */; };
</span><span class="cx">                 1AC2260C0DB69F190089B669 /* JSDOMApplicationCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AC2260A0DB69F190089B669 /* JSDOMApplicationCache.cpp */; };
</span><span class="cx">                 1AC2260D0DB69F190089B669 /* JSDOMApplicationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC2260B0DB69F190089B669 /* JSDOMApplicationCache.h */; };
</span><span class="lines">@@ -869,6 +868,9 @@
</span><span class="cx">                 1AEF4E67170E160300AB2799 /* CachedFontClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AEF4E66170E160300AB2799 /* CachedFontClient.h */; };
</span><span class="cx">                 1AEF4E69170E174800AB2799 /* CachedSVGDocumentClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AEF4E68170E174800AB2799 /* CachedSVGDocumentClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 1AF326790D78B9440068F0C4 /* EditorClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF326770D78B9440068F0C4 /* EditorClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                1AF4CEE918BC350100BC2D34 /* DefaultVisitedLinkProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AF4CEE718BC350100BC2D34 /* DefaultVisitedLinkProvider.cpp */; };
+                1AF4CEEA18BC350100BC2D34 /* DefaultVisitedLinkProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF4CEE818BC350100BC2D34 /* DefaultVisitedLinkProvider.h */; };
+                1AF4CEEC18BC3C1B00BC2D34 /* VisitedLinkProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AF4CEEB18BC3C1B00BC2D34 /* VisitedLinkProvider.cpp */; };
</ins><span class="cx">                 1AF62EE614DA22A70041556C /* ScrollingCoordinatorMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AF62EE314DA22A70041556C /* ScrollingCoordinatorMac.mm */; };
</span><span class="cx">                 1AF62EE714DA22A70041556C /* ScrollingCoordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AF62EE414DA22A70041556C /* ScrollingCoordinator.cpp */; };
</span><span class="cx">                 1AF62EE814DA22A70041556C /* ScrollingCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF62EE514DA22A70041556C /* ScrollingCoordinator.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -7577,7 +7579,6 @@
</span><span class="cx">                 1AB7FC660A8B92EC00D9D37B /* XPathVariableReference.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = XPathVariableReference.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 1AB7FC670A8B92EC00D9D37B /* XPathVariableReference.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = XPathVariableReference.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 1ABA7FFF1897341200DCE9D6 /* VisitedLinkProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VisitedLinkProvider.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                1ABA80051897355500DCE9D6 /* VisitedLinkProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VisitedLinkProvider.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 1ABC7108170E5E1B00F9A9D6 /* WorkerNavigatorStorageQuota.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WorkerNavigatorStorageQuota.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 1AC2260A0DB69F190089B669 /* JSDOMApplicationCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMApplicationCache.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 1AC2260B0DB69F190089B669 /* JSDOMApplicationCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDOMApplicationCache.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -7668,6 +7669,9 @@
</span><span class="cx">                 1AEF4E66170E160300AB2799 /* CachedFontClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedFontClient.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 1AEF4E68170E174800AB2799 /* CachedSVGDocumentClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedSVGDocumentClient.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 1AF326770D78B9440068F0C4 /* EditorClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditorClient.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                1AF4CEE718BC350100BC2D34 /* DefaultVisitedLinkProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DefaultVisitedLinkProvider.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                1AF4CEE818BC350100BC2D34 /* DefaultVisitedLinkProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultVisitedLinkProvider.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                1AF4CEEB18BC3C1B00BC2D34 /* VisitedLinkProvider.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VisitedLinkProvider.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 1AF62EE314DA22A70041556C /* ScrollingCoordinatorMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingCoordinatorMac.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 1AF62EE414DA22A70041556C /* ScrollingCoordinator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollingCoordinator.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 1AF62EE514DA22A70041556C /* ScrollingCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingCoordinator.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -16076,6 +16080,8 @@
</span><span class="cx">                                 517FBA18151AA71B00B57959 /* DOMWindowExtension.h */,
</span><span class="cx">                                 97D2AD0114B823A60093DF32 /* DOMWindowProperty.cpp */,
</span><span class="cx">                                 97D2AD0214B823A60093DF32 /* DOMWindowProperty.h */,
</span><ins>+                                1AF4CEE718BC350100BC2D34 /* DefaultVisitedLinkProvider.cpp */,
+                                1AF4CEE818BC350100BC2D34 /* DefaultVisitedLinkProvider.h */,
</ins><span class="cx">                                 A718760D0B2A120100A16ECE /* DragActions.h */,
</span><span class="cx">                                 A7CA59620B27C1F200FA021D /* DragClient.h */,
</span><span class="cx">                                 A7CA595C0B27BD9E00FA021D /* DragController.cpp */,
</span><span class="lines">@@ -16203,7 +16209,7 @@
</span><span class="cx">                                 26F9A83618A046AC00AEB88A /* ViewportConfiguration.cpp */,
</span><span class="cx">                                 26F9A83718A046AC00AEB88A /* ViewportConfiguration.h */,
</span><span class="cx">                                 8678D0BA1878E810003ABDE6 /* ViewState.h */,
</span><del>-                                1ABA80051897355500DCE9D6 /* VisitedLinkProvider.cpp */,
</del><ins>+                                1AF4CEEB18BC3C1B00BC2D34 /* VisitedLinkProvider.cpp */,
</ins><span class="cx">                                 1ABA7FFF1897341200DCE9D6 /* VisitedLinkProvider.h */,
</span><span class="cx">                                 BE983D95052A2E0A00892D85 /* WebCoreKeyboardUIMode.h */,
</span><span class="cx">                                 494BD7930F55C8EE00747828 /* WebKitPoint.h */,
</span><span class="lines">@@ -23999,6 +24005,7 @@
</span><span class="cx">                                 FDA15EBE12B03F0B003A583A /* JSConvolverNode.h in Headers */,
</span><span class="cx">                                 FE6FD48E0F676E9300092873 /* JSCoordinates.h in Headers */,
</span><span class="cx">                                 930705DA09E0C9BF00B17FE4 /* JSCounter.h in Headers */,
</span><ins>+                                1AF4CEEA18BC350100BC2D34 /* DefaultVisitedLinkProvider.h in Headers */,
</ins><span class="cx">                                 975CA2A21303679D00E99AD9 /* JSCrypto.h in Headers */,
</span><span class="cx">                                 E157A8F118185425009F821D /* JSCryptoAlgorithmBuilder.h in Headers */,
</span><span class="cx">                                 E1C657131815F9DD00256CDD /* JSCryptoAlgorithmDictionary.h in Headers */,
</span><span class="lines">@@ -28821,6 +28828,7 @@
</span><span class="cx">                                 B2227AC00D00BF220071B782 /* SVGSymbolElement.cpp in Sources */,
</span><span class="cx">                                 B2227AC40D00BF220071B782 /* SVGTests.cpp in Sources */,
</span><span class="cx">                                 B2227AC70D00BF220071B782 /* SVGTextContentElement.cpp in Sources */,
</span><ins>+                                1AF4CEEC18BC3C1B00BC2D34 /* VisitedLinkProvider.cpp in Sources */,
</ins><span class="cx">                                 B2227ACA0D00BF220071B782 /* SVGTextElement.cpp in Sources */,
</span><span class="cx">                                 B2227ACD0D00BF220071B782 /* SVGTextPathElement.cpp in Sources */,
</span><span class="cx">                                 B2227AD00D00BF220071B782 /* SVGTextPositioningElement.cpp in Sources */,
</span><span class="lines">@@ -28836,6 +28844,7 @@
</span><span class="cx">                                 B2227AEF0D00BF220071B782 /* SVGViewElement.cpp in Sources */,
</span><span class="cx">                                 B2227AF20D00BF220071B782 /* SVGViewSpec.cpp in Sources */,
</span><span class="cx">                                 8485228A1190173C006EDC7F /* SVGVKernElement.cpp in Sources */,
</span><ins>+                                1AF4CEE918BC350100BC2D34 /* DefaultVisitedLinkProvider.cpp in Sources */,
</ins><span class="cx">                                 B2227AF50D00BF220071B782 /* SVGZoomAndPan.cpp in Sources */,
</span><span class="cx">                                 B2E4EC970D00C22B00432643 /* SVGZoomEvent.cpp in Sources */,
</span><span class="cx">                                 E180811216FCF42F00B80D07 /* SynchronousLoaderClient.cpp in Sources */,
</span><span class="lines">@@ -28973,7 +28982,6 @@
</span><span class="cx">                                 93309E1F099E64920056E581 /* VisiblePosition.cpp in Sources */,
</span><span class="cx">                                 A883DF270F3D045D00F19BF6 /* VisibleSelection.cpp in Sources */,
</span><span class="cx">                                 93309E1D099E64920056E581 /* VisibleUnits.cpp in Sources */,
</span><del>-                                1ABA80061897355500DCE9D6 /* VisitedLinkProvider.cpp in Sources */,
</del><span class="cx">                                 419BC2DE1685329900D64D6D /* VisitedLinkState.cpp in Sources */,
</span><span class="cx">                                 BE20507918A458680080647E /* VTTCue.cpp in Sources */,
</span><span class="cx">                                 A14832B1187F61E100DA63A6 /* WAKAppKitStubs.m in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCoredomVisitedLinkStatecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/VisitedLinkState.cpp (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/VisitedLinkState.cpp        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Source/WebCore/dom/VisitedLinkState.cpp        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -34,8 +34,7 @@
</span><span class="cx"> #include &quot;HTMLAnchorElement.h&quot;
</span><span class="cx"> #include &quot;Page.h&quot;
</span><span class="cx"> #include &quot;PageGroup.h&quot;
</span><del>-#include &quot;PlatformStrategies.h&quot;
-#include &quot;VisitedLinkStrategy.h&quot;
</del><ins>+#include &quot;VisitedLinkProvider.h&quot;
</ins><span class="cx"> #include &quot;XLinkNames.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -119,7 +118,10 @@
</span><span class="cx"> 
</span><span class="cx">     m_linksCheckedForVisitedState.add(hash);
</span><span class="cx"> 
</span><del>-    return platformStrategies()-&gt;visitedLinkStrategy()-&gt;isLinkVisited(page, hash, element.document().baseURL(), *attribute) ? InsideVisitedLink : InsideUnvisitedLink;
</del><ins>+    if (!page-&gt;visitedLinkProvider().isLinkVisited(*page, hash, element.document().baseURL(), *attribute))
+        return InsideUnvisitedLink;
+
+    return InsideVisitedLink;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-}
</del><ins>+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoreloaderHistoryControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/HistoryController.cpp (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/HistoryController.cpp        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Source/WebCore/loader/HistoryController.cpp        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -46,17 +46,16 @@
</span><span class="cx"> #include &quot;Page.h&quot;
</span><span class="cx"> #include &quot;PageCache.h&quot;
</span><span class="cx"> #include &quot;PageGroup.h&quot;
</span><del>-#include &quot;PlatformStrategies.h&quot;
</del><span class="cx"> #include &quot;ScrollingCoordinator.h&quot;
</span><span class="cx"> #include &quot;Settings.h&quot;
</span><del>-#include &quot;VisitedLinkStrategy.h&quot;
</del><ins>+#include &quot;VisitedLinkProvider.h&quot;
</ins><span class="cx"> #include &lt;wtf/text/CString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-static inline void addVisitedLink(Page* page, const URL&amp; url)
</del><ins>+static inline void addVisitedLink(Page&amp; page, const URL&amp; url)
</ins><span class="cx"> {
</span><del>-    platformStrategies()-&gt;visitedLinkStrategy()-&gt;addVisitedLink(page, visitedLinkHash(url.string()));
</del><ins>+    page.visitedLinkProvider().addVisitedLink(page, visitedLinkHash(url.string()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> HistoryController::HistoryController(Frame&amp; frame)
</span><span class="lines">@@ -372,7 +371,7 @@
</span><span class="cx"> 
</span><span class="cx">     if (!historyURL.isEmpty() &amp;&amp; !needPrivacy) {
</span><span class="cx">         if (Page* page = m_frame.page())
</span><del>-            addVisitedLink(page, historyURL);
</del><ins>+            addVisitedLink(*page, historyURL);
</ins><span class="cx"> 
</span><span class="cx">         if (!frameLoader.documentLoader()-&gt;didCreateGlobalHistoryEntry() &amp;&amp; frameLoader.documentLoader()-&gt;unreachableURL().isEmpty() &amp;&amp; !m_frame.document()-&gt;url().isEmpty())
</span><span class="cx">             frameLoader.client().updateGlobalHistoryRedirectLinks();
</span><span class="lines">@@ -413,7 +412,7 @@
</span><span class="cx"> 
</span><span class="cx">     if (!historyURL.isEmpty() &amp;&amp; !needPrivacy) {
</span><span class="cx">         if (Page* page = m_frame.page())
</span><del>-            addVisitedLink(page, historyURL);
</del><ins>+            addVisitedLink(*page, historyURL);
</ins><span class="cx"> 
</span><span class="cx">         if (!m_frame.loader().documentLoader()-&gt;didCreateGlobalHistoryEntry() &amp;&amp; m_frame.loader().documentLoader()-&gt;unreachableURL().isEmpty() &amp;&amp; !m_frame.document()-&gt;url().isEmpty())
</span><span class="cx">             m_frame.loader().client().updateGlobalHistoryRedirectLinks();
</span><span class="lines">@@ -439,7 +438,7 @@
</span><span class="cx"> 
</span><span class="cx">     if (!historyURL.isEmpty() &amp;&amp; !needPrivacy) {
</span><span class="cx">         if (Page* page = m_frame.page())
</span><del>-            addVisitedLink(page, historyURL);
</del><ins>+            addVisitedLink(*page, historyURL);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -531,7 +530,7 @@
</span><span class="cx">     if (!page)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    addVisitedLink(page, m_frame.document()-&gt;url());
</del><ins>+    addVisitedLink(*page, m_frame.document()-&gt;url());
</ins><span class="cx">     m_frame.mainFrame().loader().history().recursiveUpdateForSameDocumentNavigation();
</span><span class="cx"> 
</span><span class="cx">     if (m_currentItem) {
</span><span class="lines">@@ -851,7 +850,7 @@
</span><span class="cx">     if (m_frame.settings().privateBrowsingEnabled())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    addVisitedLink(page, URL(ParsedURLString, urlString));
</del><ins>+    addVisitedLink(*page, URL(ParsedURLString, urlString));
</ins><span class="cx">     m_frame.loader().client().updateGlobalHistory();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -871,7 +870,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     ASSERT(m_frame.page());
</span><del>-    addVisitedLink(m_frame.page(), URL(ParsedURLString, urlString));
</del><ins>+    addVisitedLink(*m_frame.page(), URL(ParsedURLString, urlString));
</ins><span class="cx">     m_frame.loader().client().updateGlobalHistory();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepageDefaultVisitedLinkProvidercppfromrev164619trunkSourceWebCorepageVisitedLinkProviderh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/page/DefaultVisitedLinkProvider.cpp (from rev 164619, trunk/Source/WebCore/page/VisitedLinkProvider.h) (0 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/DefaultVisitedLinkProvider.cpp                                (rev 0)
+++ trunk/Source/WebCore/page/DefaultVisitedLinkProvider.cpp        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -0,0 +1,57 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;DefaultVisitedLinkProvider.h&quot;
+
+#include &quot;PlatformStrategies.h&quot;
+#include &quot;VisitedLinkStrategy.h&quot;
+
+namespace WebCore {
+
+PassRefPtr&lt;DefaultVisitedLinkProvider&gt; DefaultVisitedLinkProvider::create()
+{
+    return adoptRef(new DefaultVisitedLinkProvider);
+}
+
+DefaultVisitedLinkProvider::DefaultVisitedLinkProvider()
+{
+}
+
+DefaultVisitedLinkProvider::~DefaultVisitedLinkProvider()
+{
+}
+
+bool DefaultVisitedLinkProvider::isLinkVisited(Page&amp; page, LinkHash linkHash, const URL&amp; baseURL, const AtomicString&amp; attributeURL)
+{
+    return platformStrategies()-&gt;visitedLinkStrategy()-&gt;isLinkVisited(&amp;page, linkHash, baseURL, attributeURL);
+}
+
+void DefaultVisitedLinkProvider::addVisitedLink(Page&amp; page, LinkHash linkHash)
+{
+    platformStrategies()-&gt;visitedLinkStrategy()-&gt;addVisitedLink(&amp;page, linkHash);
+}
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCorepageDefaultVisitedLinkProviderhfromrev164619trunkSourceWebCorepageVisitedLinkProviderh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/page/DefaultVisitedLinkProvider.h (from rev 164619, trunk/Source/WebCore/page/VisitedLinkProvider.h) (0 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/DefaultVisitedLinkProvider.h                                (rev 0)
+++ trunk/Source/WebCore/page/DefaultVisitedLinkProvider.h        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -0,0 +1,47 @@
</span><ins>+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef DefaultVisitedLinkProvider_h
+#define DefaultVisitedLinkProvider_h
+
+#include &quot;VisitedLinkProvider.h&quot;
+
+namespace WebCore {
+
+class DefaultVisitedLinkProvider : public VisitedLinkProvider {
+public:
+    static PassRefPtr&lt;DefaultVisitedLinkProvider&gt; create();
+    virtual ~DefaultVisitedLinkProvider();
+
+private:
+    DefaultVisitedLinkProvider();
+
+    virtual bool isLinkVisited(Page&amp;, LinkHash, const URL&amp; baseURL, const AtomicString&amp; attributeURL) override;
+    virtual void addVisitedLink(Page&amp;, LinkHash) override;
+};
+
+} // namespace WebCore
+
+#endif // DefaultVisitedLinkProvider_h
</ins></span></pre></div>
<a id="trunkSourceWebCorepagePagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Page.cpp (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Page.cpp        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Source/WebCore/page/Page.cpp        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -1511,6 +1511,12 @@
</span><span class="cx">     m_sessionID = sessionID;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+VisitedLinkProvider&amp; Page::visitedLinkProvider()
+{
+    // FIXME: This shouldn't always return the group visited link provider.
+    return group().visitedLinkProvider();
+}
+
</ins><span class="cx"> Page::PageClients::PageClients()
</span><span class="cx">     : alternativeTextClient(nullptr)
</span><span class="cx">     , chromeClient(nullptr)
</span></span></pre></div>
<a id="trunkSourceWebCorepagePageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Page.h (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Page.h        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Source/WebCore/page/Page.h        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -106,6 +106,7 @@
</span><span class="cx"> class StorageNamespace;
</span><span class="cx"> class UserContentController;
</span><span class="cx"> class ValidationMessageClient;
</span><ins>+class VisitedLinkProvider;
</ins><span class="cx"> 
</span><span class="cx"> typedef uint64_t LinkHash;
</span><span class="cx"> 
</span><span class="lines">@@ -398,6 +399,9 @@
</span><span class="cx"> 
</span><span class="cx">     void setUserContentController(UserContentController*);
</span><span class="cx">     UserContentController* userContentController() { return m_userContentController.get(); }
</span><ins>+
+    VisitedLinkProvider&amp; visitedLinkProvider();
+
</ins><span class="cx">     SessionID sessionID() const;
</span><span class="cx">     void setSessionID(SessionID);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepagePageGroupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/PageGroup.cpp (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/PageGroup.cpp        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Source/WebCore/page/PageGroup.cpp        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #include &quot;Chrome.h&quot;
</span><span class="cx"> #include &quot;ChromeClient.h&quot;
</span><span class="cx"> #include &quot;DOMWrapperWorld.h&quot;
</span><ins>+#include &quot;DefaultVisitedLinkProvider.h&quot;
</ins><span class="cx"> #include &quot;Document.h&quot;
</span><span class="cx"> #include &quot;DocumentStyleSheetCollection.h&quot;
</span><span class="cx"> #include &quot;GroupSettings.h&quot;
</span><span class="lines">@@ -64,7 +65,6 @@
</span><span class="cx"> 
</span><span class="cx"> PageGroup::PageGroup(const String&amp; name)
</span><span class="cx">     : m_name(name)
</span><del>-    , m_visitedLinkProvider(VisitedLinkProvider::create())
</del><span class="cx">     , m_visitedLinksPopulated(false)
</span><span class="cx">     , m_identifier(getUniqueIdentifier())
</span><span class="cx">     , m_userContentController(UserContentController::create())
</span><span class="lines">@@ -73,8 +73,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> PageGroup::PageGroup(Page&amp; page)
</span><del>-    : m_visitedLinkProvider(VisitedLinkProvider::create())
-    , m_visitedLinksPopulated(false)
</del><ins>+    : m_visitedLinksPopulated(false)
</ins><span class="cx">     , m_identifier(getUniqueIdentifier())
</span><span class="cx">     , m_userContentController(UserContentController::create())
</span><span class="cx">     , m_groupSettings(std::make_unique&lt;GroupSettings&gt;())
</span><span class="lines">@@ -179,6 +178,14 @@
</span><span class="cx">     page.setUserContentController(nullptr);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+VisitedLinkProvider&amp; PageGroup::visitedLinkProvider()
+{
+    if (!m_visitedLinkProvider)
+        m_visitedLinkProvider = DefaultVisitedLinkProvider::create();
+
+    return *m_visitedLinkProvider;
+}
+
</ins><span class="cx"> bool PageGroup::isLinkVisited(LinkHash visitedLinkHash)
</span><span class="cx"> {
</span><span class="cx">     if (!m_visitedLinksPopulated) {
</span></span></pre></div>
<a id="trunkSourceWebCorepagePageGrouph"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/PageGroup.h (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/PageGroup.h        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Source/WebCore/page/PageGroup.h        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx">         void addPage(Page&amp;);
</span><span class="cx">         void removePage(Page&amp;);
</span><span class="cx"> 
</span><del>-        VisitedLinkProvider&amp; visitedLinkProvider() { return *m_visitedLinkProvider; }
</del><ins>+        VisitedLinkProvider&amp; visitedLinkProvider();
</ins><span class="cx"> 
</span><span class="cx">         bool isLinkVisited(LinkHash);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepageVisitedLinkProviderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/VisitedLinkProvider.h (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/VisitedLinkProvider.h        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Source/WebCore/page/VisitedLinkProvider.h        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -38,16 +38,14 @@
</span><span class="cx"> 
</span><span class="cx"> class VisitedLinkProvider : public RefCounted&lt;VisitedLinkProvider&gt; {
</span><span class="cx"> public:
</span><del>-    static PassRefPtr&lt;VisitedLinkProvider&gt; create()
-    {
-        return adoptRef(new VisitedLinkProvider);
-    }
-    ~VisitedLinkProvider();
-
-private:
</del><span class="cx">     VisitedLinkProvider();
</span><ins>+    virtual ~VisitedLinkProvider();
+
+    // FIXME: These two members should only take the link hash.
+    virtual bool isLinkVisited(Page&amp;, LinkHash, const URL&amp; baseURL, const AtomicString&amp; attributeURL) = 0;
+    virtual void addVisitedLink(Page&amp;, LinkHash) = 0;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-}
</del><ins>+} // namespace WebCore
</ins><span class="cx"> 
</span><span class="cx"> #endif // VisitedLinkProvider_h
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Tools/ChangeLog        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2014-02-24  Anders Carlsson  &lt;andersca@apple.com&gt;
+
+        Add a DefaultVisitedLinkProvider and route visited link actions through it
+        https://bugs.webkit.org/show_bug.cgi?id=129285
+
+        Reviewed by Dan Bernstein.
+
+        * MiniBrowser/mac/AppDelegate.m:
+        (-[BrowserAppDelegate applicationDidFinishLaunching:]):
+        Set a shared history so we'll get visited link tracking.
+
+        * MiniBrowser/mac/WK1BrowserWindowController.m:
+        (-[WK1BrowserWindowController awakeFromNib]):
+        Set a group name.
+
</ins><span class="cx"> 2014-02-24  Dan Bernstein  &lt;mitz@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         iOS build fix after r164577.
</span></span></pre></div>
<a id="trunkToolsMiniBrowsermacAppDelegatem"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/mac/AppDelegate.m (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/mac/AppDelegate.m        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Tools/MiniBrowser/mac/AppDelegate.m        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx"> 
</span><span class="cx"> #import &quot;WK1BrowserWindowController.h&quot;
</span><span class="cx"> #import &quot;WK2BrowserWindowController.h&quot;
</span><del>-
</del><ins>+#import &lt;WebKit/WebHistory.h&gt;
</ins><span class="cx"> #import &lt;WebKit2/WebKit2.h&gt;
</span><span class="cx"> #import &lt;WebKit2/WKStringCF.h&gt;
</span><span class="cx"> #import &lt;WebKit2/WKURLCF.h&gt;
</span><span class="lines">@@ -83,6 +83,10 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
</span><span class="cx"> {
</span><ins>+    WebHistory *webHistory = [[WebHistory alloc] init];
+    [WebHistory setOptionalSharedHistory:webHistory];
+    [webHistory release];
+
</ins><span class="cx">     [self newWindow:self];
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsMiniBrowsermacWK1BrowserWindowControllerm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/mac/WK1BrowserWindowController.m (164623 => 164624)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/mac/WK1BrowserWindowController.m        2014-02-25 03:00:59 UTC (rev 164623)
+++ trunk/Tools/MiniBrowser/mac/WK1BrowserWindowController.m        2014-02-25 03:33:27 UTC (rev 164624)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)awakeFromNib
</span><span class="cx"> {
</span><del>-    _webView = [[WebView alloc] initWithFrame:[containerView bounds]];
</del><ins>+    _webView = [[WebView alloc] initWithFrame:[containerView bounds] frameName:nil groupName:@&quot;MiniBrowser&quot;];
</ins><span class="cx">     [_webView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
</span><span class="cx"> 
</span><span class="cx">     // Set the WebView delegates
</span></span></pre>
</div>
</div>

</body>
</html>