<!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>[214113] 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/214113">214113</a></dd>
<dt>Author</dt> <dd>antti@apple.com</dd>
<dt>Date</dt> <dd>2017-03-17 12:52:49 -0700 (Fri, 17 Mar 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add a reload policy where only expired subresources are revalidated
https://bugs.webkit.org/show_bug.cgi?id=169756

Reviewed by Andreas Kling.

Source/WebCore:

Test: http/tests/cache/reload-expired-only.html

The default reload behavior revalidates all resources on the page. This patch adds
a new policy that revalidates expired (and uncacheable) resources only. Using this
policy can speed up reloads significantly and also reduce network traffic and server
load.

* history/PageCache.cpp:
(WebCore::canCachePage):
* inspector/InspectorPageAgent.cpp:
(WebCore::InspectorPageAgent::reload):
* loader/FrameLoader.cpp:
(WebCore::isBackForwardLoadType):
(WebCore::isReload):

    Add a helper function.

(WebCore::FrameLoader::loadURL):
(WebCore::logNavigation):
(WebCore::FrameLoader::reload):

    Replace bool arguments with OptionSet&lt;ReloadOption&gt;. Most of the patch is about adapting to this.

(WebCore::FrameLoader::transitionToCommitted):
(WebCore::FrameLoader::subresourceCachePolicy):

    Return CachePolicyVerify for 'ReloadExpiredOnly' frame load type. This is the substantive
    change that causes the behavior difference.

(WebCore::FrameLoader::checkLoadCompleteForThisFrame):
(WebCore::FrameLoader::defaultRequestCachingPolicy):

    Flip the isMainResource condition for better readability.

(WebCore::FrameLoader::shouldPerformFragmentNavigation):
(WebCore::FrameLoader::loadDifferentDocumentItem):
* loader/FrameLoader.h:
(WebCore::FrameLoader::reload):
* loader/FrameLoaderTypes.h:
* loader/HistoryController.cpp:
(WebCore::HistoryController::restoreDocumentState):
* page/DiagnosticLoggingKeys.cpp:
(WebCore::DiagnosticLoggingKeys::reloadRevalidatingExpiredKey):
* page/DiagnosticLoggingKeys.h:
* replay/UserInputBridge.cpp:
(WebCore::UserInputBridge::reloadFrame):
* replay/UserInputBridge.h:
* testing/Internals.cpp:
(WebCore::Internals::forceReload):
(WebCore::Internals::reloadExpiredOnly):

    Testing support.

* testing/Internals.h:
* testing/Internals.idl:

Source/WebKit/mac:

* WebView/WebFrame.mm:
(toWebFrameLoadType):
(-[WebFrame reload]):
(-[WebFrame reloadFromOrigin]):

Source/WebKit2:

* UIProcess/API/C/WKPage.cpp:
(WKPageReload):
(WKPageReloadWithoutContentBlockers):
(WKPageReloadFromOrigin):
(WKPageReloadExpiredOnly):
* UIProcess/API/C/WKPage.h:
* UIProcess/API/Cocoa/WKBrowsingContextController.mm:
(-[WKBrowsingContextController reload]):
(-[WKBrowsingContextController reloadFromOrigin]):
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView reload]):
(-[WKWebView reloadFromOrigin]):
(-[WKWebView _reloadWithoutContentBlockers]):
(-[WKWebView _reloadExpiredOnly]):
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
* UIProcess/Automation/WebAutomationSession.cpp:
(WebKit::WebAutomationSession::reloadBrowsingContext):
* UIProcess/WebFrameProxy.cpp:
(WebKit::WebFrameProxy::didHandleContentFilterUnblockNavigation):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::reload):
* UIProcess/WebPageProxy.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::reload):
(WebKit::shouldReuseCommittedSandboxExtension):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:

LayoutTests:

