Backout a74bd5095902, Bug 959405 - Please update the Buri Moz-central, 1.3, 1.2 with...
[gecko.git] / dom / camera / DOMCameraManager.h
blob5758a475fd427187101cbc36f6240a7c53e870f4
1 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
2 /* vim: set ts=2 et sw=2 tw=40: */
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/. */
7 #ifndef DOM_CAMERA_DOMCAMERAMANAGER_H
8 #define DOM_CAMERA_DOMCAMERAMANAGER_H
10 #include "mozilla/dom/BindingDeclarations.h"
11 #include "nsCOMPtr.h"
12 #include "nsAutoPtr.h"
13 #include "nsIThread.h"
14 #include "nsIObserver.h"
15 #include "nsThreadUtils.h"
16 #include "nsHashKeys.h"
17 #include "nsWrapperCache.h"
18 #include "nsWeakReference.h"
19 #include "nsClassHashtable.h"
20 #include "nsIDOMCameraManager.h"
21 #include "nsCycleCollectionParticipant.h"
22 #include "mozilla/Attributes.h"
23 #include "nsPIDOMWindow.h"
25 namespace mozilla {
26 class ErrorResult;
27 class nsDOMCameraControl;
28 namespace dom {
29 class CameraSelector;
33 typedef nsTArray<nsRefPtr<mozilla::nsDOMCameraControl> > CameraControls;
34 typedef nsClassHashtable<nsUint64HashKey, CameraControls> WindowTable;
36 class nsDOMCameraManager MOZ_FINAL
37 : public nsIObserver
38 , public nsSupportsWeakReference
39 , public nsWrapperCache
41 public:
42 NS_DECL_CYCLE_COLLECTING_ISUPPORTS
43 NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsDOMCameraManager,
44 nsIObserver)
45 NS_DECL_NSIOBSERVER
47 static bool CheckPermission(nsPIDOMWindow* aWindow);
48 static already_AddRefed<nsDOMCameraManager>
49 CreateInstance(nsPIDOMWindow* aWindow);
50 static bool IsWindowStillActive(uint64_t aWindowId);
52 void Register(mozilla::nsDOMCameraControl* aDOMCameraControl);
53 void OnNavigation(uint64_t aWindowId);
55 nsresult GetNumberOfCameras(int32_t& aDeviceCount);
56 nsresult GetCameraName(uint32_t aDeviceNum, nsCString& aDeviceName);
58 // WebIDL
59 void GetCamera(const mozilla::dom::CameraSelector& aOptions,
60 nsICameraGetCameraCallback* aCallback,
61 const mozilla::dom::Optional<nsICameraErrorCallback*>& ErrorCallback,
62 mozilla::ErrorResult& aRv);
63 void GetListOfCameras(nsTArray<nsString>& aList, mozilla::ErrorResult& aRv);
65 nsPIDOMWindow* GetParentObject() const { return mWindow; }
66 virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aScope)
67 MOZ_OVERRIDE;
69 protected:
70 void XpComShutdown();
71 void Shutdown(uint64_t aWindowId);
72 ~nsDOMCameraManager();
74 private:
75 nsDOMCameraManager() MOZ_DELETE;
76 nsDOMCameraManager(nsPIDOMWindow* aWindow);
77 nsDOMCameraManager(const nsDOMCameraManager&) MOZ_DELETE;
78 nsDOMCameraManager& operator=(const nsDOMCameraManager&) MOZ_DELETE;
80 protected:
81 uint64_t mWindowId;
82 nsCOMPtr<nsIThread> mCameraThread;
83 nsCOMPtr<nsPIDOMWindow> mWindow;
84 /**
85 * 'mActiveWindows' is only ever accessed while in the main thread,
86 * so it is not otherwise protected.
88 static ::WindowTable* sActiveWindows;
91 class GetCameraTask : public nsRunnable
93 public:
94 GetCameraTask(uint32_t aCameraId, nsICameraGetCameraCallback* onSuccess, nsICameraErrorCallback* onError, nsIThread* aCameraThread)
95 : mCameraId(aCameraId)
96 , mOnSuccessCb(onSuccess)
97 , mOnErrorCb(onError)
98 , mCameraThread(aCameraThread)
99 { }
101 NS_IMETHOD Run() MOZ_OVERRIDE;
103 protected:
104 uint32_t mCameraId;
105 nsCOMPtr<nsICameraGetCameraCallback> mOnSuccessCb;
106 nsCOMPtr<nsICameraErrorCallback> mOnErrorCb;
107 nsCOMPtr<nsIThread> mCameraThread;
110 #endif // DOM_CAMERA_DOMCAMERAMANAGER_H