Skip to content

Commit

Permalink
[e] (0) Try to clarify browsing context rules
Browse files Browse the repository at this point in the history
Fixing https://www.w3.org/Bugs/Public/show_bug.cgi?id=20939
Affected topics: HTML, Security, Video and Audio

git-svn-id: http://svn.whatwg.org/webapps@7828 340c8d12-0b0e-0410-8428-c7bf67bfef74
  • Loading branch information
Hixie committed Apr 13, 2013
1 parent 5aa138c commit 0fb64b5
Show file tree
Hide file tree
Showing 3 changed files with 234 additions and 86 deletions.
133 changes: 93 additions & 40 deletions complete.html
Expand Up @@ -248,7 +248,7 @@

<header class=head id=head><p><a class=logo href=http://www.whatwg.org/><img alt=WHATWG height=101 src=/images/logo width=101></a></p>
<hgroup><h1 class=allcaps>HTML</h1>
<h2 class="no-num no-toc">Living Standard &mdash; Last Updated 12 April 2013</h2>
<h2 class="no-num no-toc">Living Standard &mdash; Last Updated 13 April 2013</h2>
</hgroup><dl><dt><strong>Web developer edition:</strong></dt>
<dd><strong><a href=http://developers.whatwg.org/>http://developers.whatwg.org/</a></strong></dd>
<dt>Multiple-page version:</dt>
Expand Down Expand Up @@ -27138,6 +27138,7 @@ <h5 id=mime-types><span class=secno>4.8.10.3 </span>MIME types</h5>

</dl><div class=impl>

<!--CLEANUP-->
<p>The <dfn id=dom-navigator-canplaytype title=dom-navigator-canPlayType><code>canPlayType(<var title="">type</var>)</code></dfn> method must return <dfn id=dom-canplaytypeenum-nil title=dom-CanPlayTypeEnum-nil>the empty string</dfn> if <var title="">type</var>
is <a href=#a-type-that-the-user-agent-knows-it-cannot-render>a type that the user agent knows it cannot render</a> or is the type
"<code>application/octet-stream</code>"; it must return "<dfn id=dom-canplaytypeenum-probably title=dom-CanPlayTypeEnum-probably><code>probably</code></dfn>" if the
Expand Down Expand Up @@ -64137,7 +64138,10 @@ <h4 id=security-nav><span class=secno>6.1.4 </span>Security</h4>
<a href=#active-document>active document</a> has the <a href=#same-origin title="same origin">same</a> <a href=#origin>origin</a> as
the <a href=#active-document>active document</a> of <var title="">A</var> (possibly in fact being <var title="">A</var> itself).</li>

</ul><hr><p>An element has a <dfn id=browsing-context-scope-origin>browsing context scope origin</dfn> if its <code><a href=#document>Document</a></code>'s
</ul><p class=note>Sandboxing (in particular the <a href=#sandboxed-navigation-browsing-context-flag>sandboxed navigation browsing context
flag</a>) can further restrict the above in certain cases.</p>

<hr><p>An element has a <dfn id=browsing-context-scope-origin>browsing context scope origin</dfn> if its <code><a href=#document>Document</a></code>'s
<a href=#browsing-context>browsing context</a> is a <a href=#top-level-browsing-context>top-level browsing context</a> or if all of its
<code><a href=#document>Document</a></code>'s <a href=#ancestor-browsing-context title="ancestor browsing context">ancestor browsing contexts</a>
all have <a href=#active-document title="active document">active documents</a> whose <a href=#origin>origin</a> are the
Expand Down Expand Up @@ -64241,10 +64245,10 @@ <h4 id=browsing-context-names><span class=secno>6.1.6 </span>Browsing context na
<tr><td><code title="">_blank</code>
<td>new
<td>new
<td>maybe new&dagger;
<td>maybe new&dagger;
<td>maybe new&dagger;
<td>maybe new&dagger;
<td>maybe new
<td>maybe new
<td>maybe new
<td>maybe new

<tr><td><code title="">_self</code>
<td>current
Expand Down Expand Up @@ -64334,7 +64338,41 @@ <h4 id=browsing-context-names><span class=secno>6.1.6 </span>Browsing context na
<td>none
<td>none

