зеркало из https://github.com/mozilla/gecko-dev.git
Bug 800386. Fix getInterface from JS on XMLHttpRequest objects to actually work. r=khuey
This commit is contained in:
Родитель
352a55c31b
Коммит
3a9f12055a
|
@ -3903,7 +3903,7 @@ nsXMLHttpRequest::GetInterface(const nsIID & aIID, void **aResult)
|
|||
}
|
||||
|
||||
JS::Value
|
||||
nsXMLHttpRequest::GetInterface(JSContext* aCx, nsIJSIID* aIID, ErrorResult& aRv)
|
||||
nsXMLHttpRequest::GetInterface(JSContext* aCx, nsIJSID* aIID, ErrorResult& aRv)
|
||||
{
|
||||
const nsID* iid = aIID->GetID();
|
||||
nsCOMPtr<nsISupports> result;
|
||||
|
|
|
@ -448,7 +448,7 @@ public:
|
|||
}
|
||||
|
||||
// We need a GetInterface callable from JS for chrome JS
|
||||
JS::Value GetInterface(JSContext* aCx, nsIJSIID* aIID, ErrorResult& aRv);
|
||||
JS::Value GetInterface(JSContext* aCx, nsIJSID* aIID, ErrorResult& aRv);
|
||||
|
||||
// This creates a trusted readystatechange event, which is not cancelable and
|
||||
// doesn't bubble.
|
||||
|
|
|
@ -47,6 +47,7 @@ MOCHITEST_CHROME_FILES = \
|
|||
test_bug780199.xul \
|
||||
test_bug780529.xul \
|
||||
test_csp_bug768029.html \
|
||||
test_bug800386.xul \
|
||||
$(NULL)
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=800386
|
||||
-->
|
||||
<window title="Mozilla Bug 800386"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=800386"
|
||||
target="_blank">Mozilla Bug 800386</a>
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript">
|
||||
<![CDATA[
|
||||
/** Test for Bug 800386 **/
|
||||
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var triedForwarding = false;
|
||||
var forwardFailed = false;
|
||||
|
||||
var xhr = new XMLHttpRequest;
|
||||
var eventSink = xhr.getInterface(Components.interfaces.nsIProgressEventSink);
|
||||
isnot(eventSink, null, "Should get event sink directly!");
|
||||
|
||||
// Now jump through some hoops to get us a getInterface call from C++
|
||||
|
||||
var requestor = {
|
||||
getInterface: function(aIID) {
|
||||
if (aIID.equals(Components.interfaces.nsIProgressEventSink)) {
|
||||
triedForwarding = true;
|
||||
try {
|
||||
return xhr.getInterface(aIID);
|
||||
} catch (e) {
|
||||
forwardFailed = true;
|
||||
}
|
||||
}
|
||||
throw Components.results.NS_ERROR_NO_INTERFACE;
|
||||
},
|
||||
|
||||
QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsISupports,
|
||||
Components.interfaces.nsIInterfaceRequestor])
|
||||
};
|
||||
|
||||
// HTTP URI so that we get progress callbacks
|
||||
xhr.open("GET", "http://mochi.test:8888/", false);
|
||||
xhr.channel.notificationCallbacks = requestor;
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState == 4) {
|
||||
ok(triedForwarding,
|
||||
"Should have had an attempt to treat us as a progress event sink");
|
||||
ok(!forwardFailed,
|
||||
"Should have been able to forward getInterface on to the XHR");
|
||||
SimpleTest.finish();
|
||||
}
|
||||
}
|
||||
xhr.send();
|
||||
]]>
|
||||
</script>
|
||||
</window>
|
|
@ -231,7 +231,7 @@ DOMInterfaces = {
|
|||
|
||||
'IID': [
|
||||
{
|
||||
'nativeType': 'nsIJSIID',
|
||||
'nativeType': 'nsIJSID',
|
||||
'headerFile': 'xpcjsid.h',
|
||||
},
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче