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
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 : #ifndef nsScreen_h___
7 : #define nsScreen_h___
8 :
9 : #include "mozilla/Attributes.h"
10 : #include "mozilla/dom/ScreenOrientation.h"
11 : #include "mozilla/DOMEventTargetHelper.h"
12 : #include "mozilla/ErrorResult.h"
13 : #include "nsIDOMScreen.h"
14 : #include "nsCOMPtr.h"
15 : #include "nsRect.h"
16 :
17 : class nsDeviceContext;
18 :
19 : // Script "screen" object
20 : class nsScreen : public mozilla::DOMEventTargetHelper
21 : , public nsIDOMScreen
22 : {
23 : typedef mozilla::ErrorResult ErrorResult;
24 : public:
25 : static already_AddRefed<nsScreen> Create(nsPIDOMWindowInner* aWindow);
26 :
27 : NS_DECL_ISUPPORTS_INHERITED
28 : NS_DECL_NSIDOMSCREEN
29 11 : NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsScreen, mozilla::DOMEventTargetHelper)
30 0 : NS_REALLY_FORWARD_NSIDOMEVENTTARGET(mozilla::DOMEventTargetHelper)
31 :
32 1 : nsPIDOMWindowInner* GetParentObject() const
33 : {
34 1 : return GetOwner();
35 : }
36 :
37 : nsPIDOMWindowOuter* GetOuter() const;
38 :
39 0 : int32_t GetTop(ErrorResult& aRv)
40 : {
41 0 : nsRect rect;
42 0 : aRv = GetRect(rect);
43 0 : return rect.y;
44 : }
45 :
46 0 : int32_t GetLeft(ErrorResult& aRv)
47 : {
48 0 : nsRect rect;
49 0 : aRv = GetRect(rect);
50 0 : return rect.x;
51 : }
52 :
53 3 : int32_t GetWidth(ErrorResult& aRv)
54 : {
55 6 : nsRect rect;
56 3 : if (IsDeviceSizePageSize()) {
57 0 : if (nsCOMPtr<nsPIDOMWindowInner> owner = GetOwner()) {
58 0 : int32_t innerWidth = 0;
59 0 : aRv = owner->GetInnerWidth(&innerWidth);
60 0 : return innerWidth;
61 : }
62 : }
63 :
64 3 : aRv = GetRect(rect);
65 3 : return rect.width;
66 : }
67 :
68 3 : int32_t GetHeight(ErrorResult& aRv)
69 : {
70 6 : nsRect rect;
71 3 : if (IsDeviceSizePageSize()) {
72 0 : if (nsCOMPtr<nsPIDOMWindowInner> owner = GetOwner()) {
73 0 : int32_t innerHeight = 0;
74 0 : aRv = owner->GetInnerHeight(&innerHeight);
75 0 : return innerHeight;
76 : }
77 : }
78 :
79 3 : aRv = GetRect(rect);
80 3 : return rect.height;
81 : }
82 :
83 : int32_t GetPixelDepth(ErrorResult& aRv);
84 0 : int32_t GetColorDepth(ErrorResult& aRv)
85 : {
86 0 : return GetPixelDepth(aRv);
87 : }
88 :
89 0 : int32_t GetAvailTop(ErrorResult& aRv)
90 : {
91 0 : nsRect rect;
92 0 : aRv = GetAvailRect(rect);
93 0 : return rect.y;
94 : }
95 :
96 0 : int32_t GetAvailLeft(ErrorResult& aRv)
97 : {
98 0 : nsRect rect;
99 0 : aRv = GetAvailRect(rect);
100 0 : return rect.x;
101 : }
102 :
103 2 : int32_t GetAvailWidth(ErrorResult& aRv)
104 : {
105 4 : nsRect rect;
106 2 : aRv = GetAvailRect(rect);
107 4 : return rect.width;
108 : }
109 :
110 2 : int32_t GetAvailHeight(ErrorResult& aRv)
111 : {
112 4 : nsRect rect;
113 2 : aRv = GetAvailRect(rect);
114 4 : return rect.height;
115 : }
116 :
117 : // Deprecated
118 : void GetMozOrientation(nsString& aOrientation,
119 : mozilla::dom::CallerType aCallerType) const;
120 :
121 0 : IMPL_EVENT_HANDLER(mozorientationchange)
122 :
123 : bool MozLockOrientation(const nsAString& aOrientation, ErrorResult& aRv);
124 : bool MozLockOrientation(const mozilla::dom::Sequence<nsString>& aOrientations, ErrorResult& aRv);
125 : void MozUnlockOrientation();
126 :
127 : virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
128 :
129 : mozilla::dom::ScreenOrientation* Orientation() const;
130 :
131 : protected:
132 : nsDeviceContext* GetDeviceContext();
133 : nsresult GetRect(nsRect& aRect);
134 : nsresult GetAvailRect(nsRect& aRect);
135 : nsresult GetWindowInnerRect(nsRect& aRect);
136 :
137 : private:
138 : explicit nsScreen(nsPIDOMWindowInner* aWindow);
139 : virtual ~nsScreen();
140 :
141 : bool IsDeviceSizePageSize();
142 :
143 : bool ShouldResistFingerprinting() const;
144 :
145 : RefPtr<mozilla::dom::ScreenOrientation> mScreenOrientation;
146 : };
147 :
148 : #endif /* nsScreen_h___ */
|