<!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>[169710] 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/169710">169710</a></dd>
<dt>Author</dt> <dd>dbates@webkit.org</dd>
<dt>Date</dt> <dd>2014-06-09 13:39:17 -0700 (Mon, 09 Jun 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS] Amazon app: Cannot interact with product page after tapping on product image
https://bugs.webkit.org/show_bug.cgi?id=133559
&lt;rdar://problem/16332749&gt;

Reviewed by Oliver Hunt.

Source/WebCore:
As a workaround for issues in the Amazon app, mark the attribute navigator.geolocation as
replaceable so that we don't throw a JavaScript type error when assigning to an instance
attribute that shadows it. At the time of writing the first such assignment to is ignored.
See &lt;https://bugs.webkit.org/show_bug.cgi?id=133648&gt; for more details.

When loading a product page in the Amazon app it overwrites the readonly property geolocation
on an object that extends the Navigator object. In strict mode, this operation is not honored
and is treated as a JavaScript type error, which stops JavaScript execution. Therefore, the
product page does not behave as intended. In contrast, this operation would not be honored in
non-strict mode and would not be treated as a JavaScript type error.

Test: js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw.html

* Modules/geolocation/NavigatorGeolocation.idl:

LayoutTests:
Add a test to ensure that assigning to an instance attribute in strict mode that shadows
navigator.geolocation doesn't cause a JavaScript type error.