* http/tests/cache/reload-expired-only-expected.txt: Added.
* http/tests/cache/reload-expired-only.html: Added.
* http/tests/cache/resources/document-with-cached-unique-script.html: Added.
* http/tests/cache/resources/random-cached.cgi:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestshttptestscacheresourcesrandomcachedcgi">trunk/LayoutTests/http/tests/cache/resources/random-cached.cgi</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorehistoryPageCachecpp">trunk/Source/WebCore/history/PageCache.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorPageAgentcpp">trunk/Source/WebCore/inspector/InspectorPageAgent.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoadercpp">trunk/Source/WebCore/loader/FrameLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoaderh">trunk/Source/WebCore/loader/FrameLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoaderTypesh">trunk/Source/WebCore/loader/FrameLoaderTypes.h</a></li>
<li><a href="#trunkSourceWebCoreloaderHistoryControllercpp">trunk/Source/WebCore/loader/HistoryController.cpp</a></li>
<li><a href="#trunkSourceWebCorepageDiagnosticLoggingKeyscpp">trunk/Source/WebCore/page/DiagnosticLoggingKeys.cpp</a></li>
<li><a href="#trunkSourceWebCorepageDiagnosticLoggingKeysh">trunk/Source/WebCore/page/DiagnosticLoggingKeys.h</a></li>
<li><a href="#trunkSourceWebCorereplayUserInputBridgecpp">trunk/Source/WebCore/replay/UserInputBridge.cpp</a></li>
<li><a href="#trunkSourceWebCorereplayUserInputBridgeh">trunk/Source/WebCore/replay/UserInputBridge.h</a></li>
<li><a href="#trunkSourceWebCoretestingInternalscpp">trunk/Source/WebCore/testing/Internals.cpp</a></li>
<li><a href="#trunkSourceWebCoretestingInternalsh">trunk/Source/WebCore/testing/Internals.h</a></li>
<li><a href="#trunkSourceWebCoretestingInternalsidl">trunk/Source/WebCore/testing/Internals.idl</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebFramemm">trunk/Source/WebKit/mac/WebView/WebFrame.mm</a></li>
<li><a href="#trunkSourceWebKitwinWebFramecpp">trunk/Source/WebKit/win/WebFrame.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKPagecpp">trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKPageh">trunk/Source/WebKit2/UIProcess/API/C/WKPage.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKBrowsingContextControllermm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewPrivateh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkWebKitWebViewcpp">trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAutomationWebAutomationSessioncpp">trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFrameProxycpp">trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp</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="#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>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestshttptestscachereloadexpiredonlyexpectedtxt">trunk/LayoutTests/http/tests/cache/reload-expired-only-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestscachereloadexpiredonlyhtml">trunk/LayoutTests/http/tests/cache/reload-expired-only.html</a></li>
<li><a href="#trunkLayoutTestshttptestscacheresourcesdocumentwithcacheduniquescripthtml">trunk/LayoutTests/http/tests/cache/resources/document-with-cached-unique-script.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/LayoutTests/ChangeLog        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2017-03-17  Antti Koivisto  &lt;antti@apple.com&gt;
+
+        Add a reload policy where only expired subresources are revalidated
+        https://bugs.webkit.org/show_bug.cgi?id=169756
+
+        Reviewed by Andreas Kling.
+
+        * http/tests/cache/reload-expired-only-expected.txt: Added.
+        * http/tests/cache/reload-expired-only.html: Added.
+        * http/tests/cache/resources/document-with-cached-unique-script.html: Added.
+        * http/tests/cache/resources/random-cached.cgi:
+
</ins><span class="cx"> 2017-03-17  Nan Wang  &lt;n_wang@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         AX: VoiceOver no longer works corectly with editable text in the web
</span></span></pre></div>
<a id="trunkLayoutTestshttptestscachereloadexpiredonlyexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/cache/reload-expired-only-expected.txt (0 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/cache/reload-expired-only-expected.txt                                (rev 0)
+++ trunk/LayoutTests/http/tests/cache/reload-expired-only-expected.txt        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+PASS
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestscachereloadexpiredonlyhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/cache/reload-expired-only.html (0 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/cache/reload-expired-only.html                                (rev 0)
+++ trunk/LayoutTests/http/tests/cache/reload-expired-only.html        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -0,0 +1,27 @@
</span><ins>+&lt;body&gt;
+&lt;script&gt;
+if (testRunner) {
+    testRunner.dumpAsText();
+    testRunner.setCanOpenWindows();
+    testRunner.waitUntilDone();
+}
+const testWindow = window.open('http://127.0.0.1:8000/cache/resources/document-with-cached-unique-script.html');
+
+var firstNumber;
+window.addEventListener(&quot;message&quot;, (event) =&gt; {
+    if (firstNumber) {
+        const secondNumber = event.data;
+        if (firstNumber == secondNumber)
+            document.body.innerHTML = &quot;PASS&quot;;
+        else
+            document.body.innerHTML = `FAIL: firstNumber={$firstNumber} secondNumber={$secondNumber}`;
+        if (testRunner)
+            testRunner.notifyDone();
+        return;
+    }
+    firstNumber = event.data;
+    if (testWindow.internals)
+        testWindow.internals.reloadExpiredOnly();
+});
+
+&lt;/script&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestscacheresourcesdocumentwithcacheduniquescripthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/cache/resources/document-with-cached-unique-script.html (0 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/cache/resources/document-with-cached-unique-script.html                                (rev 0)
+++ trunk/LayoutTests/http/tests/cache/resources/document-with-cached-unique-script.html        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+&lt;h1&gt;&lt;/h1&gt;
+&lt;script src='random-cached.cgi'&gt;&lt;/script&gt;
+&lt;script&gt;
+window.opener.postMessage(randomNumber, '*');
+&lt;/script&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestscacheresourcesrandomcachedcgi"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/cache/resources/random-cached.cgi (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/cache/resources/random-cached.cgi        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/LayoutTests/http/tests/cache/resources/random-cached.cgi        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -2,7 +2,6 @@
</span><span class="cx"> 
</span><span class="cx"> print &quot;Content-type: text/javascript\n&quot;;
</span><span class="cx"> print &quot;Cache-control: max-age=60000\n&quot;;
</span><del>-print &quot;ETag: \&quot;123456789\&quot;\n&quot;;
</del><span class="cx"> print &quot;\n&quot;;
</span><span class="cx"> 
</span><span class="cx"> my $random_number = int(rand(1000000000000));
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/ChangeLog        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -1,3 +1,66 @@
</span><ins>+2017-03-17  Antti Koivisto  &lt;antti@apple.com&gt;
+
+        Add a reload policy where only expired subresources are revalidated
+        https://bugs.webkit.org/show_bug.cgi?id=169756
+
+        Reviewed by Andreas Kling.
+
+        Test: http/tests/cache/reload-expired-only.html
+
+        The default reload behavior revalidates all resources on the page. This patch adds
+        a new policy that revalidates expired (and uncacheable) resources only. Using this
+        policy can speed up reloads significantly and also reduce network traffic and server
+        load.
+
+        * history/PageCache.cpp:
+        (WebCore::canCachePage):
+        * inspector/InspectorPageAgent.cpp:
+        (WebCore::InspectorPageAgent::reload):
+        * loader/FrameLoader.cpp:
+        (WebCore::isBackForwardLoadType):
+        (WebCore::isReload):
+
+            Add a helper function.
+
+        (WebCore::FrameLoader::loadURL):
+        (WebCore::logNavigation):
+        (WebCore::FrameLoader::reload):
+
+            Replace bool arguments with OptionSet&lt;ReloadOption&gt;. Most of the patch is about adapting to this.
+
+        (WebCore::FrameLoader::transitionToCommitted):
+        (WebCore::FrameLoader::subresourceCachePolicy):
+
+            Return CachePolicyVerify for 'ReloadExpiredOnly' frame load type. This is the substantive
+            change that causes the behavior difference.
+
+        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
+        (WebCore::FrameLoader::defaultRequestCachingPolicy):
+
+            Flip the isMainResource condition for better readability.
+
+        (WebCore::FrameLoader::shouldPerformFragmentNavigation):
+        (WebCore::FrameLoader::loadDifferentDocumentItem):
+        * loader/FrameLoader.h:
+        (WebCore::FrameLoader::reload):
+        * loader/FrameLoaderTypes.h:
+        * loader/HistoryController.cpp:
+        (WebCore::HistoryController::restoreDocumentState):
+        * page/DiagnosticLoggingKeys.cpp:
+        (WebCore::DiagnosticLoggingKeys::reloadRevalidatingExpiredKey):
+        * page/DiagnosticLoggingKeys.h:
+        * replay/UserInputBridge.cpp:
+        (WebCore::UserInputBridge::reloadFrame):
+        * replay/UserInputBridge.h:
+        * testing/Internals.cpp:
+        (WebCore::Internals::forceReload):
+        (WebCore::Internals::reloadExpiredOnly):
+
+            Testing support.
+
+        * testing/Internals.h:
+        * testing/Internals.idl:
+
</ins><span class="cx"> 2017-03-17  Nan Wang  &lt;n_wang@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         AX: VoiceOver no longer works corectly with editable text in the web
</span></span></pre></div>
<a id="trunkSourceWebCorehistoryPageCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/history/PageCache.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/history/PageCache.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/history/PageCache.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -249,6 +249,13 @@
</span><span class="cx">         isCacheable = false;
</span><span class="cx">         break;
</span><span class="cx">     }
</span><ins>+    case FrameLoadType::ReloadExpiredOnly: {
+        // No point writing to the cache on a reload, since we will just write over it again when we leave that page.
+        PCLOG(&quot;   -Load type is: ReloadRevalidatingExpired&quot;);
+        logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::reloadRevalidatingExpiredKey());
+        isCacheable = false;
+        break;
+    }
</ins><span class="cx">     case FrameLoadType::Standard:
</span><span class="cx">     case FrameLoadType::Back:
</span><span class="cx">     case FrameLoadType::Forward:
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorPageAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorPageAgent.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorPageAgent.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/inspector/InspectorPageAgent.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -423,7 +423,11 @@
</span><span class="cx"> void InspectorPageAgent::reload(ErrorString&amp;, const bool* const optionalIgnoreCache, const String* optionalScriptToEvaluateOnLoad)
</span><span class="cx"> {
</span><span class="cx">     m_pendingScriptToEvaluateOnLoadOnce = optionalScriptToEvaluateOnLoad ? *optionalScriptToEvaluateOnLoad : emptyString();
</span><del>-    m_page.mainFrame().loader().reload(optionalIgnoreCache ? *optionalIgnoreCache : false);
</del><ins>+
+    OptionSet&lt;ReloadOption&gt; reloadOptions;
+    if (optionalIgnoreCache &amp;&amp; *optionalIgnoreCache)
+        reloadOptions |= ReloadOption::FromOrigin;
+    m_page.mainFrame().loader().reload(reloadOptions);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void InspectorPageAgent::navigate(ErrorString&amp;, const String&amp; url)
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoader.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -156,6 +156,7 @@
</span><span class="cx">     case FrameLoadType::Standard:
</span><span class="cx">     case FrameLoadType::Reload:
</span><span class="cx">     case FrameLoadType::ReloadFromOrigin:
</span><ins>+    case FrameLoadType::ReloadExpiredOnly:
</ins><span class="cx">     case FrameLoadType::Same:
</span><span class="cx">     case FrameLoadType::RedirectWithLockedBackForwardList:
</span><span class="cx">     case FrameLoadType::Replace:
</span><span class="lines">@@ -169,6 +170,26 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool isReload(FrameLoadType type)
+{
+    switch (type) {
+    case FrameLoadType::Reload:
+    case FrameLoadType::ReloadFromOrigin:
+    case FrameLoadType::ReloadExpiredOnly:
+        return true;
+    case FrameLoadType::Standard:
+    case FrameLoadType::Same:
+    case FrameLoadType::RedirectWithLockedBackForwardList:
+    case FrameLoadType::Replace:
+    case FrameLoadType::Back:
+    case FrameLoadType::Forward:
+    case FrameLoadType::IndexedBackForward:
+        return false;
+    }
+    ASSERT_NOT_REACHED();
+    return false;
+}
+
</ins><span class="cx"> // This is not in the FrameLoader class to emphasize that it does not depend on
</span><span class="cx"> // private FrameLoader data, and to avoid increasing the number of public functions
</span><span class="cx"> // with access to private data.  Since only this .cpp file needs it, making it
</span><span class="lines">@@ -1213,7 +1234,7 @@
</span><span class="cx">         request.setDomainForCachePartition(m_frame.tree().top().document()-&gt;securityOrigin().domainForCachePartition());
</span><span class="cx"> 
</span><span class="cx">     addExtraFieldsToRequest(request, newLoadType, true);
</span><del>-    if (newLoadType == FrameLoadType::Reload || newLoadType == FrameLoadType::ReloadFromOrigin)
</del><ins>+    if (isReload(newLoadType))
</ins><span class="cx">         request.setCachePolicy(ReloadIgnoringCacheData);
</span><span class="cx"> 
</span><span class="cx">     ASSERT(newLoadType != FrameLoadType::Same);
</span><span class="lines">@@ -1266,7 +1287,7 @@
</span><span class="cx">         m_quickRedirectComing = false;
</span><span class="cx">         if (m_provisionalDocumentLoader)
</span><span class="cx">             m_provisionalDocumentLoader-&gt;setIsClientRedirect(true);
</span><del>-    } else if (sameURL &amp;&amp; newLoadType != FrameLoadType::Reload &amp;&amp; newLoadType != FrameLoadType::ReloadFromOrigin) {
</del><ins>+    } else if (sameURL &amp;&amp; !isReload(newLoadType)) {
</ins><span class="cx">         // Example of this case are sites that reload the same URL with a different cookie
</span><span class="cx">         // driving the generated content, or a master frame with links that drive a target
</span><span class="cx">         // frame, where the user has clicked on the same link repeatedly.
</span><span class="lines">@@ -1404,6 +1425,9 @@
</span><span class="cx">     case FrameLoadType::ReloadFromOrigin:
</span><span class="cx">         navigationDescription = ASCIILiteral(&quot;reloadFromOrigin&quot;);
</span><span class="cx">         break;
</span><ins>+    case FrameLoadType::ReloadExpiredOnly:
+        navigationDescription = ASCIILiteral(&quot;reloadRevalidatingExpired&quot;);
+        break;
</ins><span class="cx">     case FrameLoadType::Replace:
</span><span class="cx">     case FrameLoadType::RedirectWithLockedBackForwardList:
</span><span class="cx">         // Not logging those for now.
</span><span class="lines">@@ -1576,7 +1600,7 @@
</span><span class="cx">     loadWithDocumentLoader(loader.ptr(), FrameLoadType::Reload, 0, AllowNavigationToInvalidURL::Yes);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void FrameLoader::reload(bool endToEndReload, bool contentBlockersEnabled)
</del><ins>+void FrameLoader::reload(OptionSet&lt;ReloadOption&gt; options)
</ins><span class="cx"> {
</span><span class="cx">     if (!m_documentLoader)
</span><span class="cx">         return;
</span><span class="lines">@@ -1597,7 +1621,7 @@
</span><span class="cx">     Ref&lt;DocumentLoader&gt; loader = m_client.createDocumentLoader(initialRequest, defaultSubstituteDataForURL(initialRequest.url()));
</span><span class="cx">     applyShouldOpenExternalURLsPolicyToNewDocumentLoader(loader, m_documentLoader-&gt;shouldOpenExternalURLsPolicyToPropagate());
</span><span class="cx"> 
</span><del>-    loader-&gt;setUserContentExtensionsEnabled(contentBlockersEnabled);
</del><ins>+    loader-&gt;setUserContentExtensionsEnabled(!options.contains(ReloadOption::DisableContentBlockers));
</ins><span class="cx">     
</span><span class="cx">     ResourceRequest&amp; request = loader-&gt;request();
</span><span class="cx"> 
</span><span class="lines">@@ -1609,8 +1633,16 @@
</span><span class="cx">         loader-&gt;setTriggeringAction(NavigationAction(request, NavigationType::FormResubmitted));
</span><span class="cx"> 
</span><span class="cx">     loader-&gt;setOverrideEncoding(m_documentLoader-&gt;overrideEncoding());
</span><ins>+
+    auto frameLoadTypeForReloadOptions = [] (auto options) {
+        if (options.contains(ReloadOption::FromOrigin))
+            return FrameLoadType::ReloadFromOrigin;
+        if (options.contains(ReloadOption::ExpiredOnly))
+            return FrameLoadType::ReloadExpiredOnly;
+        return FrameLoadType::Reload;
+    };
</ins><span class="cx">     
</span><del>-    loadWithDocumentLoader(loader.ptr(), endToEndReload ? FrameLoadType::ReloadFromOrigin : FrameLoadType::Reload, 0, AllowNavigationToInvalidURL::Yes);
</del><ins>+    loadWithDocumentLoader(loader.ptr(), frameLoadTypeForReloadOptions(options), 0, AllowNavigationToInvalidURL::Yes);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void FrameLoader::stopAllLoaders(ClearProvisionalItemPolicy clearProvisionalItemPolicy)
</span><span class="lines">@@ -1972,6 +2004,7 @@
</span><span class="cx"> 
</span><span class="cx">     case FrameLoadType::Reload:
</span><span class="cx">     case FrameLoadType::ReloadFromOrigin:
</span><ins>+    case FrameLoadType::ReloadExpiredOnly:
</ins><span class="cx">     case FrameLoadType::Same:
</span><span class="cx">     case FrameLoadType::Replace:
</span><span class="cx">         history().updateForReload();
</span><span class="lines">@@ -1989,11 +2022,6 @@
</span><span class="cx">         history().updateForRedirectWithLockedBackForwardList();
</span><span class="cx">         m_client.transitionToCommittedForNewPage();
</span><span class="cx">         break;
</span><del>-
-    // FIXME Remove this check when dummy ds is removed (whatever &quot;dummy ds&quot; is).
-    // An exception should be thrown if we're in the FrameLoadTypeUninitialized state.
-    default:
-        ASSERT_NOT_REACHED();
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     m_documentLoader-&gt;writer().setMIMEType(dl-&gt;responseMIMEType());
</span><span class="lines">@@ -2229,6 +2257,7 @@
</span><span class="cx">     case FrameLoadType::Replace:
</span><span class="cx">     case FrameLoadType::Same:
</span><span class="cx">     case FrameLoadType::Standard:
</span><ins>+    case FrameLoadType::ReloadExpiredOnly:
</ins><span class="cx">         return CachePolicyVerify;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -2315,7 +2344,7 @@
</span><span class="cx">              
</span><span class="cx">             // If the user had a scroll point, scroll to it, overriding the anchor point if any.
</span><span class="cx">             if (m_frame.page()) {
</span><del>-                if (isBackForwardLoadType(m_loadType) || m_loadType == FrameLoadType::Reload || m_loadType == FrameLoadType::ReloadFromOrigin)
</del><ins>+                if (isBackForwardLoadType(m_loadType) || isReload(m_loadType))
</ins><span class="cx">                     history().restoreScrollPositionAndViewState();
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="lines">@@ -2613,27 +2642,31 @@
</span><span class="cx"> {
</span><span class="cx">     if (m_overrideCachePolicyForTesting)
</span><span class="cx">         return m_overrideCachePolicyForTesting.value();
</span><del>-    if (!isMainResource) {
-        if (request.isConditional())
</del><ins>+
+    if (isMainResource) {
+        if (isReload(loadType) || request.isConditional())
</ins><span class="cx">             return ReloadIgnoringCacheData;
</span><del>-        if (documentLoader()-&gt;isLoadingInAPISense()) {
-            // If we inherit cache policy from a main resource, we use the DocumentLoader's
-            // original request cache policy for two reasons:
-            // 1. For POST requests, we mutate the cache policy for the main resource,
-            //    but we do not want this to apply to subresources
-            // 2. Delegates that modify the cache policy using willSendRequest: should
-            //    not affect any other resources. Such changes need to be done
-            //    per request.
-            ResourceRequestCachePolicy mainDocumentOriginalCachePolicy = documentLoader()-&gt;originalRequest().cachePolicy();
-            // Back-forward navigations try to load main resource from cache only to avoid re-submitting form data, and start over (with a warning dialog) if that fails.
-            // This policy is set on initial request too, but should not be inherited.
-            return (mainDocumentOriginalCachePolicy == ReturnCacheDataDontLoad) ? ReturnCacheDataElseLoad : mainDocumentOriginalCachePolicy;
-        }
-    // FIXME: Other FrameLoader functions have duplicated code for setting cache policy of main request when reloading.
-    // It seems better to manage it explicitly than to hide the logic inside addExtraFieldsToRequest().
-    } else if (loadType == FrameLoadType::Reload || loadType == FrameLoadType::ReloadFromOrigin || request.isConditional())
</del><ins>+
+        return UseProtocolCachePolicy;
+    }
+
+    if (request.isConditional())
</ins><span class="cx">         return ReloadIgnoringCacheData;
</span><span class="cx"> 
</span><ins>+    if (documentLoader()-&gt;isLoadingInAPISense()) {
+        // If we inherit cache policy from a main resource, we use the DocumentLoader's
+        // original request cache policy for two reasons:
+        // 1. For POST requests, we mutate the cache policy for the main resource,
+        //    but we do not want this to apply to subresources
+        // 2. Delegates that modify the cache policy using willSendRequest: should
+        //    not affect any other resources. Such changes need to be done
+        //    per request.
+        ResourceRequestCachePolicy mainDocumentOriginalCachePolicy = documentLoader()-&gt;originalRequest().cachePolicy();
+        // Back-forward navigations try to load main resource from cache only to avoid re-submitting form data, and start over (with a warning dialog) if that fails.
+        // This policy is set on initial request too, but should not be inherited.
+        return (mainDocumentOriginalCachePolicy == ReturnCacheDataDontLoad) ? ReturnCacheDataElseLoad : mainDocumentOriginalCachePolicy;
+    }
+
</ins><span class="cx">     return UseProtocolCachePolicy;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -2899,8 +2932,7 @@
</span><span class="cx">     // FIXME: What about load types other than Standard and Reload?
</span><span class="cx"> 
</span><span class="cx">     return (!isFormSubmission || equalLettersIgnoringASCIICase(httpMethod, &quot;get&quot;))
</span><del>-        &amp;&amp; loadType != FrameLoadType::Reload
-        &amp;&amp; loadType != FrameLoadType::ReloadFromOrigin
</del><ins>+        &amp;&amp; !isReload(loadType)
</ins><span class="cx">         &amp;&amp; loadType != FrameLoadType::Same
</span><span class="cx">         &amp;&amp; !shouldReload(m_frame.document()-&gt;url(), url)
</span><span class="cx">         // We don't want to just scroll if a link from within a
</span><span class="lines">@@ -3447,6 +3479,7 @@
</span><span class="cx">         switch (loadType) {
</span><span class="cx">         case FrameLoadType::Reload:
</span><span class="cx">         case FrameLoadType::ReloadFromOrigin:
</span><ins>+        case FrameLoadType::ReloadExpiredOnly:
</ins><span class="cx">             request.setCachePolicy(ReloadIgnoringCacheData);
</span><span class="cx">             break;
</span><span class="cx">         case FrameLoadType::Back:
</span><span class="lines">@@ -3466,7 +3499,7 @@
</span><span class="cx">         case FrameLoadType::RedirectWithLockedBackForwardList:
</span><span class="cx">             break;
</span><span class="cx">         case FrameLoadType::Same:
</span><del>-        default:
</del><ins>+        case FrameLoadType::Replace:
</ins><span class="cx">             ASSERT_NOT_REACHED();
</span><span class="cx">         }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoader.h (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoader.h        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/loader/FrameLoader.h        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -81,6 +81,7 @@
</span><span class="cx"> struct WindowFeatures;
</span><span class="cx"> 
</span><span class="cx"> WEBCORE_EXPORT bool isBackForwardLoadType(FrameLoadType);
</span><ins>+WEBCORE_EXPORT bool isReload(FrameLoadType);
</ins><span class="cx"> 
</span><span class="cx"> class FrameLoader {
</span><span class="cx">     WTF_MAKE_NONCOPYABLE(FrameLoader);
</span><span class="lines">@@ -119,7 +120,7 @@
</span><span class="cx">     WEBCORE_EXPORT void urlSelected(const URL&amp;, const String&amp; target, Event*, LockHistory, LockBackForwardList, ShouldSendReferrer, ShouldOpenExternalURLsPolicy, std::optional&lt;NewFrameOpenerPolicy&gt; = std::nullopt, const AtomicString&amp; downloadAttribute = nullAtom);
</span><span class="cx">     void submitForm(Ref&lt;FormSubmission&gt;&amp;&amp;);
</span><span class="cx"> 
</span><del>-    WEBCORE_EXPORT void reload(bool endToEndReload = false, bool contentBlockersEnabled = true);
</del><ins>+    WEBCORE_EXPORT void reload(OptionSet&lt;ReloadOption&gt; = { });
</ins><span class="cx">     WEBCORE_EXPORT void reloadWithOverrideEncoding(const String&amp; overrideEncoding);
</span><span class="cx"> 
</span><span class="cx">     void open(CachedFrameBase&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoaderTypesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoaderTypes.h (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoaderTypes.h        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/loader/FrameLoaderTypes.h        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -28,6 +28,8 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><ins>+#include &lt;wtf/OptionSet.h&gt;
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> enum FrameState {
</span><span class="lines">@@ -44,6 +46,12 @@
</span><span class="cx">     PolicyIgnore
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+enum class ReloadOption {
+    ExpiredOnly = 1 &lt;&lt; 0,
+    FromOrigin  = 1 &lt;&lt; 1,
+    DisableContentBlockers = 1 &lt;&lt; 2,
+};
+
</ins><span class="cx"> enum class FrameLoadType {
</span><span class="cx">     Standard,
</span><span class="cx">     Back,
</span><span class="lines">@@ -54,6 +62,7 @@
</span><span class="cx">     RedirectWithLockedBackForwardList, // FIXME: Merge &quot;lockBackForwardList&quot;, &quot;lockHistory&quot;, &quot;quickRedirect&quot; and &quot;clientRedirect&quot; into a single concept of redirect.
</span><span class="cx">     Replace,
</span><span class="cx">     ReloadFromOrigin,
</span><ins>+    ReloadExpiredOnly
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> enum class NewFrameOpenerPolicy {
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderHistoryControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/HistoryController.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/HistoryController.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/loader/HistoryController.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -229,6 +229,7 @@
</span><span class="cx">     switch (m_frame.loader().loadType()) {
</span><span class="cx">     case FrameLoadType::Reload:
</span><span class="cx">     case FrameLoadType::ReloadFromOrigin:
</span><ins>+    case FrameLoadType::ReloadExpiredOnly:
</ins><span class="cx">     case FrameLoadType::Same:
</span><span class="cx">     case FrameLoadType::Replace:
</span><span class="cx">         // Not restoring the document state.
</span></span></pre></div>
<a id="trunkSourceWebCorepageDiagnosticLoggingKeyscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/DiagnosticLoggingKeys.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/DiagnosticLoggingKeys.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/page/DiagnosticLoggingKeys.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -488,6 +488,11 @@
</span><span class="cx">     return ASCIILiteral(&quot;reloadFromOrigin&quot;);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+String DiagnosticLoggingKeys::reloadRevalidatingExpiredKey()
+{
+    return ASCIILiteral(&quot;reloadRevalidatingExpired&quot;);
+}
+
</ins><span class="cx"> String DiagnosticLoggingKeys::sameLoadKey()
</span><span class="cx"> {
</span><span class="cx">     return ASCIILiteral(&quot;sameLoad&quot;);
</span></span></pre></div>
<a id="trunkSourceWebCorepageDiagnosticLoggingKeysh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/DiagnosticLoggingKeys.h (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/DiagnosticLoggingKeys.h        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/page/DiagnosticLoggingKeys.h        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -123,6 +123,7 @@
</span><span class="cx">     static String redirectKey();
</span><span class="cx">     static String reloadFromOriginKey();
</span><span class="cx">     static String reloadKey();
</span><ins>+    static String reloadRevalidatingExpiredKey();
</ins><span class="cx">     static String replaceKey();
</span><span class="cx">     static String resourceLoadedKey();
</span><span class="cx">     static String resourceResponseSourceKey();
</span></span></pre></div>
<a id="trunkSourceWebCorereplayUserInputBridgecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/replay/UserInputBridge.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/UserInputBridge.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/replay/UserInputBridge.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -242,9 +242,9 @@
</span><span class="cx">     m_page.mainFrame().loader().load(request);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void UserInputBridge::reloadFrame(Frame* frame, bool endToEndReload, bool contentBlockersEnabled, InputSource)
</del><ins>+void UserInputBridge::reloadFrame(Frame* frame, OptionSet&lt;ReloadOption&gt; options, InputSource)
</ins><span class="cx"> {
</span><del>-    frame-&gt;loader().reload(endToEndReload, contentBlockersEnabled);
</del><ins>+    frame-&gt;loader().reload(options);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UserInputBridge::stopLoadingFrame(Frame* frame, InputSource)
</span></span></pre></div>
<a id="trunkSourceWebCorereplayUserInputBridgeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/replay/UserInputBridge.h (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/replay/UserInputBridge.h        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/replay/UserInputBridge.h        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><ins>+#include &quot;FrameLoaderTypes.h&quot;
</ins><span class="cx"> #include &quot;ScrollTypes.h&quot;
</span><span class="cx"> #include &lt;wtf/Noncopyable.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -88,7 +89,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Navigation APIs.
</span><span class="cx">     WEBCORE_EXPORT void loadRequest(const FrameLoadRequest&amp;, InputSource source = InputSource::User);
</span><del>-    WEBCORE_EXPORT void reloadFrame(Frame*, bool endToEndReload, bool contentBlockersEnabled, InputSource = InputSource::User);
</del><ins>+    WEBCORE_EXPORT void reloadFrame(Frame*, OptionSet&lt;ReloadOption&gt;, InputSource = InputSource::User);
</ins><span class="cx">     WEBCORE_EXPORT void stopLoadingFrame(Frame*, InputSource source = InputSource::User);
</span><span class="cx">     WEBCORE_EXPORT bool tryClosePage(InputSource source = InputSource::User);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/Internals.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/Internals.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/testing/Internals.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -2838,9 +2838,18 @@
</span><span class="cx"> 
</span><span class="cx"> void Internals::forceReload(bool endToEnd)
</span><span class="cx"> {
</span><del>-    frame()-&gt;loader().reload(endToEnd);
</del><ins>+    OptionSet&lt;ReloadOption&gt; reloadOptions;
+    if (endToEnd)
+        reloadOptions |= ReloadOption::FromOrigin;
+
+    frame()-&gt;loader().reload(reloadOptions);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void Internals::reloadExpiredOnly()
+{
+    frame()-&gt;loader().reload(ReloadOption::ExpiredOnly);
+}
+
</ins><span class="cx"> void Internals::enableAutoSizeMode(bool enabled, int minimumWidth, int minimumHeight, int maximumWidth, int maximumHeight)
</span><span class="cx"> {
</span><span class="cx">     auto* document = contextDocument();
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/Internals.h (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/Internals.h        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/testing/Internals.h        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -388,6 +388,7 @@
</span><span class="cx">     String toolTipFromElement(Element&amp;) const;
</span><span class="cx"> 
</span><span class="cx">     void forceReload(bool endToEnd);
</span><ins>+    void reloadExpiredOnly();
</ins><span class="cx"> 
</span><span class="cx">     void enableAutoSizeMode(bool enabled, int minimumWidth, int minimumHeight, int maximumWidth, int maximumHeight);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoretestingInternalsidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/testing/Internals.idl (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/testing/Internals.idl        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebCore/testing/Internals.idl        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -392,6 +392,7 @@
</span><span class="cx">     void setUsesMockScrollAnimator(boolean enabled);
</span><span class="cx"> 
</span><span class="cx">     void forceReload(boolean endToEnd);
</span><ins>+    void reloadExpiredOnly();
</ins><span class="cx"> 
</span><span class="cx">     void enableAutoSizeMode(boolean enabled, long minimumWidth, long minimumHeight, long maximumWidth, long maximumHeight);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit/mac/ChangeLog        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2017-03-17  Antti Koivisto  &lt;antti@apple.com&gt;
+
+        Add a reload policy where only expired subresources are revalidated
+        https://bugs.webkit.org/show_bug.cgi?id=169756
+
+        Reviewed by Andreas Kling.
+
+        * WebView/WebFrame.mm:
+        (toWebFrameLoadType):
+        (-[WebFrame reload]):
+        (-[WebFrame reloadFromOrigin]):
+
</ins><span class="cx"> 2017-03-17  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [WK1] Support animated transitions when performing a data interaction operation
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebFramemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebFrame.mm (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebFrame.mm        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit/mac/WebView/WebFrame.mm        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -1059,6 +1059,9 @@
</span><span class="cx">         return WebFrameLoadTypeReplace;
</span><span class="cx">     case FrameLoadType::ReloadFromOrigin:
</span><span class="cx">         return WebFrameLoadTypeReloadFromOrigin;
</span><ins>+    case FrameLoadType::ReloadExpiredOnly:
+        ASSERT_NOT_REACHED();
+        return WebFrameLoadTypeReload;
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -2539,12 +2542,12 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)reload
</span><span class="cx"> {
</span><del>-    _private-&gt;coreFrame-&gt;loader().reload(false);
</del><ins>+    _private-&gt;coreFrame-&gt;loader().reload({ });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)reloadFromOrigin
</span><span class="cx"> {
</span><del>-    _private-&gt;coreFrame-&gt;loader().reload(true);
</del><ins>+    _private-&gt;coreFrame-&gt;loader().reload(WebCore::ReloadOption::FromOrigin);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (WebFrame *)findFrameNamed:(NSString *)name
</span></span></pre></div>
<a id="trunkSourceWebKitwinWebFramecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/WebFrame.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/WebFrame.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit/win/WebFrame.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -306,7 +306,7 @@
</span><span class="cx">     if (!coreFrame)
</span><span class="cx">         return E_UNEXPECTED;
</span><span class="cx"> 
</span><del>-    coreFrame-&gt;loader().reload(true);
</del><ins>+    coreFrame-&gt;loader().reload(WebCore::ReloadOption::FromOrigin);
</ins><span class="cx">     return S_OK;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/ChangeLog        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -1,3 +1,38 @@
</span><ins>+2017-03-17  Antti Koivisto  &lt;antti@apple.com&gt;
+
+        Add a reload policy where only expired subresources are revalidated
+        https://bugs.webkit.org/show_bug.cgi?id=169756
+
+        Reviewed by Andreas Kling.
+
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageReload):
+        (WKPageReloadWithoutContentBlockers):
+        (WKPageReloadFromOrigin):
+        (WKPageReloadExpiredOnly):
+        * UIProcess/API/C/WKPage.h:
+        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
+        (-[WKBrowsingContextController reload]):
+        (-[WKBrowsingContextController reloadFromOrigin]):
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView reload]):
+        (-[WKWebView reloadFromOrigin]):
+        (-[WKWebView _reloadWithoutContentBlockers]):
+        (-[WKWebView _reloadExpiredOnly]):
+        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+        * UIProcess/Automation/WebAutomationSession.cpp:
+        (WebKit::WebAutomationSession::reloadBrowsingContext):
+        * UIProcess/WebFrameProxy.cpp:
+        (WebKit::WebFrameProxy::didHandleContentFilterUnblockNavigation):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::reload):
+        * UIProcess/WebPageProxy.h:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::reload):
+        (WebKit::shouldReuseCommittedSandboxExtension):
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in:
+
</ins><span class="cx"> 2017-03-16  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Use completion handlers instead of return values for sending websocket data
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -242,25 +242,24 @@
</span><span class="cx"> 
</span><span class="cx"> void WKPageReload(WKPageRef pageRef)
</span><span class="cx"> {
</span><del>-    const bool reloadFromOrigin = false;
-    const bool contentBlockersEnabled = true;
-    toImpl(pageRef)-&gt;reload(reloadFromOrigin, contentBlockersEnabled);
</del><ins>+    toImpl(pageRef)-&gt;reload({ });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WKPageReloadWithoutContentBlockers(WKPageRef pageRef)
</span><span class="cx"> {
</span><del>-    const bool reloadFromOrigin = false;
-    const bool contentBlockersEnabled = false;
-    toImpl(pageRef)-&gt;reload(reloadFromOrigin, contentBlockersEnabled);
</del><ins>+    toImpl(pageRef)-&gt;reload(WebCore::ReloadOption::DisableContentBlockers);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WKPageReloadFromOrigin(WKPageRef pageRef)
</span><span class="cx"> {
</span><del>-    const bool reloadFromOrigin = true;
-    const bool contentBlockersEnabled = true;
-    toImpl(pageRef)-&gt;reload(reloadFromOrigin, contentBlockersEnabled);
</del><ins>+    toImpl(pageRef)-&gt;reload(WebCore::ReloadOption::FromOrigin);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WKPageReloadExpiredOnly(WKPageRef pageRef)
+{
+    toImpl(pageRef)-&gt;reload(WebCore::ReloadOption::ExpiredOnly);
+}
+
</ins><span class="cx"> bool WKPageTryClose(WKPageRef pageRef)
</span><span class="cx"> {
</span><span class="cx">     return toImpl(pageRef)-&gt;tryClose();
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKPageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.h (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.h        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.h        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -84,6 +84,7 @@
</span><span class="cx"> WK_EXPORT void WKPageReload(WKPageRef page);
</span><span class="cx"> WK_EXPORT void WKPageReloadWithoutContentBlockers(WKPageRef page);
</span><span class="cx"> WK_EXPORT void WKPageReloadFromOrigin(WKPageRef page);
</span><ins>+WK_EXPORT void WKPageReloadExpiredOnly(WKPageRef page);
</ins><span class="cx"> 
</span><span class="cx"> WK_EXPORT bool WKPageTryClose(WKPageRef page);
</span><span class="cx"> WK_EXPORT void WKPageClose(WKPageRef page);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKBrowsingContextControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -187,16 +187,12 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)reload
</span><span class="cx"> {
</span><del>-    const bool reloadFromOrigin = false;
-    const bool contentBlockersEnabled = true;
-    _page-&gt;reload(reloadFromOrigin, contentBlockersEnabled);
</del><ins>+    _page-&gt;reload({ });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)reloadFromOrigin
</span><span class="cx"> {
</span><del>-    const bool reloadFromOrigin = true;
-    const bool contentBlockersEnabled = true;
-    _page-&gt;reload(reloadFromOrigin, contentBlockersEnabled);
</del><ins>+    _page-&gt;reload(WebCore::ReloadOption::FromOrigin);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (NSString *)applicationNameForUserAgent
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -844,9 +844,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (WKNavigation *)reload
</span><span class="cx"> {
</span><del>-    const bool reloadFromOrigin = false;
-    const bool contentBlockersEnabled = true;
-    auto navigation = _page-&gt;reload(reloadFromOrigin, contentBlockersEnabled);
</del><ins>+    auto navigation = _page-&gt;reload({ });
</ins><span class="cx">     if (!navigation)
</span><span class="cx">         return nil;
</span><span class="cx"> 
</span><span class="lines">@@ -855,9 +853,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (WKNavigation *)reloadFromOrigin
</span><span class="cx"> {
</span><del>-    const bool reloadFromOrigin = true;
-    const bool contentBlockersEnabled = true;
-    auto navigation = _page-&gt;reload(reloadFromOrigin, contentBlockersEnabled);
</del><ins>+    auto navigation = _page-&gt;reload(WebCore::ReloadOption::FromOrigin);
</ins><span class="cx">     if (!navigation)
</span><span class="cx">         return nil;
</span><span class="cx"> 
</span><span class="lines">@@ -3692,9 +3688,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (WKNavigation *)_reloadWithoutContentBlockers
</span><span class="cx"> {
</span><del>-    const bool reloadFromOrigin = false;
-    const bool contentBlockersEnabled = false;
-    auto navigation = _page-&gt;reload(reloadFromOrigin, contentBlockersEnabled);
</del><ins>+    auto navigation = _page-&gt;reload(WebCore::ReloadOption::DisableContentBlockers);
</ins><span class="cx">     if (!navigation)
</span><span class="cx">         return nil;
</span><span class="cx">     
</span><span class="lines">@@ -3701,6 +3695,15 @@
</span><span class="cx">     return [wrapper(*navigation.leakRef()) autorelease];
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (WKNavigation *)_reloadExpiredOnly
+{
+    auto navigation = _page-&gt;reload(WebCore::ReloadOption::ExpiredOnly);
+    if (!navigation)
+        return nil;
+    
+    return [wrapper(*navigation.leakRef()) autorelease];
+}
+
</ins><span class="cx"> - (void)_killWebContentProcessAndResetState
</span><span class="cx"> {
</span><span class="cx">     _page-&gt;terminateProcess();
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -228,6 +228,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> - (WKNavigation *)_reloadWithoutContentBlockers WK_API_AVAILABLE(macosx(10.12), ios(10.0));
</span><ins>+- (WKNavigation *)_reloadExpiredOnly WK_API_AVAILABLE(macosx(10.13), ios(11.0));
</ins><span class="cx"> 
</span><span class="cx"> - (void)_killWebContentProcessAndResetState;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkWebKitWebViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -2539,9 +2539,7 @@
</span><span class="cx"> {
</span><span class="cx">     g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
</span><span class="cx"> 
</span><del>-    const bool reloadFromOrigin = false;
-    const bool contentBlockersEnabled = true;
-    getPage(webView)-&gt;reload(reloadFromOrigin, contentBlockersEnabled);
</del><ins>+    getPage(webView)-&gt;reload({ });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> /**
</span><span class="lines">@@ -2555,9 +2553,7 @@
</span><span class="cx"> {
</span><span class="cx">     g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
</span><span class="cx"> 
</span><del>-    const bool reloadFromOrigin = true;
-    const bool contentBlockersEnabled = true;
-    getPage(webView)-&gt;reload(reloadFromOrigin, contentBlockersEnabled);
</del><ins>+    getPage(webView)-&gt;reload(WebCore::ReloadOption::FromOrigin);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> /**
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAutomationWebAutomationSessioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -341,8 +341,7 @@
</span><span class="cx">         callback-&gt;sendFailure(STRING_FOR_PREDEFINED_ERROR_NAME(Timeout));
</span><span class="cx">     m_pendingNavigationInBrowsingContextCallbacksPerPage.set(page-&gt;pageID(), WTFMove(callback));
</span><span class="cx"> 
</span><del>-    const bool reloadFromOrigin = false;
-    page-&gt;reload(reloadFromOrigin, { });
</del><ins>+    page-&gt;reload({ });
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebAutomationSession::navigationOccurredForPage(const WebPageProxy&amp; page)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebFrameProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -248,11 +248,8 @@
</span><span class="cx">     RefPtr&lt;WebPageProxy&gt; page { m_page };
</span><span class="cx">     ASSERT(page);
</span><span class="cx">     m_contentFilterUnblockHandler.requestUnblockAsync([page](bool unblocked) {
</span><del>-        if (unblocked) {
-            const bool reloadFromOrigin = false;
-            const bool contentBlockersEnabled = true;
-            page-&gt;reload(reloadFromOrigin, contentBlockersEnabled);
-        }
</del><ins>+        if (unblocked)
+            page-&gt;reload({ });
</ins><span class="cx">     });
</span><span class="cx">     return true;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -1164,7 +1164,7 @@
</span><span class="cx">     m_process-&gt;responsivenessTimer().start();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;API::Navigation&gt; WebPageProxy::reload(bool reloadFromOrigin, bool contentBlockersEnabled)
</del><ins>+RefPtr&lt;API::Navigation&gt; WebPageProxy::reload(OptionSet&lt;WebCore::ReloadOption&gt; options)
</ins><span class="cx"> {
</span><span class="cx">     SandboxExtension::Handle sandboxExtensionHandle;
</span><span class="cx"> 
</span><span class="lines">@@ -1187,7 +1187,7 @@
</span><span class="cx">     
</span><span class="cx">     auto navigation = m_navigationState-&gt;createReloadNavigation();
</span><span class="cx"> 
</span><del>-    m_process-&gt;send(Messages::WebPage::Reload(navigation-&gt;navigationID(), reloadFromOrigin, contentBlockersEnabled, sandboxExtensionHandle), m_pageID);
</del><ins>+    m_process-&gt;send(Messages::WebPage::Reload(navigation-&gt;navigationID(), options.toRaw(), sandboxExtensionHandle), m_pageID);
</ins><span class="cx">     m_process-&gt;responsivenessTimer().start();
</span><span class="cx"> 
</span><span class="cx">     return WTFMove(navigation);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -404,7 +404,7 @@
</span><span class="cx">     void navigateToPDFLinkWithSimulatedClick(const String&amp; url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint);
</span><span class="cx"> 
</span><span class="cx">     void stopLoading();
</span><del>-    RefPtr&lt;API::Navigation&gt; reload(bool reloadFromOrigin, bool contentBlockersEnabled);
</del><ins>+    RefPtr&lt;API::Navigation&gt; reload(OptionSet&lt;WebCore::ReloadOption&gt;);
</ins><span class="cx"> 
</span><span class="cx">     RefPtr&lt;API::Navigation&gt; goForward();
</span><span class="cx">     RefPtr&lt;API::Navigation&gt; goBack();
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -1315,7 +1315,7 @@
</span><span class="cx">     m_page-&gt;setDefersLoading(defersLoading);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPage::reload(uint64_t navigationID, bool reloadFromOrigin, bool contentBlockersEnabled, const SandboxExtension::Handle&amp; sandboxExtensionHandle)
</del><ins>+void WebPage::reload(uint64_t navigationID, uint32_t reloadOptions, const SandboxExtension::Handle&amp; sandboxExtensionHandle)
</ins><span class="cx"> {
</span><span class="cx">     SendStopResponsivenessTimer stopper(this);
</span><span class="cx"> 
</span><span class="lines">@@ -1323,7 +1323,7 @@
</span><span class="cx">     m_pendingNavigationID = navigationID;
</span><span class="cx"> 
</span><span class="cx">     m_sandboxExtensionTracker.beginLoad(m_mainFrame.get(), sandboxExtensionHandle);
</span><del>-    corePage()-&gt;userInputBridge().reloadFrame(m_mainFrame-&gt;coreFrame(), reloadFromOrigin, contentBlockersEnabled);
</del><ins>+    corePage()-&gt;userInputBridge().reloadFrame(m_mainFrame-&gt;coreFrame(), OptionSet&lt;ReloadOption&gt;::fromRaw(reloadOptions));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebPage::goForward(uint64_t navigationID, uint64_t backForwardItemID)
</span><span class="lines">@@ -4140,7 +4140,7 @@
</span><span class="cx">     FrameLoadType frameLoadType = frameLoader.loadType();
</span><span class="cx"> 
</span><span class="cx">     // If the page is being reloaded, it should reuse whatever extension is committed.
</span><del>-    if (frameLoadType == FrameLoadType::Reload || frameLoadType == FrameLoadType::ReloadFromOrigin)
</del><ins>+    if (isReload(frameLoadType))
</ins><span class="cx">         return true;
</span><span class="cx"> 
</span><span class="cx">     DocumentLoader* documentLoader = frameLoader.documentLoader();
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -1047,7 +1047,7 @@
</span><span class="cx">     void loadString(const LoadParameters&amp;);
</span><span class="cx">     void loadAlternateHTMLString(const LoadParameters&amp;);
</span><span class="cx">     void navigateToPDFLinkWithSimulatedClick(const String&amp; url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint);
</span><del>-    void reload(uint64_t navigationID, bool reloadFromOrigin, bool contentBlockersEnabled, const SandboxExtension::Handle&amp;);
</del><ins>+    void reload(uint64_t navigationID, uint32_t reloadOptions, const SandboxExtension::Handle&amp;);
</ins><span class="cx">     void goForward(uint64_t navigationID, uint64_t);
</span><span class="cx">     void goBack(uint64_t navigationID, uint64_t);
</span><span class="cx">     void goToBackForwardItem(uint64_t navigationID, uint64_t);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagemessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (214112 => 214113)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2017-03-17 19:48:36 UTC (rev 214112)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2017-03-17 19:52:49 UTC (rev 214113)
</span><span class="lines">@@ -140,7 +140,7 @@
</span><span class="cx"> 
</span><span class="cx">     NavigateToPDFLinkWithSimulatedClick(String url, WebCore::IntPoint documentPoint, WebCore::IntPoint screenPoint)
</span><span class="cx"> 
</span><del>-    Reload(uint64_t navigationID, bool reloadFromOrigin, bool contentBlockersEnabled, WebKit::SandboxExtension::Handle sandboxExtensionHandle)
</del><ins>+    Reload(uint64_t navigationID, uint32_t reloadOptions, WebKit::SandboxExtension::Handle sandboxExtensionHandle)
</ins><span class="cx">     StopLoading()
</span><span class="cx"> 
</span><span class="cx">     StopLoadingFrame(uint64_t frameID)
</span></span></pre>
</div>
</div>

</body>
</html>