diff --git a/dom/base/nsXMLHttpRequest.cpp b/dom/base/nsXMLHttpRequest.cpp index 7b2ea37bd326..c45149ced74e 100644 --- a/dom/base/nsXMLHttpRequest.cpp +++ b/dom/base/nsXMLHttpRequest.cpp @@ -3119,11 +3119,23 @@ nsXMLHttpRequest::ReadyState() return DONE; } +void nsXMLHttpRequest::OverrideMimeType(const nsAString& aMimeType, ErrorResult& aRv) +{ + if ((mState & XML_HTTP_REQUEST_LOADING) || (mState & XML_HTTP_REQUEST_DONE)) { + ResetResponse(); + aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); + return; + } + + mOverrideMimeType = aMimeType; +} + NS_IMETHODIMP nsXMLHttpRequest::SlowOverrideMimeType(const nsAString& aMimeType) { - OverrideMimeType(aMimeType); - return NS_OK; + ErrorResult aRv; + OverrideMimeType(aMimeType, aRv); + return aRv.StealNSResult(); } NS_IMETHODIMP diff --git a/dom/base/nsXMLHttpRequest.h b/dom/base/nsXMLHttpRequest.h index f511cff9cb71..ba1a4abd88b3 100644 --- a/dom/base/nsXMLHttpRequest.h +++ b/dom/base/nsXMLHttpRequest.h @@ -519,11 +519,7 @@ public: void GetAllResponseHeaders(nsCString& aResponseHeaders); bool IsSafeHeader(const nsACString& aHeaderName, mozilla::NotNull aHttpChannel) const; - void OverrideMimeType(const nsAString& aMimeType) - { - // XXX Should we do some validation here? - mOverrideMimeType = aMimeType; - } + void OverrideMimeType(const nsAString& aMimeType, ErrorResult& aRv); XMLHttpRequestResponseType ResponseType() { return XMLHttpRequestResponseType(mResponseType); diff --git a/dom/base/test/mochitest.ini b/dom/base/test/mochitest.ini index 3c336055a94a..4b9cc2d817c5 100644 --- a/dom/base/test/mochitest.ini +++ b/dom/base/test/mochitest.ini @@ -277,6 +277,7 @@ support-files = [test_anonymousContent_api.html] [test_anonymousContent_append_after_reflow.html] [test_anonymousContent_canvas.html] +[test_xhr_overridemimetype_throws_on_invalid_state.html] skip-if = buildapp == 'b2g' # Requires webgl support [test_anonymousContent_insert.html] [test_anonymousContent_manipulate_content.html] diff --git a/dom/base/test/test_xhr_overridemimetype_throws_on_invalid_state.html b/dom/base/test/test_xhr_overridemimetype_throws_on_invalid_state.html new file mode 100644 index 000000000000..bdbbf1591539 --- /dev/null +++ b/dom/base/test/test_xhr_overridemimetype_throws_on_invalid_state.html @@ -0,0 +1,61 @@ + + + + Test bug 482935 + + + + + + + diff --git a/dom/webidl/XMLHttpRequest.webidl b/dom/webidl/XMLHttpRequest.webidl index 9af72f9c6d16..17d94212fab0 100644 --- a/dom/webidl/XMLHttpRequest.webidl +++ b/dom/webidl/XMLHttpRequest.webidl @@ -119,7 +119,7 @@ interface XMLHttpRequest : XMLHttpRequestEventTarget { [Throws=Workers] ByteString getAllResponseHeaders(); - [Throws=Workers] + [Throws] void overrideMimeType(DOMString mime); [SetterThrows] diff --git a/dom/workers/XMLHttpRequest.cpp b/dom/workers/XMLHttpRequest.cpp index 860749e9da6d..567c2cbdbdf6 100644 --- a/dom/workers/XMLHttpRequest.cpp +++ b/dom/workers/XMLHttpRequest.cpp @@ -848,8 +848,9 @@ private: virtual nsresult RunOnMainThread() override { - mProxy->mXHR->OverrideMimeType(mMimeType); - return NS_OK; + ErrorResult aRv; + mProxy->mXHR->OverrideMimeType(mMimeType, aRv); + return aRv.StealNSResult(); } }; diff --git a/testing/web-platform/meta/XMLHttpRequest/overridemimetype-done-state.htm.ini b/testing/web-platform/meta/XMLHttpRequest/overridemimetype-done-state.htm.ini deleted file mode 100644 index 30899db29abc..000000000000 --- a/testing/web-platform/meta/XMLHttpRequest/overridemimetype-done-state.htm.ini +++ /dev/null @@ -1,5 +0,0 @@ -[overridemimetype-done-state.htm] - type: testharness - [XMLHttpRequest: overrideMimeType() in DONE state] - expected: FAIL - diff --git a/testing/web-platform/meta/XMLHttpRequest/overridemimetype-loading-state.htm.ini b/testing/web-platform/meta/XMLHttpRequest/overridemimetype-loading-state.htm.ini deleted file mode 100644 index 393a4127f9d7..000000000000 --- a/testing/web-platform/meta/XMLHttpRequest/overridemimetype-loading-state.htm.ini +++ /dev/null @@ -1,5 +0,0 @@ -[overridemimetype-loading-state.htm] - type: testharness - [XMLHttpRequest: overrideMimeType() in LOADING state] - expected: FAIL -