mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-02 12:07:52 +00:00
Bug 1318727 - BroadcastChannel should support data URL, r=smaug
This commit is contained in:
parent
d5e468da6c
commit
a9a05a834d
@ -58,22 +58,35 @@ nsNullPrincipal::CreateWithInheritedAttributes(nsIDocShell* aDocShell)
|
||||
}
|
||||
|
||||
/* static */ already_AddRefed<nsNullPrincipal>
|
||||
nsNullPrincipal::Create(const PrincipalOriginAttributes& aOriginAttributes)
|
||||
nsNullPrincipal::Create(const PrincipalOriginAttributes& aOriginAttributes,
|
||||
nsIURI* aURI)
|
||||
{
|
||||
RefPtr<nsNullPrincipal> nullPrin = new nsNullPrincipal();
|
||||
nsresult rv = nullPrin->Init(aOriginAttributes);
|
||||
nsresult rv = nullPrin->Init(aOriginAttributes, aURI);
|
||||
MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv));
|
||||
|
||||
return nullPrin.forget();
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsNullPrincipal::Init(const PrincipalOriginAttributes& aOriginAttributes)
|
||||
nsNullPrincipal::Init(const PrincipalOriginAttributes& aOriginAttributes,
|
||||
nsIURI* aURI)
|
||||
{
|
||||
mOriginAttributes = aOriginAttributes;
|
||||
|
||||
mURI = nsNullPrincipalURI::Create();
|
||||
NS_ENSURE_TRUE(mURI, NS_ERROR_NOT_AVAILABLE);
|
||||
if (aURI) {
|
||||
nsAutoCString scheme;
|
||||
nsresult rv = aURI->GetScheme(scheme);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
NS_ENSURE_TRUE(scheme.EqualsLiteral(NS_NULLPRINCIPAL_SCHEME),
|
||||
NS_ERROR_NOT_AVAILABLE);
|
||||
|
||||
mURI = aURI;
|
||||
} else {
|
||||
mURI = nsNullPrincipalURI::Create();
|
||||
NS_ENSURE_TRUE(mURI, NS_ERROR_NOT_AVAILABLE);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -53,9 +53,11 @@ public:
|
||||
static already_AddRefed<nsNullPrincipal> CreateWithInheritedAttributes(nsIDocShell* aDocShell);
|
||||
|
||||
static already_AddRefed<nsNullPrincipal>
|
||||
Create(const mozilla::PrincipalOriginAttributes& aOriginAttributes = mozilla::PrincipalOriginAttributes());
|
||||
Create(const mozilla::PrincipalOriginAttributes& aOriginAttributes = mozilla::PrincipalOriginAttributes(),
|
||||
nsIURI* aURI = nullptr);
|
||||
|
||||
nsresult Init(const mozilla::PrincipalOriginAttributes& aOriginAttributes = mozilla::PrincipalOriginAttributes());
|
||||
nsresult Init(const mozilla::PrincipalOriginAttributes& aOriginAttributes = mozilla::PrincipalOriginAttributes(),
|
||||
nsIURI* aURI = nullptr);
|
||||
|
||||
virtual nsresult GetScriptLocation(nsACString &aStr) override;
|
||||
|
||||
|
@ -93,11 +93,6 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(principal->GetIsNullPrincipal())) {
|
||||
mRv.Throw(NS_ERROR_FAILURE);
|
||||
return true;
|
||||
}
|
||||
|
||||
mRv = PrincipalToPrincipalInfo(principal, &mPrincipalInfo);
|
||||
if (NS_WARN_IF(mRv.Failed())) {
|
||||
return true;
|
||||
@ -323,11 +318,6 @@ BroadcastChannel::Constructor(const GlobalObject& aGlobal,
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(principal->GetIsNullPrincipal())) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
aRv = principal->GetOrigin(origin);
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
return nullptr;
|
||||
|
@ -22,3 +22,4 @@ support-files =
|
||||
[test_invalidState.html]
|
||||
[test_ordering.html]
|
||||
[test_dataCloning.html]
|
||||
[test_dataURL.html]
|
||||
|
35
dom/broadcastchannel/tests/test_dataURL.html
Normal file
35
dom/broadcastchannel/tests/test_dataURL.html
Normal file
@ -0,0 +1,35 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Test for BroadcastChannel in data: URL</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="dataURL">
|
||||
var a = new BroadcastChannel('a');
|
||||
var b = new BroadcastChannel('a');
|
||||
a.onmessage = function(e) { parent.postMessage(e.data, "*"); };
|
||||
b.postMessage(42);
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
onmessage= function(e) {
|
||||
ok(e.data, "42", "BroadcastChannel works with data URLs");
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
var url = "data:text/html,<script>" + document.getElementById("dataURL").textContent + "</" + "script>";
|
||||
|
||||
var ifr = document.createElement('iframe');
|
||||
document.body.appendChild(ifr);
|
||||
|
||||
ifr.setAttribute('sandbox', 'allow-scripts');
|
||||
ifr.src = url;
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -521,11 +521,6 @@ public:
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal = PrincipalInfoToPrincipal(mPrincipalInfo);
|
||||
|
||||
if (principal->GetIsNullPrincipal()) {
|
||||
mContentParent->KillHard("BroadcastChannel killed: no null principal.");
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsAutoCString origin;
|
||||
nsresult rv = principal->GetOrigin(origin);
|
||||
if (NS_FAILED(rv)) {
|
||||
@ -638,7 +633,6 @@ BackgroundParentImpl::RecvPBroadcastChannelConstructor(
|
||||
|
||||
// If the ContentParent is null we are dealing with a same-process actor.
|
||||
if (!parent) {
|
||||
MOZ_ASSERT(aPrincipalInfo.type() != PrincipalInfo::TNullPrincipalInfo);
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
|
@ -62,8 +62,14 @@ PrincipalInfoToPrincipal(const PrincipalInfo& aPrincipalInfo,
|
||||
case PrincipalInfo::TNullPrincipalInfo: {
|
||||
const NullPrincipalInfo& info =
|
||||
aPrincipalInfo.get_NullPrincipalInfo();
|
||||
principal = nsNullPrincipal::Create(info.attrs());
|
||||
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
rv = NS_NewURI(getter_AddRefs(uri), info.spec());
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
principal = nsNullPrincipal::Create(info.attrs(), uri);
|
||||
return principal.forget();
|
||||
}
|
||||
|
||||
@ -131,7 +137,25 @@ PrincipalToPrincipalInfo(nsIPrincipal* aPrincipal,
|
||||
MOZ_ASSERT(aPrincipalInfo);
|
||||
|
||||
if (aPrincipal->GetIsNullPrincipal()) {
|
||||
*aPrincipalInfo = NullPrincipalInfo(BasePrincipal::Cast(aPrincipal)->OriginAttributesRef());
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
nsresult rv = aPrincipal->GetURI(getter_AddRefs(uri));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(!uri)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsAutoCString spec;
|
||||
rv = uri->GetSpec(spec);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
*aPrincipalInfo =
|
||||
NullPrincipalInfo(BasePrincipal::Cast(aPrincipal)->OriginAttributesRef(),
|
||||
spec);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -191,7 +215,7 @@ PrincipalToPrincipalInfo(nsIPrincipal* aPrincipal,
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsCString spec;
|
||||
nsAutoCString spec;
|
||||
rv = uri->GetSpec(spec);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
|
@ -20,6 +20,7 @@ struct SystemPrincipalInfo
|
||||
struct NullPrincipalInfo
|
||||
{
|
||||
PrincipalOriginAttributes attrs;
|
||||
nsCString spec;
|
||||
};
|
||||
|
||||
struct ExpandedPrincipalInfo
|
||||
|
Loading…
x
Reference in New Issue
Block a user