<!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>[198930] trunk/Tools</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/198930">198930</a></dd>
<dt>Author</dt> <dd>dbates@webkit.org</dd>
<dt>Date</dt> <dd>2016-03-31 16:45:54 -0700 (Thu, 31 Mar 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>run-webkit-tests fails to create user's cache directory when System Integrity Protection is enabled
https://bugs.webkit.org/show_bug.cgi?id=156071
&lt;rdar://problem/25467827&gt;

Reviewed by Brent Fulgham.

Fixes an issue where run-webkit-tests will fail to create the suffixed user's cache directory
on non-Apple Internal machines with System Integrity Protection enabled because the OS only
honors the suffix, specified by the environment variable DIRHELPER_USER_DIR_SUFFIX, in
privileged processes. And python(1) does not have sufficient privileges. As a workaround for
systems that have System Integrity Protection enabled we compute the path to the suffixed
user's cache directory by hand.

Additionally, fix an issue where the user's cache directory created by run-webkit-test was
never deleted on cessation of the test run.

* Scripts/webkitpy/port/driver.py:
(Driver._start): Actually store the path to the user's cache directory in self._driver_user_cache_directory
so that we can delete this directory on cessation of the test run.
* Scripts/webkitpy/port/mac.py:
(MacPort):
(MacPort._path_to_user_cache_directory): Unset the environment variable DIRHELPER_USER_DIR_SUFFIX (if set),
query the OS for the path to the user's cache directory and concatenate this path with the
specified suffix.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptswebkitpyportdriverpy">trunk/Tools/Scripts/webkitpy/port/driver.py</a></li>
<li><a href="#trunkToolsScriptswebkitpyportmacpy">trunk/Tools/Scripts/webkitpy/port/mac.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (198929 => 198930)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-03-31 23:33:56 UTC (rev 198929)
+++ trunk/Tools/ChangeLog        2016-03-31 23:45:54 UTC (rev 198930)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2016-03-31  Daniel Bates  &lt;dabates@apple.com&gt;
+
+        run-webkit-tests fails to create user's cache directory when System Integrity Protection is enabled
+        https://bugs.webkit.org/show_bug.cgi?id=156071
+        &lt;rdar://problem/25467827&gt;
+
+        Reviewed by Brent Fulgham.
+
+        Fixes an issue where run-webkit-tests will fail to create the suffixed user's cache directory
+        on non-Apple Internal machines with System Integrity Protection enabled because the OS only
+        honors the suffix, specified by the environment variable DIRHELPER_USER_DIR_SUFFIX, in
+        privileged processes. And python(1) does not have sufficient privileges. As a workaround for
+        systems that have System Integrity Protection enabled we compute the path to the suffixed
+        user's cache directory by hand.
+
+        Additionally, fix an issue where the user's cache directory created by run-webkit-test was
+        never deleted on cessation of the test run.
+
+        * Scripts/webkitpy/port/driver.py:
+        (Driver._start): Actually store the path to the user's cache directory in self._driver_user_cache_directory
+        so that we can delete this directory on cessation of the test run.
+        * Scripts/webkitpy/port/mac.py:
+        (MacPort):
+        (MacPort._path_to_user_cache_directory): Unset the environment variable DIRHELPER_USER_DIR_SUFFIX (if set),
+        query the OS for the path to the user's cache directory and concatenate this path with the
+        specified suffix.
+
</ins><span class="cx"> 2016-03-31  Jiewen Tan  &lt;jiewen_tan@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         WebKit should set Original URL of a download request correctly
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpyportdriverpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/port/driver.py (198929 => 198930)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/port/driver.py        2016-03-31 23:33:56 UTC (rev 198929)
+++ trunk/Tools/Scripts/webkitpy/port/driver.py        2016-03-31 23:45:54 UTC (rev 198930)
</span><span class="lines">@@ -350,7 +350,8 @@
</span><span class="cx">         self._driver_user_directory_suffix = os.path.basename(str(self._driver_tempdir))
</span><span class="cx">         user_cache_directory = self._port._path_to_user_cache_directory(self._driver_user_directory_suffix)
</span><span class="cx">         if user_cache_directory:
</span><del>-            self._driver_user_cache_directory = self._port._filesystem.maybe_make_directory(user_cache_directory)
</del><ins>+            self._port._filesystem.maybe_make_directory(user_cache_directory)
+            self._driver_user_cache_directory = user_cache_directory
</ins><span class="cx">         server_name = self._port.driver_name()
</span><span class="cx">         environment = self._port.setup_environ_for_server(server_name)
</span><span class="cx">         environment = self._setup_environ_for_driver(environment)
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpyportmacpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/port/mac.py (198929 => 198930)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/port/mac.py        2016-03-31 23:33:56 UTC (rev 198929)
+++ trunk/Tools/Scripts/webkitpy/port/mac.py        2016-03-31 23:45:54 UTC (rev 198930)
</span><span class="lines">@@ -118,12 +118,19 @@
</span><span class="cx">         self._filesystem.rmtree(os.path.expanduser('~/Library/WebKit/' + self.driver_name()))
</span><span class="cx"> 
</span><span class="cx">     def _path_to_user_cache_directory(self, suffix=None):
</span><del>-        DIRHELPER_USER_DIR_SUFFIX = &quot;DIRHELPER_USER_DIR_SUFFIX&quot;
</del><ins>+        DIRHELPER_USER_DIR_SUFFIX = 'DIRHELPER_USER_DIR_SUFFIX'
+        CS_DARWIN_USER_CACHE_DIR = 65538
+
+        # The environment variable DIRHELPER_USER_DIR_SUFFIX is only honored on systems with
+        # System Integrity Protection disabled or with an Apple-Internal OS. To make this code
+        # work for all system configurations we compute the path with respect to the suffix
+        # by hand and temporarily unset the environment variable DIRHELPER_USER_DIR_SUFFIX (if set)
+        # to avoid it influencing confstr() on systems that honor DIRHELPER_USER_DIR_SUFFIX.
</ins><span class="cx">         saved_suffix = None
</span><del>-        if suffix is not None:
-            saved_suffix = os.environ.get(DIRHELPER_USER_DIR_SUFFIX)
-            os.environ[DIRHELPER_USER_DIR_SUFFIX] = suffix
-        result = os.confstr(65538)  # _CS_DARWIN_USER_CACHE_DIR
</del><ins>+        if DIRHELPER_USER_DIR_SUFFIX in os.environ:
+            saved_suffix = os.environ[DIRHELPER_USER_DIR_SUFFIX]
+            del os.environ[DIRHELPER_USER_DIR_SUFFIX]
+        result = os.path.join(os.confstr(CS_DARWIN_USER_CACHE_DIR), suffix or '')
</ins><span class="cx">         if saved_suffix is not None:
</span><span class="cx">             os.environ[DIRHELPER_USER_DIR_SUFFIX] = saved_suffix
</span><span class="cx">         return result
</span></span></pre>
</div>
</div>

</body>
</html>