<!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>[185860] trunk/Source</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/185860">185860</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2015-06-22 20:54:30 -0700 (Mon, 22 Jun 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[WK1] WebAllowDenyPolicyListener.denyOnlyThisRequest() should not start a new permission request
https://bugs.webkit.org/show_bug.cgi?id=146228
&lt;rdar://problem/15179262&gt;

Reviewed by Daniel Bates.

Source/WebCore:

Add Geolocation::resetIsAllowed() API that merely resets
m_allowGeolocation to Unknown, so that we will request the permission
again the next time a position is requested.

* Modules/geolocation/Geolocation.h:
(WebCore::Geolocation::resetIsAllowed):

Source/WebKit/mac:

Call the new Geolocation::resetIsAllowed() API after denying the
current request, instead of calling
Geolocation::resetAllGeolocationPermission(). In addition to resetting
m_allowGeolocation to Unknown, the latter would also start a new
permission request. However, for
WebAllowDenyPolicyListener.denyOnlyThisRequest(), we really only want
to deny the current request and then reset m_allowGeolocation to
Unknown so that permission is requested again later if the app requests
a position again.

The previous implementation meant that if the client application keeps
calling WebAllowDenyPolicyListener.denyOnlyThisRequest(), we would end
up in an infinite loop (requesting for permission), even though the
application did not make any new geolocation requests.

* WebCoreSupport/WebGeolocationClient.mm:
(-[WebGeolocationPolicyListener denyOnlyThisRequest]):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesgeolocationGeolocationh">trunk/Source/WebCore/Modules/geolocation/Geolocation.h</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacWebCoreSupportWebGeolocationClientmm">trunk/Source/WebKit/mac/WebCoreSupport/WebGeolocationClient.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (185859 => 185860)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-06-23 03:47:24 UTC (rev 185859)
+++ trunk/Source/WebCore/ChangeLog        2015-06-23 03:54:30 UTC (rev 185860)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-06-22  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        [WK1] WebAllowDenyPolicyListener.denyOnlyThisRequest() should not start a new permission request
+        https://bugs.webkit.org/show_bug.cgi?id=146228
+        &lt;rdar://problem/15179262&gt;
+
+        Reviewed by Daniel Bates.
+
+        Add Geolocation::resetIsAllowed() API that merely resets
+        m_allowGeolocation to Unknown, so that we will request the permission
+        again the next time a position is requested.
+
+        * Modules/geolocation/Geolocation.h:
+        (WebCore::Geolocation::resetIsAllowed):
+
</ins><span class="cx"> 2015-06-22  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         ASSERT(!m_zOrderListsDirty) when mousing over web view with incremental rendering suppressed
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesgeolocationGeolocationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/geolocation/Geolocation.h (185859 => 185860)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/geolocation/Geolocation.h        2015-06-23 03:47:24 UTC (rev 185859)
+++ trunk/Source/WebCore/Modules/geolocation/Geolocation.h        2015-06-23 03:54:30 UTC (rev 185860)
</span><span class="lines">@@ -66,6 +66,7 @@
</span><span class="cx">     void clearWatch(int watchID);
</span><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT void setIsAllowed(bool);
</span><ins>+    void resetIsAllowed() { m_allowGeolocation = Unknown; }
</ins><span class="cx">     bool isAllowed() const { return m_allowGeolocation == Yes; }
</span><span class="cx"> 
</span><span class="cx">     void positionChanged();
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (185859 => 185860)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2015-06-23 03:47:24 UTC (rev 185859)
+++ trunk/Source/WebKit/mac/ChangeLog        2015-06-23 03:54:30 UTC (rev 185860)
</span><span class="lines">@@ -1,3 +1,29 @@
</span><ins>+2015-06-22  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        [WK1] WebAllowDenyPolicyListener.denyOnlyThisRequest() should not start a new permission request
+        https://bugs.webkit.org/show_bug.cgi?id=146228
+        &lt;rdar://problem/15179262&gt;
+
+        Reviewed by Daniel Bates.
+
+        Call the new Geolocation::resetIsAllowed() API after denying the
+        current request, instead of calling
+        Geolocation::resetAllGeolocationPermission(). In addition to resetting
+        m_allowGeolocation to Unknown, the latter would also start a new
+        permission request. However, for
+        WebAllowDenyPolicyListener.denyOnlyThisRequest(), we really only want
+        to deny the current request and then reset m_allowGeolocation to
+        Unknown so that permission is requested again later if the app requests
+        a position again.
+
+        The previous implementation meant that if the client application keeps
+        calling WebAllowDenyPolicyListener.denyOnlyThisRequest(), we would end
+        up in an infinite loop (requesting for permission), even though the
+        application did not make any new geolocation requests.
+
+        * WebCoreSupport/WebGeolocationClient.mm:
+        (-[WebGeolocationPolicyListener denyOnlyThisRequest]):
+
</ins><span class="cx"> 2015-06-22  Anders Carlsson  &lt;andersca@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Delegates should be formal protocols
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebCoreSupportWebGeolocationClientmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebGeolocationClient.mm (185859 => 185860)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebCoreSupport/WebGeolocationClient.mm        2015-06-23 03:47:24 UTC (rev 185859)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebGeolocationClient.mm        2015-06-23 03:54:30 UTC (rev 185860)
</span><span class="lines">@@ -191,7 +191,7 @@
</span><span class="cx">     WebThreadRun(^{
</span><span class="cx">         // A soft deny does not prevent subsequent request from the Geolocation object.
</span><span class="cx">         [self deny];
</span><del>-        _geolocation-&gt;resetAllGeolocationPermission();
</del><ins>+        _geolocation-&gt;resetIsAllowed();
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>