From 1c05a949240f296dc43f498888d7b37b6c5d3baf Mon Sep 17 00:00:00 2001 From: Christoph Kerschbaumer Date: Thu, 6 Aug 2015 11:17:24 -0700 Subject: [PATCH] Bug 1191107 - Split TYPE_XMLHTTPREQUEST and TYPE_DATAREQUEST for EventSource (r=sicking,ehsan) --- dom/base/EventSource.cpp | 4 +- dom/base/nsContentPolicyUtils.h | 66 ++++++++++--------- dom/base/nsContentUtils.cpp | 4 ++ dom/base/nsIContentPolicy.idl | 2 +- dom/base/nsIContentPolicyBase.idl | 16 ++++- dom/base/nsXMLHttpRequest.cpp | 6 +- dom/cache/DBSchema.cpp | 4 +- dom/fetch/InternalRequest.cpp | 5 +- dom/fetch/InternalRequest.h | 4 +- dom/xml/XMLDocument.cpp | 4 +- extensions/permissions/nsContentBlocker.cpp | 4 +- .../components/places/BookmarkJSONUtils.jsm | 2 +- .../components/places/nsLivemarkService.js | 2 +- .../tests/xpcshell/test_serialize_file.js | 2 +- toolkit/mozapps/update/nsUpdateService.js | 2 +- 15 files changed, 77 insertions(+), 50 deletions(-) diff --git a/dom/base/EventSource.cpp b/dom/base/EventSource.cpp index 098ac27f35e2..4b42e474f0dd 100644 --- a/dom/base/EventSource.cpp +++ b/dom/base/EventSource.cpp @@ -781,7 +781,7 @@ EventSource::InitChannelAndRequestEventSource() mSrc, doc, securityFlags, - nsIContentPolicy::TYPE_DATAREQUEST, + nsIContentPolicy::TYPE_INTERNAL_EVENTSOURCE, mLoadGroup, // loadGroup nullptr, // aCallbacks loadFlags); // aLoadFlags @@ -791,7 +791,7 @@ EventSource::InitChannelAndRequestEventSource() mSrc, mPrincipal, securityFlags, - nsIContentPolicy::TYPE_DATAREQUEST, + nsIContentPolicy::TYPE_INTERNAL_EVENTSOURCE, mLoadGroup, // loadGroup nullptr, // aCallbacks loadFlags); // aLoadFlags diff --git a/dom/base/nsContentPolicyUtils.h b/dom/base/nsContentPolicyUtils.h index dae3767bb220..e9d25ba556b4 100644 --- a/dom/base/nsContentPolicyUtils.h +++ b/dom/base/nsContentPolicyUtils.h @@ -92,38 +92,40 @@ inline const char * NS_CP_ContentTypeName(uint32_t contentType) { switch (contentType) { - CASE_RETURN( TYPE_OTHER ); - CASE_RETURN( TYPE_SCRIPT ); - CASE_RETURN( TYPE_IMAGE ); - CASE_RETURN( TYPE_STYLESHEET ); - CASE_RETURN( TYPE_OBJECT ); - CASE_RETURN( TYPE_DOCUMENT ); - CASE_RETURN( TYPE_SUBDOCUMENT ); - CASE_RETURN( TYPE_REFRESH ); - CASE_RETURN( TYPE_XBL ); - CASE_RETURN( TYPE_PING ); - CASE_RETURN( TYPE_XMLHTTPREQUEST ); - CASE_RETURN( TYPE_OBJECT_SUBREQUEST ); - CASE_RETURN( TYPE_DTD ); - CASE_RETURN( TYPE_FONT ); - CASE_RETURN( TYPE_MEDIA ); - CASE_RETURN( TYPE_WEBSOCKET ); - CASE_RETURN( TYPE_CSP_REPORT ); - CASE_RETURN( TYPE_XSLT ); - CASE_RETURN( TYPE_BEACON ); - CASE_RETURN( TYPE_FETCH ); - CASE_RETURN( TYPE_IMAGESET ); - CASE_RETURN( TYPE_WEB_MANIFEST ); - CASE_RETURN( TYPE_INTERNAL_SCRIPT ); - CASE_RETURN( TYPE_INTERNAL_WORKER ); - CASE_RETURN( TYPE_INTERNAL_SHARED_WORKER ); - CASE_RETURN( TYPE_INTERNAL_EMBED ); - CASE_RETURN( TYPE_INTERNAL_OBJECT ); - CASE_RETURN( TYPE_INTERNAL_FRAME ); - CASE_RETURN( TYPE_INTERNAL_IFRAME ); - CASE_RETURN( TYPE_INTERNAL_AUDIO ); - CASE_RETURN( TYPE_INTERNAL_VIDEO ); - CASE_RETURN( TYPE_INTERNAL_TRACK ); + CASE_RETURN( TYPE_OTHER ); + CASE_RETURN( TYPE_SCRIPT ); + CASE_RETURN( TYPE_IMAGE ); + CASE_RETURN( TYPE_STYLESHEET ); + CASE_RETURN( TYPE_OBJECT ); + CASE_RETURN( TYPE_DOCUMENT ); + CASE_RETURN( TYPE_SUBDOCUMENT ); + CASE_RETURN( TYPE_REFRESH ); + CASE_RETURN( TYPE_XBL ); + CASE_RETURN( TYPE_PING ); + CASE_RETURN( TYPE_XMLHTTPREQUEST ); + CASE_RETURN( TYPE_OBJECT_SUBREQUEST ); + CASE_RETURN( TYPE_DTD ); + CASE_RETURN( TYPE_FONT ); + CASE_RETURN( TYPE_MEDIA ); + CASE_RETURN( TYPE_WEBSOCKET ); + CASE_RETURN( TYPE_CSP_REPORT ); + CASE_RETURN( TYPE_XSLT ); + CASE_RETURN( TYPE_BEACON ); + CASE_RETURN( TYPE_FETCH ); + CASE_RETURN( TYPE_IMAGESET ); + CASE_RETURN( TYPE_WEB_MANIFEST ); + CASE_RETURN( TYPE_INTERNAL_SCRIPT ); + CASE_RETURN( TYPE_INTERNAL_WORKER ); + CASE_RETURN( TYPE_INTERNAL_SHARED_WORKER ); + CASE_RETURN( TYPE_INTERNAL_EMBED ); + CASE_RETURN( TYPE_INTERNAL_OBJECT ); + CASE_RETURN( TYPE_INTERNAL_FRAME ); + CASE_RETURN( TYPE_INTERNAL_IFRAME ); + CASE_RETURN( TYPE_INTERNAL_AUDIO ); + CASE_RETURN( TYPE_INTERNAL_VIDEO ); + CASE_RETURN( TYPE_INTERNAL_TRACK ); + CASE_RETURN( TYPE_INTERNAL_XMLHTTPREQUEST ); + CASE_RETURN( TYPE_INTERNAL_EVENTSOURCE ); default: return ""; } diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp index 84f38a75f0ae..e628b274188a 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp @@ -7923,6 +7923,10 @@ nsContentUtils::InternalContentPolicyTypeToExternal(nsContentPolicyType aType) case nsIContentPolicy::TYPE_INTERNAL_TRACK: return nsIContentPolicy::TYPE_MEDIA; + case nsIContentPolicy::TYPE_INTERNAL_XMLHTTPREQUEST: + case nsIContentPolicy::TYPE_INTERNAL_EVENTSOURCE: + return nsIContentPolicy::TYPE_XMLHTTPREQUEST; + default: return aType; } diff --git a/dom/base/nsIContentPolicy.idl b/dom/base/nsIContentPolicy.idl index dbec21f644ca..baa521b41bbb 100644 --- a/dom/base/nsIContentPolicy.idl +++ b/dom/base/nsIContentPolicy.idl @@ -20,7 +20,7 @@ interface nsIPrincipal; * by launching a dialog to prompt the user for something). */ -[scriptable,uuid(b545899e-42bd-434c-8fec-a0af3448ea15)] +[scriptable,uuid(3663021e-5670-496f-887b-b408d6526b5b)] interface nsIContentPolicy : nsIContentPolicyBase { /** diff --git a/dom/base/nsIContentPolicyBase.idl b/dom/base/nsIContentPolicyBase.idl index ace8a6f82022..77270779f5a1 100644 --- a/dom/base/nsIContentPolicyBase.idl +++ b/dom/base/nsIContentPolicyBase.idl @@ -24,7 +24,7 @@ typedef unsigned long nsContentPolicyType; * by launching a dialog to prompt the user for something). */ -[scriptable,uuid(11b8d725-7c2b-429e-b51f-8b5b542d5009)] +[scriptable,uuid(20f7b9bf-d7d5-4987-ade8-b7dc0398d44a)] interface nsIContentPolicyBase : nsISupports { /** @@ -257,6 +257,20 @@ interface nsIContentPolicyBase : nsISupports */ const nsContentPolicyType TYPE_INTERNAL_TRACK = 32; + /** + * Indicates an internal constant for an XMLHttpRequest. + * + * This will be mapped to TYPE_XMLHTTPREQUEST. + */ + const nsContentPolicyType TYPE_INTERNAL_XMLHTTPREQUEST = 33; + + /** + * Indicates an internal constant for EventSource. + * + * This will be mapped to TYPE_DATAREQUEST. + */ + const nsContentPolicyType TYPE_INTERNAL_EVENTSOURCE = 34; + /* When adding new content types, please update nsContentBlocker, * NS_CP_ContentTypeName, nsCSPContext, all nsIContentPolicy * implementations, the static_assert in dom/cache/DBSchema.cpp, diff --git a/dom/base/nsXMLHttpRequest.cpp b/dom/base/nsXMLHttpRequest.cpp index 00571cae417d..487d78614b62 100644 --- a/dom/base/nsXMLHttpRequest.cpp +++ b/dom/base/nsXMLHttpRequest.cpp @@ -1711,7 +1711,7 @@ nsXMLHttpRequest::Open(const nsACString& inMethod, const nsACString& url, rv = CheckInnerWindowCorrectness(); NS_ENSURE_SUCCESS(rv, rv); int16_t shouldLoad = nsIContentPolicy::ACCEPT; - rv = NS_CheckContentLoadPolicy(nsIContentPolicy::TYPE_XMLHTTPREQUEST, + rv = NS_CheckContentLoadPolicy(nsIContentPolicy::TYPE_INTERNAL_XMLHTTPREQUEST, uri, mPrincipal, doc, @@ -1765,7 +1765,7 @@ nsXMLHttpRequest::Open(const nsACString& inMethod, const nsACString& url, uri, doc, secFlags, - nsIContentPolicy::TYPE_XMLHTTPREQUEST, + nsIContentPolicy::TYPE_INTERNAL_XMLHTTPREQUEST, loadGroup, nullptr, // aCallbacks nsIRequest::LOAD_BACKGROUND); @@ -1775,7 +1775,7 @@ nsXMLHttpRequest::Open(const nsACString& inMethod, const nsACString& url, uri, mPrincipal, secFlags, - nsIContentPolicy::TYPE_XMLHTTPREQUEST, + nsIContentPolicy::TYPE_INTERNAL_XMLHTTPREQUEST, loadGroup, nullptr, // aCallbacks nsIRequest::LOAD_BACKGROUND); diff --git a/dom/cache/DBSchema.cpp b/dom/cache/DBSchema.cpp index 39f0a2e87849..3270c1cb7f17 100644 --- a/dom/cache/DBSchema.cpp +++ b/dom/cache/DBSchema.cpp @@ -141,7 +141,9 @@ static_assert(nsIContentPolicy::TYPE_INVALID == 0 && nsIContentPolicy::TYPE_INTERNAL_IFRAME == 29 && nsIContentPolicy::TYPE_INTERNAL_AUDIO == 30 && nsIContentPolicy::TYPE_INTERNAL_VIDEO == 31 && - nsIContentPolicy::TYPE_INTERNAL_TRACK == 32, + nsIContentPolicy::TYPE_INTERNAL_TRACK == 32 && + nsIContentPolicy::TYPE_INTERNAL_XMLHTTPREQUEST == 33 && + nsIContentPolicy::TYPE_INTERNAL_EVENTSOURCE == 34, "nsContentPolicytType values are as expected"); namespace { diff --git a/dom/fetch/InternalRequest.cpp b/dom/fetch/InternalRequest.cpp index 998df50d6446..fcb40a7521fb 100644 --- a/dom/fetch/InternalRequest.cpp +++ b/dom/fetch/InternalRequest.cpp @@ -152,9 +152,12 @@ InternalRequest::MapContentPolicyTypeToRequestContext(nsContentPolicyType aConte case nsIContentPolicy::TYPE_PING: context = RequestContext::Ping; break; - case nsIContentPolicy::TYPE_XMLHTTPREQUEST: + case nsIContentPolicy::TYPE_INTERNAL_XMLHTTPREQUEST: context = RequestContext::Xmlhttprequest; break; + case nsIContentPolicy::TYPE_INTERNAL_EVENTSOURCE: + context = RequestContext::Eventsource; + break; case nsIContentPolicy::TYPE_OBJECT_SUBREQUEST: context = RequestContext::Plugin; break; diff --git a/dom/fetch/InternalRequest.h b/dom/fetch/InternalRequest.h index 40a70d49aa67..44caa61bb8a9 100644 --- a/dom/fetch/InternalRequest.h +++ b/dom/fetch/InternalRequest.h @@ -60,12 +60,12 @@ namespace dom { * track | TYPE_INTERNAL_TRACK * video | TYPE_INTERNAL_VIDEO * worker | TYPE_INTERNAL_WORKER - * xmlhttprequest | TYPE_XMLHTTPREQUEST + * xmlhttprequest | TYPE_INTERNAL_XMLHTTPREQUEST + * eventsource | TYPE_INTERNAL_EVENTSOURCE * 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_XMLHTTPREQUEST and TYPE_DATAREQUEST for EventSource * TODO: Figure out if TYPE_WEBSOCKET maps to anything useful * TODO: Add a content type for prefetch * TODO: Use the content type for manifest when it becomes available diff --git a/dom/xml/XMLDocument.cpp b/dom/xml/XMLDocument.cpp index 07b2c886d9d3..62a6c58ef0c8 100644 --- a/dom/xml/XMLDocument.cpp +++ b/dom/xml/XMLDocument.cpp @@ -348,7 +348,7 @@ XMLDocument::Load(const nsAString& aUrl, ErrorResult& aRv) } int16_t shouldLoad = nsIContentPolicy::ACCEPT; - rv = NS_CheckContentLoadPolicy(nsIContentPolicy::TYPE_XMLHTTPREQUEST, + rv = NS_CheckContentLoadPolicy(nsIContentPolicy::TYPE_INTERNAL_XMLHTTPREQUEST, uri, principal, callingDoc ? callingDoc.get() : @@ -445,7 +445,7 @@ XMLDocument::Load(const nsAString& aUrl, ErrorResult& aRv) callingDoc ? callingDoc.get() : static_cast(this), nsILoadInfo::SEC_NORMAL, - nsIContentPolicy::TYPE_XMLHTTPREQUEST, + nsIContentPolicy::TYPE_INTERNAL_XMLHTTPREQUEST, loadGroup, req, nsIRequest::LOAD_BACKGROUND); diff --git a/extensions/permissions/nsContentBlocker.cpp b/extensions/permissions/nsContentBlocker.cpp index efa932ee4206..ea10dae97234 100644 --- a/extensions/permissions/nsContentBlocker.cpp +++ b/extensions/permissions/nsContentBlocker.cpp @@ -55,7 +55,9 @@ static const char *kTypeString[] = { "", // TYPE_INTERNAL_IFRAME "", // TYPE_INTERNAL_AUDIO "", // TYPE_INTERNAL_VIDEO - "" // TYPE_INTERNAL_TRACK + "", // TYPE_INTERNAL_TRACK + "", // TYPE_INTERNAL_XMLHTTPREQUEST + "" // TYPE_INTERNAL_EVENTSOURCE }; #define NUMBER_OF_TYPES MOZ_ARRAY_LENGTH(kTypeString) diff --git a/toolkit/components/places/BookmarkJSONUtils.jsm b/toolkit/components/places/BookmarkJSONUtils.jsm index a03f959ed8c6..a2ac406d467d 100644 --- a/toolkit/components/places/BookmarkJSONUtils.jsm +++ b/toolkit/components/places/BookmarkJSONUtils.jsm @@ -210,7 +210,7 @@ BookmarkImporter.prototype = { let channel = NetUtil.newChannel({ uri, loadingPrincipal: Services.scriptSecurityManager.getNoAppCodebasePrincipal(uri), - contentPolicyType: Ci.nsIContentPolicy.TYPE_DATAREQUEST + contentPolicyType: Ci.nsIContentPolicy.TYPE_INTERNAL_XMLHTTPREQUEST }); let streamLoader = Cc["@mozilla.org/network/stream-loader;1"] .createInstance(Ci.nsIStreamLoader); diff --git a/toolkit/components/places/nsLivemarkService.js b/toolkit/components/places/nsLivemarkService.js index b7ef5f0d79b3..b039f02920ef 100644 --- a/toolkit/components/places/nsLivemarkService.js +++ b/toolkit/components/places/nsLivemarkService.js @@ -529,7 +529,7 @@ Livemark.prototype = { let channel = NetUtil.newChannel({ uri: this.feedURI.spec, loadingPrincipal: Services.scriptSecurityManager.getNoAppCodebasePrincipal(this.feedURI), - contentPolicyType: Ci.nsIContentPolicy.TYPE_DATAREQUEST + contentPolicyType: Ci.nsIContentPolicy.TYPE_INTERNAL_XMLHTTPREQUEST }).QueryInterface(Ci.nsIHttpChannel); channel.loadGroup = loadgroup; channel.loadFlags |= Ci.nsIRequest.LOAD_BACKGROUND | diff --git a/toolkit/components/search/tests/xpcshell/test_serialize_file.js b/toolkit/components/search/tests/xpcshell/test_serialize_file.js index b909b939e747..14cae33e9209 100644 --- a/toolkit/components/search/tests/xpcshell/test_serialize_file.js +++ b/toolkit/components/search/tests/xpcshell/test_serialize_file.js @@ -41,7 +41,7 @@ add_test(function test_addParam() { NetUtil.asyncFetch({ uri: NetUtil.newURI(aFile), loadUsingSystemPrincipal: true, - contentPolicyType: Ci.nsIContentPolicy.TYPE_DATAREQUEST + contentPolicyType: Ci.nsIContentPolicy.TYPE_INTERNAL_XMLHTTPREQUEST }, function(inputStream, status) { do_check_true(Components.isSuccessCode(status)); diff --git a/toolkit/mozapps/update/nsUpdateService.js b/toolkit/mozapps/update/nsUpdateService.js index a436b142140f..f979c779ac7b 100644 --- a/toolkit/mozapps/update/nsUpdateService.js +++ b/toolkit/mozapps/update/nsUpdateService.js @@ -1262,7 +1262,7 @@ function getLocale() { Services.scriptSecurityManager.getSystemPrincipal(), null, // aTriggeringPrincipal Ci.nsILoadInfo.SEC_NORMAL, - Ci.nsIContentPolicy.TYPE_DATAREQUEST); + Ci.nsIContentPolicy.TYPE_INTERNAL_XMLHTTPREQUEST); try { var inputStream = channel.open(); gLocale = readStringFromInputStream(inputStream);