<!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>[201079] trunk/Source/WebKit2</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/201079">201079</a></dd>
<dt>Author</dt> <dd>bburg@apple.com</dd>
<dt>Date</dt> <dd>2016-05-18 07:52:20 -0700 (Wed, 18 May 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION(<a href="http://trac.webkit.org/projects/webkit/changeset/200959">r200959</a>): &quot;Start Timeline Recording&quot; menu item doesn't start recording
https://bugs.webkit.org/show_bug.cgi?id=157821
&lt;rdar://problem/26335429&gt;

Reviewed by Timothy Hatcher.

In <a href="http://trac.webkit.org/projects/webkit/changeset/200959">r200959</a>, WebInspectorProxy started sending start/stop profiling
messages directly to the frontend process to avoid the inspected page
process from implicitly showing the frontend. To compensate, the WebKit
API layer was changed to call show() in togglePageProfiling().

Unfortunately, this fix was not quite right, because the ordering of
the Show and StartPageProfiling messages is undefined. The latter has to bounce
from UI to inspected to inspector processes, so the frontend may try
to start profiling before the frontend is shown, causing it to be ignored.

This patch takes a different approach: just remove all implicit show()
calls in the inspected page processes, and bounce both the Show and
StartPageProfiling messages through the inspected page process to ensure
they are handled in order by the frontend process.

* UIProcess/WebInspectorProxy.cpp:
(WebKit::WebInspectorProxy::togglePageProfiling):
Revert to sending to the inspected page process.

* WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp:
(WKBundleInspectorSetPageProfilingEnabled):
Add a call to show() now that the implementation doesn't do it implicitly.

* WebProcess/WebPage/WebInspector.cpp:
(WebKit::WebInspector::startPageProfiling):
(WebKit::WebInspector::stopPageProfiling):
Don't implicitly show the inspector. These methods are only called
through the WKBundleInspector API and via IPC from WebInspectorProxy.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebInspectorProxycpp">trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessInjectedBundleAPIcWKBundleInspectorcpp">trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebInspectorcpp">trunk/Source/WebKit2/WebProcess/WebPage/WebInspector.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (201078 => 201079)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-05-18 14:48:28 UTC (rev 201078)
+++ trunk/Source/WebKit2/ChangeLog        2016-05-18 14:52:20 UTC (rev 201079)
</span><span class="lines">@@ -1,3 +1,40 @@
</span><ins>+2016-05-18  Brian Burg  &lt;bburg@apple.com&gt;
+
+        REGRESSION(r200959): &quot;Start Timeline Recording&quot; menu item doesn't start recording
+        https://bugs.webkit.org/show_bug.cgi?id=157821
+        &lt;rdar://problem/26335429&gt;
+
+        Reviewed by Timothy Hatcher.
+
+        In r200959, WebInspectorProxy started sending start/stop profiling
+        messages directly to the frontend process to avoid the inspected page
+        process from implicitly showing the frontend. To compensate, the WebKit
+        API layer was changed to call show() in togglePageProfiling().
+
+        Unfortunately, this fix was not quite right, because the ordering of
+        the Show and StartPageProfiling messages is undefined. The latter has to bounce
+        from UI to inspected to inspector processes, so the frontend may try
+        to start profiling before the frontend is shown, causing it to be ignored.
+
+        This patch takes a different approach: just remove all implicit show()
+        calls in the inspected page processes, and bounce both the Show and
+        StartPageProfiling messages through the inspected page process to ensure
+        they are handled in order by the frontend process.
+
+        * UIProcess/WebInspectorProxy.cpp:
+        (WebKit::WebInspectorProxy::togglePageProfiling):
+        Revert to sending to the inspected page process.
+
+        * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp:
+        (WKBundleInspectorSetPageProfilingEnabled):
+        Add a call to show() now that the implementation doesn't do it implicitly.
+
+        * WebProcess/WebPage/WebInspector.cpp:
+        (WebKit::WebInspector::startPageProfiling):
+        (WebKit::WebInspector::stopPageProfiling):
+        Don't implicitly show the inspector. These methods are only called
+        through the WKBundleInspector API and via IPC from WebInspectorProxy.
+
</ins><span class="cx"> 2016-05-17  Beth Dakin  &lt;bdakin@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Make handleAcceptedCandidate a public function
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebInspectorProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp (201078 => 201079)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp        2016-05-18 14:48:28 UTC (rev 201078)
+++ trunk/Source/WebKit2/UIProcess/WebInspectorProxy.cpp        2016-05-18 14:52:20 UTC (rev 201079)
</span><span class="lines">@@ -296,9 +296,9 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (m_isProfilingPage)
</span><del>-        m_inspectorPage-&gt;process().send(Messages::WebInspectorUI::StopPageProfiling(), m_inspectorPage-&gt;pageID());
</del><ins>+        m_inspectedPage-&gt;process().send(Messages::WebInspector::StopPageProfiling(), m_inspectedPage-&gt;pageID());
</ins><span class="cx">     else
</span><del>-        m_inspectorPage-&gt;process().send(Messages::WebInspectorUI::StartPageProfiling(), m_inspectorPage-&gt;pageID());
</del><ins>+        m_inspectedPage-&gt;process().send(Messages::WebInspector::StartPageProfiling(), m_inspectedPage-&gt;pageID());
</ins><span class="cx"> 
</span><span class="cx">     // FIXME: have the WebProcess notify us on state changes.
</span><span class="cx">     m_isProfilingPage = !m_isProfilingPage;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessInjectedBundleAPIcWKBundleInspectorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp (201078 => 201079)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp        2016-05-18 14:48:28 UTC (rev 201078)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp        2016-05-18 14:52:20 UTC (rev 201079)
</span><span class="lines">@@ -55,6 +55,8 @@
</span><span class="cx"> 
</span><span class="cx"> void WKBundleInspectorSetPageProfilingEnabled(WKBundleInspectorRef inspectorRef, bool enabled)
</span><span class="cx"> {
</span><ins>+    toImpl(inspectorRef)-&gt;show();
+
</ins><span class="cx">     if (enabled)
</span><span class="cx">         toImpl(inspectorRef)-&gt;startPageProfiling();
</span><span class="cx">     else
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebInspectorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebInspector.cpp (201078 => 201079)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebInspector.cpp        2016-05-18 14:48:28 UTC (rev 201078)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebInspector.cpp        2016-05-18 14:52:20 UTC (rev 201079)
</span><span class="lines">@@ -196,7 +196,6 @@
</span><span class="cx">     if (!m_page-&gt;corePage())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_page-&gt;corePage()-&gt;inspectorController().show();
</del><span class="cx">     m_frontendConnection-&gt;send(Messages::WebInspectorUI::StartPageProfiling(), 0);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -205,7 +204,6 @@
</span><span class="cx">     if (!m_page-&gt;corePage())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_page-&gt;corePage()-&gt;inspectorController().show();
</del><span class="cx">     m_frontendConnection-&gt;send(Messages::WebInspectorUI::StopPageProfiling(), 0);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>