tor-browser

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

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