</table><p class=tablenote><small>&dagger; This case is only possible if the <code title=attr-iframe-sandbox><a href=#attr-iframe-sandbox>sandbox</a></code> attribute also allows scripts.</small></p>
<tr><td>other name that exists with common top
<td>specified
<td>specified
<td>none
<td>none
<td>none
<td>none

<tr><td>other name that exists, if <a href=#allowed-to-navigate>allowed to navigate</a> and <a href=#one-permitted-sandboxed-navigator>one permitted sandboxed navigator</a>
<td>specified
<td>specified
<td>specified
<td>specified
<td>specified
<td>specified

<tr><td>other name that exists, if <a href=#allowed-to-navigate>allowed to navigate</a> but not <a href=#one-permitted-sandboxed-navigator>one permitted sandboxed navigator</a>
<td>specified
<td>specified
<td>none
<td>none
<td>none
<td>none

<tr><td>other name that exists, not <a href=#allowed-to-navigate>allowed to navigate</a>
<td>new
<td>new
<td>maybe new
<td>maybe new
<td>maybe new
<td>maybe new

</table><p class=tablenote><small>Most of the restrictions on sandboxed browsing contexts are applied by
other algorithms, e.g. the <a href=#navigate title=navigate>navigation</a> algorithm, not <a href=#the-rules-for-choosing-a-browsing-context-given-a-browsing-context-name>the rules
for choosing a browsing context given a browsing context name</a> given below.</small></p>

<div class=impl>

Expand Down Expand Up @@ -77876,7 +77914,7 @@ <h5 id=shared-state-using-a-shared-worker><span class=secno>9.1.2.4 </span>Share
// CONFIGURATION
function configure(event) {
if (event.data.substr(0, 4) != 'cfg ') return;
var name = event.data.substr(4).split(' ', 1);
var name = event.data.substr(4).split(' ', 1)[0];
// update display to mention our name is name
document.getElementsByTagName('h1')[0].textContent += ' ' + name;
// no longer need this listener
Expand All @@ -77898,7 +77936,7 @@ <h5 id=shared-state-using-a-shared-worker><span class=secno>9.1.2.4 </span>Share
context.fillStyle = 'green';
else
context.fillStyle = 'maroon';
fillRect(x * 50, y * 50, 50, 50);
context.fillRect(x * 50, y * 50, 50, 50);
}
}
}
Expand All @@ -77907,43 +77945,48 @@ <h5 id=shared-state-using-a-shared-worker><span class=secno>9.1.2.4 </span>Share
// PUBLIC CHAT
function updatePublicChat(event) {
if (event.data.substr(0, 4) != 'txt ') return;
var name = event.data.substr(4).split(' ', 1);
var message = event.data.substr(4 + length(name) + 1);
var name = event.data.substr(4).split(' ', 1)[0];
var message = event.data.substr(4 + name.length + 1);
// display "&lt;name&gt; message" in public chat
var dialog = document.getElementById('public');
var dt = document.createElement('dt');
dt.textContent = name;
dialog.appendChild(dt);
var dd = document.createElement('dd');
dd.textContent = message;
dialog.appendChild(dd);
var public = document.getElementById('public');
var p = document.createElement('p');
var n = document.createElement('button');
n.textContent = '&lt;' + name + '&gt; ';
n.onclick = function () { worker.port.postMessage('msg ' + name); };
p.appendChild(n);
var m = document.createElement('span');
m.textContent = message;
p.appendChild(m);
public.appendChild(p);
}
worker.port.addEventListener('message', updatePublicChat, false);

// PRIVATE CHAT
function startPrivateChat(event) {
if (event.data.substr(0, 4) != 'msg ') return;
var name = event.data.substr(4).split(' ', 1);
var name = event.data.substr(4).split(' ', 1)[0];
var port = event.ports[0];
// display a private chat UI
var ul = document.getElementById('private');
var li = document.createElement('li');
var h3 = document.createElement('h3');
h3.textContent = 'Private chat with ' + name;
li.appendChild(h3);
var dialog = document.createElement('dialog');
var div = document.createElement('div');
var addMessage = function(name, message) {
var dt = document.createElement('dt');
dt.textContent = name;
dialog.appendChild(dt);
var dd = document.createElement('dd');
dd.textContent = message;
dialog.appendChild(dd);
var p = document.createElement('p');
var n = document.createElement('strong');
n.textContent = '&lt;' + name + '&gt; ';
p.appendChild(n);
var t = document.createElement('span');
t.textContent = message;
p.appendChild(t);
div.appendChild(p);
};
port.onmessage = function (event) {
addMessage(name, event.data);
};
li.appendChild(dialog);
li.appendChild(div);
var form = document.createElement('form');
var p = document.createElement('p');
var input = document.createElement('input');
Expand All @@ -77961,6 +78004,7 @@ <h5 id=shared-state-using-a-shared-worker><span class=secno>9.1.2.4 </span>Share
};
form.appendChild(p);
li.appendChild(form);
ul.appendChild(li);
}
worker.port.addEventListener('message', startPrivateChat, false);

