зеркало из https://github.com/mozilla/pjs.git
Bug 608791 - onBeforeLinkTraversal should compare host strings instead of top level domains. r=gavin, a=blocking
This commit is contained in:
Родитель
8c245f81dc
Коммит
e576bd7893
|
@ -3995,18 +3995,29 @@ var XULBrowserWindow = {
|
||||||
if (originalTarget != "" || !isAppTab)
|
if (originalTarget != "" || !isAppTab)
|
||||||
return originalTarget;
|
return originalTarget;
|
||||||
|
|
||||||
let docURI = linkNode.ownerDocument.documentURIObject;
|
// External links from within app tabs should always open in new tabs
|
||||||
|
// instead of replacing the app tab's page (Bug 575561)
|
||||||
|
let linkHost;
|
||||||
|
let docHost;
|
||||||
try {
|
try {
|
||||||
let docURIDomain = Services.eTLD.getBaseDomain(docURI, 0);
|
linkHost = linkURI.host;
|
||||||
let linkURIDomain = Services.eTLD.getBaseDomain(linkURI, 0);
|
docHost = linkNode.ownerDocument.documentURIObject.host;
|
||||||
// External links from within app tabs should always open in new tabs
|
|
||||||
// instead of replacing the app tab's page (Bug 575561)
|
|
||||||
if (docURIDomain != linkURIDomain)
|
|
||||||
return "_blank";
|
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
// If getBaseDomain fails, we return originalTarget below.
|
// nsIURI.host can throw for non-nsStandardURL nsIURIs.
|
||||||
|
// If we fail to get either host, just return originalTarget.
|
||||||
|
return originalTarget;
|
||||||
}
|
}
|
||||||
return originalTarget;
|
|
||||||
|
if (docHost == linkHost)
|
||||||
|
return originalTarget;
|
||||||
|
|
||||||
|
// Special case: ignore "www" prefix if it is part of host string
|
||||||
|
let [longHost, shortHost] =
|
||||||
|
linkHost.length > docHost.length ? [linkHost, docHost] : [docHost, linkHost];
|
||||||
|
if (longHost == "www." + shortHost)
|
||||||
|
return originalTarget;
|
||||||
|
|
||||||
|
return "_blank";
|
||||||
},
|
},
|
||||||
|
|
||||||
onLinkIconAvailable: function (aIconURL) {
|
onLinkIconAvailable: function (aIconURL) {
|
||||||
|
|
|
@ -11,6 +11,9 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=575561
|
||||||
<a href="http://test1.example.com/browser/browser/base/content/test/dummy_page.html">same domain (different subdomain)</a>
|
<a href="http://test1.example.com/browser/browser/base/content/test/dummy_page.html">same domain (different subdomain)</a>
|
||||||
<a href="http://example.org/browser/browser/base/content/test/dummy_page.html">different domain</a>
|
<a href="http://example.org/browser/browser/base/content/test/dummy_page.html">different domain</a>
|
||||||
<a href="http://example.org/browser/browser/base/content/test/dummy_page.html" target="foo">different domain (with target)</a>
|
<a href="http://example.org/browser/browser/base/content/test/dummy_page.html" target="foo">different domain (with target)</a>
|
||||||
|
<a href="http://www.example.com/browser/browser/base/content/test/dummy_page.html">same domain (www prefix)</a>
|
||||||
|
<a href="data:text/html,<!DOCTYPE html><html><body>Another Page</body></html>">data: URI</a>
|
||||||
|
<a href="about:mozilla">about: URI</a>
|
||||||
<iframe src="app_subframe_bug575561.html"></iframe>
|
<iframe src="app_subframe_bug575561.html"></iframe>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -4,9 +4,9 @@ function test() {
|
||||||
// Pinned: Link to the same domain should not open a new tab
|
// Pinned: Link to the same domain should not open a new tab
|
||||||
// Tests link to http://example.com/browser/browser/base/content/test/dummy_page.html
|
// Tests link to http://example.com/browser/browser/base/content/test/dummy_page.html
|
||||||
testLink(0, true, false, function() {
|
testLink(0, true, false, function() {
|
||||||
// Pinned: Link to the same domain should not open a new tab
|
// Pinned: Link to a different subdomain should open a new tab
|
||||||
// Tests link to http://test1.example.com/browser/browser/base/content/test/dummy_page.html
|
// Tests link to http://test1.example.com/browser/browser/base/content/test/dummy_page.html
|
||||||
testLink(1, true, false, function() {
|
testLink(1, true, true, function() {
|
||||||
// Pinned: Link to a different domain should open a new tab
|
// Pinned: Link to a different domain should open a new tab
|
||||||
// Tests link to http://example.org/browser/browser/base/content/test/dummy_page.html
|
// Tests link to http://example.org/browser/browser/base/content/test/dummy_page.html
|
||||||
testLink(2, true, true, function() {
|
testLink(2, true, true, function() {
|
||||||
|
@ -18,7 +18,19 @@ function test() {
|
||||||
testLink(3, true, true, function() {
|
testLink(3, true, true, function() {
|
||||||
// Pinned: Link in a subframe should not open a new tab
|
// Pinned: Link in a subframe should not open a new tab
|
||||||
// Tests link to http://example.org/browser/browser/base/content/test/dummy_page.html in subframe
|
// Tests link to http://example.org/browser/browser/base/content/test/dummy_page.html in subframe
|
||||||
testLink(0, true, false, finish, true);
|
testLink(0, true, false, function() {
|
||||||
|
// Pinned: Link to the same domain (with www prefix) should not open a new tab
|
||||||
|
// Tests link to http://www.example.com/browser/browser/base/content/test/dummy_page.html
|
||||||
|
testLink(4, true, false, function() {
|
||||||
|
// Pinned: Link to a data: URI should not open a new tab
|
||||||
|
// Tests link to data:text/html,<!DOCTYPE html><html><body>Another Page</body></html>
|
||||||
|
testLink(5, true, false, function() {
|
||||||
|
// Pinned: Link to an about: URI should not open a new tab
|
||||||
|
// Tests link to about:mozilla
|
||||||
|
testLink(6, true, false, finish);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -100,6 +100,7 @@ http://sub1.test2.example.org:8000 privileged
|
||||||
http://sub2.test1.example.org:8000 privileged
|
http://sub2.test1.example.org:8000 privileged
|
||||||
http://sub2.test2.example.org:8000 privileged
|
http://sub2.test2.example.org:8000 privileged
|
||||||
http://example.com:80 privileged
|
http://example.com:80 privileged
|
||||||
|
http://www.example.com:80 privileged
|
||||||
http://test1.example.com:80 privileged
|
http://test1.example.com:80 privileged
|
||||||
http://test2.example.com:80 privileged
|
http://test2.example.com:80 privileged
|
||||||
http://sub1.test1.example.com:80 privileged
|
http://sub1.test1.example.com:80 privileged
|
||||||
|
|
Загрузка…
Ссылка в новой задаче