LCOV - code coverage report
Current view: top level - dom/indexedDB - IDBFileHandle.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 55 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 25 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
       3             : /* This Source Code Form is subject to the terms of the Mozilla Public
       4             :  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
       5             :  * You can obtain one at http://mozilla.org/MPL/2.0/. */
       6             : 
       7             : #ifndef mozilla_dom_idbfilehandle_h__
       8             : #define mozilla_dom_idbfilehandle_h__
       9             : 
      10             : #include "IDBFileRequest.h"
      11             : #include "js/TypeDecls.h"
      12             : #include "mozilla/Attributes.h"
      13             : #include "mozilla/dom/FileModeBinding.h"
      14             : #include "mozilla/DOMEventTargetHelper.h"
      15             : #include "nsCycleCollectionParticipant.h"
      16             : #include "nsIRunnable.h"
      17             : #include "nsWeakReference.h"
      18             : 
      19             : class nsPIDOMWindowInner;
      20             : 
      21             : namespace mozilla {
      22             : namespace dom {
      23             : 
      24             : class Blob;
      25             : class FileRequestData;
      26             : class FileRequestParams;
      27             : struct IDBFileMetadataParameters;
      28             : class IDBFileRequest;
      29             : class IDBMutableFile;
      30             : class StringOrArrayBufferOrArrayBufferViewOrBlob;
      31             : 
      32             : namespace indexedDB {
      33             : class BackgroundFileHandleChild;
      34             : }
      35             : 
      36             : class IDBFileHandle final
      37             :   : public DOMEventTargetHelper
      38             :   , public nsIRunnable
      39             :   , public nsSupportsWeakReference
      40             : {
      41             : public:
      42             :   enum ReadyState
      43             :   {
      44             :     INITIAL = 0,
      45             :     LOADING,
      46             :     FINISHING,
      47             :     DONE
      48             :   };
      49             : 
      50             : private:
      51             :   RefPtr<IDBMutableFile> mMutableFile;
      52             : 
      53             :   indexedDB::BackgroundFileHandleChild* mBackgroundActor;
      54             : 
      55             :   uint64_t mLocation;
      56             : 
      57             :   uint32_t mPendingRequestCount;
      58             : 
      59             :   ReadyState mReadyState;
      60             :   FileMode mMode;
      61             : 
      62             :   bool mAborted;
      63             :   bool mCreating;
      64             : 
      65             : #ifdef DEBUG
      66             :   bool mSentFinishOrAbort;
      67             :   bool mFiredCompleteOrAbort;
      68             : #endif
      69             : 
      70             : public:
      71             :   static already_AddRefed<IDBFileHandle>
      72             :   Create(IDBMutableFile* aMutableFile,
      73             :          FileMode aMode);
      74             : 
      75             :   static IDBFileHandle*
      76             :   GetCurrent();
      77             : 
      78             :   void
      79             :   AssertIsOnOwningThread() const
      80             : #ifdef DEBUG
      81             :   ;
      82             : #else
      83             :   { }
      84             : #endif
      85             : 
      86             :   void
      87             :   SetBackgroundActor(indexedDB::BackgroundFileHandleChild* aActor);
      88             : 
      89             :   void
      90           0 :   ClearBackgroundActor()
      91             :   {
      92           0 :     AssertIsOnOwningThread();
      93             : 
      94           0 :     mBackgroundActor = nullptr;
      95           0 :   }
      96             : 
      97             :   void
      98             :   StartRequest(IDBFileRequest* aFileRequest, const FileRequestParams& aParams);
      99             : 
     100             :   void
     101             :   OnNewRequest();
     102             : 
     103             :   void
     104             :   OnRequestFinished(bool aActorDestroyedNormally);
     105             : 
     106             :   void
     107             :   FireCompleteOrAbortEvents(bool aAborted);
     108             : 
     109             :   bool
     110             :   IsOpen() const;
     111             : 
     112             :   bool
     113           0 :   IsFinishingOrDone() const
     114             :   {
     115           0 :     AssertIsOnOwningThread();
     116             : 
     117           0 :     return mReadyState == FINISHING || mReadyState == DONE;
     118             :   }
     119             : 
     120             :   bool
     121           0 :   IsDone() const
     122             :   {
     123           0 :     AssertIsOnOwningThread();
     124             : 
     125           0 :     return mReadyState == DONE;
     126             :   }
     127             : 
     128             :   bool
     129           0 :   IsAborted() const
     130             :   {
     131           0 :     AssertIsOnOwningThread();
     132           0 :     return mAborted;
     133             :   }
     134             : 
     135             :   void
     136             :   Abort();
     137             : 
     138             :   // WebIDL
     139             :   nsPIDOMWindowInner*
     140           0 :   GetParentObject() const
     141             :   {
     142           0 :     AssertIsOnOwningThread();
     143           0 :     return GetOwner();
     144             :   }
     145             : 
     146             :   IDBMutableFile*
     147           0 :   GetMutableFile() const
     148             :   {
     149           0 :     AssertIsOnOwningThread();
     150           0 :     return mMutableFile;
     151             :   }
     152             : 
     153             :   IDBMutableFile*
     154           0 :   GetFileHandle() const
     155             :   {
     156           0 :     AssertIsOnOwningThread();
     157           0 :     return GetMutableFile();
     158             :   }
     159             : 
     160             :   FileMode
     161           0 :   Mode() const
     162             :   {
     163           0 :     AssertIsOnOwningThread();
     164           0 :     return mMode;
     165             :   }
     166             : 
     167             :   bool
     168           0 :   Active() const
     169             :   {
     170           0 :     AssertIsOnOwningThread();
     171           0 :     return IsOpen();
     172             :   }
     173             : 
     174             :   Nullable<uint64_t>
     175           0 :   GetLocation() const
     176             :   {
     177           0 :     AssertIsOnOwningThread();
     178             : 
     179           0 :     if (mLocation == UINT64_MAX) {
     180           0 :       return Nullable<uint64_t>();
     181             :     }
     182             : 
     183           0 :     return Nullable<uint64_t>(mLocation);
     184             :   }
     185             : 
     186             :   void
     187           0 :   SetLocation(const Nullable<uint64_t>& aLocation)
     188             :   {
     189           0 :     AssertIsOnOwningThread();
     190             : 
     191             :     // Null means the end-of-file.
     192           0 :     if (aLocation.IsNull()) {
     193           0 :       mLocation = UINT64_MAX;
     194             :     } else {
     195           0 :       mLocation = aLocation.Value();
     196             :     }
     197           0 :   }
     198             : 
     199             :   already_AddRefed<IDBFileRequest>
     200             :   GetMetadata(const IDBFileMetadataParameters& aParameters, ErrorResult& aRv);
     201             : 
     202             :   already_AddRefed<IDBFileRequest>
     203           0 :   ReadAsArrayBuffer(uint64_t aSize, ErrorResult& aRv)
     204             :   {
     205           0 :     AssertIsOnOwningThread();
     206           0 :     return Read(aSize, false, NullString(), aRv);
     207             :   }
     208             : 
     209             :   already_AddRefed<IDBFileRequest>
     210           0 :   ReadAsText(uint64_t aSize, const nsAString& aEncoding, ErrorResult& aRv)
     211             :   {
     212           0 :     AssertIsOnOwningThread();
     213           0 :     return Read(aSize, true, aEncoding, aRv);
     214             :   }
     215             : 
     216             :   already_AddRefed<IDBFileRequest>
     217           0 :   Write(const StringOrArrayBufferOrArrayBufferViewOrBlob& aValue,
     218             :         ErrorResult& aRv)
     219             :   {
     220           0 :     AssertIsOnOwningThread();
     221           0 :     return WriteOrAppend(aValue, false, aRv);
     222             :   }
     223             : 
     224             :   already_AddRefed<IDBFileRequest>
     225           0 :   Append(const StringOrArrayBufferOrArrayBufferViewOrBlob& aValue,
     226             :          ErrorResult& aRv)
     227             :   {
     228           0 :     AssertIsOnOwningThread();
     229           0 :     return WriteOrAppend(aValue, true, aRv);
     230             :   }
     231             : 
     232             :   already_AddRefed<IDBFileRequest>
     233             :   Truncate(const Optional<uint64_t>& aSize, ErrorResult& aRv);
     234             : 
     235             :   already_AddRefed<IDBFileRequest>
     236             :   Flush(ErrorResult& aRv);
     237             : 
     238             :   void
     239             :   Abort(ErrorResult& aRv);
     240             : 
     241           0 :   IMPL_EVENT_HANDLER(complete)
     242           0 :   IMPL_EVENT_HANDLER(abort)
     243           0 :   IMPL_EVENT_HANDLER(error)
     244             : 
     245             :   NS_DECL_ISUPPORTS_INHERITED
     246             :   NS_DECL_NSIRUNNABLE
     247           0 :   NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(IDBFileHandle, DOMEventTargetHelper)
     248             : 
     249             :   // nsIDOMEventTarget
     250             :   virtual nsresult
     251             :   GetEventTargetParent(EventChainPreVisitor& aVisitor) override;
     252             : 
     253             :   // WrapperCache
     254             :   virtual JSObject*
     255             :   WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
     256             : 
     257             : private:
     258             :   IDBFileHandle(IDBMutableFile* aMutableFile,
     259             :                 FileMode aMode);
     260             :   ~IDBFileHandle();
     261             : 
     262             :   bool
     263             :   CheckState(ErrorResult& aRv);
     264             : 
     265             :   bool
     266             :   CheckStateAndArgumentsForRead(uint64_t aSize, ErrorResult& aRv);
     267             : 
     268             :   bool
     269             :   CheckStateForWrite(ErrorResult& aRv);
     270             : 
     271             :   bool
     272             :   CheckStateForWriteOrAppend(bool aAppend, ErrorResult& aRv);
     273             : 
     274             :   bool
     275             :   CheckWindow();
     276             : 
     277             :   already_AddRefed<IDBFileRequest>
     278             :   Read(uint64_t aSize, bool aHasEncoding, const nsAString& aEncoding,
     279             :        ErrorResult& aRv);
     280             : 
     281             :   already_AddRefed<IDBFileRequest>
     282             :   WriteOrAppend(const StringOrArrayBufferOrArrayBufferViewOrBlob& aValue,
     283             :                 bool aAppend,
     284             :                 ErrorResult& aRv);
     285             : 
     286             :   already_AddRefed<IDBFileRequest>
     287             :   WriteOrAppend(const nsAString& aValue, bool aAppend, ErrorResult& aRv);
     288             : 
     289             :   already_AddRefed<IDBFileRequest>
     290             :   WriteOrAppend(const ArrayBuffer& aValue, bool aAppend, ErrorResult& aRv);
     291             : 
     292             :   already_AddRefed<IDBFileRequest>
     293             :   WriteOrAppend(const ArrayBufferView& aValue, bool aAppend, ErrorResult& aRv);
     294             : 
     295             :   already_AddRefed<IDBFileRequest>
     296             :   WriteOrAppend(Blob& aValue, bool aAppend, ErrorResult& aRv);
     297             : 
     298             :   already_AddRefed<IDBFileRequest>
     299             :   WriteInternal(const FileRequestData& aData, uint64_t aDataLength,
     300             :                 bool aAppend, ErrorResult& aRv);
     301             : 
     302             :   void
     303             :   SendFinish();
     304             : 
     305             :   void
     306             :   SendAbort();
     307             : };
     308             : 
     309             : } // namespace dom
     310             : } // namespace mozilla
     311             : 
     312             : #endif // mozilla_dom_idbfilehandle_h__

Generated by: LCOV version 1.13