CSS.cpp (17247B)
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 7 /* DOM object holding utility CSS functions */ 8 9 #include "CSS.h" 10 11 #include "mozilla/AlreadyAddRefed.h" 12 #include "mozilla/RefPtr.h" 13 #include "mozilla/ServoBindings.h" 14 #include "mozilla/dom/BindingDeclarations.h" 15 #include "mozilla/dom/CSSUnitValue.h" 16 #include "mozilla/dom/Document.h" 17 #include "mozilla/dom/DocumentInlines.h" 18 #include "mozilla/dom/HighlightRegistry.h" 19 #include "nsStyleUtil.h" 20 #include "xpcpublic.h" 21 22 namespace mozilla::dom { 23 24 /* static */ 25 bool CSS::Supports(const GlobalObject&, const nsACString& aProperty, 26 const nsACString& aValue) { 27 return Servo_CSSSupports2(&aProperty, &aValue); 28 } 29 30 /* static */ 31 bool CSS::Supports(const GlobalObject&, const nsACString& aCondition) { 32 return Servo_CSSSupports(&aCondition, /* ua = */ false, /* chrome = */ false, 33 /* quirks = */ false); 34 } 35 36 /* static */ 37 void CSS::Escape(const GlobalObject&, const nsAString& aIdent, 38 nsAString& aReturn) { 39 nsStyleUtil::AppendEscapedCSSIdent(aIdent, aReturn); 40 } 41 42 static Document* GetDocument(const GlobalObject& aGlobal) { 43 nsCOMPtr<nsPIDOMWindowInner> window = 44 do_QueryInterface(aGlobal.GetAsSupports()); 45 MOZ_DIAGNOSTIC_ASSERT(window, "CSS is only exposed to window globals"); 46 if (!window) { 47 return nullptr; 48 } 49 return window->GetExtantDoc(); 50 } 51 52 /* static */ 53 HighlightRegistry* CSS::GetHighlights(const GlobalObject& aGlobal, 54 ErrorResult& aRv) { 55 Document* doc = GetDocument(aGlobal); 56 if (!doc) { 57 aRv.ThrowUnknownError("No document associated to this global?"); 58 return nullptr; 59 } 60 return &doc->HighlightRegistry(); 61 } 62 63 /* static */ 64 void CSS::RegisterProperty(const GlobalObject& aGlobal, 65 const PropertyDefinition& aDefinition, 66 ErrorResult& aRv) { 67 Document* doc = GetDocument(aGlobal); 68 if (!doc) { 69 return aRv.ThrowUnknownError("No document associated to this global?"); 70 } 71 doc->EnsureStyleSet().RegisterProperty(aDefinition, aRv); 72 } 73 74 // start of CSS Typed OM Web IDL implementation 75 76 /* static */ 77 already_AddRefed<CSSUnitValue> CSS::Number(const GlobalObject& aGlobal, 78 double aValue) { 79 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 80 "number"_ns); 81 } 82 83 /* static */ 84 already_AddRefed<CSSUnitValue> CSS::Percent(const GlobalObject& aGlobal, 85 double aValue) { 86 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 87 "percent"_ns); 88 } 89 90 // <length> 91 /* static */ 92 already_AddRefed<CSSUnitValue> CSS::Cap(const GlobalObject& aGlobal, 93 double aValue) { 94 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "cap"_ns); 95 } 96 97 /* static */ 98 already_AddRefed<CSSUnitValue> CSS::Ch(const GlobalObject& aGlobal, 99 double aValue) { 100 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "ch"_ns); 101 } 102 103 /* static */ 104 already_AddRefed<CSSUnitValue> CSS::Em(const GlobalObject& aGlobal, 105 double aValue) { 106 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "em"_ns); 107 } 108 109 /* static */ 110 already_AddRefed<CSSUnitValue> CSS::Ex(const GlobalObject& aGlobal, 111 double aValue) { 112 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "ex"_ns); 113 } 114 115 /* static */ 116 already_AddRefed<CSSUnitValue> CSS::Ic(const GlobalObject& aGlobal, 117 double aValue) { 118 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "ic"_ns); 119 } 120 121 /* static */ 122 already_AddRefed<CSSUnitValue> CSS::Lh(const GlobalObject& aGlobal, 123 double aValue) { 124 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "lh"_ns); 125 } 126 127 /* static */ 128 already_AddRefed<CSSUnitValue> CSS::Rcap(const GlobalObject& aGlobal, 129 double aValue) { 130 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 131 "rcap"_ns); 132 } 133 134 /* static */ 135 already_AddRefed<CSSUnitValue> CSS::Rch(const GlobalObject& aGlobal, 136 double aValue) { 137 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "rch"_ns); 138 } 139 140 /* static */ 141 already_AddRefed<CSSUnitValue> CSS::Rem(const GlobalObject& aGlobal, 142 double aValue) { 143 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "rem"_ns); 144 } 145 146 /* static */ 147 already_AddRefed<CSSUnitValue> CSS::Rex(const GlobalObject& aGlobal, 148 double aValue) { 149 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "rex"_ns); 150 } 151 152 /* static */ 153 already_AddRefed<CSSUnitValue> CSS::Ric(const GlobalObject& aGlobal, 154 double aValue) { 155 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "ric"_ns); 156 } 157 158 /* static */ 159 already_AddRefed<CSSUnitValue> CSS::Rlh(const GlobalObject& aGlobal, 160 double aValue) { 161 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "rlh"_ns); 162 } 163 164 /* static */ 165 already_AddRefed<CSSUnitValue> CSS::Vw(const GlobalObject& aGlobal, 166 double aValue) { 167 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "vw"_ns); 168 } 169 170 /* static */ 171 already_AddRefed<CSSUnitValue> CSS::Vh(const GlobalObject& aGlobal, 172 double aValue) { 173 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "vh"_ns); 174 } 175 176 /* static */ 177 already_AddRefed<CSSUnitValue> CSS::Vi(const GlobalObject& aGlobal, 178 double aValue) { 179 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "vi"_ns); 180 } 181 182 /* static */ 183 already_AddRefed<CSSUnitValue> CSS::Vb(const GlobalObject& aGlobal, 184 double aValue) { 185 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "vb"_ns); 186 } 187 188 /* static */ 189 already_AddRefed<CSSUnitValue> CSS::Vmin(const GlobalObject& aGlobal, 190 double aValue) { 191 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 192 "vmin"_ns); 193 } 194 195 /* static */ 196 already_AddRefed<CSSUnitValue> CSS::Vmax(const GlobalObject& aGlobal, 197 double aValue) { 198 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 199 "vmax"_ns); 200 } 201 202 /* static */ 203 already_AddRefed<CSSUnitValue> CSS::Svw(const GlobalObject& aGlobal, 204 double aValue) { 205 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "svw"_ns); 206 } 207 208 /* static */ 209 already_AddRefed<CSSUnitValue> CSS::Svh(const GlobalObject& aGlobal, 210 double aValue) { 211 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "svh"_ns); 212 } 213 214 /* static */ 215 already_AddRefed<CSSUnitValue> CSS::Svi(const GlobalObject& aGlobal, 216 double aValue) { 217 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "svi"_ns); 218 } 219 220 /* static */ 221 already_AddRefed<CSSUnitValue> CSS::Svb(const GlobalObject& aGlobal, 222 double aValue) { 223 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "svb"_ns); 224 } 225 226 /* static */ 227 already_AddRefed<CSSUnitValue> CSS::Svmin(const GlobalObject& aGlobal, 228 double aValue) { 229 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 230 "svmin"_ns); 231 } 232 233 /* static */ 234 already_AddRefed<CSSUnitValue> CSS::Svmax(const GlobalObject& aGlobal, 235 double aValue) { 236 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 237 "svmax"_ns); 238 } 239 240 /* static */ 241 already_AddRefed<CSSUnitValue> CSS::Lvw(const GlobalObject& aGlobal, 242 double aValue) { 243 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "lvw"_ns); 244 } 245 246 /* static */ 247 already_AddRefed<CSSUnitValue> CSS::Lvh(const GlobalObject& aGlobal, 248 double aValue) { 249 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "lvh"_ns); 250 } 251 252 /* static */ 253 already_AddRefed<CSSUnitValue> CSS::Lvi(const GlobalObject& aGlobal, 254 double aValue) { 255 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "lvi"_ns); 256 } 257 258 /* static */ 259 already_AddRefed<CSSUnitValue> CSS::Lvb(const GlobalObject& aGlobal, 260 double aValue) { 261 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "lvb"_ns); 262 } 263 264 /* static */ 265 already_AddRefed<CSSUnitValue> CSS::Lvmin(const GlobalObject& aGlobal, 266 double aValue) { 267 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 268 "lvmin"_ns); 269 } 270 271 /* static */ 272 already_AddRefed<CSSUnitValue> CSS::Lvmax(const GlobalObject& aGlobal, 273 double aValue) { 274 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 275 "lvmax"_ns); 276 } 277 278 /* static */ 279 already_AddRefed<CSSUnitValue> CSS::Dvw(const GlobalObject& aGlobal, 280 double aValue) { 281 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "dvw"_ns); 282 } 283 284 /* static */ 285 already_AddRefed<CSSUnitValue> CSS::Dvh(const GlobalObject& aGlobal, 286 double aValue) { 287 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "dvh"_ns); 288 } 289 290 /* static */ 291 already_AddRefed<CSSUnitValue> CSS::Dvi(const GlobalObject& aGlobal, 292 double aValue) { 293 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "dvi"_ns); 294 } 295 296 /* static */ 297 already_AddRefed<CSSUnitValue> CSS::Dvb(const GlobalObject& aGlobal, 298 double aValue) { 299 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "dvb"_ns); 300 } 301 302 /* static */ 303 already_AddRefed<CSSUnitValue> CSS::Dvmin(const GlobalObject& aGlobal, 304 double aValue) { 305 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 306 "dvmin"_ns); 307 } 308 309 /* static */ 310 already_AddRefed<CSSUnitValue> CSS::Dvmax(const GlobalObject& aGlobal, 311 double aValue) { 312 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 313 "dvmax"_ns); 314 } 315 316 /* static */ 317 already_AddRefed<CSSUnitValue> CSS::Cqw(const GlobalObject& aGlobal, 318 double aValue) { 319 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "cqw"_ns); 320 } 321 322 /* static */ 323 already_AddRefed<CSSUnitValue> CSS::Cqh(const GlobalObject& aGlobal, 324 double aValue) { 325 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "cqh"_ns); 326 } 327 328 /* static */ 329 already_AddRefed<CSSUnitValue> CSS::Cqi(const GlobalObject& aGlobal, 330 double aValue) { 331 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "cqi"_ns); 332 } 333 334 /* static */ 335 already_AddRefed<CSSUnitValue> CSS::Cqb(const GlobalObject& aGlobal, 336 double aValue) { 337 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "cqb"_ns); 338 } 339 340 /* static */ 341 already_AddRefed<CSSUnitValue> CSS::Cqmin(const GlobalObject& aGlobal, 342 double aValue) { 343 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 344 "cqmin"_ns); 345 } 346 347 /* static */ 348 already_AddRefed<CSSUnitValue> CSS::Cqmax(const GlobalObject& aGlobal, 349 double aValue) { 350 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 351 "cqmax"_ns); 352 } 353 354 /* static */ 355 already_AddRefed<CSSUnitValue> CSS::Cm(const GlobalObject& aGlobal, 356 double aValue) { 357 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "cm"_ns); 358 } 359 360 /* static */ 361 already_AddRefed<CSSUnitValue> CSS::Mm(const GlobalObject& aGlobal, 362 double aValue) { 363 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "mm"_ns); 364 } 365 366 /* static */ 367 already_AddRefed<CSSUnitValue> CSS::Q(const GlobalObject& aGlobal, 368 double aValue) { 369 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "q"_ns); 370 } 371 372 /* static */ 373 already_AddRefed<CSSUnitValue> CSS::In(const GlobalObject& aGlobal, 374 double aValue) { 375 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "in"_ns); 376 } 377 378 /* static */ 379 already_AddRefed<CSSUnitValue> CSS::Pt(const GlobalObject& aGlobal, 380 double aValue) { 381 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "pt"_ns); 382 } 383 384 /* static */ 385 already_AddRefed<CSSUnitValue> CSS::Pc(const GlobalObject& aGlobal, 386 double aValue) { 387 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "pc"_ns); 388 } 389 390 /* static */ 391 already_AddRefed<CSSUnitValue> CSS::Px(const GlobalObject& aGlobal, 392 double aValue) { 393 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "px"_ns); 394 } 395 396 // <angle> 397 /* static */ 398 already_AddRefed<CSSUnitValue> CSS::Deg(const GlobalObject& aGlobal, 399 double aValue) { 400 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "deg"_ns); 401 } 402 403 /* static */ 404 already_AddRefed<CSSUnitValue> CSS::Grad(const GlobalObject& aGlobal, 405 double aValue) { 406 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 407 "grad"_ns); 408 } 409 410 /* static */ 411 already_AddRefed<CSSUnitValue> CSS::Rad(const GlobalObject& aGlobal, 412 double aValue) { 413 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "rad"_ns); 414 } 415 416 /* static */ 417 already_AddRefed<CSSUnitValue> CSS::Turn(const GlobalObject& aGlobal, 418 double aValue) { 419 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 420 "turn"_ns); 421 } 422 423 // <time> 424 /* static */ 425 already_AddRefed<CSSUnitValue> CSS::S(const GlobalObject& aGlobal, 426 double aValue) { 427 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "s"_ns); 428 } 429 430 /* static */ 431 already_AddRefed<CSSUnitValue> CSS::Ms(const GlobalObject& aGlobal, 432 double aValue) { 433 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "ms"_ns); 434 } 435 436 // <frequency> 437 /* static */ 438 already_AddRefed<CSSUnitValue> CSS::Hz(const GlobalObject& aGlobal, 439 double aValue) { 440 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "hz"_ns); 441 } 442 443 /* static */ 444 already_AddRefed<CSSUnitValue> CSS::KHz(const GlobalObject& aGlobal, 445 double aValue) { 446 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "khz"_ns); 447 } 448 449 // <resolution> 450 /* static */ 451 already_AddRefed<CSSUnitValue> CSS::Dpi(const GlobalObject& aGlobal, 452 double aValue) { 453 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "dpi"_ns); 454 } 455 456 /* static */ 457 already_AddRefed<CSSUnitValue> CSS::Dpcm(const GlobalObject& aGlobal, 458 double aValue) { 459 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 460 "dpcm"_ns); 461 } 462 463 /* static */ 464 already_AddRefed<CSSUnitValue> CSS::Dppx(const GlobalObject& aGlobal, 465 double aValue) { 466 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, 467 "dppx"_ns); 468 } 469 470 // <flex> 471 /* static */ 472 already_AddRefed<CSSUnitValue> CSS::Fr(const GlobalObject& aGlobal, 473 double aValue) { 474 return MakeAndAddRef<CSSUnitValue>(aGlobal.GetAsSupports(), aValue, "fr"_ns); 475 } 476 477 // end of CSS Typed OM Web IDL implementation 478 479 } // namespace mozilla::dom