tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ImageCapture.h (3002B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim:set ts=2 sw=2 sts=2 et cindent: */
      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
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef IMAGECAPTURE_H
      8 #define IMAGECAPTURE_H
      9 
     10 #include "mozilla/DOMEventTargetHelper.h"
     11 #include "mozilla/Logging.h"
     12 #include "mozilla/dom/ImageCaptureBinding.h"
     13 
     14 namespace mozilla {
     15 
     16 #ifndef IC_LOG
     17 LogModule* GetICLog();
     18 #  define IC_LOG(...) \
     19    MOZ_LOG(GetICLog(), mozilla::LogLevel::Debug, (__VA_ARGS__))
     20 #endif
     21 
     22 namespace dom {
     23 
     24 class Blob;
     25 class MediaStreamTrack;
     26 class VideoStreamTrack;
     27 
     28 /**
     29 * Implementation of https://dvcs.w3.org/hg/dap/raw-file/default/media-stream-
     30 * capture/ImageCapture.html.
     31 * The ImageCapture accepts a video MediaStreamTrack as input source. The image
     32 * will be sent back as a JPG format via Blob event.
     33 *
     34 * All the functions in ImageCapture are run in main thread.
     35 *
     36 * There are two ways to capture image, MediaEngineSource and MediaTrackGraph.
     37 * When the implementation of MediaEngineSource supports TakePhoto(),
     38 * it uses the platform camera to grab image. Otherwise, it falls back
     39 * to the MediaTrackGraph way.
     40 */
     41 
     42 class ImageCapture final : public DOMEventTargetHelper {
     43 public:
     44  NS_DECL_ISUPPORTS_INHERITED
     45  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ImageCapture, DOMEventTargetHelper)
     46 
     47  IMPL_EVENT_HANDLER(photo)
     48  IMPL_EVENT_HANDLER(error)
     49 
     50  // WebIDL members.
     51  void TakePhoto(ErrorResult& aResult);
     52 
     53  // The MediaStreamTrack passed into the constructor.
     54  MediaStreamTrack* GetVideoStreamTrack() const;
     55 
     56  // nsWrapperCache member
     57  JSObject* WrapObject(JSContext* aCx,
     58                       JS::Handle<JSObject*> aGivenProto) override {
     59    return ImageCapture_Binding::Wrap(aCx, this, aGivenProto);
     60  }
     61 
     62  // ImageCapture class members
     63  nsIGlobalObject* GetParentObject() const { return GetOwnerGlobal(); }
     64 
     65  static already_AddRefed<ImageCapture> Constructor(const GlobalObject& aGlobal,
     66                                                    MediaStreamTrack& aTrack,
     67                                                    ErrorResult& aRv);
     68 
     69  ImageCapture(VideoStreamTrack* aTrack, nsPIDOMWindowInner* aOwnerWindow);
     70 
     71  // Post a Blob event to script.
     72  nsresult PostBlobEvent(Blob* aBlob);
     73 
     74  // Post an error event to script.
     75  // aErrorCode should be one of error codes defined in ImageCaptureError.h.
     76  // aReason is the nsresult which maps to a error string in
     77  // dom/base/domerr.msg.
     78  nsresult PostErrorEvent(uint16_t aErrorCode, nsresult aReason = NS_OK);
     79 
     80  bool CheckPrincipal();
     81 
     82 protected:
     83  virtual ~ImageCapture();
     84 
     85  // Capture image by MediaEngine. If it's not support taking photo, this
     86  // function should return NS_ERROR_NOT_IMPLEMENTED.
     87  nsresult TakePhotoByMediaEngine();
     88 
     89  RefPtr<VideoStreamTrack> mTrack;
     90 };
     91 
     92 }  // namespace dom
     93 }  // namespace mozilla
     94 
     95 #endif  // IMAGECAPTURE_H