<!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>[202889] 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/202889">202889</a></dd>
<dt>Author</dt> <dd>timothy_horton@apple.com</dd>
<dt>Date</dt> <dd>2016-07-06 20:03:42 -0700 (Wed, 06 Jul 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Email from June 1st containing text 'Today @ 7:10PM' is linkified, but shouldn't be
https://bugs.webkit.org/show_bug.cgi?id=159498
&lt;rdar://problem/26719903&gt;

Reviewed by Sam Weinig.

Source/WebCore:

New API test: WebKit2.DataDetectionReferenceDate

* editing/cocoa/DataDetection.h:
* editing/cocoa/DataDetection.mm:
(WebCore::DataDetection::detectContentInRange):
Extract the reference date from the DataDetectors context dictionary if it exists,
and pass it along to DataDetectors.

* loader/FrameLoader.cpp:
(WebCore::FrameLoader::checkLoadCompleteForThisFrame):
* loader/FrameLoaderClient.h:
Plumb the DataDetectors context dictionary through from WebPage.

Source/WebKit2:

* Shared/Cocoa/LoadParametersCocoa.mm: Added.
(WebKit::LoadParameters::platformEncode):
(WebKit::LoadParameters::platformDecode):
* Shared/LoadParameters.cpp: Added.
(WebKit::LoadParameters::encode):
(WebKit::LoadParameters::decode):
* Shared/LoadParameters.h: Added.
Add a struct that knows how to encode all of the different parameters
to all of the Load* messages, including the platform-specific DataDetectors parameters.

* Shared/mac/ArgumentCodersMac.h:
* Shared/mac/ArgumentCodersMac.mm:
(IPC::typeFromObject):
(IPC::encode):
(IPC::decode):
Add NSURL coders that defer to the CFURL coders.

* UIProcess/API/APIUIClient.h:
(API::UIClient::dataDetectionContext):
* UIProcess/Cocoa/UIDelegate.h:
* UIProcess/Cocoa/UIDelegate.mm:
(WebKit::UIDelegate::setDelegate):
(WebKit::UIDelegate::UIClient::dataDetectionContext):
Add APIUIClient methods to retrieve the DataDetectors context dictionary.

* UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::addPlatformLoadParameters):
Add the DataDetectors context dictionary to the given LoadParameters.

* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::dataDetectionContext):
* WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
* WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::dataDetectionContext):
Store the dataDetectionContext on WebPage, and make it accessible to WebCore
via the FrameLoaderClient (it is used in FrameLoader when the load completes).

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::loadRequest):
(WebKit::WebPageProxy::loadFile):
(WebKit::WebPageProxy::loadData):
(WebKit::WebPageProxy::loadHTMLString):
(WebKit::WebPageProxy::loadAlternateHTMLString):
(WebKit::WebPageProxy::loadPlainTextString):
(WebKit::WebPageProxy::loadWebArchiveData):
* UIProcess/WebPageProxy.h:
* WebKit2.xcodeproj/project.pbxproj:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::loadRequest):
(WebKit::WebPage::loadStringImpl):
(WebKit::WebPage::loadData):
(WebKit::WebPage::loadString):
(WebKit::WebPage::loadAlternateHTMLString):
(WebKit::WebPage::loadHTMLString): Deleted.
(WebKit::WebPage::loadPlainTextString): Deleted.
(WebKit::WebPage::loadWebArchiveData): Deleted.
* WebProcess/WebPage/WebPage.messages.in:
Adopt LoadParameters, taking this opportunity to reduce the number of very similar messages.
We can take this further (we should be able to get it down to just LoadRequest
and LoadData) in the future. When any load occurs, grab the client's DataDetectorse
context dictionary and send it along with the load request, storing it in WebPage.

