Bug 1147668 - Correctly reflect video and track RequestContext values; r=smaug

This commit is contained in:
Ehsan Akhgari 2015-06-15 16:45:27 -04:00
Родитель 3b2798f9f5
Коммит 2a127a2d67
7 изменённых файлов: 30 добавлений и 15 удалений

Просмотреть файл

@ -152,9 +152,15 @@ InternalRequest::MapContentPolicyTypeToRequestContext(nsContentPolicyType aConte
case nsIContentPolicy::TYPE_FONT:
context = RequestContext::Font;
break;
case nsIContentPolicy::TYPE_MEDIA:
case nsIContentPolicy::TYPE_INTERNAL_AUDIO:
context = RequestContext::Audio;
break;
case nsIContentPolicy::TYPE_INTERNAL_VIDEO:
context = RequestContext::Video;
break;
case nsIContentPolicy::TYPE_INTERNAL_TRACK:
context = RequestContext::Track;
break;
case nsIContentPolicy::TYPE_WEBSOCKET:
context = RequestContext::Internal;
break;

Просмотреть файл

@ -30,7 +30,7 @@ namespace dom {
*
* RequestContext | nsContentPolicyType
* ------------------+--------------------
* audio | TYPE_MEDIA
* audio | TYPE_INTERNAL_AUDIO
* beacon | TYPE_BEACON
* cspreport | TYPE_CSP_REPORT
* download |
@ -57,15 +57,14 @@ namespace dom {
* sharedworker |
* subresource | Not supported by Gecko
* style | TYPE_STYLESHEET
* track | TYPE_MEDIA
* video | TYPE_MEDIA
* track | TYPE_INTERNAL_TRACK
* video | TYPE_INTERNAL_VIDEO
* worker |
* xmlhttprequest | TYPE_XMLHTTPREQUEST
* xslt | TYPE_XSLT
*
* TODO: Figure out if TYPE_REFRESH maps to anything useful
* TODO: Figure out if TYPE_DTD maps to anything useful
* TODO: Split TYPE_MEDIA into TYPE_AUDIO, TYPE_VIDEO and TYPE_TRACK
* TODO: Split TYPE_XMLHTTPREQUEST and TYPE_DATAREQUEST for EventSource
* TODO: Figure out if TYPE_WEBSOCKET maps to anything useful
* TODO: Differentiate between frame and iframe

Просмотреть файл

@ -1167,8 +1167,12 @@ nsresult HTMLMediaElement::LoadResource()
return NS_ERROR_FAILURE;
}
MOZ_ASSERT(IsAnyOfHTMLElements(nsGkAtoms::audio, nsGkAtoms::video));
nsContentPolicyType contentPolicyType = IsHTMLElement(nsGkAtoms::audio) ?
nsIContentPolicy::TYPE_INTERNAL_AUDIO : nsIContentPolicy::TYPE_INTERNAL_VIDEO;
int16_t shouldLoad = nsIContentPolicy::ACCEPT;
nsresult rv = NS_CheckContentLoadPolicy(nsIContentPolicy::TYPE_MEDIA,
nsresult rv = NS_CheckContentLoadPolicy(contentPolicyType,
mLoadingSrc,
NodePrincipal(),
static_cast<Element*>(this),
@ -1246,7 +1250,7 @@ nsresult HTMLMediaElement::LoadResource()
mLoadingSrc,
static_cast<Element*>(this),
securityFlags,
nsIContentPolicy::TYPE_MEDIA,
contentPolicyType,
loadGroup,
nullptr, // aCallbacks
nsICachingChannel::LOAD_BYPASS_LOCAL_CACHE_IF_BUSY |

Просмотреть файл

@ -209,7 +209,7 @@ HTMLTrackElement::LoadResource()
NS_ENSURE_TRUE_VOID(NS_SUCCEEDED(rv));
int16_t shouldLoad = nsIContentPolicy::ACCEPT;
rv = NS_CheckContentLoadPolicy(nsIContentPolicy::TYPE_MEDIA,
rv = NS_CheckContentLoadPolicy(nsIContentPolicy::TYPE_INTERNAL_TRACK,
uri,
NodePrincipal(),
static_cast<Element*>(this),
@ -236,7 +236,7 @@ HTMLTrackElement::LoadResource()
uri,
static_cast<Element*>(this),
nsILoadInfo::SEC_NORMAL,
nsIContentPolicy::TYPE_MEDIA,
nsIContentPolicy::TYPE_INTERNAL_TRACK,
loadGroup);
NS_ENSURE_TRUE_VOID(NS_SUCCEEDED(rv));

Просмотреть файл

@ -891,11 +891,15 @@ ChannelMediaResource::RecreateChannel()
securityFlags = nsILoadInfo::SEC_FORCE_INHERIT_PRINCIPAL;
}
MOZ_ASSERT(element->IsAnyOfHTMLElements(nsGkAtoms::audio, nsGkAtoms::video));
nsContentPolicyType contentPolicyType = element->IsHTMLElement(nsGkAtoms::audio) ?
nsIContentPolicy::TYPE_INTERNAL_AUDIO : nsIContentPolicy::TYPE_INTERNAL_VIDEO;
nsresult rv = NS_NewChannel(getter_AddRefs(mChannel),
mURI,
element,
securityFlags,
nsIContentPolicy::TYPE_MEDIA,
contentPolicyType,
loadGroup,
nullptr, // aCallbacks
loadFlags);
@ -1418,13 +1422,17 @@ already_AddRefed<MediaResource> FileMediaResource::CloneData(MediaDecoder* aDeco
securityFlags = nsILoadInfo::SEC_FORCE_INHERIT_PRINCIPAL;
}
MOZ_ASSERT(element->IsAnyOfHTMLElements(nsGkAtoms::audio, nsGkAtoms::video));
nsContentPolicyType contentPolicyType = element->IsHTMLElement(nsGkAtoms::audio) ?
nsIContentPolicy::TYPE_INTERNAL_AUDIO : nsIContentPolicy::TYPE_INTERNAL_VIDEO;
nsCOMPtr<nsIChannel> channel;
nsresult rv =
NS_NewChannel(getter_AddRefs(channel),
mURI,
element,
securityFlags,
nsIContentPolicy::TYPE_MEDIA,
contentPolicyType,
loadGroup);
if (NS_FAILED(rv))

Просмотреть файл

@ -24,8 +24,7 @@ self.addEventListener("fetch", function(event) {
event.respondWith(fetch("realaudio.ogg"));
}
} else if (event.request.url.indexOf("video.ogg") >= 0) {
// FIXME: Bug 1147668: This should be "video".
if (event.request.context == "audio") {
if (event.request.context == "video") {
event.respondWith(fetch("realaudio.ogg"));
}
} else if (event.request.url.indexOf("beacon.sjs") >= 0) {

Просмотреть файл

@ -303,8 +303,7 @@
document.documentElement.appendChild(video);
navigator.serviceWorker.addEventListener("message", function onMessage(e) {
if (e.data.data == "track") {
// FIXME: Bug 1147668: This should be "track".
is(e.data.context, "audio", "Expected the audio context on a request coming from a track");
is(e.data.context, "track", "Expected the track context on a request coming from a track");
navigator.serviceWorker.removeEventListener("message", onMessage);
resolve();
}