* js/dom/script-tests/shadow-navigator-geolocation-in-strict-mode-does-not-throw.js: Added.
(createObjectWithPrototype.F):
(createObjectWithPrototype):
* js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw-expected.txt: Added.
* js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesgeolocationNavigatorGeolocationidl">trunk/Source/WebCore/Modules/geolocation/NavigatorGeolocation.idl</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsjsdomscripttestsshadownavigatorgeolocationinstrictmodedoesnotthrowjs">trunk/LayoutTests/js/dom/script-tests/shadow-navigator-geolocation-in-strict-mode-does-not-throw.js</a></li>
<li><a href="#trunkLayoutTestsjsdomshadownavigatorgeolocationinstrictmodedoesnotthrowexpectedtxt">trunk/LayoutTests/js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomshadownavigatorgeolocationinstrictmodedoesnotthrowhtml">trunk/LayoutTests/js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (169709 => 169710)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-06-09 20:18:09 UTC (rev 169709)
+++ trunk/LayoutTests/ChangeLog        2014-06-09 20:39:17 UTC (rev 169710)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2014-06-09  Daniel Bates  &lt;dabates@apple.com&gt;
+
+        [iOS] Amazon app: Cannot interact with product page after tapping on product image
+        https://bugs.webkit.org/show_bug.cgi?id=133559
+        &lt;rdar://problem/16332749&gt;
+
+        Reviewed by Oliver Hunt.
+
+        Add a test to ensure that assigning to an instance attribute in strict mode that shadows
+        navigator.geolocation doesn't cause a JavaScript type error.
+
+        * js/dom/script-tests/shadow-navigator-geolocation-in-strict-mode-does-not-throw.js: Added.
+        (createObjectWithPrototype.F):
+        (createObjectWithPrototype):
+        * js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw-expected.txt: Added.
+        * js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw.html: Added.
+
</ins><span class="cx"> 2014-06-05  Mark Hahnenberg  &lt;mhahnenberg@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Eagerly reify DOM prototype attributes
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomscripttestsshadownavigatorgeolocationinstrictmodedoesnotthrowjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/dom/script-tests/shadow-navigator-geolocation-in-strict-mode-does-not-throw.js (0 => 169710)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/script-tests/shadow-navigator-geolocation-in-strict-mode-does-not-throw.js                                (rev 0)
+++ trunk/LayoutTests/js/dom/script-tests/shadow-navigator-geolocation-in-strict-mode-does-not-throw.js        2014-06-09 20:39:17 UTC (rev 169710)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+description(&quot;Tests that we don't throw a type error in strict mode when assigning to an instance attribute that shadows navigator.geolocation. See &lt;a href='https://bugs.webkit.org/show_bug.cgi?id=133559'&gt;https://bugs.webkit.org/show_bug.cgi?id=133559&lt;/a&gt;&quot;);
+
+function createObjectWithPrototype(prototype)
+{
+    function F() {};
+    F.prototype = prototype;
+    return new F();
+}
+
+shouldNotThrow(&quot;'use strict'; var myNavigator = createObjectWithPrototype(window.navigator); myNavigator.geolocation = 1&quot;);
+
+window.jsTestIsAsync = false;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsdomshadownavigatorgeolocationinstrictmodedoesnotthrowexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw-expected.txt (0 => 169710)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw-expected.txt        2014-06-09 20:39:17 UTC (rev 169710)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+CONSOLE MESSAGE: Deprecated attempt to set property 'geolocation' on a non-Navigator object.
+Tests that we don't throw a type error in strict mode when assigning to an instance attribute that shadows navigator.geolocation. See https://bugs.webkit.org/show_bug.cgi?id=133559
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS 'use strict'; var myNavigator = createObjectWithPrototype(window.navigator); myNavigator.geolocation = 1 did not throw exception.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsdomshadownavigatorgeolocationinstrictmodedoesnotthrowhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw.html (0 => 169710)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw.html                                (rev 0)
+++ trunk/LayoutTests/js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw.html        2014-06-09 20:39:17 UTC (rev 169710)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;script-tests/shadow-navigator-geolocation-in-strict-mode-does-not-throw.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (169709 => 169710)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-06-09 20:18:09 UTC (rev 169709)
+++ trunk/Source/WebCore/ChangeLog        2014-06-09 20:39:17 UTC (rev 169710)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2014-06-09  Daniel Bates  &lt;dabates@apple.com&gt;
+
+        [iOS] Amazon app: Cannot interact with product page after tapping on product image
+        https://bugs.webkit.org/show_bug.cgi?id=133559
+        &lt;rdar://problem/16332749&gt;
+
+        Reviewed by Oliver Hunt.
+
+        As a workaround for issues in the Amazon app, mark the attribute navigator.geolocation as
+        replaceable so that we don't throw a JavaScript type error when assigning to an instance
+        attribute that shadows it. At the time of writing the first such assignment to is ignored.
+        See &lt;https://bugs.webkit.org/show_bug.cgi?id=133648&gt; for more details.
+
+        When loading a product page in the Amazon app it overwrites the readonly property geolocation
+        on an object that extends the Navigator object. In strict mode, this operation is not honored
+        and is treated as a JavaScript type error, which stops JavaScript execution. Therefore, the
+        product page does not behave as intended. In contrast, this operation would not be honored in
+        non-strict mode and would not be treated as a JavaScript type error.
+
+        Test: js/dom/shadow-navigator-geolocation-in-strict-mode-does-not-throw.html
+
+        * Modules/geolocation/NavigatorGeolocation.idl:
+
</ins><span class="cx"> 2014-06-09  Andreas Kling  &lt;akling@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         HTML*ListElement wrappers have custom getOwnPropertySlot()s for no good reason.
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesgeolocationNavigatorGeolocationidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/geolocation/NavigatorGeolocation.idl (169709 => 169710)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/geolocation/NavigatorGeolocation.idl        2014-06-09 20:18:09 UTC (rev 169709)
+++ trunk/Source/WebCore/Modules/geolocation/NavigatorGeolocation.idl        2014-06-09 20:39:17 UTC (rev 169710)
</span><span class="lines">@@ -20,6 +20,8 @@
</span><span class="cx"> [
</span><span class="cx">     Conditional=GEOLOCATION,
</span><span class="cx"> ] partial interface Navigator {
</span><del>-    readonly attribute Geolocation geolocation;
</del><ins>+    // FIXME: We should consider making this attribute replaceable only to the
+    // Amazon app on iOS.
+    [Replaceable] readonly attribute Geolocation geolocation;
</ins><span class="cx"> };
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>