dom/workers/XMLHttpRequest.h

Fri, 16 Jan 2015 18:13:44 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 18:13:44 +0100
branch
TOR_BUG_9701
changeset 14
925c144e1f1f
permissions
-rw-r--r--

Integrate suggestion from review to improve consistency with existing code.

     1 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     4  * You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #ifndef mozilla_dom_workers_xmlhttprequest_h__
     7 #define mozilla_dom_workers_xmlhttprequest_h__
     9 #include "mozilla/dom/workers/bindings/WorkerFeature.h"
    11 // Need this for XMLHttpRequestResponseType.
    12 #include "mozilla/dom/XMLHttpRequestBinding.h"
    14 #include "mozilla/dom/TypedArray.h"
    16 #include "js/StructuredClone.h"
    17 #include "nsXMLHttpRequest.h"
    19 BEGIN_WORKERS_NAMESPACE
    21 class Proxy;
    22 class XMLHttpRequestUpload;
    23 class WorkerPrivate;
    25 class XMLHttpRequest MOZ_FINAL: public nsXHREventTarget,
    26                                 public WorkerFeature
    27 {
    28 public:
    29   struct StateData
    30   {
    31     nsString mResponseText;
    32     uint32_t mStatus;
    33     nsCString mStatusText;
    34     uint16_t mReadyState;
    35     JS::Heap<JS::Value> mResponse;
    36     nsresult mResponseTextResult;
    37     nsresult mStatusResult;
    38     nsresult mResponseResult;
    40     StateData()
    41     : mStatus(0), mReadyState(0), mResponse(JSVAL_VOID),
    42       mResponseTextResult(NS_OK), mStatusResult(NS_OK),
    43       mResponseResult(NS_OK)
    44     { }
    45   };
    47 private:
    48   nsRefPtr<XMLHttpRequestUpload> mUpload;
    49   WorkerPrivate* mWorkerPrivate;
    50   nsRefPtr<Proxy> mProxy;
    51   XMLHttpRequestResponseType mResponseType;
    52   StateData mStateData;
    54   uint32_t mTimeout;
    56   bool mRooted;
    57   bool mBackgroundRequest;
    58   bool mWithCredentials;
    59   bool mCanceled;
    61   bool mMozAnon;
    62   bool mMozSystem;
    64 public:
    65   virtual JSObject*
    66   WrapObject(JSContext* aCx) MOZ_OVERRIDE;
    68   NS_DECL_ISUPPORTS_INHERITED
    69   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(XMLHttpRequest,
    70                                                          nsXHREventTarget)
    72   nsISupports*
    73   GetParentObject() const
    74   {
    75     // There's only one global on a worker, so we don't need to specify.
    76     return nullptr;
    77   }
    79   static already_AddRefed<XMLHttpRequest>
    80   Constructor(const GlobalObject& aGlobal,
    81               const MozXMLHttpRequestParameters& aParams,
    82               ErrorResult& aRv);
    84   static already_AddRefed<XMLHttpRequest>
    85   Constructor(const GlobalObject& aGlobal, const nsAString& ignored,
    86               ErrorResult& aRv)
    87   {
    88     // Pretend like someone passed null, so we can pick up the default values
    89     MozXMLHttpRequestParameters params;
    90     if (!params.Init(aGlobal.GetContext(), JS::NullHandleValue)) {
    91       aRv.Throw(NS_ERROR_UNEXPECTED);
    92       return nullptr;
    93     }
    95     return Constructor(aGlobal, params, aRv);
    96   }
    98   void
    99   Unpin();
   101   bool
   102   Notify(JSContext* aCx, Status aStatus) MOZ_OVERRIDE;
   104   IMPL_EVENT_HANDLER(readystatechange)
   106   uint16_t
   107   ReadyState() const
   108   {
   109     return mStateData.mReadyState;
   110   }
   112   void Open(const nsACString& aMethod, const nsAString& aUrl, ErrorResult& aRv)
   113   {
   114     Open(aMethod, aUrl, true, Optional<nsAString>(),
   115          Optional<nsAString>(), aRv);
   116   }
   117   void
   118   Open(const nsACString& aMethod, const nsAString& aUrl, bool aAsync,
   119        const Optional<nsAString>& aUser, const Optional<nsAString>& aPassword,
   120        ErrorResult& aRv);
   122   void
   123   SetRequestHeader(const nsACString& aHeader, const nsACString& aValue,
   124                    ErrorResult& aRv);
   126   uint32_t
   127   Timeout() const
   128   {
   129     return mTimeout;
   130   }
   132   void
   133   SetTimeout(uint32_t aTimeout, ErrorResult& aRv);
   135   bool
   136   WithCredentials() const
   137   {
   138     return mWithCredentials;
   139   }
   141   void
   142   SetWithCredentials(bool aWithCredentials, ErrorResult& aRv);
   144   bool
   145   MozBackgroundRequest() const
   146   {
   147     return mBackgroundRequest;
   148   }
   150   void
   151   SetMozBackgroundRequest(bool aBackgroundRequest, ErrorResult& aRv);
   153   XMLHttpRequestUpload*
   154   GetUpload(ErrorResult& aRv);
   156   void
   157   Send(ErrorResult& aRv);
   159   void
   160   Send(const nsAString& aBody, ErrorResult& aRv);
   162   void
   163   Send(JS::Handle<JSObject*> aBody, ErrorResult& aRv);
   165   void
   166   Send(const ArrayBuffer& aBody, ErrorResult& aRv);
   168   void
   169   Send(const ArrayBufferView& aBody, ErrorResult& aRv);
   171   void
   172   SendAsBinary(const nsAString& aBody, ErrorResult& aRv);
   174   void
   175   Abort(ErrorResult& aRv);
   177   uint16_t
   178   GetStatus(ErrorResult& aRv) const
   179   {
   180     aRv = mStateData.mStatusResult;
   181     return mStateData.mStatus;
   182   }
   184   void
   185   GetStatusText(nsACString& aStatusText) const
   186   {
   187     aStatusText = mStateData.mStatusText;
   188   }
   190   void
   191   GetResponseHeader(const nsACString& aHeader, nsACString& aResponseHeader,
   192                     ErrorResult& aRv);
   194   void
   195   GetAllResponseHeaders(nsACString& aResponseHeaders, ErrorResult& aRv);
   197   void
   198   OverrideMimeType(const nsAString& aMimeType, ErrorResult& aRv);
   200   XMLHttpRequestResponseType
   201   ResponseType() const
   202   {
   203     return mResponseType;
   204   }
   206   void
   207   SetResponseType(XMLHttpRequestResponseType aResponseType, ErrorResult& aRv);
   209   void
   210   GetResponse(JSContext* /* unused */, JS::MutableHandle<JS::Value> aResponse,
   211               ErrorResult& aRv);
   213   void
   214   GetResponseText(nsAString& aResponseText, ErrorResult& aRv);
   216   JSObject*
   217   GetResponseXML() const
   218   {
   219     return nullptr;
   220   }
   222   JSObject*
   223   GetChannel() const
   224   {
   225     return nullptr;
   226   }
   228   void
   229   GetInterface(JSContext* cx, JS::Handle<JSObject*> aIID,
   230                JS::MutableHandle<JS::Value> aRetval, ErrorResult& aRv)
   231   {
   232     aRv.Throw(NS_ERROR_FAILURE);
   233   }
   235   XMLHttpRequestUpload*
   236   GetUploadObjectNoCreate() const
   237   {
   238     return mUpload;
   239   }
   241   void
   242   UpdateState(const StateData& aStateData);
   244   void
   245   NullResponseText()
   246   {
   247     mStateData.mResponseText.SetIsVoid(true);
   248     mStateData.mResponse = JSVAL_NULL;
   249   }
   251   bool MozAnon() const
   252   {
   253     return mMozAnon;
   254   }
   256   bool MozSystem() const
   257   {
   258     return mMozSystem;
   259   }
   261 private:
   262   XMLHttpRequest(WorkerPrivate* aWorkerPrivate);
   263   ~XMLHttpRequest();
   265   enum ReleaseType { Default, XHRIsGoingAway, WorkerIsGoingAway };
   267   void
   268   ReleaseProxy(ReleaseType aType = Default);
   270   void
   271   MaybePin(ErrorResult& aRv);
   273   void
   274   MaybeDispatchPrematureAbortEvents(ErrorResult& aRv);
   276   void
   277   DispatchPrematureAbortEvent(EventTarget* aTarget,
   278                               const nsAString& aEventType, bool aUploadTarget,
   279                               ErrorResult& aRv);
   281   bool
   282   SendInProgress() const
   283   {
   284     return mRooted;
   285   }
   287   void
   288   SendInternal(const nsAString& aStringBody,
   289                JSAutoStructuredCloneBuffer&& aBody,
   290                nsTArray<nsCOMPtr<nsISupports> >& aClonedObjects,
   291                ErrorResult& aRv);
   292 };
   294 END_WORKERS_NAMESPACE
   296 #endif // mozilla_dom_workers_xmlhttprequest_h__

mercurial