forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			149 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | 
						|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
 | 
						|
/* 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_idbfilehandle_h__
 | 
						|
#define mozilla_dom_idbfilehandle_h__
 | 
						|
 | 
						|
#include "IDBFileRequest.h"
 | 
						|
#include "js/TypeDecls.h"
 | 
						|
#include "mozilla/Attributes.h"
 | 
						|
#include "mozilla/dom/FileHandleBase.h"
 | 
						|
#include "mozilla/DOMEventTargetHelper.h"
 | 
						|
#include "nsCycleCollectionParticipant.h"
 | 
						|
#include "nsIRunnable.h"
 | 
						|
#include "nsWeakReference.h"
 | 
						|
 | 
						|
class nsPIDOMWindowInner;
 | 
						|
 | 
						|
namespace mozilla {
 | 
						|
namespace dom {
 | 
						|
 | 
						|
struct IDBFileMetadataParameters;
 | 
						|
class IDBFileRequest;
 | 
						|
class IDBMutableFile;
 | 
						|
 | 
						|
class IDBFileHandle final
 | 
						|
  : public DOMEventTargetHelper
 | 
						|
  , public nsIRunnable
 | 
						|
  , public FileHandleBase
 | 
						|
  , public nsSupportsWeakReference
 | 
						|
{
 | 
						|
  RefPtr<IDBMutableFile> mMutableFile;
 | 
						|
 | 
						|
public:
 | 
						|
  static already_AddRefed<IDBFileHandle>
 | 
						|
  Create(IDBMutableFile* aMutableFile,
 | 
						|
         FileMode aMode);
 | 
						|
 | 
						|
  // WebIDL
 | 
						|
  nsPIDOMWindowInner*
 | 
						|
  GetParentObject() const
 | 
						|
  {
 | 
						|
    AssertIsOnOwningThread();
 | 
						|
    return GetOwner();
 | 
						|
  }
 | 
						|
 | 
						|
  IDBMutableFile*
 | 
						|
  GetMutableFile() const
 | 
						|
  {
 | 
						|
    AssertIsOnOwningThread();
 | 
						|
    return mMutableFile;
 | 
						|
  }
 | 
						|
 | 
						|
  IDBMutableFile*
 | 
						|
  GetFileHandle() const
 | 
						|
  {
 | 
						|
    AssertIsOnOwningThread();
 | 
						|
    return GetMutableFile();
 | 
						|
  }
 | 
						|
 | 
						|
  already_AddRefed<IDBFileRequest>
 | 
						|
  GetMetadata(const IDBFileMetadataParameters& aParameters, ErrorResult& aRv);
 | 
						|
 | 
						|
  already_AddRefed<IDBFileRequest>
 | 
						|
  ReadAsArrayBuffer(uint64_t aSize, ErrorResult& aRv)
 | 
						|
  {
 | 
						|
    AssertIsOnOwningThread();
 | 
						|
    return Read(aSize, false, NullString(), aRv).downcast<IDBFileRequest>();
 | 
						|
  }
 | 
						|
 | 
						|
  already_AddRefed<IDBFileRequest>
 | 
						|
  ReadAsText(uint64_t aSize, const nsAString& aEncoding, ErrorResult& aRv)
 | 
						|
  {
 | 
						|
    AssertIsOnOwningThread();
 | 
						|
    return Read(aSize, true, aEncoding, aRv).downcast<IDBFileRequest>();
 | 
						|
  }
 | 
						|
 | 
						|
  already_AddRefed<IDBFileRequest>
 | 
						|
  Write(const StringOrArrayBufferOrArrayBufferViewOrBlob& aValue,
 | 
						|
        ErrorResult& aRv)
 | 
						|
  {
 | 
						|
    AssertIsOnOwningThread();
 | 
						|
    return WriteOrAppend(aValue, false, aRv).downcast<IDBFileRequest>();
 | 
						|
  }
 | 
						|
 | 
						|
  already_AddRefed<IDBFileRequest>
 | 
						|
  Append(const StringOrArrayBufferOrArrayBufferViewOrBlob& aValue,
 | 
						|
         ErrorResult& aRv)
 | 
						|
  {
 | 
						|
    AssertIsOnOwningThread();
 | 
						|
    return WriteOrAppend(aValue, true, aRv).downcast<IDBFileRequest>();
 | 
						|
  }
 | 
						|
 | 
						|
  already_AddRefed<IDBFileRequest>
 | 
						|
  Truncate(const Optional<uint64_t>& aSize, ErrorResult& aRv)
 | 
						|
  {
 | 
						|
    AssertIsOnOwningThread();
 | 
						|
    return FileHandleBase::Truncate(aSize, aRv).downcast<IDBFileRequest>();
 | 
						|
  }
 | 
						|
 | 
						|
  already_AddRefed<IDBFileRequest>
 | 
						|
  Flush(ErrorResult& aRv)
 | 
						|
  {
 | 
						|
    AssertIsOnOwningThread();
 | 
						|
    return FileHandleBase::Flush(aRv).downcast<IDBFileRequest>();
 | 
						|
  }
 | 
						|
 | 
						|
  IMPL_EVENT_HANDLER(complete)
 | 
						|
  IMPL_EVENT_HANDLER(abort)
 | 
						|
  IMPL_EVENT_HANDLER(error)
 | 
						|
 | 
						|
  NS_DECL_ISUPPORTS_INHERITED
 | 
						|
  NS_DECL_NSIRUNNABLE
 | 
						|
  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(IDBFileHandle, DOMEventTargetHelper)
 | 
						|
 | 
						|
  // nsIDOMEventTarget
 | 
						|
  virtual nsresult
 | 
						|
  PreHandleEvent(EventChainPreVisitor& aVisitor) override;
 | 
						|
 | 
						|
  // WrapperCache
 | 
						|
  virtual JSObject*
 | 
						|
  WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
 | 
						|
 | 
						|
  // FileHandleBase
 | 
						|
  virtual MutableFileBase*
 | 
						|
  MutableFile() const override;
 | 
						|
 | 
						|
  virtual void
 | 
						|
  HandleCompleteOrAbort(bool aAborted) override;
 | 
						|
 | 
						|
private:
 | 
						|
  IDBFileHandle(FileMode aMode,
 | 
						|
                IDBMutableFile* aMutableFile);
 | 
						|
  ~IDBFileHandle();
 | 
						|
 | 
						|
  // FileHandleBase
 | 
						|
  virtual bool
 | 
						|
  CheckWindow() override;
 | 
						|
 | 
						|
  virtual already_AddRefed<FileRequestBase>
 | 
						|
  GenerateFileRequest() override;
 | 
						|
};
 | 
						|
 | 
						|
} // namespace dom
 | 
						|
} // namespace mozilla
 | 
						|
 | 
						|
#endif // mozilla_dom_idbfilehandle_h__
 |