<!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>[214494] 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/214494">214494</a></dd>
<dt>Author</dt> <dd>bburg@apple.com</dd>
<dt>Date</dt> <dd>2017-03-28 14:41:24 -0700 (Tue, 28 Mar 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>Web Inspector: Add &quot;Disable Caches&quot; option that only applies to the inspected page while Web Inspector is open
https://bugs.webkit.org/show_bug.cgi?id=169865
&lt;rdar://problem/31250573&gt;

Reviewed by Joseph Pecoraro.

Source/JavaScriptCore:

* inspector/protocol/Network.json:
Rename the command for disabling resource caching to match the WebCore::Page
flag. This also removes the possibility that this could be confused for the old,
buggy command that this patch rips out.

Source/WebCore:

Rewrite the network agent's command for disabling resource caching to use Page::setResourceCachingEnabled.
The old implementation was doing weird stuff like setting no-cache headers and evicting the
contents of the memory cache, neither of which is correct. The new approach has no side effects
on the network, disk, or memory cache so it can be turned on temporarily without causing problems.

New tests:
- http/tests/inspector/network/set-resource-caching-disabled-disk-cache.html
- http/tests/inspector/network/set-resource-caching-disabled-memory-cache.html

* inspector/InspectorNetworkAgent.h:
* inspector/InspectorNetworkAgent.cpp:
(WebCore::InspectorNetworkAgent::setCacheDisabled): Deleted.
(WebCore::InspectorNetworkAgent::setResourceCachingDisabled): Added.
Implement new command.

(WebCore::InspectorNetworkAgent::willSendRequest):
(WebCore::InspectorNetworkAgent::mainFrameNavigated):
Remove crufty attempts to break caches. I believe these are intended to defeat caching
proxies and similar middlemen, but this is just as likely to cause unusual loading behavior.

* page/Page.h:
(WebCore::Page::isResourceCachingDisabled):
(WebCore::Page::setResourceCachingDisabledOverride):
Add an override setting so that Web Inspector's override does not mess up the value
of isResourceCachingDisabled that may have been set by a WebKit API client.

Source/WebInspectorUI:

Hook up a button in the Network tab to WebCore::Page's resourceCachingDisabled flag.
If it is active, resource loads are subject to a cache policy that never uses a cached response.

* Localizations/en.lproj/localizedStrings.js:
Add localized strings.

* UserInterface/Base/Main.js:
(WebInspector.loaded):
Add a setting for whether to disable resource caching and inform the backend
of our preference. If someone changes the setting, tell the backend again.

* UserInterface/Views/NetworkGridContentView.js:
(WebInspector.NetworkGridContentView):
(WebInspector.NetworkGridContentView.prototype.get navigationItems):
(WebInspector.NetworkGridContentView.prototype._resourceCachingDisabledSettingChanged):
(WebInspector.NetworkGridContentView.prototype._toggleDisableResourceCache):
Add a new activatable navigation item that toggles disableResourceCaching for the inspected page.

* UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js:
* UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js:
* Versions/Inspector-iOS-10.0.json:
* Versions/Inspector-iOS-10.3.json:
* Versions/Inspector-iOS-7.0.json:
* Versions/Inspector-iOS-8.0.json:
* Versions/Inspector-iOS-9.0.json:
* Versions/Inspector-iOS-9.3.json:
Update legacy backend commands to remove the old/broken Network.setCacheDisabled command.

LayoutTests:

Add tests that verify the new command works as expected when it disables resource caching.
I also manually verified that the override setting is cleared when Web Inspector disconnects.
This is not easy to check in a layout test since we rely on the Web Inspector to tell whether
a load happened or not.

* http/tests/inspector/network/set-resource-caching-disabled-disk-cache-expected.txt: Added.
* http/tests/inspector/network/set-resource-caching-disabled-disk-cache.html: Added.
* http/tests/inspector/network/set-resource-caching-disabled-memory-cache-expected.txt: Added.
* http/tests/inspector/network/set-resource-caching-disabled-memory-cache.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreinspectorprotocolNetworkjson">trunk/Source/JavaScriptCore/inspector/protocol/Network.json</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorNetworkAgentcpp">trunk/Source/WebCore/inspector/InspectorNetworkAgent.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorNetworkAgenth">trunk/Source/WebCore/inspector/InspectorNetworkAgent.h</a></li>
<li><a href="#trunkSourceWebCorepagePageh">trunk/Source/WebCore/page/Page.h</a></li>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs">trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceBaseMainjs">trunk/Source/WebInspectorUI/UserInterface/Base/Main.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolLegacy100InspectorBackendCommandsjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolLegacy103InspectorBackendCommandsjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolLegacy70InspectorBackendCommandsjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolLegacy80InspectorBackendCommandsjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolLegacy90InspectorBackendCommandsjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceProtocolLegacy93InspectorBackendCommandsjs">trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsNetworkGridContentViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/NetworkGridContentView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIVersionsInspectoriOS100json">trunk/Source/WebInspectorUI/Versions/Inspector-iOS-10.0.json</a></li>
<li><a href="#trunkSourceWebInspectorUIVersionsInspectoriOS103json">trunk/Source/WebInspectorUI/Versions/Inspector-iOS-10.3.json</a></li>
<li><a href="#trunkSourceWebInspectorUIVersionsInspectoriOS70json">trunk/Source/WebInspectorUI/Versions/Inspector-iOS-7.0.json</a></li>
<li><a href="#trunkSourceWebInspectorUIVersionsInspectoriOS80json">trunk/Source/WebInspectorUI/Versions/Inspector-iOS-8.0.json</a></li>
<li><a href="#trunkSourceWebInspectorUIVersionsInspectoriOS90json">trunk/Source/WebInspectorUI/Versions/Inspector-iOS-9.0.json</a></li>
<li><a href="#trunkSourceWebInspectorUIVersionsInspectoriOS93json">trunk/Source/WebInspectorUI/Versions/Inspector-iOS-9.3.json</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestshttptestsinspectornetworksetresourcecachingdisableddiskcacheexpectedtxt">trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-disk-cache-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsinspectornetworksetresourcecachingdisableddiskcachehtml">trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-disk-cache.html</a></li>
<li><a href="#trunkLayoutTestshttptestsinspectornetworksetresourcecachingdisabledmemorycacheexpectedtxt">trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-memory-cache-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsinspectornetworksetresourcecachingdisabledmemorycachehtml">trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-memory-cache.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/LayoutTests/ChangeLog        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2017-03-28  Brian Burg  &lt;bburg@apple.com&gt;
+
+        Web Inspector: Add &quot;Disable Caches&quot; option that only applies to the inspected page while Web Inspector is open
+        https://bugs.webkit.org/show_bug.cgi?id=169865
+        &lt;rdar://problem/31250573&gt;
+
+        Reviewed by Joseph Pecoraro.
+
+        Add tests that verify the new command works as expected when it disables resource caching.
+        I also manually verified that the override setting is cleared when Web Inspector disconnects.
+        This is not easy to check in a layout test since we rely on the Web Inspector to tell whether
+        a load happened or not.
+
+        * http/tests/inspector/network/set-resource-caching-disabled-disk-cache-expected.txt: Added.
+        * http/tests/inspector/network/set-resource-caching-disabled-disk-cache.html: Added.
+        * http/tests/inspector/network/set-resource-caching-disabled-memory-cache-expected.txt: Added.
+        * http/tests/inspector/network/set-resource-caching-disabled-memory-cache.html: Added.
+
</ins><span class="cx"> 2017-03-28  Youenn Fablet  &lt;youenn@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Update LayoutTests/fast/mediastream/RTCPeerConnection-addIceCandidate.html to get more coverage
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsinspectornetworksetresourcecachingdisableddiskcacheexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-disk-cache-expected.txt (0 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-disk-cache-expected.txt                                (rev 0)
+++ trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-disk-cache-expected.txt        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+Test for `Network.setResourceCachingDisabled` for disk cache loads.
+
+
+== Running test suite: Network.SetResourceCachingDisabled.DiskCache
+-- Running test setup.
+-- Running test case: PossibleNetworkLoad
+PASS: Resource should be created.
+PASS: Resource should receive a Response.
+-- Running test setup.
+
+-- Running test case: SetResourceCachingDisabled.DiskCache
+PASS: Resource should be created.
+PASS: Resource should receive a Response.
+PASS: statusCode should be 200
+PASS: responseSource should be Symbol(network)
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsinspectornetworksetresourcecachingdisableddiskcachehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-disk-cache.html (0 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-disk-cache.html                                (rev 0)
+++ trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-disk-cache.html        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -0,0 +1,72 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;meta charset=&quot;utf-8&quot;&gt;
+&lt;script src=&quot;../resources/inspector-test.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../cache/disk-cache/resources/cache-test.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+// NOTE: this test is based on resource-response-source-disk-cache.html.
+function loadAndTriggerInspector(url) {
+    fetch(url).then(() =&gt; {
+        TestPage.dispatchEventToFrontend(&quot;LoadComplete&quot;);
+    });
+}
+
+function triggerNetworkLoad() {
+    loadAndTriggerInspector(&quot;/resources/square100.png&quot;);
+}
+
+function triggerDiskCacheLoad() {
+    loadAndTriggerInspector(&quot;/resources/square100.png&quot;);
+}
+
+function test()
+{
+    let suite = InspectorTest.createAsyncSuite(&quot;Network.SetResourceCachingDisabled.DiskCache&quot;);
+
+    function addTestCase({name, description, setup, expression, statusCode, responseSource}) {
+        suite.addTestCase({
+            name, description, setup,
+            test(resolve, reject) {
+                InspectorTest.evaluateInPage(expression);
+                Promise.all([
+                    WebInspector.Frame.awaitEvent(WebInspector.Frame.Event.ResourceWasAdded),
+                    WebInspector.Resource.awaitEvent(WebInspector.Resource.Event.ResponseReceived),
+                    InspectorTest.awaitEvent(&quot;LoadComplete&quot;),
+                ]).then(([resourceWasAddedEvent, responseReceivedEvent, loadCompleteEvent]) =&gt; {
+                    let resource = resourceWasAddedEvent.data.resource;
+                    InspectorTest.expectThat(resource instanceof WebInspector.Resource, &quot;Resource should be created.&quot;);
+                    InspectorTest.expectEqual(resource, responseReceivedEvent.target, &quot;Resource should receive a Response.&quot;);
+                    if (statusCode)
+                        InspectorTest.expectEqual(resource.statusCode, statusCode, `statusCode should be ${statusCode}`);
+                    if (responseSource)
+                        InspectorTest.expectEqual(resource.responseSource, responseSource, `responseSource should be ${String(responseSource)}`);
+                }).then(resolve, reject);
+            }
+        });
+    }
+
+    addTestCase({
+        name: &quot;PossibleNetworkLoad&quot;,
+        description: &quot;Load a resource from the network, it might be in an earlier disk cache&quot;,
+        setup(resolve) { InspectorTest.evaluateInPage(`internals.clearMemoryCache()`, resolve); },
+        expression: `triggerNetworkLoad()`,
+    });
+
+    addTestCase({
+        name: &quot;SetResourceCachingDisabled.DiskCache&quot;,
+        description: &quot;Fail to load a resource from the disk cache when resource caching is disabled&quot;,
+        expression: `triggerDiskCacheLoad()`,
+        responseSource: WebInspector.Resource.ResponseSource.Network,
+        setup(resolve) { NetworkAgent.setResourceCachingDisabled(true); resolve(); },
+        statusCode: 200,
+    });
+
+    suite.runTestCasesAndFinish();
+}
+&lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload=&quot;runTest()&quot;&gt;
+&lt;p&gt;Test for `Network.setResourceCachingDisabled` for disk cache loads.&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsinspectornetworksetresourcecachingdisabledmemorycacheexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-memory-cache-expected.txt (0 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-memory-cache-expected.txt                                (rev 0)
+++ trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-memory-cache-expected.txt        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+Test for `Network.setResourceCachingDisabled` for memory cache loads.
+
+
+== Running test suite: Network.SetResourceCachingDisabled.MemoryCache
+-- Running test setup.
+-- Running test case: Network.SetResourceCachingDisabled.MemoryCache
+PASS: Resource should be exist.
+PASS: statusCode should be 200
+PASS: responseSource should be Symbol(network)
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsinspectornetworksetresourcecachingdisabledmemorycachehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-memory-cache.html (0 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-memory-cache.html                                (rev 0)
+++ trunk/LayoutTests/http/tests/inspector/network/set-resource-caching-disabled-memory-cache.html        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -0,0 +1,60 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;meta charset=&quot;utf-8&quot;&gt;
+&lt;script src=&quot;resources/cached-script.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/inspector-test.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+// NOTE: this test is based on resource-response-source-memory-cache.html.
+
+TestPage.dispatchEventToFrontend(&quot;LoadComplete&quot;);
+
+function test()
+{
+    let suite = InspectorTest.createAsyncSuite(&quot;Network.SetResourceCachingDisabled.MemoryCache&quot;);
+
+    function addReloadTestCase({name, description, setup, expression, pattern, ignoreCache, statusCode, responseSource}) {
+        suite.addTestCase({
+            name, description, setup,
+            test(resolve, reject) {
+                NetworkAgent.setResourceCachingDisabled(true);
+                InspectorTest.reloadPage(ignoreCache);
+                InspectorTest.awaitEvent(&quot;LoadComplete&quot;).then((event) =&gt; {
+                    let resource = null;
+                    for (let item of WebInspector.frameResourceManager.mainFrame.resourceCollection.items) {
+                        if (pattern.test(item.url)) {
+                            resource = item;
+                            break;
+                        }
+                    }
+                    if (!resource) {
+                        InspectorTest.fail(&quot;Failed to find specific resource.&quot;);
+                        reject();
+                        return;
+                    }
+                    InspectorTest.expectThat(resource instanceof WebInspector.Resource, &quot;Resource should be exist.&quot;);
+                    InspectorTest.expectEqual(resource.statusCode, statusCode, `statusCode should be ${statusCode}`);
+                    InspectorTest.expectEqual(resource.responseSource, responseSource, `responseSource should be ${String(responseSource)}`);
+                }).then(resolve, reject);
+            }
+        });
+    }
+
+    addReloadTestCase({
+        name: &quot;Network.SetResourceCachingDisabled.MemoryCache&quot;,
+        description: &quot;Fail to load a resource from the memory cache by reloading this page when resource caching is disabled.&quot;,
+        pattern: /cached-script\.js$/,
+        setup(resolve) { NetworkAgent.setResourceCachingDisabled(true); resolve(); },
+        ignoreCache: false,
+        responseSource: WebInspector.Resource.ResponseSource.Network,
+        statusCode: 200,
+    });
+
+    suite.runTestCasesAndFinish();
+}
+&lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload=&quot;runTest()&quot;&gt;
+&lt;p&gt;Test for `Network.setResourceCachingDisabled` for memory cache loads.&lt;/p&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/JavaScriptCore/ChangeLog        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2017-03-28  Brian Burg  &lt;bburg@apple.com&gt;
+
+        Web Inspector: Add &quot;Disable Caches&quot; option that only applies to the inspected page while Web Inspector is open
+        https://bugs.webkit.org/show_bug.cgi?id=169865
+        &lt;rdar://problem/31250573&gt;
+
+        Reviewed by Joseph Pecoraro.
+
+        * inspector/protocol/Network.json:
+        Rename the command for disabling resource caching to match the WebCore::Page
+        flag. This also removes the possibility that this could be confused for the old,
+        buggy command that this patch rips out.
+
</ins><span class="cx"> 2017-03-25  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [JSC] Move platformThreadSignal to WTF
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinspectorprotocolNetworkjson"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/inspector/protocol/Network.json (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/inspector/protocol/Network.json        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/JavaScriptCore/inspector/protocol/Network.json        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -167,11 +167,11 @@
</span><span class="cx">             ]
</span><span class="cx">         },
</span><span class="cx">         {
</span><del>-            &quot;name&quot;: &quot;setCacheDisabled&quot;,
</del><ins>+            &quot;name&quot;: &quot;setResourceCachingDisabled&quot;,
</ins><span class="cx">             &quot;parameters&quot;: [
</span><del>-                { &quot;name&quot;: &quot;cacheDisabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;Cache disabled state.&quot; }
</del><ins>+                { &quot;name&quot;: &quot;disabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;Whether to prevent usage of the resource cache.&quot; }
</ins><span class="cx">             ],
</span><del>-            &quot;description&quot;: &quot;Toggles ignoring cache for each request. If &lt;code&gt;true&lt;/code&gt;, cache will not be used.&quot;
</del><ins>+            &quot;description&quot;: &quot;Toggles whether the resource cache may be used when loading resources in the inspected page. If &lt;code&gt;true&lt;/code&gt;, the resource cache will not be used when loading resources.&quot;
</ins><span class="cx">         },
</span><span class="cx">         {
</span><span class="cx">             &quot;name&quot;: &quot;loadResource&quot;,
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebCore/ChangeLog        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -1,3 +1,37 @@
</span><ins>+2017-03-28  Brian Burg  &lt;bburg@apple.com&gt;
+
+        Web Inspector: Add &quot;Disable Caches&quot; option that only applies to the inspected page while Web Inspector is open
+        https://bugs.webkit.org/show_bug.cgi?id=169865
+        &lt;rdar://problem/31250573&gt;
+
+        Reviewed by Joseph Pecoraro.
+
+        Rewrite the network agent's command for disabling resource caching to use Page::setResourceCachingEnabled.
+        The old implementation was doing weird stuff like setting no-cache headers and evicting the
+        contents of the memory cache, neither of which is correct. The new approach has no side effects
+        on the network, disk, or memory cache so it can be turned on temporarily without causing problems.
+
+        New tests:
+        - http/tests/inspector/network/set-resource-caching-disabled-disk-cache.html
+        - http/tests/inspector/network/set-resource-caching-disabled-memory-cache.html
+
+        * inspector/InspectorNetworkAgent.h:
+        * inspector/InspectorNetworkAgent.cpp:
+        (WebCore::InspectorNetworkAgent::setCacheDisabled): Deleted.
+        (WebCore::InspectorNetworkAgent::setResourceCachingDisabled): Added.
+        Implement new command.
+
+        (WebCore::InspectorNetworkAgent::willSendRequest):
+        (WebCore::InspectorNetworkAgent::mainFrameNavigated):
+        Remove crufty attempts to break caches. I believe these are intended to defeat caching
+        proxies and similar middlemen, but this is just as likely to cause unusual loading behavior.
+
+        * page/Page.h:
+        (WebCore::Page::isResourceCachingDisabled):
+        (WebCore::Page::setResourceCachingDisabledOverride):
+        Add an override setting so that Web Inspector's override does not mess up the value
+        of isResourceCachingDisabled that may have been set by a WebKit API client.
+
</ins><span class="cx"> 2017-03-28  Youenn Fablet  &lt;youenn@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix addIceCandidate after r214441
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorNetworkAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorNetworkAgent.cpp (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorNetworkAgent.cpp        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebCore/inspector/InspectorNetworkAgent.cpp        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -342,12 +342,6 @@
</span><span class="cx">     for (auto&amp; entry : m_extraRequestHeaders)
</span><span class="cx">         request.setHTTPHeaderField(entry.key, entry.value);
</span><span class="cx"> 
</span><del>-    if (m_cacheDisabled) {
-        request.setHTTPHeaderField(HTTPHeaderName::Pragma, &quot;no-cache&quot;);
-        request.setCachePolicy(ReloadIgnoringCacheData);
-        request.setHTTPHeaderField(HTTPHeaderName::CacheControl, &quot;no-cache&quot;);
-    }
-
</del><span class="cx">     Inspector::Protocol::Page::ResourceType resourceType = InspectorPageAgent::resourceTypeJson(type);
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;Inspector::Protocol::Network::Initiator&gt; initiatorObject = buildInitiatorObject(loader.frame() ? loader.frame()-&gt;document() : nullptr);
</span><span class="lines">@@ -654,6 +648,8 @@
</span><span class="cx">     m_instrumentingAgents.setInspectorNetworkAgent(nullptr);
</span><span class="cx">     m_resourcesData-&gt;clear();
</span><span class="cx">     m_extraRequestHeaders.clear();
</span><ins>+
+    m_pageAgent-&gt;page().setResourceCachingDisabledOverride(false);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void InspectorNetworkAgent::setExtraHTTPHeaders(ErrorString&amp;, const InspectorObject&amp; headers)
</span><span class="lines">@@ -698,11 +694,9 @@
</span><span class="cx">     errorString = ASCIILiteral(&quot;No data found for resource with given identifier&quot;);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void InspectorNetworkAgent::setCacheDisabled(ErrorString&amp;, bool cacheDisabled)
</del><ins>+void InspectorNetworkAgent::setResourceCachingDisabled(ErrorString&amp;, bool disabled)
</ins><span class="cx"> {
</span><del>-    m_cacheDisabled = cacheDisabled;
-    if (cacheDisabled)
-        MemoryCache::singleton().evictResources();
</del><ins>+    m_pageAgent-&gt;page().setResourceCachingDisabledOverride(disabled);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void InspectorNetworkAgent::loadResource(ErrorString&amp; errorString, const String&amp; frameId, const String&amp; urlString, Ref&lt;LoadResourceCallback&gt;&amp;&amp; callback)
</span><span class="lines">@@ -783,9 +777,6 @@
</span><span class="cx"> 
</span><span class="cx"> void InspectorNetworkAgent::mainFrameNavigated(DocumentLoader&amp; loader)
</span><span class="cx"> {
</span><del>-    if (m_cacheDisabled)
-        MemoryCache::singleton().evictResources();
-
</del><span class="cx">     m_resourcesData-&gt;clear(m_pageAgent-&gt;loaderId(&amp;loader));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorNetworkAgenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorNetworkAgent.h (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorNetworkAgent.h        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebCore/inspector/InspectorNetworkAgent.h        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -110,7 +110,7 @@
</span><span class="cx">     void disable(ErrorString&amp;) override;
</span><span class="cx">     void setExtraHTTPHeaders(ErrorString&amp;, const Inspector::InspectorObject&amp; headers) override;
</span><span class="cx">     void getResponseBody(ErrorString&amp;, const String&amp; requestId, String* content, bool* base64Encoded) override;
</span><del>-    void setCacheDisabled(ErrorString&amp;, bool cacheDisabled) override;
</del><ins>+    void setResourceCachingDisabled(ErrorString&amp;, bool disabled) override;
</ins><span class="cx">     void loadResource(ErrorString&amp;, const String&amp; frameId, const String&amp; url, Ref&lt;LoadResourceCallback&gt;&amp;&amp;) override;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="lines">@@ -133,7 +133,6 @@
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;NetworkResourcesData&gt; m_resourcesData;
</span><span class="cx">     bool m_enabled { false };
</span><del>-    bool m_cacheDisabled { false };
</del><span class="cx">     bool m_loadingXHRSynchronously { false };
</span><span class="cx">     HashMap&lt;String, String&gt; m_extraRequestHeaders;
</span><span class="cx">     HashSet&lt;unsigned long&gt; m_hiddenRequestIdentifiers;
</span></span></pre></div>
<a id="trunkSourceWebCorepagePageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Page.h (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Page.h        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebCore/page/Page.h        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -563,9 +563,12 @@
</span><span class="cx">     String captionUserPreferencesStyleSheet();
</span><span class="cx">     void setCaptionUserPreferencesStyleSheet(const String&amp;);
</span><span class="cx"> 
</span><del>-    bool isResourceCachingDisabled() const { return m_resourceCachingDisabled; }
</del><ins>+    bool isResourceCachingDisabled() const { return m_resourceCachingDisabled || m_resourceCachingDisabledOverride; }
</ins><span class="cx">     void setResourceCachingDisabled(bool disabled) { m_resourceCachingDisabled = disabled; }
</span><span class="cx"> 
</span><ins>+    // Web Inspector can override whatever value is set via WebKit SPI, but only while it is open.
+    void setResourceCachingDisabledOverride(bool disabled) { m_resourceCachingDisabledOverride = disabled; }
+
</ins><span class="cx">     std::optional&lt;EventThrottlingBehavior&gt; eventThrottlingBehaviorOverride() const { return m_eventThrottlingBehaviorOverride; }
</span><span class="cx">     void setEventThrottlingBehaviorOverride(std::optional&lt;EventThrottlingBehavior&gt; throttling) { m_eventThrottlingBehaviorOverride = throttling; }
</span><span class="cx"> 
</span><span class="lines">@@ -780,6 +783,7 @@
</span><span class="cx">     bool m_showAllPlugins { false };
</span><span class="cx">     bool m_controlledByAutomation { false };
</span><span class="cx">     bool m_resourceCachingDisabled { false };
</span><ins>+    bool m_resourceCachingDisabledOverride { false };
</ins><span class="cx">     bool m_isUtilityPage;
</span><span class="cx">     UserInterfaceLayoutDirection m_userInterfaceLayoutDirection { UserInterfaceLayoutDirection::LTR };
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/ChangeLog        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -1,3 +1,43 @@
</span><ins>+2017-03-28  Brian Burg  &lt;bburg@apple.com&gt;
+
+        Web Inspector: Add &quot;Disable Caches&quot; option that only applies to the inspected page while Web Inspector is open
+        https://bugs.webkit.org/show_bug.cgi?id=169865
+        &lt;rdar://problem/31250573&gt;
+
+        Reviewed by Joseph Pecoraro.
+
+        Hook up a button in the Network tab to WebCore::Page's resourceCachingDisabled flag.
+        If it is active, resource loads are subject to a cache policy that never uses a cached response.
+
+        * Localizations/en.lproj/localizedStrings.js:
+        Add localized strings.
+
+        * UserInterface/Base/Main.js:
+        (WebInspector.loaded):
+        Add a setting for whether to disable resource caching and inform the backend
+        of our preference. If someone changes the setting, tell the backend again.
+
+        * UserInterface/Views/NetworkGridContentView.js:
+        (WebInspector.NetworkGridContentView):
+        (WebInspector.NetworkGridContentView.prototype.get navigationItems):
+        (WebInspector.NetworkGridContentView.prototype._resourceCachingDisabledSettingChanged):
+        (WebInspector.NetworkGridContentView.prototype._toggleDisableResourceCache):
+        Add a new activatable navigation item that toggles disableResourceCaching for the inspected page.
+
+        * UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js:
+        * UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js:
+        * Versions/Inspector-iOS-10.0.json:
+        * Versions/Inspector-iOS-10.3.json:
+        * Versions/Inspector-iOS-7.0.json:
+        * Versions/Inspector-iOS-8.0.json:
+        * Versions/Inspector-iOS-9.0.json:
+        * Versions/Inspector-iOS-9.3.json:
+        Update legacy backend commands to remove the old/broken Network.setCacheDisabled command.
+
</ins><span class="cx"> 2017-03-28  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: Inspecting a Main Resource that is JS/JSON does not format / syntax highlight it properly
</span></span></pre></div>
<a id="trunkSourceWebInspectorUILocalizationsenlprojlocalizedStringsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -436,6 +436,7 @@
</span><span class="cx"> localizedStrings[&quot;Identity&quot;] = &quot;Identity&quot;;
</span><span class="cx"> localizedStrings[&quot;Idle&quot;] = &quot;Idle&quot;;
</span><span class="cx"> localizedStrings[&quot;Ignore&quot;] = &quot;Ignore&quot;;
</span><ins>+localizedStrings[&quot;Ignore the resource cache when loading resources&quot;] = &quot;Ignore the resource cache when loading resources&quot;;
</ins><span class="cx"> localizedStrings[&quot;Ignored&quot;] = &quot;Ignored&quot;;
</span><span class="cx"> localizedStrings[&quot;Image&quot;] = &quot;Image&quot;;
</span><span class="cx"> localizedStrings[&quot;Image Size&quot;] = &quot;Image Size&quot;;
</span><span class="lines">@@ -868,6 +869,7 @@
</span><span class="cx"> localizedStrings[&quot;Unsupported property ā€œ%sā€&quot;] = &quot;Unsupported property ā€œ%sā€&quot;;
</span><span class="cx"> localizedStrings[&quot;Untitled&quot;] = &quot;Untitled&quot;;
</span><span class="cx"> localizedStrings[&quot;Use Default Media Styles&quot;] = &quot;Use Default Media Styles&quot;;
</span><ins>+localizedStrings[&quot;Use the resource cache when loading resources&quot;] = &quot;Use the resource cache when loading resources&quot;;
</ins><span class="cx"> localizedStrings[&quot;User Agent&quot;] = &quot;User Agent&quot;;
</span><span class="cx"> localizedStrings[&quot;User Agent Stylesheet&quot;] = &quot;User Agent Stylesheet&quot;;
</span><span class="cx"> localizedStrings[&quot;User Stylesheet&quot;] = &quot;User Stylesheet&quot;;
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceBaseMainjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Main.js (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Base/Main.js        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Main.js        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -192,6 +192,13 @@
</span><span class="cx">     if (this.showPrintStylesSetting.value &amp;&amp; window.PageAgent)
</span><span class="cx">         PageAgent.setEmulatedMedia(&quot;print&quot;);
</span><span class="cx"> 
</span><ins>+    // COMPATIBILITY (iOS 10.3): Network.setDisableResourceCaching did not exist.
+    this.resourceCachingDisabledSetting = new WebInspector.Setting(&quot;disable-resource-caching&quot;, false);
+    if (window.NetworkAgent &amp;&amp; NetworkAgent.setResourceCachingDisabled &amp;&amp; this.resourceCachingDisabledSetting.value) {
+        NetworkAgent.setResourceCachingDisabled(true);
+        this.resourceCachingDisabledSetting.addEventListener(WebInspector.Setting.Event.Changed, this._resourceCachingDisabledSettingChanged, this);
+    }
+
</ins><span class="cx">     this.setZoomFactor(WebInspector.settings.zoomFactor.value);
</span><span class="cx"> 
</span><span class="cx">     this.mouseCoords = {
</span><span class="lines">@@ -2231,6 +2238,11 @@
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WebInspector._resourceCachingDisabledSettingChanged = function(event)
+{
+    NetworkAgent.setResourceCachingDisabled(this.resourceCachingDisabledSetting.value);
+}
+
</ins><span class="cx"> WebInspector.elementDragStart = function(element, dividerDrag, elementDragEnd, event, cursor, eventTarget)
</span><span class="cx"> {
</span><span class="cx">     if (WebInspector._elementDraggingEventListener || WebInspector._elementEndDraggingEventListener)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolLegacy100InspectorBackendCommandsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -286,7 +286,6 @@
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.disable&quot;, [], []);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.setExtraHTTPHeaders&quot;, [{&quot;name&quot;: &quot;headers&quot;, &quot;type&quot;: &quot;object&quot;, &quot;optional&quot;: false}], []);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.getResponseBody&quot;, [{&quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;body&quot;, &quot;base64Encoded&quot;]);
</span><del>-InspectorBackend.registerCommand(&quot;Network.setCacheDisabled&quot;, [{&quot;name&quot;: &quot;cacheDisabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false}], []);
</del><span class="cx"> InspectorBackend.registerCommand(&quot;Network.loadResource&quot;, [{&quot;name&quot;: &quot;frameId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;url&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;content&quot;, &quot;mimeType&quot;, &quot;status&quot;]);
</span><span class="cx"> InspectorBackend.activateDomain(&quot;Network&quot;, &quot;web&quot;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolLegacy103InspectorBackendCommandsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -293,7 +293,6 @@
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.disable&quot;, [], []);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.setExtraHTTPHeaders&quot;, [{&quot;name&quot;: &quot;headers&quot;, &quot;type&quot;: &quot;object&quot;, &quot;optional&quot;: false}], []);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.getResponseBody&quot;, [{&quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;body&quot;, &quot;base64Encoded&quot;]);
</span><del>-InspectorBackend.registerCommand(&quot;Network.setCacheDisabled&quot;, [{&quot;name&quot;: &quot;cacheDisabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false}], []);
</del><span class="cx"> InspectorBackend.registerCommand(&quot;Network.loadResource&quot;, [{&quot;name&quot;: &quot;frameId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;url&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;content&quot;, &quot;mimeType&quot;, &quot;status&quot;]);
</span><span class="cx"> InspectorBackend.activateDomain(&quot;Network&quot;, &quot;web&quot;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolLegacy70InspectorBackendCommandsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -126,7 +126,6 @@
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.disable&quot;, [], []);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.setExtraHTTPHeaders&quot;, [{&quot;name&quot;: &quot;headers&quot;, &quot;type&quot;: &quot;object&quot;, &quot;optional&quot;: false}], []);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.getResponseBody&quot;, [{&quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;body&quot;, &quot;base64Encoded&quot;]);
</span><del>-InspectorBackend.registerCommand(&quot;Network.setCacheDisabled&quot;, [{&quot;name&quot;: &quot;cacheDisabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false}], []);
</del><span class="cx"> InspectorBackend.activateDomain(&quot;Network&quot;);
</span><span class="cx"> 
</span><span class="cx"> // Database.
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolLegacy80InspectorBackendCommandsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -277,7 +277,6 @@
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.disable&quot;, [], []);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.setExtraHTTPHeaders&quot;, [{&quot;name&quot;: &quot;headers&quot;, &quot;type&quot;: &quot;object&quot;, &quot;optional&quot;: false}], []);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.getResponseBody&quot;, [{&quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;body&quot;, &quot;base64Encoded&quot;]);
</span><del>-InspectorBackend.registerCommand(&quot;Network.setCacheDisabled&quot;, [{&quot;name&quot;: &quot;cacheDisabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false}], []);
</del><span class="cx"> InspectorBackend.registerCommand(&quot;Network.loadResource&quot;, [{&quot;name&quot;: &quot;frameId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;url&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;content&quot;, &quot;mimeType&quot;, &quot;status&quot;]);
</span><span class="cx"> InspectorBackend.activateDomain(&quot;Network&quot;, &quot;web&quot;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolLegacy90InspectorBackendCommandsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -246,7 +246,6 @@
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.disable&quot;, [], []);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.setExtraHTTPHeaders&quot;, [{&quot;name&quot;: &quot;headers&quot;, &quot;type&quot;: &quot;object&quot;, &quot;optional&quot;: false}], []);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.getResponseBody&quot;, [{&quot;name&quot;: &quot;requestId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;body&quot;, &quot;base64Encoded&quot;]);
</span><del>-InspectorBackend.registerCommand(&quot;Network.setCacheDisabled&quot;, [{&quot;name&quot;: &quot;cacheDisabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false}], []);
</del><span class="cx"> InspectorBackend.registerCommand(&quot;Network.loadResource&quot;, [{&quot;name&quot;: &quot;frameId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;url&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;content&quot;, &quot;mimeType&quot;, &quot;status&quot;]);
</span><span class="cx"> InspectorBackend.activateDomain(&quot;Network&quot;, &quot;web&quot;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceProtocolLegacy93InspectorBackendCommandsjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -257,7 +257,6 @@
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.clearBrowserCache&quot;, [], []);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.canClearBrowserCookies&quot;, [], [&quot;result&quot;]);
</span><span class="cx"> InspectorBackend.registerCommand(&quot;Network.clearBrowserCookies&quot;, [], []);
</span><del>-InspectorBackend.registerCommand(&quot;Network.setCacheDisabled&quot;, [{&quot;name&quot;: &quot;cacheDisabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;optional&quot;: false}], []);
</del><span class="cx"> InspectorBackend.registerCommand(&quot;Network.loadResource&quot;, [{&quot;name&quot;: &quot;frameId&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}, {&quot;name&quot;: &quot;url&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: false}], [&quot;content&quot;, &quot;mimeType&quot;, &quot;status&quot;]);
</span><span class="cx"> InspectorBackend.activateDomain(&quot;Network&quot;, &quot;web&quot;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsNetworkGridContentViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/NetworkGridContentView.js (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/NetworkGridContentView.js        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/NetworkGridContentView.js        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -128,6 +128,17 @@
</span><span class="cx">         networkTimeline.addEventListener(WebInspector.Timeline.Event.RecordAdded, this._networkTimelineRecordAdded, this);
</span><span class="cx">         networkTimeline.addEventListener(WebInspector.Timeline.Event.Reset, this._networkTimelineReset, this);
</span><span class="cx"> 
</span><ins>+        // COMPATIBILITY (iOS 10.3): Network.setDisableResourceCaching did not exist.
+        if (window.NetworkAgent &amp;&amp; NetworkAgent.setResourceCachingDisabled) {
+            let toolTipForDisableResourceCache = WebInspector.UIString(&quot;Ignore the resource cache when loading resources&quot;);
+            let activatedToolTipForDisableResourceCache = WebInspector.UIString(&quot;Use the resource cache when loading resources&quot;);
+            this._disableResourceCacheNavigationItem = new WebInspector.ActivateButtonNavigationItem(&quot;disable-resource-cache&quot;, toolTipForDisableResourceCache, activatedToolTipForDisableResourceCache, &quot;Images/StepOver.svg&quot;, 16, 16);
+            this._disableResourceCacheNavigationItem.activated = WebInspector.resourceCachingDisabledSetting.value;
+
+            this._disableResourceCacheNavigationItem.addEventListener(WebInspector.ButtonNavigationItem.Event.Clicked, this._toggleDisableResourceCache, this);
+            WebInspector.resourceCachingDisabledSetting.addEventListener(WebInspector.Setting.Event.Changed, this._resourceCachingDisabledSettingChanged, this);
+        }
+
</ins><span class="cx">         let clearImageDimensions = WebInspector.Platform.name === &quot;mac&quot; ? 16 : 15;
</span><span class="cx">         this._clearNetworkItemsNavigationItem = new WebInspector.ButtonNavigationItem(&quot;clear-network-items&quot;, WebInspector.UIString(&quot;Clear Network Items (%s)&quot;).format(WebInspector.clearKeyboardShortcut.displayName), &quot;Images/NavigationItemClear.svg&quot;, clearImageDimensions, clearImageDimensions);
</span><span class="cx">         this._clearNetworkItemsNavigationItem.addEventListener(WebInspector.ButtonNavigationItem.Event.Clicked, () =&gt; this.reset());
</span><span class="lines">@@ -161,7 +172,13 @@
</span><span class="cx"> 
</span><span class="cx">     get navigationItems()
</span><span class="cx">     {
</span><del>-        return [this._clearNetworkItemsNavigationItem];
</del><ins>+        let items = [];
+
+        if (this._disableResourceCacheNavigationItem)
+            items.push(this._disableResourceCacheNavigationItem);
+        items.push(this._clearNetworkItemsNavigationItem);
+
+        return items;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     shown()
</span><span class="lines">@@ -261,6 +278,16 @@
</span><span class="cx"> 
</span><span class="cx">     // Private
</span><span class="cx"> 
</span><ins>+    _resourceCachingDisabledSettingChanged()
+    {
+        this._disableResourceCacheNavigationItem.activated = WebInspector.resourceCachingDisabledSetting.value;
+    }
+
+    _toggleDisableResourceCache()
+    {
+        WebInspector.resourceCachingDisabledSetting.value = !WebInspector.resourceCachingDisabledSetting.value;
+    }
+
</ins><span class="cx">     _processPendingRecords()
</span><span class="cx">     {
</span><span class="cx">         if (!this._pendingRecords.length)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIVersionsInspectoriOS100json"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Versions/Inspector-iOS-10.0.json (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Versions/Inspector-iOS-10.0.json        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/Versions/Inspector-iOS-10.0.json        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -2364,13 +2364,6 @@
</span><span class="cx">             ]
</span><span class="cx">         },
</span><span class="cx">         {
</span><del>-            &quot;name&quot;: &quot;setCacheDisabled&quot;,
-            &quot;parameters&quot;: [
-                { &quot;name&quot;: &quot;cacheDisabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;Cache disabled state.&quot; }
-            ],
-            &quot;description&quot;: &quot;Toggles ignoring cache for each request. If &lt;code&gt;true&lt;/code&gt;, cache will not be used.&quot;
-        },
-        {
</del><span class="cx">             &quot;name&quot;: &quot;loadResource&quot;,
</span><span class="cx">             &quot;async&quot;: true,
</span><span class="cx">             &quot;parameters&quot;: [
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIVersionsInspectoriOS103json"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Versions/Inspector-iOS-10.3.json (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Versions/Inspector-iOS-10.3.json        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/Versions/Inspector-iOS-10.3.json        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -2407,13 +2407,6 @@
</span><span class="cx">             ]
</span><span class="cx">         },
</span><span class="cx">         {
</span><del>-            &quot;name&quot;: &quot;setCacheDisabled&quot;,
-            &quot;parameters&quot;: [
-                { &quot;name&quot;: &quot;cacheDisabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;Cache disabled state.&quot; }
-            ],
-            &quot;description&quot;: &quot;Toggles ignoring cache for each request. If &lt;code&gt;true&lt;/code&gt;, cache will not be used.&quot;
-        },
-        {
</del><span class="cx">             &quot;name&quot;: &quot;loadResource&quot;,
</span><span class="cx">             &quot;async&quot;: true,
</span><span class="cx">             &quot;parameters&quot;: [
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIVersionsInspectoriOS70json"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Versions/Inspector-iOS-7.0.json (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Versions/Inspector-iOS-7.0.json        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/Versions/Inspector-iOS-7.0.json        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -794,13 +794,6 @@
</span><span class="cx">                     { &quot;name&quot;: &quot;body&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Response body.&quot; },
</span><span class="cx">                     { &quot;name&quot;: &quot;base64Encoded&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;True, if content was sent as base64.&quot; }
</span><span class="cx">                 ]
</span><del>-            },
-            {
-                &quot;name&quot;: &quot;setCacheDisabled&quot;,
-                &quot;parameters&quot;: [
-                    { &quot;name&quot;: &quot;cacheDisabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;Cache disabled state.&quot; }
-                ],
-                &quot;description&quot;: &quot;Toggles ignoring cache for each request. If &lt;code&gt;true&lt;/code&gt;, cache will not be used.&quot;
</del><span class="cx">             }
</span><span class="cx">         ],
</span><span class="cx">         &quot;events&quot;: [
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIVersionsInspectoriOS80json"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Versions/Inspector-iOS-8.0.json (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Versions/Inspector-iOS-8.0.json        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/Versions/Inspector-iOS-8.0.json        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -2370,13 +2370,6 @@
</span><span class="cx">             ]
</span><span class="cx">         },
</span><span class="cx">         {
</span><del>-            &quot;name&quot;: &quot;setCacheDisabled&quot;,
-            &quot;parameters&quot;: [
-                { &quot;name&quot;: &quot;cacheDisabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;Cache disabled state.&quot; }
-            ],
-            &quot;description&quot;: &quot;Toggles ignoring cache for each request. If &lt;code&gt;true&lt;/code&gt;, cache will not be used.&quot;
-        },
-        {
</del><span class="cx">             &quot;name&quot;: &quot;loadResource&quot;,
</span><span class="cx">             &quot;async&quot;: true,
</span><span class="cx">             &quot;parameters&quot;: [
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIVersionsInspectoriOS90json"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Versions/Inspector-iOS-9.0.json (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Versions/Inspector-iOS-9.0.json        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/Versions/Inspector-iOS-9.0.json        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -2112,13 +2112,6 @@
</span><span class="cx">             ]
</span><span class="cx">         },
</span><span class="cx">         {
</span><del>-            &quot;name&quot;: &quot;setCacheDisabled&quot;,
-            &quot;parameters&quot;: [
-                { &quot;name&quot;: &quot;cacheDisabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;Cache disabled state.&quot; }
-            ],
-            &quot;description&quot;: &quot;Toggles ignoring cache for each request. If &lt;code&gt;true&lt;/code&gt;, cache will not be used.&quot;
-        },
-        {
</del><span class="cx">             &quot;name&quot;: &quot;loadResource&quot;,
</span><span class="cx">             &quot;async&quot;: true,
</span><span class="cx">             &quot;parameters&quot;: [
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIVersionsInspectoriOS93json"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Versions/Inspector-iOS-9.3.json (214493 => 214494)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Versions/Inspector-iOS-9.3.json        2017-03-28 21:17:12 UTC (rev 214493)
+++ trunk/Source/WebInspectorUI/Versions/Inspector-iOS-9.3.json        2017-03-28 21:41:24 UTC (rev 214494)
</span><span class="lines">@@ -2194,13 +2194,6 @@
</span><span class="cx">             &quot;description&quot;: &quot;Clears browser cookies.&quot;
</span><span class="cx">         },
</span><span class="cx">         {
</span><del>-            &quot;name&quot;: &quot;setCacheDisabled&quot;,
-            &quot;parameters&quot;: [
-                { &quot;name&quot;: &quot;cacheDisabled&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;Cache disabled state.&quot; }
-            ],
-            &quot;description&quot;: &quot;Toggles ignoring cache for each request. If &lt;code&gt;true&lt;/code&gt;, cache will not be used.&quot;
-        },
-        {
</del><span class="cx">             &quot;name&quot;: &quot;loadResource&quot;,
</span><span class="cx">             &quot;async&quot;: true,
</span><span class="cx">             &quot;parameters&quot;: [
</span></span></pre>
</div>
</div>

</body>
</html>