gecko/dom/workers/XMLHttpRequest.h
Ryan VanderMeulen 671d1a817e Backed out 7 changesets (bug 1047483, bug 1079301, bug 1079335) for webplatform test failures.
Backed out changeset 7d06b68c44d0 (bug 1079335)
Backed out changeset 92030169528e (bug 1079301)
Backed out changeset c09d7f95554a (bug 1047483)
Backed out changeset c199f1057d7e (bug 1047483)
Backed out changeset 18830d07884c (bug 1047483)
Backed out changeset e087289ccfbb (bug 1047483)
Backed out changeset 6238ff5d3ed0 (bug 1047483)

CLOSED TREE

--HG--
rename : content/base/public/File.h => content/base/public/nsDOMFile.h
rename : content/base/src/MultipartFileImpl.cpp => content/base/src/nsDOMBlobBuilder.cpp
rename : content/base/src/MultipartFileImpl.h => content/base/src/nsDOMBlobBuilder.h
rename : content/base/src/File.cpp => content/base/src/nsDOMFile.cpp
2014-10-07 13:16:11 -04:00

292 lines
6.4 KiB
C++

/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_dom_workers_xmlhttprequest_h__
#define mozilla_dom_workers_xmlhttprequest_h__
#include "mozilla/dom/workers/bindings/WorkerFeature.h"
// Need this for XMLHttpRequestResponseType.
#include "mozilla/dom/XMLHttpRequestBinding.h"
#include "mozilla/dom/TypedArray.h"
#include "js/StructuredClone.h"
#include "nsXMLHttpRequest.h"
BEGIN_WORKERS_NAMESPACE
class Proxy;
class XMLHttpRequestUpload;
class WorkerPrivate;
class XMLHttpRequest MOZ_FINAL: public nsXHREventTarget,
public WorkerFeature
{
public:
struct StateData
{
nsString mResponseText;
nsString mResponseURL;
uint32_t mStatus;
nsCString mStatusText;
uint16_t mReadyState;
JS::Heap<JS::Value> mResponse;
nsresult mResponseTextResult;
nsresult mStatusResult;
nsresult mResponseResult;
StateData()
: mStatus(0), mReadyState(0), mResponse(JSVAL_VOID),
mResponseTextResult(NS_OK), mStatusResult(NS_OK),
mResponseResult(NS_OK)
{ }
};
private:
nsRefPtr<XMLHttpRequestUpload> mUpload;
WorkerPrivate* mWorkerPrivate;
nsRefPtr<Proxy> mProxy;
XMLHttpRequestResponseType mResponseType;
StateData mStateData;
uint32_t mTimeout;
bool mRooted;
bool mBackgroundRequest;
bool mWithCredentials;
bool mCanceled;
bool mMozAnon;
bool mMozSystem;
public:
virtual JSObject*
WrapObject(JSContext* aCx) MOZ_OVERRIDE;
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(XMLHttpRequest,
nsXHREventTarget)
nsISupports*
GetParentObject() const
{
// There's only one global on a worker, so we don't need to specify.
return nullptr;
}
static already_AddRefed<XMLHttpRequest>
Constructor(const GlobalObject& aGlobal,
const MozXMLHttpRequestParameters& aParams,
ErrorResult& aRv);
static already_AddRefed<XMLHttpRequest>
Constructor(const GlobalObject& aGlobal, const nsAString& ignored,
ErrorResult& aRv)
{
// Pretend like someone passed null, so we can pick up the default values
MozXMLHttpRequestParameters params;
if (!params.Init(aGlobal.Context(), JS::NullHandleValue)) {
aRv.Throw(NS_ERROR_UNEXPECTED);
return nullptr;
}
return Constructor(aGlobal, params, aRv);
}
void
Unpin();
bool
Notify(JSContext* aCx, Status aStatus) MOZ_OVERRIDE;
IMPL_EVENT_HANDLER(readystatechange)
uint16_t
ReadyState() const
{
return mStateData.mReadyState;
}
void Open(const nsACString& aMethod, const nsAString& aUrl, ErrorResult& aRv)
{
Open(aMethod, aUrl, true, Optional<nsAString>(),
Optional<nsAString>(), aRv);
}
void
Open(const nsACString& aMethod, const nsAString& aUrl, bool aAsync,
const Optional<nsAString>& aUser, const Optional<nsAString>& aPassword,
ErrorResult& aRv);
void
SetRequestHeader(const nsACString& aHeader, const nsACString& aValue,
ErrorResult& aRv);
uint32_t
Timeout() const
{
return mTimeout;
}
void
SetTimeout(uint32_t aTimeout, ErrorResult& aRv);
bool
WithCredentials() const
{
return mWithCredentials;
}
void
SetWithCredentials(bool aWithCredentials, ErrorResult& aRv);
bool
MozBackgroundRequest() const
{
return mBackgroundRequest;
}
void
SetMozBackgroundRequest(bool aBackgroundRequest, ErrorResult& aRv);
XMLHttpRequestUpload*
GetUpload(ErrorResult& aRv);
void
Send(ErrorResult& aRv);
void
Send(const nsAString& aBody, ErrorResult& aRv);
void
Send(JS::Handle<JSObject*> aBody, ErrorResult& aRv);
void
Send(const ArrayBuffer& aBody, ErrorResult& aRv);
void
Send(const ArrayBufferView& aBody, ErrorResult& aRv);
void
SendAsBinary(const nsAString& aBody, ErrorResult& aRv);
void
Abort(ErrorResult& aRv);
void
GetResponseURL(nsAString& aUrl) const
{
aUrl = mStateData.mResponseURL;
}
uint16_t
GetStatus(ErrorResult& aRv) const
{
aRv = mStateData.mStatusResult;
return mStateData.mStatus;
}
void
GetStatusText(nsACString& aStatusText) const
{
aStatusText = mStateData.mStatusText;
}
void
GetResponseHeader(const nsACString& aHeader, nsACString& aResponseHeader,
ErrorResult& aRv);
void
GetAllResponseHeaders(nsACString& aResponseHeaders, ErrorResult& aRv);
void
OverrideMimeType(const nsAString& aMimeType, ErrorResult& aRv);
XMLHttpRequestResponseType
ResponseType() const
{
return mResponseType;
}
void
SetResponseType(XMLHttpRequestResponseType aResponseType, ErrorResult& aRv);
void
GetResponse(JSContext* /* unused */, JS::MutableHandle<JS::Value> aResponse,
ErrorResult& aRv);
void
GetResponseText(nsAString& aResponseText, ErrorResult& aRv);
void
GetInterface(JSContext* cx, JS::Handle<JSObject*> aIID,
JS::MutableHandle<JS::Value> aRetval, ErrorResult& aRv)
{
aRv.Throw(NS_ERROR_FAILURE);
}
XMLHttpRequestUpload*
GetUploadObjectNoCreate() const
{
return mUpload;
}
void
UpdateState(const StateData& aStateData, bool aUseCachedArrayBufferResponse);
void
NullResponseText()
{
mStateData.mResponseText.SetIsVoid(true);
mStateData.mResponse = JSVAL_NULL;
}
bool MozAnon() const
{
return mMozAnon;
}
bool MozSystem() const
{
return mMozSystem;
}
bool
SendInProgress() const
{
return mRooted;
}
private:
explicit XMLHttpRequest(WorkerPrivate* aWorkerPrivate);
~XMLHttpRequest();
enum ReleaseType { Default, XHRIsGoingAway, WorkerIsGoingAway };
void
ReleaseProxy(ReleaseType aType = Default);
void
MaybePin(ErrorResult& aRv);
void
MaybeDispatchPrematureAbortEvents(ErrorResult& aRv);
void
DispatchPrematureAbortEvent(EventTarget* aTarget,
const nsAString& aEventType, bool aUploadTarget,
ErrorResult& aRv);
void
SendInternal(const nsAString& aStringBody,
JSAutoStructuredCloneBuffer&& aBody,
nsTArray<nsCOMPtr<nsISupports> >& aClonedObjects,
ErrorResult& aRv);
};
END_WORKERS_NAMESPACE
#endif // mozilla_dom_workers_xmlhttprequest_h__