Expand All @@ -77980,7 +78024,7 @@ <h5 id=shared-state-using-a-shared-worker><span class=secno>9.1.2.4 </span>Share
&lt;button type=button onclick="worker.port.postMessage('set 1')"&gt;Set 1&lt;/button&gt;
&lt;/p&gt;
&lt;h2&gt;Public Chat&lt;/h2&gt;
&lt;dialog id="public"&gt;&lt;/dialog&gt;
&lt;div id="public"&gt;&lt;/div&gt;
&lt;form onsubmit="worker.port.postMessage('txt ' + message.value); message.value = ''; return false;"&gt;
&lt;p&gt;
&lt;input type="text" name="message" size="50"&gt;
Expand Down Expand Up @@ -78042,26 +78086,34 @@ <h5 id=shared-state-using-a-shared-worker><span class=secno>9.1.2.4 </span>Share
return y;
}

function sendMapData(callback) {
function wrap(val, min, max) {
if (val &lt; min)
return val + (max-min)+1;
if (val &gt; max)
return val - (max-min)-1;
return val;
}

function sendMapData(viewer) {
var data = '';
for (var y = viewer.y-1; y &lt;= viewer.y+1; y += 1) {
for (var x = viewer.x-1; x &lt;= viewer.x+1; x += 1) {
if (data != '')
data += ',';
data += map[y][x];
data += map[wrap(y, 0, map[0].length-1)][wrap(x, 0, map.length-1)];
}
}
callback('map ' + data);
viewer.port.postMessage('map ' + data);
}

var viewers = {};
onconnect = function (event) {
event.ports[0]._name = getNextName();
event.ports[0]._data = { port: event.port, x: 0, y: 0, };
viewers[event.ports[0]._name] = event.port._data;
var name = getNextName();
event.ports[0]._data = { port: event.ports[0], name: name, x: 0, y: 0, };
viewers[name] = event.ports[0]._data;
event.ports[0].postMessage('cfg ' + name);
event.ports[0].onmessage = getMessage;
sendMapData(event.ports[0].postMessage);
sendMapData(event.ports[0]._data);
};

function getMessage(event) {
Expand All @@ -78078,23 +78130,23 @@ <h5 id=shared-state-using-a-shared-worker><span class=secno>9.1.2.4 </span>Share
}
event.target._data.x = wrapX(event.target._data.x + dx);
event.target._data.y = wrapY(event.target._data.y + dy);
sendMapData(event.target.postMessage);
sendMapData(event.target._data);
break;
case 'set ':
var value = event.data.substr(4);
map[event.target._data.y][event.target._data.x] = value;
for (var viewer in viewers)
sendMapData(viewers[viewer].port.postMessage);
sendMapData(viewers[viewer]._data);
break;
case 'txt ':
var name = event.target._name;
var name = event.target._data.name;
var message = event.data.substr(4);
for (var viewer in viewers)
viewers[viewer].port.postMessage('txt ' + name + ' ' + message);
break;
case 'msg ':
var party1 = event._data;
var party2 = viewers[event.data.substr(4).split(' ', 1)];
var party1 = event.target._data;
var party2 = viewers[event.data.substr(4).split(' ', 1)[0]];
if (party2) {
var channel = new MessageChannel();
party1.port.postMessage('msg ' + party2.name, [channel.port1]);
Expand Down Expand Up @@ -101101,6 +101153,7 @@ <h2 class=no-num id=references>References</h2><!--REFS-->
Bj&ouml;rn H&ouml;hrmann,
Blake Frantz,
Bob Lund,
Bob Owen,
Boris Zbarsky,
Brad Fults,
Brad Neuberg,
Expand Down

0 comments on commit 0fb64b5

Please sign in to comment.