Tools:

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm: Added.
(-[DataDetectionNavigationDelegate webView:didFinishNavigation:]):
(-[DataDetectionUIDelegate _dataDetectionContextForWebView:]):
(expectLinkCount):
(TEST):
Add a test ensuring that ReferenceDate in the DataDetectors context is respected
when deciding what to linkify.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoreeditingcocoaDataDetectionh">trunk/Source/WebCore/editing/cocoa/DataDetection.h</a></li>
<li><a href="#trunkSourceWebCoreeditingcocoaDataDetectionmm">trunk/Source/WebCore/editing/cocoa/DataDetection.mm</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoadercpp">trunk/Source/WebCore/loader/FrameLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoaderClienth">trunk/Source/WebCore/loader/FrameLoaderClient.h</a></li>
<li><a href="#trunkSourceWebKit2CMakeListstxt">trunk/Source/WebKit2/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedmacArgumentCodersMach">trunk/Source/WebKit2/Shared/mac/ArgumentCodersMac.h</a></li>
<li><a href="#trunkSourceWebKit2SharedmacArgumentCodersMacmm">trunk/Source/WebKit2/Shared/mac/ArgumentCodersMac.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPIUIClienth">trunk/Source/WebKit2/UIProcess/API/APIUIClient.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCocoaUIDelegateh">trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCocoaUIDelegatemm">trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCocoaWebPageProxyCocoamm">trunk/Source/WebKit2/UIProcess/Cocoa/WebPageProxyCocoa.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxyh">trunk/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosWKActionSheetAssistanth">trunk/Source/WebKit2/UIProcess/ios/WKActionSheetAssistant.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosWKContentViewInteractionmm">trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm</a></li>
<li><a href="#trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj">trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClienth">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPageh">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagemessagesin">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestWebKitAPIxcodeprojprojectpbxproj">trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreplatformspiiosDataDetectorsUISPIh">trunk/Source/WebCore/platform/spi/ios/DataDetectorsUISPI.h</a></li>
<li><a href="#trunkSourceWebKit2SharedCocoaLoadParametersCocoamm">trunk/Source/WebKit2/Shared/Cocoa/LoadParametersCocoa.mm</a></li>
<li><a href="#trunkSourceWebKit2SharedLoadParameterscpp">trunk/Source/WebKit2/Shared/LoadParameters.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedLoadParametersh">trunk/Source/WebKit2/Shared/LoadParameters.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageCocoaWebPageCocoamm">trunk/Source/WebKit2/WebProcess/WebPage/Cocoa/WebPageCocoa.mm</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2CocoaDataDetectionmm">trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2PlatformspiiosDataDetectorsUISPIh">trunk/Source/WebKit2/Platform/spi/ios/DataDetectorsUISPI.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebCore/ChangeLog        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -1,3 +1,24 @@
</span><ins>+2016-07-06  Tim Horton  &lt;timothy_horton@apple.com&gt;
+
+        Email from June 1st containing text 'Today @ 7:10PM' is linkified, but shouldn't be
+        https://bugs.webkit.org/show_bug.cgi?id=159498
+        &lt;rdar://problem/26719903&gt;
+
+        Reviewed by Sam Weinig.
+
+        New API test: WebKit2.DataDetectionReferenceDate
+
+        * editing/cocoa/DataDetection.h:
+        * editing/cocoa/DataDetection.mm:
+        (WebCore::DataDetection::detectContentInRange):
+        Extract the reference date from the DataDetectors context dictionary if it exists,
+        and pass it along to DataDetectors.
+
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
+        * loader/FrameLoaderClient.h:
+        Plumb the DataDetectors context dictionary through from WebPage.
+
</ins><span class="cx"> 2016-07-06  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [WK2][Cocoa] Disable ResourceResponse lazy initialization
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -1244,6 +1244,7 @@
</span><span class="cx">                 2D97F04819DD4140001EE9C3 /* MockPageOverlayClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DAAE32D19DCAF6000E002D2 /* MockPageOverlayClient.h */; };
</span><span class="cx">                 2D9F0E1314FF1CBF00BA0FF7 /* linearSRGB.icc in Resources */ = {isa = PBXBuildFile; fileRef = 2D9F0E1214FF1CBF00BA0FF7 /* linearSRGB.icc */; };
</span><span class="cx">                 2DB9C4AA1B3231F40070F27F /* NSEventSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB9C4A91B3231F40070F27F /* NSEventSPI.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                2DC4CF791D2DD98900ECCC94 /* DataDetectorsUISPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DC4CF781D2DD98900ECCC94 /* DataDetectorsUISPI.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 2DCB837919F99BBA00A7FBE4 /* NSSharingServicePickerSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DCB837719F99BBA00A7FBE4 /* NSSharingServicePickerSPI.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 2DCB837A19F99BBA00A7FBE4 /* NSSharingServiceSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DCB837819F99BBA00A7FBE4 /* NSSharingServiceSPI.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 2DDB97F419F9AECA002025D8 /* NSExtensionSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DDB97F319F9AECA002025D8 /* NSExtensionSPI.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -8812,6 +8813,7 @@
</span><span class="cx">                 2DAAE32C19DCAF6000E002D2 /* MockPageOverlayClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MockPageOverlayClient.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2DAAE32D19DCAF6000E002D2 /* MockPageOverlayClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockPageOverlayClient.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2DB9C4A91B3231F40070F27F /* NSEventSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSEventSPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                2DC4CF781D2DD98900ECCC94 /* DataDetectorsUISPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataDetectorsUISPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 2DCB837719F99BBA00A7FBE4 /* NSSharingServicePickerSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSSharingServicePickerSPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2DCB837819F99BBA00A7FBE4 /* NSSharingServiceSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSSharingServiceSPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2DDB97F319F9AECA002025D8 /* NSExtensionSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSExtensionSPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -20171,6 +20173,7 @@
</span><span class="cx">                         isa = PBXGroup;
</span><span class="cx">                         children = (
</span><span class="cx">                                 CE1252421A16C01A00864480 /* CoreUISPI.h */,
</span><ins>+                                2DC4CF781D2DD98900ECCC94 /* DataDetectorsUISPI.h */,
</ins><span class="cx">                                 CEC337AE1A46086D009B8523 /* GraphicsServicesSPI.h */,
</span><span class="cx">                                 7C4C96E21AD44ABF00365A50 /* LaunchServicesSPI.h */,
</span><span class="cx">                                 CE1252401A16B1B600864480 /* MediaPlayerSPI.h */,
</span><span class="lines">@@ -26922,6 +26925,7 @@
</span><span class="cx">                                 7C9DBFEE1A9C49B1000D6B25 /* JSHTMLAttachmentElement.h in Headers */,
</span><span class="cx">                                 E44614380CD689C500FADA75 /* JSHTMLAudioElement.h in Headers */,
</span><span class="cx">                                 A80E7B110A19D606007FB8C5 /* JSHTMLBaseElement.h in Headers */,
</span><ins>+                                2DC4CF791D2DD98900ECCC94 /* DataDetectorsUISPI.h in Headers */,
</ins><span class="cx">                                 1AE2AA230A1CDAB400B42B25 /* JSHTMLBodyElement.h in Headers */,
</span><span class="cx">                                 1AE2AA250A1CDAB400B42B25 /* JSHTMLBRElement.h in Headers */,
</span><span class="cx">                                 A80E7E9F0A1A83E3007FB8C5 /* JSHTMLButtonElement.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingcocoaDataDetectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/cocoa/DataDetection.h (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/cocoa/DataDetection.h        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebCore/editing/cocoa/DataDetection.h        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> 
</span><span class="cx"> OBJC_CLASS DDActionContext;
</span><span class="cx"> OBJC_CLASS NSArray;
</span><ins>+OBJC_CLASS NSDictionary;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -57,7 +58,7 @@
</span><span class="cx"> #if PLATFORM(MAC)
</span><span class="cx">     WEBCORE_EXPORT static RetainPtr&lt;DDActionContext&gt; detectItemAroundHitTestResult(const HitTestResult&amp;, FloatRect&amp; detectedDataBoundingBox, RefPtr&lt;Range&gt;&amp; detectedDataRange);
</span><span class="cx"> #endif
</span><del>-    WEBCORE_EXPORT static NSArray *detectContentInRange(RefPtr&lt;Range&gt;&amp; contextRange, DataDetectorTypes);
</del><ins>+    WEBCORE_EXPORT static NSArray *detectContentInRange(RefPtr&lt;Range&gt;&amp; contextRange, DataDetectorTypes, NSDictionary *context);
</ins><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     WEBCORE_EXPORT static bool isDataDetectorLink(Element&amp;);
</span><span class="cx">     WEBCORE_EXPORT static String dataDetectorIdentifier(Element&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingcocoaDataDetectionmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/cocoa/DataDetection.mm (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/cocoa/DataDetection.mm        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebCore/editing/cocoa/DataDetection.mm        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #import &quot;Attr.h&quot;
</span><span class="cx"> #import &quot;CSSStyleDeclaration.h&quot;
</span><span class="cx"> #import &quot;DataDetectorsSPI.h&quot;
</span><ins>+#import &quot;DataDetectorsUISPI.h&quot;
</ins><span class="cx"> #import &quot;ElementAncestorIterator.h&quot;
</span><span class="cx"> #import &quot;ElementTraversal.h&quot;
</span><span class="cx"> #import &quot;FrameView.h&quot;
</span><span class="lines">@@ -429,7 +430,7 @@
</span><span class="cx">     return kCFCompareEqualTo;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NSArray *DataDetection::detectContentInRange(RefPtr&lt;Range&gt;&amp; contextRange, DataDetectorTypes types)
</del><ins>+NSArray *DataDetection::detectContentInRange(RefPtr&lt;Range&gt;&amp; contextRange, DataDetectorTypes types, NSDictionary *context)
</ins><span class="cx"> {
</span><span class="cx">     RetainPtr&lt;DDScannerRef&gt; scanner = adoptCF(softLink_DataDetectorsCore_DDScannerCreate(DDScannerTypeStandard, 0, nullptr));
</span><span class="cx">     RetainPtr&lt;DDScanQueryRef&gt; scanQuery = adoptCF(softLink_DataDetectorsCore_DDScanQueryCreate(NULL));
</span><span class="lines">@@ -443,15 +444,15 @@
</span><span class="cx">     // FIXME: we should add a timeout to this call to make sure it doesn't take too much time.
</span><span class="cx">     if (!softLink_DataDetectorsCore_DDScannerScanQuery(scanner.get(), scanQuery.get()))
</span><span class="cx">         return nil;
</span><del>-    
</del><ins>+
</ins><span class="cx">     RetainPtr&lt;CFArrayRef&gt; scannerResults = adoptCF(softLink_DataDetectorsCore_DDScannerCopyResultsWithOptions(scanner.get(), get_DataDetectorsCore_DDScannerCopyResultsOptionsForPassiveUse() | DDScannerCopyResultsOptionsCoalesceSignatures));
</span><span class="cx">     if (!scannerResults)
</span><span class="cx">         return nil;
</span><del>-    
</del><ins>+
</ins><span class="cx">     CFIndex resultCount = CFArrayGetCount(scannerResults.get());
</span><span class="cx">     if (!resultCount)
</span><span class="cx">         return nil;
</span><del>-    
</del><ins>+
</ins><span class="cx">     Vector&lt;RetainPtr&lt;DDResultRef&gt;&gt; allResults;
</span><span class="cx">     Vector&lt;RetainPtr&lt;NSIndexPath&gt;&gt; indexPaths;
</span><span class="cx">     NSInteger currentTopLevelIndex = 0;
</span><span class="lines">@@ -519,7 +520,7 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     auto tz = adoptCF(CFTimeZoneCopyDefault());
</span><del>-    NSDate *referenceDate = [NSDate date];
</del><ins>+    NSDate *referenceDate = [context objectForKey:getkDataDetectorsReferenceDateKey()] ?: [NSDate date];
</ins><span class="cx">     Text* lastTextNodeToUpdate = nullptr;
</span><span class="cx">     String lastNodeContent;
</span><span class="cx">     size_t contentOffset = 0;
</span><span class="lines">@@ -652,7 +653,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #else
</span><del>-NSArray *DataDetection::detectContentInRange(RefPtr&lt;Range&gt;&amp;, DataDetectorTypes)
</del><ins>+NSArray *DataDetection::detectContentInRange(RefPtr&lt;Range&gt;&amp;, DataDetectorTypes, NSDictionary *)
</ins><span class="cx"> {
</span><span class="cx">     return nil;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoader.cpp        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -2310,7 +2310,7 @@
</span><span class="cx">                 if (m_frame.settings().dataDetectorTypes() != DataDetectorTypeNone &amp;&amp; document) {
</span><span class="cx">                     if (auto* documentElement = document-&gt;documentElement()) {
</span><span class="cx">                         RefPtr&lt;Range&gt; documentRange = makeRange(firstPositionInNode(documentElement), lastPositionInNode(documentElement));
</span><del>-                        m_frame.setDataDetectionResults(DataDetection::detectContentInRange(documentRange, m_frame.settings().dataDetectorTypes()));
</del><ins>+                        m_frame.setDataDetectionResults(DataDetection::detectContentInRange(documentRange, m_frame.settings().dataDetectorTypes(), m_client.dataDetectionContext()));
</ins><span class="cx">                         if (m_frame.isMainFrame())
</span><span class="cx">                             m_client.dispatchDidFinishDataDetection(m_frame.dataDetectionResults());
</span><span class="cx">                     }
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoaderClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoaderClient.h (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoaderClient.h        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebCore/loader/FrameLoaderClient.h        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -54,6 +54,7 @@
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx"> OBJC_CLASS NSArray;
</span><span class="cx"> OBJC_CLASS NSCachedURLResponse;
</span><ins>+OBJC_CLASS NSDictionary;
</ins><span class="cx"> OBJC_CLASS NSView;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -292,6 +293,7 @@
</span><span class="cx">         // Allow an accessibility object to retrieve a Frame parent if there's no PlatformWidget.
</span><span class="cx">         virtual RemoteAXObjectRef accessibilityRemoteObject() = 0;
</span><span class="cx">         virtual NSCachedURLResponse* willCacheResponse(DocumentLoader*, unsigned long identifier, NSCachedURLResponse*) const = 0;
</span><ins>+        virtual NSDictionary *dataDetectionContext() { return nullptr; }
</ins><span class="cx"> #endif
</span><span class="cx"> #if PLATFORM(WIN) &amp;&amp; USE(CFNETWORK)
</span><span class="cx">         // FIXME: Windows should use willCacheResponse - &lt;https://bugs.webkit.org/show_bug.cgi?id=57257&gt;.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformspiiosDataDetectorsUISPIhfromrev202888trunkSourceWebKit2PlatformspiiosDataDetectorsUISPIh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/platform/spi/ios/DataDetectorsUISPI.h (from rev 202888, trunk/Source/WebKit2/Platform/spi/ios/DataDetectorsUISPI.h) (0 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/spi/ios/DataDetectorsUISPI.h                                (rev 0)
+++ trunk/Source/WebCore/platform/spi/ios/DataDetectorsUISPI.h        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -0,0 +1,72 @@
</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.
+ */
+
+#if PLATFORM(IOS)
+
+#import &lt;UIKit/UIKit.h&gt;
+#import &lt;WebCore/SoftLinking.h&gt;
+
+#if USE(APPLE_INTERNAL_SDK)
+
+#import &lt;DataDetectorsUI/DDAction.h&gt;
+#import &lt;DataDetectorsUI/DDDetectionController.h&gt;
+
+#else
+
+@interface DDAction : NSObject
+@end
+
+@interface DDAction ()
+- (BOOL)hasUserInterface;
+- (NSString *)localizedName;
+@property (readonly) NSString *actionUTI;
+@end
+
+@protocol DDDetectionControllerInteractionDelegate &lt;NSObject&gt;
+@end
+
+@interface DDDetectionController : NSObject &lt;UIActionSheetDelegate&gt;
+@end
+
+@interface DDDetectionController ()
++ (DDDetectionController *)sharedController;
++ (NSArray *)tapAndHoldSchemes;
+- (void)performAction:(DDAction *)action fromAlertController:(UIAlertController *)alertController interactionDelegate:(id &lt;DDDetectionControllerInteractionDelegate&gt;)interactionDelegate;
+@end
+
+#endif
+
+@interface DDDetectionController (DetailsToBeRemoved)
+// FIXME: This will be removed as soon as &lt;rdar://problem/16346913&gt; is fixed.
+- (NSArray *)actionsForAnchor:(id)anchor url:(NSURL *)targetURL forFrame:(id)frame;
+@end
+
+SOFT_LINK_PRIVATE_FRAMEWORK(DataDetectorsUI)
+SOFT_LINK_CLASS(DataDetectorsUI, DDDetectionController)
+SOFT_LINK_CONSTANT(DataDetectorsUI, kDataDetectorsLeadingText, const NSString *)
+SOFT_LINK_CONSTANT(DataDetectorsUI, kDataDetectorsTrailingText, const NSString *)
+SOFT_LINK_CONSTANT(DataDetectorsUI, kDataDetectorsReferenceDateKey, const NSString *)
+
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebKit2CMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/CMakeLists.txt (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/CMakeLists.txt        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/CMakeLists.txt        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -239,6 +239,7 @@
</span><span class="cx">     Shared/EditorState.cpp
</span><span class="cx">     Shared/FontInfo.cpp
</span><span class="cx">     Shared/LayerTreeContext.cpp
</span><ins>+    Shared/LoadParameters.cpp
</ins><span class="cx">     Shared/NavigationActionData.cpp
</span><span class="cx">     Shared/PlatformPopupMenuData.cpp
</span><span class="cx">     Shared/PrintInfo.cpp
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/ChangeLog        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -1,3 +1,73 @@
</span><ins>+2016-07-06  Tim Horton  &lt;timothy_horton@apple.com&gt;
+
+        Email from June 1st containing text 'Today @ 7:10PM' is linkified, but shouldn't be
+        https://bugs.webkit.org/show_bug.cgi?id=159498
+        &lt;rdar://problem/26719903&gt;
+
+        Reviewed by Sam Weinig.
+
+        * Shared/Cocoa/LoadParametersCocoa.mm: Added.
+        (WebKit::LoadParameters::platformEncode):
+        (WebKit::LoadParameters::platformDecode):
+        * Shared/LoadParameters.cpp: Added.
+        (WebKit::LoadParameters::encode):
+        (WebKit::LoadParameters::decode):
+        * Shared/LoadParameters.h: Added.
+        Add a struct that knows how to encode all of the different parameters
+        to all of the Load* messages, including the platform-specific DataDetectors parameters.
+
+        * Shared/mac/ArgumentCodersMac.h:
+        * Shared/mac/ArgumentCodersMac.mm:
+        (IPC::typeFromObject):
+        (IPC::encode):
+        (IPC::decode):
+        Add NSURL coders that defer to the CFURL coders.
+
+        * UIProcess/API/APIUIClient.h:
+        (API::UIClient::dataDetectionContext):
+        * UIProcess/Cocoa/UIDelegate.h:
+        * UIProcess/Cocoa/UIDelegate.mm:
+        (WebKit::UIDelegate::setDelegate):
+        (WebKit::UIDelegate::UIClient::dataDetectionContext):
+        Add APIUIClient methods to retrieve the DataDetectors context dictionary.
+
+        * UIProcess/Cocoa/WebPageProxyCocoa.mm:
+        (WebKit::WebPageProxy::addPlatformLoadParameters):
+        Add the DataDetectors context dictionary to the given LoadParameters.
+
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+        (WebKit::WebFrameLoaderClient::dataDetectionContext):
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
+        * WebProcess/WebPage/WebPage.h:
+        (WebKit::WebPage::dataDetectionContext):
+        Store the dataDetectionContext on WebPage, and make it accessible to WebCore
+        via the FrameLoaderClient (it is used in FrameLoader when the load completes).
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::loadRequest):
+        (WebKit::WebPageProxy::loadFile):
+        (WebKit::WebPageProxy::loadData):
+        (WebKit::WebPageProxy::loadHTMLString):
+        (WebKit::WebPageProxy::loadAlternateHTMLString):
+        (WebKit::WebPageProxy::loadPlainTextString):
+        (WebKit::WebPageProxy::loadWebArchiveData):
+        * UIProcess/WebPageProxy.h:
+        * WebKit2.xcodeproj/project.pbxproj:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::loadRequest):
+        (WebKit::WebPage::loadStringImpl):
+        (WebKit::WebPage::loadData):
+        (WebKit::WebPage::loadString):
+        (WebKit::WebPage::loadAlternateHTMLString):
+        (WebKit::WebPage::loadHTMLString): Deleted.
+        (WebKit::WebPage::loadPlainTextString): Deleted.
+        (WebKit::WebPage::loadWebArchiveData): Deleted.
+        * WebProcess/WebPage/WebPage.messages.in:
+        Adopt LoadParameters, taking this opportunity to reduce the number of very similar messages.
+        We can take this further (we should be able to get it down to just LoadRequest
+        and LoadData) in the future. When any load occurs, grab the client's DataDetectorse
+        context dictionary and send it along with the load request, storing it in WebPage.
+
</ins><span class="cx"> 2016-07-06  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [WK2][Cocoa] Disable ResourceResponse lazy initialization
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformspiiosDataDetectorsUISPIh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebKit2/Platform/spi/ios/DataDetectorsUISPI.h (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/spi/ios/DataDetectorsUISPI.h        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/Platform/spi/ios/DataDetectorsUISPI.h        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -1,67 +0,0 @@
</span><del>-/*
- * 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.
- */
-
-#import &lt;UIKit/UIKit.h&gt;
-#import &lt;WebCore/SoftLinking.h&gt;
-
-#if USE(APPLE_INTERNAL_SDK)
-
-#import &lt;DataDetectorsUI/DDAction.h&gt;
-#import &lt;DataDetectorsUI/DDDetectionController.h&gt;
-
-#else
-
-@interface DDAction : NSObject
-@end
-
-@interface DDAction ()
-- (BOOL)hasUserInterface;
-- (NSString *)localizedName;
-@property (readonly) NSString *actionUTI;
-@end
-
-@protocol DDDetectionControllerInteractionDelegate &lt;NSObject&gt;
-@end
-
-@interface DDDetectionController : NSObject &lt;UIActionSheetDelegate&gt;
-@end
-
-@interface DDDetectionController ()
-+ (DDDetectionController *)sharedController;
-+ (NSArray *)tapAndHoldSchemes;
-- (void)performAction:(DDAction *)action fromAlertController:(UIAlertController *)alertController interactionDelegate:(id &lt;DDDetectionControllerInteractionDelegate&gt;)interactionDelegate;
-@end
-
-#endif
-
-@interface DDDetectionController (DetailsToBeRemoved)
-// FIXME: This will be removed as soon as &lt;rdar://problem/16346913&gt; is fixed.
-- (NSArray *)actionsForAnchor:(id)anchor url:(NSURL *)targetURL forFrame:(id)frame;
-@end
-
-SOFT_LINK_PRIVATE_FRAMEWORK(DataDetectorsUI)
-SOFT_LINK_CLASS(DataDetectorsUI, DDDetectionController)
-SOFT_LINK_CONSTANT(DataDetectorsUI, kDataDetectorsLeadingText, const NSString *)
-SOFT_LINK_CONSTANT(DataDetectorsUI, kDataDetectorsTrailingText, const NSString *)
</del></span></pre></div>
<a id="trunkSourceWebKit2SharedCocoaLoadParametersCocoammfromrev202888trunkSourceWebKit2UIProcessCocoaWebPageProxyCocoamm"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit2/Shared/Cocoa/LoadParametersCocoa.mm (from rev 202888, trunk/Source/WebKit2/UIProcess/Cocoa/WebPageProxyCocoa.mm) (0 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/Cocoa/LoadParametersCocoa.mm                                (rev 0)
+++ trunk/Source/WebKit2/Shared/Cocoa/LoadParametersCocoa.mm        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -0,0 +1,51 @@
</span><ins>+/*
+ * Copyright (C) 2016 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;LoadParameters.h&quot;
+
+#if PLATFORM(COCOA)
+
+#include &quot;ArgumentCodersMac.h&quot;
+#include &quot;WebCoreArgumentCoders.h&quot;
+
+namespace WebKit {
+
+void LoadParameters::platformEncode(IPC::ArgumentEncoder&amp; encoder) const
+{
+    IPC::encode(encoder, dataDetectionContext.get());
+}
+
+bool LoadParameters::platformDecode(IPC::ArgumentDecoder&amp; decoder, LoadParameters&amp; data)
+{
+    if (!IPC::decode(decoder, data.dataDetectionContext))
+        return false;
+
+    return true;
+}
+
+} // namespace WebKit
+
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebKit2SharedLoadParameterscpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/Shared/LoadParameters.cpp (0 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/LoadParameters.cpp                                (rev 0)
+++ trunk/Source/WebKit2/Shared/LoadParameters.cpp        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -0,0 +1,109 @@
</span><ins>+/*
+ * Copyright (C) 2016 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;LoadParameters.h&quot;
+
+#include &quot;WebCoreArgumentCoders.h&quot;
+
+namespace WebKit {
+
+void LoadParameters::encode(IPC::ArgumentEncoder&amp; encoder) const
+{
+    encoder &lt;&lt; navigationID;
+    encoder &lt;&lt; request;
+    encoder &lt;&lt; sandboxExtensionHandle;
+    encoder &lt;&lt; data;
+    encoder &lt;&lt; string;
+    encoder &lt;&lt; MIMEType;
+    encoder &lt;&lt; encodingName;
+    encoder &lt;&lt; baseURLString;
+    encoder &lt;&lt; unreachableURLString;
+    encoder &lt;&lt; provisionalLoadErrorURLString;
+    encoder &lt;&lt; shouldOpenExternalURLsPolicy;
+    encoder &lt;&lt; userData;
+
+    platformEncode(encoder);
+}
+
+bool LoadParameters::decode(IPC::ArgumentDecoder&amp; decoder, LoadParameters&amp; data)
+{
+    if (!decoder.decode(data.navigationID))
+        return false;
+
+    if (!decoder.decode(data.request))
+        return false;
+
+    if (!decoder.decode(data.sandboxExtensionHandle))
+        return false;
+
+    if (!decoder.decode(data.data))
+        return false;
+
+    if (!decoder.decode(data.string))
+        return false;
+
+    if (!decoder.decode(data.MIMEType))
+        return false;
+
+    if (!decoder.decode(data.encodingName))
+        return false;
+
+    if (!decoder.decode(data.baseURLString))
+        return false;
+
+    if (!decoder.decode(data.unreachableURLString))
+        return false;
+
+    if (!decoder.decode(data.provisionalLoadErrorURLString))
+        return false;
+
+    if (!decoder.decode(data.shouldOpenExternalURLsPolicy))
+        return false;
+
+    if (!decoder.decode(data.userData))
+        return false;
+
+    if (!platformDecode(decoder, data))
+        return false;
+
+    return true;
+}
+
+#if !PLATFORM(COCOA)
+
+void LoadParameters::platformEncode(IPC::ArgumentEncoder&amp;) const
+{
+}
+
+bool LoadParameters::platformDecode(IPC::ArgumentDecoder&amp;, LoadParameters&amp;)
+{
+    return true;
+}
+
+#endif // !PLATFORM(COCOA)
+
+
+} // namespace WebKit
</ins></span></pre></div>
<a id="trunkSourceWebKit2SharedLoadParametershfromrev202888trunkSourceWebKit2UIProcessCocoaWebPageProxyCocoamm"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit2/Shared/LoadParameters.h (from rev 202888, trunk/Source/WebKit2/UIProcess/Cocoa/WebPageProxyCocoa.mm) (0 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/LoadParameters.h                                (rev 0)
+++ trunk/Source/WebKit2/Shared/LoadParameters.h        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -0,0 +1,74 @@
</span><ins>+/*
+ * Copyright (C) 2016 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 LoadParameters_h
+#define LoadParameters_h
+
+#include &quot;DataReference.h&quot;
+#include &quot;SandboxExtension.h&quot;
+#include &quot;UserData.h&quot;
+#include &lt;WebCore/ResourceRequest.h&gt;
+
+OBJC_CLASS NSDictionary;
+
+namespace IPC {
+class ArgumentDecoder;
+class ArgumentEncoder;
+}
+
+namespace WebKit {
+
+struct LoadParameters {
+    void encode(IPC::ArgumentEncoder&amp;) const;
+    static bool decode(IPC::ArgumentDecoder&amp;, LoadParameters&amp;);
+
+    void platformEncode(IPC::ArgumentEncoder&amp;) const;
+    static bool platformDecode(IPC::ArgumentDecoder&amp;, LoadParameters&amp;);
+
+    uint64_t navigationID;
+
+    WebCore::ResourceRequest request;
+    SandboxExtension::Handle sandboxExtensionHandle;
+
+    IPC::DataReference data;
+    String string;
+    String MIMEType;
+    String encodingName;
+
+    String baseURLString;
+    String unreachableURLString;
+    String provisionalLoadErrorURLString;
+
+    uint64_t shouldOpenExternalURLsPolicy;
+    UserData userData;
+
+#if PLATFORM(COCOA)
+    RetainPtr&lt;NSDictionary&gt; dataDetectionContext;
+#endif
+};
+
+} // namespace WebKit
+
+#endif // LoadParameters_h
</ins></span></pre></div>
<a id="trunkSourceWebKit2SharedmacArgumentCodersMach"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/mac/ArgumentCodersMac.h (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/ArgumentCodersMac.h        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/Shared/mac/ArgumentCodersMac.h        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -37,6 +37,7 @@
</span><span class="cx"> OBJC_CLASS NSFont;
</span><span class="cx"> OBJC_CLASS NSNumber;
</span><span class="cx"> OBJC_CLASS NSString;
</span><ins>+OBJC_CLASS NSURL;
</ins><span class="cx"> 
</span><span class="cx"> namespace IPC {
</span><span class="cx"> 
</span><span class="lines">@@ -87,6 +88,10 @@
</span><span class="cx"> void encode(ArgumentEncoder&amp;, NSData *);
</span><span class="cx"> bool decode(ArgumentDecoder&amp;, RetainPtr&lt;NSData&gt;&amp;);
</span><span class="cx"> 
</span><ins>+// NSURL
+void encode(ArgumentEncoder&amp;, NSURL *);
+bool decode(ArgumentDecoder&amp;, RetainPtr&lt;NSURL&gt;&amp;);
+
</ins><span class="cx"> } // namespace IPC
</span><span class="cx"> 
</span><span class="cx"> #endif // ArgumentCodersMac_h
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedmacArgumentCodersMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/mac/ArgumentCodersMac.mm (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/ArgumentCodersMac.mm        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/Shared/mac/ArgumentCodersMac.mm        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -55,6 +55,7 @@
</span><span class="cx">     NSStringType,
</span><span class="cx">     NSDateType,
</span><span class="cx">     NSDataType,
</span><ins>+    NSURLType,
</ins><span class="cx">     Unknown,
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -84,6 +85,8 @@
</span><span class="cx">         return NSDateType;
</span><span class="cx">     if ([object isKindOfClass:[NSData class]])
</span><span class="cx">         return NSDataType;
</span><ins>+    if ([object isKindOfClass:[NSURL class]])
+        return NSURLType;
</ins><span class="cx"> 
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><span class="cx">     return Unknown;
</span><span class="lines">@@ -126,6 +129,9 @@
</span><span class="cx">     case NSDataType:
</span><span class="cx">         encode(encoder, static_cast&lt;NSData *&gt;(object));
</span><span class="cx">         return;
</span><ins>+    case NSURLType:
+        encode(encoder, static_cast&lt;NSURL *&gt;(object));
+        return;
</ins><span class="cx">     case Unknown:
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="lines">@@ -207,6 +213,13 @@
</span><span class="cx">         result = data;
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><ins>+    case NSURLType: {
+        RetainPtr&lt;NSURL&gt; URL;
+        if (!decode(decoder, URL))
+            return false;
+        result = URL;
+        return true;
+    }
</ins><span class="cx">     case Unknown:
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx">         return false;
</span><span class="lines">@@ -505,4 +518,19 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void encode(ArgumentEncoder&amp; encoder, NSURL *URL)
+{
+    encode(encoder, (CFURLRef)URL);
+}
+
+bool decode(ArgumentDecoder&amp; decoder, RetainPtr&lt;NSURL&gt;&amp; result)
+{
+    RetainPtr&lt;CFURLRef&gt; URL;
+    if (!decode(decoder, URL))
+        return false;
+
+    result = adoptNS((NSURL *)URL.leakRef());
+    return true;
+}
+
</ins><span class="cx"> } // namespace IPC
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIAPIUIClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/APIUIClient.h (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/APIUIClient.h        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/UIProcess/API/APIUIClient.h        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -164,6 +164,9 @@
</span><span class="cx">     virtual void didNotHandleTapAsClick(const WebCore::IntPoint&amp;) { }
</span><span class="cx">     virtual UIViewController *presentingViewController() { return nullptr; }
</span><span class="cx"> #endif
</span><ins>+#if PLATFORM(COCOA)
+    virtual NSDictionary *dataDetectionContext() { return nullptr; }
+#endif
</ins><span class="cx"> 
</span><span class="cx">     virtual void didClickAutoFillButton(WebKit::WebPageProxy&amp;, API::Object*) { }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCocoaUIDelegateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.h (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.h        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.h        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -97,7 +97,10 @@
</span><span class="cx">         RetainPtr&lt;NSArray&gt; actionsForElement(_WKActivatedElementInfo *, RetainPtr&lt;NSArray&gt; defaultActions) override;
</span><span class="cx">         void didNotHandleTapAsClick(const WebCore::IntPoint&amp;) override;
</span><span class="cx">         UIViewController *presentingViewController() override;
</span><del>-#endif
</del><ins>+#endif // PLATFORM(IOS)
+
+        NSDictionary *dataDetectionContext() override;
+
</ins><span class="cx">         void imageOrMediaDocumentSizeChanged(const WebCore::IntSize&amp;) override;
</span><span class="cx"> 
</span><span class="cx">         UIDelegate&amp; m_uiDelegate;
</span><span class="lines">@@ -130,6 +133,7 @@
</span><span class="cx">         bool webViewDidNotHandleTapAsClickAtPoint : 1;
</span><span class="cx">         bool presentingViewControllerForWebView : 1;
</span><span class="cx"> #endif
</span><ins>+        bool dataDetectionContextForWebView : 1;
</ins><span class="cx">         bool webViewImageOrMediaDocumentSizeChanged : 1;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTEXT_MENUS)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCocoaUIDelegatemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.mm (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.mm        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.mm        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -101,6 +101,7 @@
</span><span class="cx">     m_delegateMethods.webViewDidNotHandleTapAsClickAtPoint = [delegate respondsToSelector:@selector(_webView:didNotHandleTapAsClickAtPoint:)];
</span><span class="cx">     m_delegateMethods.presentingViewControllerForWebView = [delegate respondsToSelector:@selector(_presentingViewControllerForWebView:)];
</span><span class="cx"> #endif
</span><ins>+    m_delegateMethods.dataDetectionContextForWebView = [delegate respondsToSelector:@selector(_dataDetectionContextForWebView:)];
</ins><span class="cx">     m_delegateMethods.webViewImageOrMediaDocumentSizeChanged = [delegate respondsToSelector:@selector(_webView:imageOrMediaDocumentSizeChanged:)];
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTEXT_MENUS)
</span><span class="lines">@@ -441,6 +442,18 @@
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+NSDictionary *UIDelegate::UIClient::dataDetectionContext()
+{
+    if (!m_uiDelegate.m_delegateMethods.dataDetectionContextForWebView)
+        return nullptr;
+
+    auto delegate = m_uiDelegate.m_delegate.get();
+    if (!delegate)
+        return nullptr;
+
+    return [static_cast&lt;id &lt;WKUIDelegatePrivate&gt;&gt;(delegate) _dataDetectionContextForWebView:m_uiDelegate.m_webView];
+}
+
</ins><span class="cx"> void UIDelegate::UIClient::imageOrMediaDocumentSizeChanged(const WebCore::IntSize&amp; newSize)
</span><span class="cx"> {
</span><span class="cx">     if (!m_uiDelegate.m_delegateMethods.webViewImageOrMediaDocumentSizeChanged)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCocoaWebPageProxyCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Cocoa/WebPageProxyCocoa.mm (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Cocoa/WebPageProxyCocoa.mm        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/WebPageProxyCocoa.mm        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -24,9 +24,12 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #import &quot;config.h&quot;
</span><del>-#import &quot;WebProcessProxy.h&quot;
</del><ins>+#import &quot;WebPageProxy.h&quot;
</ins><span class="cx"> 
</span><ins>+#import &quot;APIUIClient.h&quot;
</ins><span class="cx"> #import &quot;DataDetectionResult.h&quot;
</span><ins>+#import &quot;LoadParameters.h&quot;
+#import &quot;WebProcessProxy.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #import &lt;WebCore/SearchPopupMenuCocoa.h&gt;
</span><span class="cx"> #import &lt;wtf/cf/TypeCastsCF.h&gt;
</span><span class="lines">@@ -68,4 +71,9 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+void WebPageProxy::addPlatformLoadParameters(LoadParameters&amp; loadParameters)
+{
+    loadParameters.dataDetectionContext = m_uiClient-&gt;dataDetectionContext();
</ins><span class="cx"> }
</span><ins>+
+}
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -55,6 +55,7 @@
</span><span class="cx"> #include &quot;DrawingAreaProxy.h&quot;
</span><span class="cx"> #include &quot;DrawingAreaProxyMessages.h&quot;
</span><span class="cx"> #include &quot;EventDispatcherMessages.h&quot;
</span><ins>+#include &quot;LoadParameters.h&quot;
</ins><span class="cx"> #include &quot;Logging.h&quot;
</span><span class="cx"> #include &quot;NativeWebGestureEvent.h&quot;
</span><span class="cx"> #include &quot;NativeWebKeyboardEvent.h&quot;
</span><span class="lines">@@ -906,6 +907,12 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if !PLATFORM(COCOA)
+void WebPageProxy::addPlatformLoadParameters(LoadParameters&amp;)
+{
+}
+#endif
+
</ins><span class="cx"> RefPtr&lt;API::Navigation&gt; WebPageProxy::loadRequest(const ResourceRequest&amp; request, ShouldOpenExternalURLsPolicy shouldOpenExternalURLsPolicy, API::Object* userData)
</span><span class="cx"> {
</span><span class="cx">     if (m_isClosed)
</span><span class="lines">@@ -920,11 +927,17 @@
</span><span class="cx">     if (!isValid())
</span><span class="cx">         reattachToWebProcess();
</span><span class="cx"> 
</span><del>-    SandboxExtension::Handle sandboxExtensionHandle;
-    bool createdExtension = maybeInitializeSandboxExtensionHandle(request.url(), sandboxExtensionHandle);
</del><ins>+    LoadParameters loadParameters;
+    loadParameters.navigationID = navigation-&gt;navigationID();
+    loadParameters.request = request;
+    loadParameters.shouldOpenExternalURLsPolicy = (uint64_t)shouldOpenExternalURLsPolicy;
+    loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());
+    bool createdExtension = maybeInitializeSandboxExtensionHandle(request.url(), loadParameters.sandboxExtensionHandle);
</ins><span class="cx">     if (createdExtension)
</span><span class="cx">         m_process-&gt;willAcquireUniversalFileReadSandboxExtension();
</span><del>-    m_process-&gt;send(Messages::WebPage::LoadRequest(navigation-&gt;navigationID(), request, sandboxExtensionHandle, (uint64_t)shouldOpenExternalURLsPolicy, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</del><ins>+    addPlatformLoadParameters(loadParameters);
+
+    m_process-&gt;send(Messages::WebPage::LoadRequest(loadParameters), m_pageID);
</ins><span class="cx">     m_process-&gt;responsivenessTimer().start();
</span><span class="cx"> 
</span><span class="cx">     return WTFMove(navigation);
</span><span class="lines">@@ -959,10 +972,16 @@
</span><span class="cx"> 
</span><span class="cx">     String resourceDirectoryPath = resourceDirectoryURL.fileSystemPath();
</span><span class="cx"> 
</span><del>-    SandboxExtension::Handle sandboxExtensionHandle;
-    SandboxExtension::createHandle(resourceDirectoryPath, SandboxExtension::ReadOnly, sandboxExtensionHandle);
</del><ins>+    LoadParameters loadParameters;
+    loadParameters.navigationID = navigation-&gt;navigationID();
+    loadParameters.request = fileURL;
+    loadParameters.shouldOpenExternalURLsPolicy = (uint64_t)ShouldOpenExternalURLsPolicy::ShouldNotAllow;
+    loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());
+    SandboxExtension::createHandle(resourceDirectoryPath, SandboxExtension::ReadOnly, loadParameters.sandboxExtensionHandle);
+    addPlatformLoadParameters(loadParameters);
+
</ins><span class="cx">     m_process-&gt;assumeReadAccessToBaseURL(resourceDirectoryURL);
</span><del>-    m_process-&gt;send(Messages::WebPage::LoadRequest(navigation-&gt;navigationID(), fileURL, sandboxExtensionHandle, (uint64_t)ShouldOpenExternalURLsPolicy::ShouldNotAllow, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</del><ins>+    m_process-&gt;send(Messages::WebPage::LoadRequest(loadParameters), m_pageID);
</ins><span class="cx">     m_process-&gt;responsivenessTimer().start();
</span><span class="cx"> 
</span><span class="cx">     return WTFMove(navigation);
</span><span class="lines">@@ -982,8 +1001,17 @@
</span><span class="cx">     if (!isValid())
</span><span class="cx">         reattachToWebProcess();
</span><span class="cx"> 
</span><ins>+    LoadParameters loadParameters;
+    loadParameters.navigationID = navigation-&gt;navigationID();
+    loadParameters.data = data-&gt;dataReference();
+    loadParameters.MIMEType = MIMEType;
+    loadParameters.encodingName = encoding;
+    loadParameters.baseURLString = baseURL;
+    loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());
+    addPlatformLoadParameters(loadParameters);
+
</ins><span class="cx">     m_process-&gt;assumeReadAccessToBaseURL(baseURL);
</span><del>-    m_process-&gt;send(Messages::WebPage::LoadData(navigation-&gt;navigationID(), data-&gt;dataReference(), MIMEType, encoding, baseURL, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</del><ins>+    m_process-&gt;send(Messages::WebPage::LoadData(loadParameters), m_pageID);
</ins><span class="cx">     m_process-&gt;responsivenessTimer().start();
</span><span class="cx"> 
</span><span class="cx">     return WTFMove(navigation);
</span><span class="lines">@@ -1004,8 +1032,16 @@
</span><span class="cx">     if (!isValid())
</span><span class="cx">         reattachToWebProcess();
</span><span class="cx"> 
</span><ins>+    LoadParameters loadParameters;
+    loadParameters.navigationID = navigation-&gt;navigationID();
+    loadParameters.string = htmlString;
+    loadParameters.encodingName = ASCIILiteral(&quot;text/html&quot;);
+    loadParameters.baseURLString = baseURL;
+    loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());
+    addPlatformLoadParameters(loadParameters);
+
</ins><span class="cx">     m_process-&gt;assumeReadAccessToBaseURL(baseURL);
</span><del>-    m_process-&gt;send(Messages::WebPage::LoadHTMLString(navigation-&gt;navigationID(), htmlString, baseURL, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</del><ins>+    m_process-&gt;send(Messages::WebPage::LoadString(loadParameters), m_pageID);
</ins><span class="cx">     m_process-&gt;responsivenessTimer().start();
</span><span class="cx"> 
</span><span class="cx">     return WTFMove(navigation);
</span><span class="lines">@@ -1033,9 +1069,18 @@
</span><span class="cx">     if (m_mainFrame)
</span><span class="cx">         m_mainFrame-&gt;setUnreachableURL(unreachableURL);
</span><span class="cx"> 
</span><ins>+    LoadParameters loadParameters;
+    loadParameters.navigationID = 0;
+    loadParameters.string = htmlString;
+    loadParameters.baseURLString = baseURL;
+    loadParameters.unreachableURLString = unreachableURL;
+    loadParameters.provisionalLoadErrorURLString = m_failingProvisionalLoadURL;
+    loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());
+    addPlatformLoadParameters(loadParameters);
+
</ins><span class="cx">     m_process-&gt;assumeReadAccessToBaseURL(baseURL);
</span><span class="cx">     m_process-&gt;assumeReadAccessToBaseURL(unreachableURL);
</span><del>-    m_process-&gt;send(Messages::WebPage::LoadAlternateHTMLString(htmlString, baseURL, unreachableURL, m_failingProvisionalLoadURL, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</del><ins>+    m_process-&gt;send(Messages::WebPage::LoadAlternateHTMLString(loadParameters), m_pageID);
</ins><span class="cx">     m_process-&gt;responsivenessTimer().start();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1050,7 +1095,14 @@
</span><span class="cx">     auto transaction = m_pageLoadState.transaction();
</span><span class="cx">     m_pageLoadState.setPendingAPIRequestURL(transaction, blankURL().string());
</span><span class="cx"> 
</span><del>-    m_process-&gt;send(Messages::WebPage::LoadPlainTextString(string, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</del><ins>+    LoadParameters loadParameters;
+    loadParameters.navigationID = 0;
+    loadParameters.string = string;
+    loadParameters.MIMEType = ASCIILiteral(&quot;text/plain&quot;);
+    loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());
+    addPlatformLoadParameters(loadParameters);
+
+    m_process-&gt;send(Messages::WebPage::LoadString(loadParameters), m_pageID);
</ins><span class="cx">     m_process-&gt;responsivenessTimer().start();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1065,7 +1117,15 @@
</span><span class="cx">     auto transaction = m_pageLoadState.transaction();
</span><span class="cx">     m_pageLoadState.setPendingAPIRequestURL(transaction, blankURL().string());
</span><span class="cx"> 
</span><del>-    m_process-&gt;send(Messages::WebPage::LoadWebArchiveData(webArchiveData-&gt;dataReference(), UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
</del><ins>+    LoadParameters loadParameters;
+    loadParameters.navigationID = 0;
+    loadParameters.data = webArchiveData-&gt;dataReference();
+    loadParameters.MIMEType = ASCIILiteral(&quot;application/x-webarchive&quot;);
+    loadParameters.encodingName = ASCIILiteral(&quot;utf-16&quot;);
+    loadParameters.userData = UserData(process().transformObjectsToHandles(userData).get());
+    addPlatformLoadParameters(loadParameters);
+
+    m_process-&gt;send(Messages::WebPage::LoadData(loadParameters), m_pageID);
</ins><span class="cx">     m_process-&gt;responsivenessTimer().start();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -205,6 +205,7 @@
</span><span class="cx"> struct ColorSpaceData;
</span><span class="cx"> struct EditingRange;
</span><span class="cx"> struct EditorState;
</span><ins>+struct LoadParameters;
</ins><span class="cx"> struct PlatformPopupMenuData;
</span><span class="cx"> struct PrintInfo;
</span><span class="cx"> struct WebPopupItem;
</span><span class="lines">@@ -367,6 +368,7 @@
</span><span class="cx"> 
</span><span class="cx">     void closePage(bool stopResponsivenessTimer);
</span><span class="cx"> 
</span><ins>+    void addPlatformLoadParameters(LoadParameters&amp;);
</ins><span class="cx">     RefPtr&lt;API::Navigation&gt; loadRequest(const WebCore::ResourceRequest&amp;, WebCore::ShouldOpenExternalURLsPolicy = WebCore::ShouldOpenExternalURLsPolicy::ShouldAllowExternalSchemes, API::Object* userData = nullptr);
</span><span class="cx">     RefPtr&lt;API::Navigation&gt; loadFile(const String&amp; fileURL, const String&amp; resourceDirectoryURL, API::Object* userData = nullptr);
</span><span class="cx">     RefPtr&lt;API::Navigation&gt; loadData(API::Data*, const String&amp; MIMEType, const String&amp; encoding, const String&amp; baseURL, API::Object* userData = nullptr);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosWKActionSheetAssistanth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/WKActionSheetAssistant.h (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/WKActionSheetAssistant.h        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/UIProcess/ios/WKActionSheetAssistant.h        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -25,10 +25,10 @@
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> 
</span><del>-#import &quot;DataDetectorsUISPI.h&quot;
</del><span class="cx"> #import &quot;GestureTypes.h&quot;
</span><span class="cx"> #import &quot;WKActionSheet.h&quot;
</span><span class="cx"> #import &lt;UIKit/UIPopoverController.h&gt;
</span><ins>+#import &lt;WebCore/DataDetectorsUISPI.h&gt;
</ins><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosWKContentViewInteractionmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -29,7 +29,6 @@
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> 
</span><span class="cx"> #import &quot;APIUIClient.h&quot;
</span><del>-#import &quot;DataDetectorsUISPI.h&quot;
</del><span class="cx"> #import &quot;EditingRange.h&quot;
</span><span class="cx"> #import &quot;ManagedConfigurationSPI.h&quot;
</span><span class="cx"> #import &quot;NativeWebKeyboardEvent.h&quot;
</span><span class="lines">@@ -65,6 +64,7 @@
</span><span class="cx"> #import &lt;WebCore/Color.h&gt;
</span><span class="cx"> #import &lt;WebCore/CoreGraphicsSPI.h&gt;
</span><span class="cx"> #import &lt;WebCore/DataDetectorsCoreSPI.h&gt;
</span><ins>+#import &lt;WebCore/DataDetectorsUISPI.h&gt;
</ins><span class="cx"> #import &lt;WebCore/FloatQuad.h&gt;
</span><span class="cx"> #import &lt;WebCore/Pasteboard.h&gt;
</span><span class="cx"> #import &lt;WebCore/Path.h&gt;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -596,6 +596,9 @@
</span><span class="cx">                 29AD3096164B4C930072DEA9 /* CustomProtocolManagerProxyMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 29AD3095164B4C930072DEA9 /* CustomProtocolManagerProxyMac.mm */; };
</span><span class="cx">                 29CD55AA128E294F00133C85 /* WKAccessibilityWebPageObjectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 29CD55A8128E294F00133C85 /* WKAccessibilityWebPageObjectBase.h */; };
</span><span class="cx">                 29CD55AB128E294F00133C85 /* WKAccessibilityWebPageObjectBase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 29CD55A9128E294F00133C85 /* WKAccessibilityWebPageObjectBase.mm */; };
</span><ins>+                2D1087601D2C573E00B85F82 /* LoadParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D10875E1D2C573E00B85F82 /* LoadParameters.cpp */; };
+                2D1087611D2C573E00B85F82 /* LoadParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D10875F1D2C573E00B85F82 /* LoadParameters.h */; };
+                2D1087631D2C641B00B85F82 /* LoadParametersCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2D1087621D2C641B00B85F82 /* LoadParametersCocoa.mm */; };
</ins><span class="cx">                 2D125C5E1857EA05003BA3CB /* ViewGestureController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D125C5C1857EA05003BA3CB /* ViewGestureController.h */; };
</span><span class="cx">                 2D125C5F1857EA05003BA3CB /* ViewGestureControllerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2D125C5D1857EA05003BA3CB /* ViewGestureControllerMac.mm */; };
</span><span class="cx">                 2D1B5D5D185869C8006C6596 /* ViewGestureControllerMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D1B5D5B185869C8006C6596 /* ViewGestureControllerMessageReceiver.cpp */; };
</span><span class="lines">@@ -687,6 +690,7 @@
</span><span class="cx">                 2DAF06D618BD1A470081CEB1 /* SmartMagnificationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DAF06D418BD1A470081CEB1 /* SmartMagnificationController.h */; };
</span><span class="cx">                 2DAF06D718BD1A470081CEB1 /* SmartMagnificationController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DAF06D518BD1A470081CEB1 /* SmartMagnificationController.mm */; };
</span><span class="cx">                 2DAF4FFB1B636181006013D6 /* ViewGestureController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2DAF4FFA1B636181006013D6 /* ViewGestureController.cpp */; };
</span><ins>+                2DC4CF7B1D2DE24B00ECCC94 /* WebPageCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DC4CF7A1D2DE24B00ECCC94 /* WebPageCocoa.mm */; };
</ins><span class="cx">                 2DC6D9C318C44A610043BAD4 /* WKWebViewContentProviderRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DC6D9C118C44A610043BAD4 /* WKWebViewContentProviderRegistry.h */; };
</span><span class="cx">                 2DC6D9C418C44A610043BAD4 /* WKWebViewContentProviderRegistry.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DC6D9C218C44A610043BAD4 /* WKWebViewContentProviderRegistry.mm */; };
</span><span class="cx">                 2DD12A081A8177F3002C74E6 /* WKPageRenderingProgressEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD12A071A8177F3002C74E6 /* WKPageRenderingProgressEvents.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -1735,7 +1739,6 @@
</span><span class="cx">                 CE11AD521CBC482F00681EE5 /* CodeSigning.h in Headers */ = {isa = PBXBuildFile; fileRef = CE11AD511CBC482F00681EE5 /* CodeSigning.h */; };
</span><span class="cx">                 CE1A0BD21A48E6C60054EF74 /* AssertionServicesSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1A0BCC1A48E6C60054EF74 /* AssertionServicesSPI.h */; };
</span><span class="cx">                 CE1A0BD31A48E6C60054EF74 /* CorePDFSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1A0BCD1A48E6C60054EF74 /* CorePDFSPI.h */; };
</span><del>-                CE1A0BD41A48E6C60054EF74 /* DataDetectorsUISPI.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1A0BCE1A48E6C60054EF74 /* DataDetectorsUISPI.h */; };
</del><span class="cx">                 CE1A0BD51A48E6C60054EF74 /* ManagedConfigurationSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1A0BCF1A48E6C60054EF74 /* ManagedConfigurationSPI.h */; };
</span><span class="cx">                 CE1A0BD61A48E6C60054EF74 /* TCCSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1A0BD01A48E6C60054EF74 /* TCCSPI.h */; };
</span><span class="cx">                 CE1A0BD71A48E6C60054EF74 /* TextInputSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1A0BD11A48E6C60054EF74 /* TextInputSPI.h */; };
</span><span class="lines">@@ -2600,6 +2603,9 @@
</span><span class="cx">                 29CD55A9128E294F00133C85 /* WKAccessibilityWebPageObjectBase.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKAccessibilityWebPageObjectBase.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2D0035221BC7414800DA8716 /* DeprecatedPDFPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DeprecatedPDFPlugin.h; path = PDF/DeprecatedPDFPlugin.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2D0035231BC7414800DA8716 /* DeprecatedPDFPlugin.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = DeprecatedPDFPlugin.mm; path = PDF/DeprecatedPDFPlugin.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                2D10875E1D2C573E00B85F82 /* LoadParameters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LoadParameters.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                2D10875F1D2C573E00B85F82 /* LoadParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadParameters.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                2D1087621D2C641B00B85F82 /* LoadParametersCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LoadParametersCocoa.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 2D125C5C1857EA05003BA3CB /* ViewGestureController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewGestureController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2D125C5D1857EA05003BA3CB /* ViewGestureControllerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ViewGestureControllerMac.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2D1B5D5A18586599006C6596 /* ViewGestureController.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = ViewGestureController.messages.in; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -2702,6 +2708,7 @@
</span><span class="cx">                 2DAF06D518BD1A470081CEB1 /* SmartMagnificationController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SmartMagnificationController.mm; path = ios/SmartMagnificationController.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2DAF06D818BD23BA0081CEB1 /* SmartMagnificationController.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = SmartMagnificationController.messages.in; path = ios/SmartMagnificationController.messages.in; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2DAF4FFA1B636181006013D6 /* ViewGestureController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ViewGestureController.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                2DC4CF7A1D2DE24B00ECCC94 /* WebPageCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebPageCocoa.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 2DC6D9C118C44A610043BAD4 /* WKWebViewContentProviderRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebViewContentProviderRegistry.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2DC6D9C218C44A610043BAD4 /* WKWebViewContentProviderRegistry.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewContentProviderRegistry.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2DD12A071A8177F3002C74E6 /* WKPageRenderingProgressEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPageRenderingProgressEvents.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -3840,7 +3847,6 @@
</span><span class="cx">                 CE11AD511CBC482F00681EE5 /* CodeSigning.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CodeSigning.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 CE1A0BCC1A48E6C60054EF74 /* AssertionServicesSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AssertionServicesSPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 CE1A0BCD1A48E6C60054EF74 /* CorePDFSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CorePDFSPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                CE1A0BCE1A48E6C60054EF74 /* DataDetectorsUISPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataDetectorsUISPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 CE1A0BCF1A48E6C60054EF74 /* ManagedConfigurationSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ManagedConfigurationSPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 CE1A0BD01A48E6C60054EF74 /* TCCSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TCCSPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 CE1A0BD11A48E6C60054EF74 /* TextInputSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextInputSPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -4482,6 +4488,8 @@
</span><span class="cx">                                 BCCF6B2312C93E7A008F9C35 /* ImageOptions.h */,
</span><span class="cx">                                 1A92DC1212F8BAB90017AF65 /* LayerTreeContext.cpp */,
</span><span class="cx">                                 1A92DC1012F8BA460017AF65 /* LayerTreeContext.h */,
</span><ins>+                                2D10875E1D2C573E00B85F82 /* LoadParameters.cpp */,
+                                2D10875F1D2C573E00B85F82 /* LoadParameters.h */,
</ins><span class="cx">                                 2D50366A1BCDE17900E20BB3 /* NativeWebGestureEvent.h */,
</span><span class="cx">                                 C02BFF1512514FD8009CCBEA /* NativeWebKeyboardEvent.h */,
</span><span class="cx">                                 31EA25D3134F78D6005B1452 /* NativeWebMouseEvent.h */,
</span><span class="lines">@@ -4897,6 +4905,7 @@
</span><span class="cx">                         children = (
</span><span class="cx">                                 2D29ECCE192F2C2E00984B78 /* RemoteLayerTreeDisplayRefreshMonitor.h */,
</span><span class="cx">                                 2D29ECCF192F2C2E00984B78 /* RemoteLayerTreeDisplayRefreshMonitor.mm */,
</span><ins>+                                2DC4CF7A1D2DE24B00ECCC94 /* WebPageCocoa.mm */,
</ins><span class="cx">                         );
</span><span class="cx">                         path = Cocoa;
</span><span class="cx">                         sourceTree = &quot;&lt;group&gt;&quot;;
</span><span class="lines">@@ -5236,6 +5245,7 @@
</span><span class="cx">                                 37BEC4DE19491486008B4286 /* CompletionHandlerCallChecker.mm */,
</span><span class="cx">                                 C55F916C1C595E440029E92D /* DataDetectionResult.h */,
</span><span class="cx">                                 C55F916D1C595E440029E92D /* DataDetectionResult.mm */,
</span><ins>+                                2D1087621D2C641B00B85F82 /* LoadParametersCocoa.mm */,
</ins><span class="cx">                                 1AB1F78E1D1B34A6007C9BD1 /* WebCoreArgumentCodersCocoa.mm */,
</span><span class="cx">                                 37C4C0921814B3AF003688B9 /* WKNSArray.h */,
</span><span class="cx">                                 37C4C0911814B3AF003688B9 /* WKNSArray.mm */,
</span><span class="lines">@@ -7157,7 +7167,6 @@
</span><span class="cx">                                 CE1A0BCC1A48E6C60054EF74 /* AssertionServicesSPI.h */,
</span><span class="cx">                                 CDA041F31ACE2105004A13EC /* BackBoardServicesSPI.h */,
</span><span class="cx">                                 CE1A0BCD1A48E6C60054EF74 /* CorePDFSPI.h */,
</span><del>-                                CE1A0BCE1A48E6C60054EF74 /* DataDetectorsUISPI.h */,
</del><span class="cx">                                 CE1A0BCF1A48E6C60054EF74 /* ManagedConfigurationSPI.h */,
</span><span class="cx">                                 579D18B71CCFE34B00B1974C /* PhotosSPI.h */,
</span><span class="cx">                                 CE1A0BD01A48E6C60054EF74 /* TCCSPI.h */,
</span><span class="lines">@@ -7460,7 +7469,6 @@
</span><span class="cx">                                 512A976A180E09B80039A149 /* DatabaseProcessProxyMessages.h in Headers */,
</span><span class="cx">                                 51032F1E180F791700961BB7 /* DatabaseToWebProcessConnectionMessages.h in Headers */,
</span><span class="cx">                                 C55F91711C59676E0029E92D /* DataDetectionResult.h in Headers */,
</span><del>-                                CE1A0BD41A48E6C60054EF74 /* DataDetectorsUISPI.h in Headers */,
</del><span class="cx">                                 1AC75380183BE50F0072CB15 /* DataReference.h in Headers */,
</span><span class="cx">                                 83891B6C1A68C30B0030F386 /* DiagnosticLoggingClient.h in Headers */,
</span><span class="cx">                                 5C1427021C23F84C00D41183 /* Download.h in Headers */,
</span><span class="lines">@@ -7852,6 +7860,7 @@
</span><span class="cx">                                 7C85FD7C193415A8000177C4 /* WebPreferencesDefinitions.h in Headers */,
</span><span class="cx">                                 7C85FD8019341665000177C4 /* WebPreferencesKeys.h in Headers */,
</span><span class="cx">                                 BCD598AC112B7FDF00EC8C23 /* WebPreferencesStore.h in Headers */,
</span><ins>+                                2D1087611D2C573E00B85F82 /* LoadParameters.h in Headers */,
</ins><span class="cx">                                 BC032D9710F437AF0058C15A /* WebProcess.h in Headers */,
</span><span class="cx">                                 1A043A09124D11A900FFBFB5 /* WebProcessConnection.h in Headers */,
</span><span class="cx">                                 1A043F6A12514D8B00FFBFB5 /* WebProcessConnectionMessages.h in Headers */,
</span><span class="lines">@@ -8877,6 +8886,7 @@
</span><span class="cx">                                 C59C4A5818B81174007BDCB6 /* AssistedNodeInformation.cpp in Sources */,
</span><span class="cx">                                 515E7727183DD6F60007203F /* AsyncRequest.cpp in Sources */,
</span><span class="cx">                                 BCEE966C112FAF57006BCC24 /* Attachment.cpp in Sources */,
</span><ins>+                                2D1087631D2C641B00B85F82 /* LoadParametersCocoa.mm in Sources */,
</ins><span class="cx">                                 E1A31735134CEA80007C9A4F /* AttributedString.mm in Sources */,
</span><span class="cx">                                 512F589612A8838800629530 /* AuthenticationChallengeProxy.cpp in Sources */,
</span><span class="cx">                                 512F589812A8838800629530 /* AuthenticationDecisionListener.cpp in Sources */,
</span><span class="lines">@@ -8937,6 +8947,7 @@
</span><span class="cx">                                 1A64229912DD029200CAAE2C /* DrawingAreaMessageReceiver.cpp in Sources */,
</span><span class="cx">                                 BC2652161182608100243E12 /* DrawingAreaProxy.cpp in Sources */,
</span><span class="cx">                                 1A64230812DD09EB00CAAE2C /* DrawingAreaProxyMessageReceiver.cpp in Sources */,
</span><ins>+                                2DC4CF7B1D2DE24B00ECCC94 /* WebPageCocoa.mm in Sources */,
</ins><span class="cx">                                 8CFECE941490F140002AAA32 /* EditorState.cpp in Sources */,
</span><span class="cx">                                 51B15A8413843A3900321AD8 /* EnvironmentUtilities.cpp in Sources */,
</span><span class="cx">                                 1AA575FA1496B52600A4EE06 /* EventDispatcher.cpp in Sources */,
</span><span class="lines">@@ -9059,6 +9070,7 @@
</span><span class="cx">                                 1A2D82A6127F4EAB001EB962 /* NPObjectProxy.cpp in Sources */,
</span><span class="cx">                                 1A2D82A8127F4EAB001EB962 /* NPRemoteObjectMap.cpp in Sources */,
</span><span class="cx">                                 1A2161B111F37664008AD0F5 /* NPRuntimeObjectMap.cpp in Sources */,
</span><ins>+                                2D1087601D2C573E00B85F82 /* LoadParameters.cpp in Sources */,
</ins><span class="cx">                                 1A2162B011F38971008AD0F5 /* NPRuntimeUtilities.cpp in Sources */,
</span><span class="cx">                                 1A2D84A4127F6AD1001EB962 /* NPVariantData.cpp in Sources */,
</span><span class="cx">                                 BC8ACA1416670D89004C1941 /* ObjCObjectGraph.mm in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -1629,7 +1629,7 @@
</span><span class="cx">     return webPage-&gt;accessibilityRemoteObject();
</span><span class="cx"> }
</span><span class="cx">     
</span><del>-NSCachedURLResponse* WebFrameLoaderClient::willCacheResponse(DocumentLoader*, unsigned long identifier, NSCachedURLResponse* response) const
</del><ins>+NSCachedURLResponse *WebFrameLoaderClient::willCacheResponse(DocumentLoader*, unsigned long identifier, NSCachedURLResponse* response) const
</ins><span class="cx"> {
</span><span class="cx">     WebPage* webPage = m_frame-&gt;page();
</span><span class="cx">     if (!webPage)
</span><span class="lines">@@ -1638,6 +1638,15 @@
</span><span class="cx">     return webPage-&gt;injectedBundleResourceLoadClient().shouldCacheResponse(webPage, m_frame, identifier) ? response : nil;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+NSDictionary *WebFrameLoaderClient::dataDetectionContext()
+{
+    WebPage* webPage = m_frame-&gt;page();
+    if (!webPage)
+        return nil;
+
+    return webPage-&gt;dataDetectionContext();
+}
+
</ins><span class="cx"> #endif // PLATFORM(COCOA)
</span><span class="cx"> 
</span><span class="cx"> bool WebFrameLoaderClient::shouldAlwaysUsePluginDocument(const String&amp; /*mimeType*/) const
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.h        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -221,6 +221,8 @@
</span><span class="cx">     RemoteAXObjectRef accessibilityRemoteObject() override;
</span><span class="cx">     
</span><span class="cx">     NSCachedURLResponse* willCacheResponse(WebCore::DocumentLoader*, unsigned long identifier, NSCachedURLResponse*) const override;
</span><ins>+
+    NSDictionary *dataDetectionContext() override;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     bool shouldAlwaysUsePluginDocument(const String&amp; /*mimeType*/) const override;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageCocoaWebPageCocoammfromrev202888trunkSourceWebKit2UIProcessCocoaWebPageProxyCocoamm"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit2/WebProcess/WebPage/Cocoa/WebPageCocoa.mm (from rev 202888, trunk/Source/WebKit2/UIProcess/Cocoa/WebPageProxyCocoa.mm) (0 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/Cocoa/WebPageCocoa.mm                                (rev 0)
+++ trunk/Source/WebKit2/WebProcess/WebPage/Cocoa/WebPageCocoa.mm        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+/*
+ * Copyright (C) 2016 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.
+ */
+
+#import &quot;config.h&quot;
+#import &quot;WebPage.h&quot;
+
+#import &quot;LoadParameters.h&quot;
+
+#if PLATFORM(COCOA)
+
+using namespace WebCore;
+
+namespace WebKit {
+
+void WebPage::platformDidReceiveLoadParameters(const LoadParameters&amp; loadParameters)
+{
+    m_dataDetectionContext = loadParameters.dataDetectionContext;
+}
+
+} // namespace WebKit
+
+#endif // PLATFORM(COCOA)
</ins></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -41,6 +41,7 @@
</span><span class="cx"> #include &quot;InjectedBundle.h&quot;
</span><span class="cx"> #include &quot;InjectedBundleBackForwardList.h&quot;
</span><span class="cx"> #include &quot;InjectedBundleScriptWorld.h&quot;
</span><ins>+#include &quot;LoadParameters.h&quot;
</ins><span class="cx"> #include &quot;Logging.h&quot;
</span><span class="cx"> #include &quot;NetscapePlugin.h&quot;
</span><span class="cx"> #include &quot;NotificationPermissionRequestManager.h&quot;
</span><span class="lines">@@ -1139,21 +1140,29 @@
</span><span class="cx">     frame-&gt;coreFrame()-&gt;loader().load(FrameLoadRequest(frame-&gt;coreFrame(), ResourceRequest(URL(URL(), url)), ShouldOpenExternalURLsPolicy::ShouldNotAllow));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPage::loadRequest(uint64_t navigationID, const ResourceRequest&amp; request, const SandboxExtension::Handle&amp; sandboxExtensionHandle, uint64_t shouldOpenExternalURLsPolicy, const UserData&amp; userData)
</del><ins>+#if !PLATFORM(COCOA)
+void WebPage::platformDidReceiveLoadParameters(const LoadParameters&amp; loadParameters)
</ins><span class="cx"> {
</span><ins>+}
+#endif
+
+void WebPage::loadRequest(const LoadParameters&amp; loadParameters)
+{
</ins><span class="cx">     SendStopResponsivenessTimer stopper(this);
</span><span class="cx"> 
</span><del>-    m_pendingNavigationID = navigationID;
</del><ins>+    m_pendingNavigationID = loadParameters.navigationID;
</ins><span class="cx"> 
</span><del>-    m_sandboxExtensionTracker.beginLoad(m_mainFrame.get(), sandboxExtensionHandle);
</del><ins>+    m_sandboxExtensionTracker.beginLoad(m_mainFrame.get(), loadParameters.sandboxExtensionHandle);
</ins><span class="cx"> 
</span><span class="cx">     // Let the InjectedBundle know we are about to start the load, passing the user data from the UIProcess
</span><span class="cx">     // to all the client to set up any needed state.
</span><del>-    m_loaderClient.willLoadURLRequest(this, request, WebProcess::singleton().transformHandlesToObjects(userData.object()).get());
</del><ins>+    m_loaderClient.willLoadURLRequest(this, loadParameters.request, WebProcess::singleton().transformHandlesToObjects(loadParameters.userData.object()).get());
</ins><span class="cx"> 
</span><ins>+    platformDidReceiveLoadParameters(loadParameters);
+
</ins><span class="cx">     // Initate the load in WebCore.
</span><del>-    FrameLoadRequest frameLoadRequest(m_mainFrame-&gt;coreFrame(), request, ShouldOpenExternalURLsPolicy::ShouldNotAllow);
-    ShouldOpenExternalURLsPolicy externalURLsPolicy = static_cast&lt;ShouldOpenExternalURLsPolicy&gt;(shouldOpenExternalURLsPolicy);
</del><ins>+    FrameLoadRequest frameLoadRequest(m_mainFrame-&gt;coreFrame(), loadParameters.request, ShouldOpenExternalURLsPolicy::ShouldNotAllow);
+    ShouldOpenExternalURLsPolicy externalURLsPolicy = static_cast&lt;ShouldOpenExternalURLsPolicy&gt;(loadParameters.shouldOpenExternalURLsPolicy);
</ins><span class="cx">     frameLoadRequest.setShouldOpenExternalURLsPolicy(externalURLsPolicy);
</span><span class="cx"> 
</span><span class="cx">     corePage()-&gt;userInputBridge().loadRequest(frameLoadRequest);
</span><span class="lines">@@ -1179,7 +1188,7 @@
</span><span class="cx">     m_mainFrame-&gt;coreFrame()-&gt;loader().load(FrameLoadRequest(m_mainFrame-&gt;coreFrame(), request, ShouldOpenExternalURLsPolicy::ShouldNotAllow, substituteData));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPage::loadString(uint64_t navigationID, const String&amp; htmlString, const String&amp; MIMEType, const URL&amp; baseURL, const URL&amp; unreachableURL, const UserData&amp; userData)
</del><ins>+void WebPage::loadStringImpl(uint64_t navigationID, const String&amp; htmlString, const String&amp; MIMEType, const URL&amp; baseURL, const URL&amp; unreachableURL, const UserData&amp; userData)
</ins><span class="cx"> {
</span><span class="cx">     if (!htmlString.isNull() &amp;&amp; htmlString.is8Bit()) {
</span><span class="cx">         RefPtr&lt;SharedBuffer&gt; sharedBuffer = SharedBuffer::create(reinterpret_cast&lt;const char*&gt;(htmlString.characters8()), htmlString.length() * sizeof(LChar));
</span><span class="lines">@@ -1190,40 +1199,35 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPage::loadData(uint64_t navigationID, const IPC::DataReference&amp; data, const String&amp; MIMEType, const String&amp; encodingName, const String&amp; baseURLString, const UserData&amp; userData)
</del><ins>+void WebPage::loadData(const LoadParameters&amp; loadParameters)
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;SharedBuffer&gt; sharedBuffer = SharedBuffer::create(reinterpret_cast&lt;const char*&gt;(data.data()), data.size());
-    URL baseURL = baseURLString.isEmpty() ? blankURL() : URL(URL(), baseURLString);
-    loadDataImpl(navigationID, sharedBuffer, MIMEType, encodingName, baseURL, URL(), userData);
</del><ins>+    platformDidReceiveLoadParameters(loadParameters);
+
+    RefPtr&lt;SharedBuffer&gt; sharedBuffer = SharedBuffer::create(reinterpret_cast&lt;const char*&gt;(loadParameters.data.data()), loadParameters.data.size());
+    URL baseURL = loadParameters.baseURLString.isEmpty() ? blankURL() : URL(URL(), loadParameters.baseURLString);
+    loadDataImpl(loadParameters.navigationID, sharedBuffer, loadParameters.MIMEType, loadParameters.encodingName, baseURL, URL(), loadParameters.userData);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPage::loadHTMLString(uint64_t navigationID, const String&amp; htmlString, const String&amp; baseURLString, const UserData&amp; userData)
</del><ins>+void WebPage::loadString(const LoadParameters&amp; loadParameters)
</ins><span class="cx"> {
</span><del>-    URL baseURL = baseURLString.isEmpty() ? blankURL() : URL(URL(), baseURLString);
-    loadString(navigationID, htmlString, ASCIILiteral(&quot;text/html&quot;), baseURL, URL(), userData);
</del><ins>+    platformDidReceiveLoadParameters(loadParameters);
+
+    URL baseURL = loadParameters.baseURLString.isEmpty() ? blankURL() : URL(URL(), loadParameters.baseURLString);
+    loadStringImpl(loadParameters.navigationID, loadParameters.string, loadParameters.MIMEType, baseURL, URL(), loadParameters.userData);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPage::loadAlternateHTMLString(const String&amp; htmlString, const String&amp; baseURLString, const String&amp; unreachableURLString, const String&amp; provisionalLoadErrorURLString, const UserData&amp; userData)
</del><ins>+void WebPage::loadAlternateHTMLString(const LoadParameters&amp; loadParameters)
</ins><span class="cx"> {
</span><del>-    URL baseURL = baseURLString.isEmpty() ? blankURL() : URL(URL(), baseURLString);
-    URL unreachableURL = unreachableURLString.isEmpty() ? URL() : URL(URL(), unreachableURLString);
-    URL provisionalLoadErrorURL = provisionalLoadErrorURLString.isEmpty() ? URL() : URL(URL(), provisionalLoadErrorURLString);
</del><ins>+    platformDidReceiveLoadParameters(loadParameters);
+
+    URL baseURL = loadParameters.baseURLString.isEmpty() ? blankURL() : URL(URL(), loadParameters.baseURLString);
+    URL unreachableURL = loadParameters.unreachableURLString.isEmpty() ? URL() : URL(URL(), loadParameters.unreachableURLString);
+    URL provisionalLoadErrorURL = loadParameters.provisionalLoadErrorURLString.isEmpty() ? URL() : URL(URL(), loadParameters.provisionalLoadErrorURLString);
</ins><span class="cx">     m_mainFrame-&gt;coreFrame()-&gt;loader().setProvisionalLoadErrorBeingHandledURL(provisionalLoadErrorURL);
</span><del>-    loadString(0, htmlString, ASCIILiteral(&quot;text/html&quot;), baseURL, unreachableURL, userData);
</del><ins>+    loadStringImpl(0, loadParameters.string, ASCIILiteral(&quot;text/html&quot;), baseURL, unreachableURL, loadParameters.userData);
</ins><span class="cx">     m_mainFrame-&gt;coreFrame()-&gt;loader().setProvisionalLoadErrorBeingHandledURL({ });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPage::loadPlainTextString(const String&amp; string, const UserData&amp; userData)
-{
-    loadString(0, string, ASCIILiteral(&quot;text/plain&quot;), blankURL(), URL(), userData);
-}
-
-void WebPage::loadWebArchiveData(const IPC::DataReference&amp; webArchiveData, const UserData&amp; userData)
-{
-    RefPtr&lt;SharedBuffer&gt; sharedBuffer = SharedBuffer::create(reinterpret_cast&lt;const char*&gt;(webArchiveData.data()), webArchiveData.size() * sizeof(uint8_t));
-    loadDataImpl(0, sharedBuffer, ASCIILiteral(&quot;application/x-webarchive&quot;), ASCIILiteral(&quot;utf-16&quot;), blankURL(), URL(), userData);
-}
-
</del><span class="cx"> void WebPage::navigateToPDFLinkWithSimulatedClick(const String&amp; url, IntPoint documentPoint, IntPoint screenPoint)
</span><span class="cx"> {
</span><span class="cx">     Frame* mainFrame = m_mainFrame-&gt;coreFrame();
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -192,6 +192,7 @@
</span><span class="cx"> struct EditingRange;
</span><span class="cx"> struct EditorState;
</span><span class="cx"> struct InteractionInformationAtPosition;
</span><ins>+struct LoadParameters;
</ins><span class="cx"> struct PrintInfo;
</span><span class="cx"> struct WebPageCreationParameters;
</span><span class="cx"> struct WebPreferencesStore;
</span><span class="lines">@@ -853,6 +854,8 @@
</span><span class="cx">     bool shouldUsePDFPlugin() const;
</span><span class="cx">     bool pdfPluginEnabled() const { return m_pdfPluginEnabled; }
</span><span class="cx">     void setPDFPluginEnabled(bool enabled) { m_pdfPluginEnabled = enabled; }
</span><ins>+
+    NSDictionary *dataDetectionContext() const { return m_dataDetectionContext.get(); }
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     void savePDFToFileInDownloadsFolder(const String&amp; suggestedFilename, const String&amp; originatingURLString, const uint8_t* data, unsigned long size);
</span><span class="lines">@@ -998,18 +1001,17 @@
</span><span class="cx">     String sourceForFrame(WebFrame*);
</span><span class="cx"> 
</span><span class="cx">     void loadDataImpl(uint64_t navigationID, PassRefPtr&lt;WebCore::SharedBuffer&gt;, const String&amp; MIMEType, const String&amp; encodingName, const WebCore::URL&amp; baseURL, const WebCore::URL&amp; failingURL, const UserData&amp;);
</span><del>-    void loadString(uint64_t navigationID, const String&amp;, const String&amp; MIMEType, const WebCore::URL&amp; baseURL, const WebCore::URL&amp; failingURL, const UserData&amp;);
</del><ins>+    void loadStringImpl(uint64_t navigationID, const String&amp;, const String&amp; MIMEType, const WebCore::URL&amp; baseURL, const WebCore::URL&amp; failingURL, const UserData&amp;);
</ins><span class="cx"> 
</span><span class="cx">     bool platformHasLocalDataForURL(const WebCore::URL&amp;);
</span><span class="cx"> 
</span><span class="cx">     // Actions
</span><span class="cx">     void tryClose();
</span><del>-    void loadRequest(uint64_t navigationID, const WebCore::ResourceRequest&amp;, const SandboxExtension::Handle&amp;, uint64_t shouldOpenExternalURLsPolicy, const UserData&amp;);
-    void loadData(uint64_t navigationID, const IPC::DataReference&amp;, const String&amp; MIMEType, const String&amp; encodingName, const String&amp; baseURL, const UserData&amp;);
-    void loadHTMLString(uint64_t navigationID, const String&amp; htmlString, const String&amp; baseURL, const UserData&amp;);
-    void loadAlternateHTMLString(const String&amp; htmlString, const String&amp; baseURL, const String&amp; unreachableURL, const String&amp; provisionalLoadErrorURL, const UserData&amp;);
-    void loadPlainTextString(const String&amp;, const UserData&amp;);
-    void loadWebArchiveData(const IPC::DataReference&amp;, const UserData&amp;);
</del><ins>+    void platformDidReceiveLoadParameters(const LoadParameters&amp;);
+    void loadRequest(const LoadParameters&amp;);
+    void loadData(const LoadParameters&amp;);
+    void loadString(const LoadParameters&amp;);
+    void loadAlternateHTMLString(const LoadParameters&amp;);
</ins><span class="cx">     void navigateToPDFLinkWithSimulatedClick(const String&amp; url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint);
</span><span class="cx">     void reload(uint64_t navigationID, bool reloadFromOrigin, bool contentBlockersEnabled, const SandboxExtension::Handle&amp;);
</span><span class="cx">     void goForward(uint64_t navigationID, uint64_t);
</span><span class="lines">@@ -1280,6 +1282,8 @@
</span><span class="cx"> 
</span><span class="cx">     ViewGestureGeometryCollector m_viewGestureGeometryCollector;
</span><span class="cx"> 
</span><ins>+    RetainPtr&lt;NSDictionary&gt; m_dataDetectionContext;
+
</ins><span class="cx"> #elif HAVE(ACCESSIBILITY) &amp;&amp; (PLATFORM(GTK) || PLATFORM(EFL))
</span><span class="cx">     GRefPtr&lt;WebPageAccessibilityObject&gt; m_accessibilityObject;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagemessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -132,12 +132,11 @@
</span><span class="cx">     TryRestoreScrollPosition()
</span><span class="cx"> 
</span><span class="cx">     LoadURLInFrame(String url, uint64_t frameID)
</span><del>-    LoadRequest(uint64_t navigationID, WebCore::ResourceRequest request, WebKit::SandboxExtension::Handle sandboxExtensionHandle, uint64_t shouldOpenExternalURLsPolicy, WebKit::UserData userData)
-    LoadData(uint64_t navigationID, IPC::DataReference data, String MIMEType, String encoding, String baseURL, WebKit::UserData userData)
-    LoadHTMLString(uint64_t navigationID, String htmlString, String baseURL, WebKit::UserData userData)
-    LoadAlternateHTMLString(String htmlString, String baseURL, String unreachableURL, String provisionalLoadErrorURL, WebKit::UserData userData)
-    LoadPlainTextString(String string, WebKit::UserData userData)
-    LoadWebArchiveData(IPC::DataReference webArchiveData, WebKit::UserData userData)
</del><ins>+    LoadRequest(struct WebKit::LoadParameters loadParameters)
+    LoadData(struct WebKit::LoadParameters loadParameters)
+    LoadString(struct WebKit::LoadParameters loadParameters)
+    LoadAlternateHTMLString(struct WebKit::LoadParameters loadParameters)
+
</ins><span class="cx">     NavigateToPDFLinkWithSimulatedClick(String url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint)
</span><span class="cx"> 
</span><span class="cx">     Reload(uint64_t navigationID, bool reloadFromOrigin, bool contentBlockersEnabled, WebKit::SandboxExtension::Handle sandboxExtensionHandle)
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Tools/ChangeLog        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2016-07-06  Tim Horton  &lt;timothy_horton@apple.com&gt;
+
+        Email from June 1st containing text 'Today @ 7:10PM' is linkified, but shouldn't be
+        https://bugs.webkit.org/show_bug.cgi?id=159498
+        &lt;rdar://problem/26719903&gt;
+
+        Reviewed by Sam Weinig.
+
+        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+        * TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm: Added.
+        (-[DataDetectionNavigationDelegate webView:didFinishNavigation:]):
+        (-[DataDetectionUIDelegate _dataDetectionContextForWebView:]):
+        (expectLinkCount):
+        (TEST):
+        Add a test ensuring that ReferenceDate in the DataDetectors context is respected
+        when deciding what to linkify.
+
</ins><span class="cx"> 2016-07-06  Alexey Proskuryakov  &lt;ap@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Build fix - work around rdar://problem/27196668.
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestWebKitAPIxcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (202888 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj        2016-07-07 01:32:43 UTC (rev 202888)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -49,6 +49,7 @@
</span><span class="cx">                 2D00065F1C1F589A0088E6A7 /* WKPDFViewResizeCrash.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2D00065D1C1F58940088E6A7 /* WKPDFViewResizeCrash.mm */; };
</span><span class="cx">                 2D1646E21D1862CD00015A1A /* DeferredViewInWindowStateChange.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2D1646E11D1862CD00015A1A /* DeferredViewInWindowStateChange.mm */; };
</span><span class="cx">                 2D51A0C71C8BF00C00765C45 /* DOMHTMLVideoElementWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2D51A0C51C8BF00400765C45 /* DOMHTMLVideoElementWrapper.mm */; };
</span><ins>+                2DC4CF771D2D9DD800ECCC94 /* DataDetection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DC4CF761D2D9DD800ECCC94 /* DataDetection.mm */; };
</ins><span class="cx">                 2DD7D3AF178227B30026E1E3 /* lots-of-text-vertical-lr.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 2DD7D3AE178227AC0026E1E3 /* lots-of-text-vertical-lr.html */; };
</span><span class="cx">                 2E7765CD16C4D80A00BA2BB1 /* mainIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2E7765CC16C4D80A00BA2BB1 /* mainIOS.mm */; };
</span><span class="cx">                 2E7765CF16C4D81100BA2BB1 /* mainMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2E7765CE16C4D81100BA2BB1 /* mainMac.mm */; };
</span><span class="lines">@@ -660,6 +661,7 @@
</span><span class="cx">                 2D640B5417875DFF00BFAF99 /* ScrollPinningBehaviors.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollPinningBehaviors.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2D8104CB1BEC13E70020DA46 /* FindInPage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FindInPage.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2D9A53AE1B31FA8D0074D5AA /* ShrinkToFit.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ShrinkToFit.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                2DC4CF761D2D9DD800ECCC94 /* DataDetection.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DataDetection.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 2DD355351BD08378005DF4A7 /* AutoLayoutIntegration.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AutoLayoutIntegration.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2DD7D3A9178205D00026E1E3 /* ResizeReversePaginatedWebView.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ResizeReversePaginatedWebView.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 2DD7D3AE178227AC0026E1E3 /* lots-of-text-vertical-lr.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = &quot;lots-of-text-vertical-lr.html&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -1166,6 +1168,7 @@
</span><span class="cx">                                 A14FC5861B8991B600D107EB /* ContentFiltering.mm */,
</span><span class="cx">                                 A14FC5891B89927100D107EB /* ContentFilteringPlugIn.mm */,
</span><span class="cx">                                 1AAD19F51C7CE20300831E47 /* Coding.mm */,
</span><ins>+                                2DC4CF761D2D9DD800ECCC94 /* DataDetection.mm */,
</ins><span class="cx">                                 A1A4FE5D18DD3DB700B5EA8A /* Download.mm */,
</span><span class="cx">                                 2D8104CB1BEC13E70020DA46 /* FindInPage.mm */,
</span><span class="cx">                                 2D1FE0AF1AD465C1006CD9E6 /* FixedLayoutSize.mm */,
</span><span class="lines">@@ -2128,6 +2131,7 @@
</span><span class="cx">                                 764322D71B61CCC30024F801 /* WordBoundaryTypingAttributes.mm in Sources */,
</span><span class="cx">                                 7CCE7F051A411AE600447C4C /* NewFirstVisuallyNonEmptyLayoutFrames.cpp in Sources */,
</span><span class="cx">                                 7CCE7F251A411AF600447C4C /* OpenAndCloseWindow.mm in Sources */,
</span><ins>+                                2DC4CF771D2D9DD800ECCC94 /* DataDetection.mm in Sources */,
</ins><span class="cx">                                 7CCE7F071A411AE600447C4C /* PageLoadBasic.cpp in Sources */,
</span><span class="cx">                                 7C83E0C11D0A652F00FEBCF3 /* ProvisionalURLNotChange.mm in Sources */,
</span><span class="cx">                                 7CCE7F081A411AE600447C4C /* PageLoadDidChangeLocationWithinPageForFrame.cpp in Sources */,
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2CocoaDataDetectionmm"></a>
<div class="addfile"><h4>Added: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm (0 => 202889)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm                                (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/DataDetection.mm        2016-07-07 03:03:42 UTC (rev 202889)
</span><span class="lines">@@ -0,0 +1,113 @@
</span><ins>+/*
+ * Copyright (C) 2016 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;
+
+#import &quot;PlatformUtilities.h&quot;
+#import &quot;Test.h&quot;
+#import &lt;WebKit/WebKit.h&gt;
+#import &lt;wtf/RetainPtr.h&gt;
+
+#if WK_API_ENABLED &amp;&amp; PLATFORM(IOS)
+
+static bool finishedLoading;
+static bool ranScript;
+
+@interface DataDetectionNavigationDelegate : NSObject &lt;WKNavigationDelegate&gt;
+@end
+
+@implementation DataDetectionNavigationDelegate
+
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
+{
+    finishedLoading = true;
+}
+
+@end
+
+@interface DataDetectionUIDelegate : NSObject &lt;WKUIDelegate&gt;
+
+@property (nonatomic, retain) NSDate *referenceDate;
+
+@end
+
+@implementation DataDetectionUIDelegate
+
+- (NSDictionary *)_dataDetectionContextForWebView:(WKWebView *)webView
+{
+    if (!_referenceDate)
+        return nil;
+
+    return @{
+        @&quot;ReferenceDate&quot;: _referenceDate
+    };
+}
+
+@end
+
+void expectLinkCount(WKWebView *webView, NSString *HTMLString, unsigned linkCount)
+{
+    [webView loadHTMLString:HTMLString baseURL:nil];
+
+    TestWebKitAPI::Util::run(&amp;finishedLoading);
+    finishedLoading = false;
+
+    [webView evaluateJavaScript:@&quot;document.getElementsByTagName('a').length&quot; completionHandler:^(id value, NSError *error) {
+        EXPECT_EQ(linkCount, [value unsignedIntValue]);
+        ranScript = true;
+    }];
+
+    TestWebKitAPI::Util::run(&amp;ranScript);
+    ranScript = false;
+}
+
+TEST(WebKit2, DataDetectionReferenceDate)
+{
+    RetainPtr&lt;WKWebViewConfiguration&gt; configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+    [configuration setDataDetectorTypes:WKDataDetectorTypeCalendarEvent];
+
+    RetainPtr&lt;WKWebView&gt; webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
+
+    RetainPtr&lt;DataDetectionNavigationDelegate&gt; navigationDelegate = adoptNS([[DataDetectionNavigationDelegate alloc] init]);
+    [webView setNavigationDelegate:navigationDelegate.get()];
+
+    RetainPtr&lt;DataDetectionUIDelegate&gt; UIDelegate = adoptNS([[DataDetectionUIDelegate alloc] init]);
+    [webView setUIDelegate:UIDelegate.get()];
+
+    expectLinkCount(webView.get(), @&quot;tomorrow at 6PM&quot;, 1);
+    expectLinkCount(webView.get(), @&quot;yesterday at 6PM&quot;, 0);
+
+    NSTimeInterval week = 60 * 60 * 24 * 7;
+
+    [UIDelegate setReferenceDate:[NSDate dateWithTimeIntervalSinceNow:-week]];
+    expectLinkCount(webView.get(), @&quot;tomorrow at 6PM&quot;, 0);
+    expectLinkCount(webView.get(), @&quot;yesterday at 6PM&quot;, 0);
+
+    [UIDelegate setReferenceDate:[NSDate dateWithTimeIntervalSinceNow:week]];
+    expectLinkCount(webView.get(), @&quot;tomorrow at 6PM&quot;, 1);
+    expectLinkCount(webView.get(), @&quot;yesterday at 6PM&quot;, 1);
+}
+
+#endif
</ins></span></pre>
</div>
</div>

</body>
</html>