michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0:
michael@0: #include "TestHarness.h"
michael@0:
michael@0: #include "nsIDOMDocument.h"
michael@0: #include "nsIPrincipal.h"
michael@0: #include "nsIScriptSecurityManager.h"
michael@0: #include "nsIXMLHttpRequest.h"
michael@0:
michael@0:
michael@0: #define TEST_ENSURE_BASE(_test, _msg) \
michael@0: PR_BEGIN_MACRO \
michael@0: if (_test) { \
michael@0: fail(_msg); \
michael@0: return NS_ERROR_FAILURE; \
michael@0: } \
michael@0: PR_END_MACRO
michael@0:
michael@0: #define TEST_ENSURE_SUCCESS(_rv, _msg) \
michael@0: TEST_ENSURE_BASE(NS_FAILED(_rv), _msg)
michael@0:
michael@0: #define TEST_ENSURE_FAILED(_rv, _msg) \
michael@0: TEST_ENSURE_BASE(NS_SUCCEEDED(_rv), _msg)
michael@0:
michael@0: #define TEST_URL_PREFIX \
michael@0: "data:text/xml,"
michael@0: #define TEST_URL_CONTENT \
michael@0: ""
michael@0:
michael@0: #define TEST_URL \
michael@0: TEST_URL_PREFIX TEST_URL_CONTENT
michael@0:
michael@0: nsresult TestNativeXMLHttpRequest()
michael@0: {
michael@0: nsresult rv;
michael@0:
michael@0: nsCOMPtr xhr =
michael@0: do_CreateInstance(NS_XMLHTTPREQUEST_CONTRACTID, &rv);
michael@0: TEST_ENSURE_SUCCESS(rv, "Couldn't create nsIXMLHttpRequest instance!");
michael@0:
michael@0: NS_NAMED_LITERAL_CSTRING(getString, "GET");
michael@0: NS_NAMED_LITERAL_CSTRING(testURL, TEST_URL);
michael@0: const nsAString& empty = EmptyString();
michael@0:
michael@0: nsCOMPtr secman =
michael@0: do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
michael@0: TEST_ENSURE_SUCCESS(rv, "Couldn't get script security manager!");
michael@0:
michael@0: nsCOMPtr systemPrincipal;
michael@0: rv = secman->GetSystemPrincipal(getter_AddRefs(systemPrincipal));
michael@0: TEST_ENSURE_SUCCESS(rv, "Couldn't get system principal!");
michael@0:
michael@0: rv = xhr->Init(systemPrincipal, nullptr, nullptr, nullptr);
michael@0: TEST_ENSURE_SUCCESS(rv, "Couldn't initialize the XHR!");
michael@0:
michael@0: rv = xhr->Open(getString, testURL, false, empty, empty);
michael@0: TEST_ENSURE_SUCCESS(rv, "Open failed!");
michael@0:
michael@0: rv = xhr->Send(nullptr);
michael@0: TEST_ENSURE_SUCCESS(rv, "Send failed!");
michael@0:
michael@0: nsAutoString response;
michael@0: rv = xhr->GetResponseText(response);
michael@0: TEST_ENSURE_SUCCESS(rv, "GetResponse failed!");
michael@0:
michael@0: if (!response.EqualsLiteral(TEST_URL_CONTENT)) {
michael@0: fail("Response text does not match!");
michael@0: return NS_ERROR_FAILURE;
michael@0: }
michael@0:
michael@0: nsCOMPtr dom;
michael@0: rv = xhr->GetResponseXML(getter_AddRefs(dom));
michael@0: TEST_ENSURE_SUCCESS(rv, "GetResponseXML failed!");
michael@0:
michael@0: if (!dom) {
michael@0: fail("No DOM document constructed!");
michael@0: return NS_ERROR_FAILURE;
michael@0: }
michael@0:
michael@0: passed("Native XMLHttpRequest");
michael@0: return NS_OK;
michael@0: }
michael@0:
michael@0: int main(int argc, char** argv)
michael@0: {
michael@0: ScopedXPCOM xpcom("XMLHttpRequest");
michael@0: if (xpcom.failed())
michael@0: return 1;
michael@0:
michael@0: int retval = 0;
michael@0: if (NS_FAILED(TestNativeXMLHttpRequest())) {
michael@0: retval = 1;
michael@0: }
michael@0:
michael@0: return retval;
michael@0: }