morgan pushed to branch tor-browser-128.14.0esr-14.5-1 at The Tor Project / Applications / Tor Browser

Commits:

12 changed files:

Changes:

  • browser/components/BrowserGlue.sys.mjs
    ... ... @@ -529,6 +529,7 @@ let JSWINDOWACTORS = {
    529 529
             L10nMutationsFinished: {},
    
    530 530
             SubmitSearchOnionize: { wantUntrusted: true },
    
    531 531
             SurveyDismissed: { wantUntrusted: true },
    
    532
    +        UserDismissedYEC: { wantUntrusted: true },
    
    532 533
           },
    
    533 534
         },
    
    534 535
     
    

  • browser/components/abouttor/AboutTorChild.sys.mjs
    ... ... @@ -26,6 +26,23 @@ export class AboutTorChild extends JSWindowActorChild {
    26 26
               new this.contentWindow.CustomEvent("L10nMutationsFinished")
    
    27 27
             );
    
    28 28
             break;
    
    29
    +      case "UserDismissedYEC":
    
    30
    +        // YEC banner was closed. Persist this for the rest of this session.
    
    31
    +        // See tor-browser#42188.
    
    32
    +        this.sendAsyncMessage("AboutTor:UserDismissedYEC");
    
    33
    +        break;
    
    34
    +    }
    
    35
    +  }
    
    36
    +
    
    37
    +  receiveMessage(message) {
    
    38
    +    switch (message.name) {
    
    39
    +      case "AboutTor:DismissYEC": {
    
    40
    +        this.contentWindow.dispatchEvent(
    
    41
    +          new this.contentWindow.CustomEvent("DismissYEC")
    
    42
    +        );
    
    43
    +        break;
    
    44
    +      }
    
    29 45
         }
    
    46
    +    return undefined;
    
    30 47
       }
    
    31 48
     }

  • browser/components/abouttor/AboutTorParent.sys.mjs
    ... ... @@ -7,16 +7,37 @@ ChromeUtils.defineESModuleGetters(lazy, {
    7 7
       TorConnect: "resource://gre/modules/TorConnect.sys.mjs",
    
    8 8
     });
    
    9 9
     
    
    10
    +const initializedActors = new Set();
    
    11
    +
    
    10 12
     /**
    
    11 13
      * Actor parent class for the about:tor page.
    
    12 14
      */
    
    13 15
     export class AboutTorParent extends JSWindowActorParent {
    
    16
    +  /*
    
    17
    +   * Whether the user has dismissed the Year End Campaign (YEC) banner this
    
    18
    +   * session.
    
    19
    +   *
    
    20
    +   * @type {boolean}
    
    21
    +   */
    
    22
    +  static #dismissYEC = false;
    
    23
    +
    
    24
    +  didDestroy() {
    
    25
    +    initializedActors.delete(this);
    
    26
    +  }
    
    27
    +
    
    14 28
       receiveMessage(message) {
    
    15 29
         const onionizePref = "torbrowser.homepage.search.onionize";
    
    16 30
         const surveyDismissVersionPref =
    
    17 31
           "torbrowser.homepage.survey.dismiss_version";
    
    18 32
         switch (message.name) {
    
    19
    -      case "AboutTor:GetInitialData":
    
    33
    +      case "AboutTor:GetInitialData": {
    
    34
    +        // Track this actor to send future updates.
    
    35
    +        initializedActors.add(this);
    
    36
    +
    
    37
    +        let appLocale = Services.locale.appLocaleAsBCP47;
    
    38
    +        if (appLocale === "ja-JP-macos") {
    
    39
    +          appLocale = "ja";
    
    40
    +        }
    
    20 41
             return Promise.resolve({
    
    21 42
               torConnectEnabled: lazy.TorConnect.enabled,
    
    22 43
               messageData: lazy.AboutTorMessage.getNext(),
    
    ... ... @@ -26,8 +47,10 @@ export class AboutTorParent extends JSWindowActorParent {
    26 47
                 surveyDismissVersionPref,
    
    27 48
                 0
    
    28 49
               ),
    
    29
    -          appLocale: Services.locale.appLocaleAsBCP47,
    
    50
    +          appLocale,
    
    51
    +          dismissYEC: AboutTorParent.#dismissYEC,
    
    30 52
             });
    
    53
    +      }
    
    31 54
           case "AboutTor:SetSearchOnionize":
    
    32 55
             Services.prefs.setBoolPref(onionizePref, message.data);
    
    33 56
             break;
    
    ... ... @@ -43,6 +66,23 @@ export class AboutTorParent extends JSWindowActorParent {
    43 66
             // the version value to decrease.
    
    44 67
             Services.prefs.setIntPref(surveyDismissVersionPref, message.data);
    
    45 68
             break;
    
    69
    +      case "AboutTor:UserDismissedYEC":
    
    70
    +        AboutTorParent.#dismissYEC = true;
    
    71
    +        for (const actor of initializedActors) {
    
    72
    +          if (actor === this) {
    
    73
    +            // Don't send to ourselves.
    
    74
    +            continue;
    
    75
    +          }
    
    76
    +          // Tell all existing instances to also close the banner, if they still
    
    77
    +          // exist.
    
    78
    +          // NOTE: If the user's new tab page is `about:tor`, this may include
    
    79
    +          // some preloaded pages that have not been made visible yet (see
    
    80
    +          // NewTabPagePreloading).
    
    81
    +          try {
    
    82
    +            actor.sendAsyncMessage("AboutTor:DismissYEC");
    
    83
    +          } catch {}
    
    84
    +        }
    
    85
    +        break;
    
    46 86
         }
    
    47 87
         return undefined;
    
    48 88
       }
    

  • browser/components/abouttor/content/aboutTor.css
    ... ... @@ -324,3 +324,209 @@ body:not(.show-survey) #survey {
    324 324
         --in-content-primary-button-background-active: var(--tor-button-background-color-active-dark);
    
    325 325
       }
    
    326 326
     }
    
    327
    +
    
    328
    +/* Year End Campaign (YEC). */
    
    329
    +body:not(.show-yec) #yec-banner {
    
    330
    +  display: none;
    
    331
    +}
    
    332
    +
    
    333
    +body.show-yec h1 {
    
    334
    +  /* Text of heading is still available to screen readers, but it does not
    
    335
    +   * contribute visually to the page or the body grid layout. */
    
    336
    +  position: absolute;
    
    337
    +  clip-path: inset(50%);
    
    338
    +}
    
    339
    +
    
    340
    +#yec-banner {
    
    341
    +  grid-area: heading;
    
    342
    +  border-radius: 8px;
    
    343
    +  border: 1px solid var(--in-content-box-border-color);
    
    344
    +  display: grid;
    
    345
    +  grid-template:
    
    346
    +    "yec-heading yec-image" auto
    
    347
    +    "yec-body yec-image" auto
    
    348
    +    "yec-matching yec-image" auto
    
    349
    +    "yec-donate yec-image" min-content
    
    350
    +    / 1fr min-content;
    
    351
    +  --yec-image-background: #1f0333;
    
    352
    +  /* Remove 1px from padding for border. */
    
    353
    +  padding-block: 55px 55px;
    
    354
    +  padding-inline: 47px 47px;
    
    355
    +  box-sizing: border-box;
    
    356
    +  max-width: 850px;
    
    357
    +  margin-block-end: 40px;
    
    358
    +  /* Position for the close button. */
    
    359
    +  position: relative;
    
    360
    +  gap: 0 24px;
    
    361
    +}
    
    362
    +
    
    363
    +#yec-image {
    
    364
    +  grid-area: yec-image;
    
    365
    +  align-self: center;
    
    366
    +  /* Center horizontally for small width layout. */
    
    367
    +  justify-self: center;
    
    368
    +  /* background color, padding and border radius only stands out when using a
    
    369
    +   * contrast or forced color theme. */
    
    370
    +  background-color: var(--yec-image-background);
    
    371
    +  border-radius: 8px;
    
    372
    +  padding: 4px;
    
    373
    +  height: 196px;
    
    374
    +  border: 1px solid transparent;
    
    375
    +  /* Remove border and padding from the layout size. These parts are only
    
    376
    +   * visible in contrast or forced color themes. */
    
    377
    +  margin: -5px;
    
    378
    +  /* Do not let forced colors ignore the background-color, which is needed to
    
    379
    +   * see the drawing. */
    
    380
    +  forced-color-adjust: none;
    
    381
    +}
    
    382
    +
    
    383
    +#yec-image:dir(rtl) {
    
    384
    +  transform: scaleX(-1);
    
    385
    +}
    
    386
    +
    
    387
    +#yec-heading {
    
    388
    +  grid-area: yec-heading;
    
    389
    +  margin-block: 0 16px;
    
    390
    +  font-size: 64px;
    
    391
    +  font-weight: 400;
    
    392
    +  font-family: "Jacquard 12", serif;
    
    393
    +}
    
    394
    +
    
    395
    +#yec-heading.all-jacquard12-chars {
    
    396
    +  /* All characters are supported by Jacquard 12.
    
    397
    +   * These have a high natural line-height. */
    
    398
    +  line-height: 1.0;
    
    399
    +}
    
    400
    +
    
    401
    +#yec-body {
    
    402
    +  grid-area: yec-body;
    
    403
    +  margin-block: 0 12px;
    
    404
    +}
    
    405
    +
    
    406
    +#yec-body-highlight {
    
    407
    +  font-weight: 600;
    
    408
    +}
    
    409
    +
    
    410
    +#yec-matching {
    
    411
    +  grid-area: yec-matching;
    
    412
    +  margin-block: 0 32px;
    
    413
    +}
    
    414
    +
    
    415
    +#yec-donate-link {
    
    416
    +  grid-area: yec-donate;
    
    417
    +  justify-self: start;
    
    418
    +  /* Style like a button. */
    
    419
    +  font-weight: var(--button-font-weight);
    
    420
    +  color: var(--in-content-button-text-color);
    
    421
    +  border: 1px solid var(--in-content-button-border-color);
    
    422
    +  border-radius: 4px;
    
    423
    +  background-color: var(--in-content-button-background);
    
    424
    +  padding: var(--button-padding);
    
    425
    +  box-sizing: border-box;
    
    426
    +  min-height: var(--button-min-height);
    
    427
    +  text-decoration: none;
    
    428
    +  display: flex;
    
    429
    +  align-items: center;
    
    430
    +  gap: 8px;
    
    431
    +  white-space: nowrap;
    
    432
    +}
    
    433
    +
    
    434
    +#yec-donate-link > * {
    
    435
    +  flex: 0 0 auto;
    
    436
    +}
    
    437
    +
    
    438
    +#yec-donate-link:hover {
    
    439
    +  background-color: var(--in-content-button-background-hover);
    
    440
    +  color: var(--in-content-button-text-color-hover);
    
    441
    +  border-color: var(--in-content-button-border-color-hover);
    
    442
    +}
    
    443
    +
    
    444
    +#yec-donate-link:hover:active {
    
    445
    +  background-color: var(--in-content-button-background-active);
    
    446
    +  color: var(--in-content-button-text-color-active);
    
    447
    +  border-color: var(--in-content-button-border-color-active);
    
    448
    +}
    
    449
    +
    
    450
    +#yec-donate-icon {
    
    451
    +  -moz-context-properties: fill;
    
    452
    +  fill: currentColor;
    
    453
    +}
    
    454
    +
    
    455
    +#yec-close {
    
    456
    +  position: absolute;
    
    457
    +  inset-block-start: 16px;
    
    458
    +  inset-inline-end: 16px;
    
    459
    +}
    
    460
    +
    
    461
    +@media (max-width: 768px) {
    
    462
    +  /* Small width layout. */
    
    463
    +  #yec-banner {
    
    464
    +    grid-template:
    
    465
    +      "yec-image" min-content
    
    466
    +      "yec-heading" auto
    
    467
    +      "yec-body" auto
    
    468
    +      "yec-matching" auto
    
    469
    +      "yec-donate" min-content
    
    470
    +      / 1fr;
    
    471
    +    padding-block: 31px 39px;
    
    472
    +    padding-inline: 15px;
    
    473
    +    /* Match max-width of the form. */
    
    474
    +    max-width: var(--form-max-width);
    
    475
    +    margin-block-end: 32px;
    
    476
    +  }
    
    477
    +
    
    478
    +  #yec-image {
    
    479
    +    height: 156px;
    
    480
    +  }
    
    481
    +
    
    482
    +  #yec-heading {
    
    483
    +    margin-block-start: 16px;
    
    484
    +    text-align: center;
    
    485
    +    text-wrap-style: balance;
    
    486
    +  }
    
    487
    +
    
    488
    +  #yec-heading {
    
    489
    +    font-size: 3.5rem;
    
    490
    +  }
    
    491
    +
    
    492
    +  #yec-matching {
    
    493
    +    margin-block-end: 16px;
    
    494
    +  }
    
    495
    +
    
    496
    +  #yec-donate-link {
    
    497
    +    justify-self: center;
    
    498
    +  }
    
    499
    +}
    
    500
    +
    
    501
    +@media ((prefers-contrast) or (forced-colors)) and (prefers-color-scheme: dark) {
    
    502
    +  #yec-image {
    
    503
    +    /* Give the dark image a light border to separate from background. */
    
    504
    +    border-color: var(--in-content-box-border-color);
    
    505
    +  }
    
    506
    +}
    
    507
    +
    
    508
    +@media not ((prefers-contrast) or (forced-colors)) {
    
    509
    +  #yec-banner {
    
    510
    +    border-color: transparent;
    
    511
    +    background-color: var(--yec-image-background);
    
    512
    +    --yec-text: #ffffff;
    
    513
    +    --yec-button-background: #b6e368;
    
    514
    +    --yec-button-background-hover: #d2f2a1;
    
    515
    +    --yec-button-background-active: #ecfcd8;
    
    516
    +    --yec-button-text: #15141A;
    
    517
    +    color: var(--yec-text);
    
    518
    +  }
    
    519
    +
    
    520
    +  #yec-body-highlight {
    
    521
    +    color: var(--yec-button-background);
    
    522
    +  }
    
    523
    +
    
    524
    +  #yec-donate-link {
    
    525
    +    --in-content-button-text-color: var(--yec-button-text);
    
    526
    +    --in-content-button-text-color-hover: var(--yec-button-text);
    
    527
    +    --in-content-button-text-color-active: var(--yec-button-text);
    
    528
    +    --in-content-button-background: var(--yec-button-background);
    
    529
    +    --in-content-button-background-hover: var(--yec-button-background-hover);
    
    530
    +    --in-content-button-background-active: var(--yec-button-background-active);
    
    531
    +  }
    
    532
    +}

  • browser/components/abouttor/content/aboutTor.html
    ... ... @@ -4,7 +4,7 @@
    4 4
       <head>
    
    5 5
         <meta
    
    6 6
           http-equiv="Content-Security-Policy"
    
    7
    -      content="default-src chrome:; object-src 'none'"
    
    7
    +      content="default-src chrome:; font-src data:; object-src 'none'"
    
    8 8
         />
    
    9 9
         <title data-l10n-id="newtab-page-title"></title>
    
    10 10
         <link
    
    ... ... @@ -18,6 +18,10 @@
    18 18
           rel="stylesheet"
    
    19 19
           href="chrome://browser/content/abouttor/aboutTor.css"
    
    20 20
         />
    
    21
    +    <link
    
    22
    +      rel="stylesheet"
    
    23
    +      href="chrome://browser/content/abouttor/yec2025-font.css"
    
    24
    +    />
    
    21 25
     
    
    22 26
         <link rel="localization" href="browser/newtab/newtab.ftl" />
    
    23 27
         <link rel="localization" href="toolkit/global/tor-browser.ftl" />
    
    ... ... @@ -33,6 +37,35 @@
    33 37
         <script src="chrome://browser/content/abouttor/aboutTor.js"></script>
    
    34 38
       </head>
    
    35 39
       <body class="onion-pattern-background">
    
    40
    +    <!-- Year End Campaign (YEC). -->
    
    41
    +    <article id="yec-banner" aria-labelledby="yec-heading">
    
    42
    +      <img
    
    43
    +        id="yec-image"
    
    44
    +        alt=""
    
    45
    +        src="chrome://browser/content/abouttor/yec2025-image.svg"
    
    46
    +      />
    
    47
    +      <h2 id="yec-heading" data-l10n-id="yec2025-title"></h2>
    
    48
    +      <p id="yec-body" data-l10n-id="yec2025-body">
    
    49
    +        <b id="yec-body-highlight" data-l10n-name="highlight"></b>
    
    50
    +      </p>
    
    51
    +      <p id="yec-matching" data-l10n-id="yec2025-matching"></p>
    
    52
    +      <a id="yec-donate-link">
    
    53
    +        <span data-l10n-id="yec-donate-button"></span>
    
    54
    +        <img
    
    55
    +          id="yec-donate-icon"
    
    56
    +          alt=""
    
    57
    +          src="chrome://browser/content/abouttor/yec-heart.svg"
    
    58
    +        />
    
    59
    +      </a>
    
    60
    +      <moz-button
    
    61
    +        id="yec-close"
    
    62
    +        type="icon ghost"
    
    63
    +        class="close"
    
    64
    +        size="16"
    
    65
    +        iconSrc="chrome://global/skin/icons/close.svg"
    
    66
    +        data-l10n-id="yec-close-button"
    
    67
    +      ></moz-button>
    
    68
    +    </article>
    
    36 69
         <h1>
    
    37 70
           <img
    
    38 71
             id="tor-browser-logo"
    

  • browser/components/abouttor/content/aboutTor.js
    ... ... @@ -150,20 +150,6 @@ const MessageArea = {
    150 150
             "shown-message"
    
    151 151
           );
    
    152 152
         }
    
    153
    -
    
    154
    -    // In the case where we set the update message, we are still waiting for the
    
    155
    -    // l10n message to complete. We wait until then before showing the content.
    
    156
    -    if (document.hasPendingL10nMutations) {
    
    157
    -      window.addEventListener(
    
    158
    -        "L10nMutationsFinished",
    
    159
    -        () => {
    
    160
    -          document.body.classList.add("initialized");
    
    161
    -        },
    
    162
    -        { once: true }
    
    163
    -      );
    
    164
    -    } else {
    
    165
    -      document.body.classList.add("initialized");
    
    166
    -    }
    
    167 153
       },
    
    168 154
     };
    
    169 155
     
    
    ... ... @@ -185,16 +171,16 @@ const SurveyArea = {
    185 171
       /**
    
    186 172
        * The date to start showing the survey.
    
    187 173
        *
    
    188
    -   * @type {integer}
    
    174
    +   * @type {?integer}
    
    189 175
        */
    
    190
    -  _startDate: Date.UTC(2025, 3, 14, 12), // 2025 April 14th, 12:00.
    
    176
    +  _startDate: null, // No survey date.
    
    191 177
     
    
    192 178
       /**
    
    193 179
        * The date to stop showing the current survey.
    
    194 180
        *
    
    195
    -   * @type {integer}
    
    181
    +   * @type {?integer}
    
    196 182
        */
    
    197
    -  _endDate: Date.UTC(2025, 3, 28), // 2025 April 28th, 00:00.
    
    183
    +  _endDate: null, // No survey date.
    
    198 184
     
    
    199 185
       /**
    
    200 186
        * The survey URL.
    
    ... ... @@ -293,10 +279,41 @@ const SurveyArea = {
    293 279
         },
    
    294 280
       ],
    
    295 281
     
    
    282
    +  /**
    
    283
    +   * Whether the area has been initialised.
    
    284
    +   *
    
    285
    +   * @type {boolean}
    
    286
    +   */
    
    287
    +  _initialized: false,
    
    288
    +
    
    289
    +  /**
    
    290
    +   * The app locale, or `null` whilst unset.
    
    291
    +   *
    
    292
    +   * @type {?string}
    
    293
    +   */
    
    294
    +  _locale: null,
    
    295
    +
    
    296
    +  /**
    
    297
    +   * Whether the banner should be shown.
    
    298
    +   *
    
    299
    +   * @type {boolean}
    
    300
    +   */
    
    301
    +  _shouldShow: false,
    
    302
    +
    
    303
    +  /**
    
    304
    +   * The survey element.
    
    305
    +   *
    
    306
    +   * @type {?Element}
    
    307
    +   */
    
    308
    +  _areaEl: null,
    
    309
    +
    
    296 310
       /**
    
    297 311
        * Initialize the survey area.
    
    298 312
        */
    
    299 313
       init() {
    
    314
    +    this._initialized = true;
    
    315
    +
    
    316
    +    this._areaEl = document.getElementById("survey");
    
    300 317
         document.getElementById("survey-launch").addEventListener("click", () => {
    
    301 318
           if (!this._localeData) {
    
    302 319
             return;
    
    ... ... @@ -311,15 +328,16 @@ const SurveyArea = {
    311 328
         document.getElementById("survey-dismiss").addEventListener("click", () => {
    
    312 329
           this._hide();
    
    313 330
         });
    
    331
    +
    
    332
    +    this._update();
    
    314 333
       },
    
    315 334
     
    
    316 335
       /**
    
    317 336
        * Permanently hide this survey.
    
    318 337
        */
    
    319 338
       _hide() {
    
    320
    -    document.body.classList.remove("show-survey");
    
    321
    -    // Move focus to the search input.
    
    322
    -    document.getElementById("search-input").focus();
    
    339
    +    this._shouldShow = false;
    
    340
    +    this._update();
    
    323 341
     
    
    324 342
         dispatchEvent(
    
    325 343
           new CustomEvent("SurveyDismissed", {
    
    ... ... @@ -343,14 +361,29 @@ const SurveyArea = {
    343 361
        */
    
    344 362
       potentiallyShow(dismissVersion, isStable, appLocale) {
    
    345 363
         const now = Date.now();
    
    346
    -    if (
    
    347
    -      now < this._startDate ||
    
    348
    -      now >= this._endDate ||
    
    349
    -      // The user has already dismissed this version of the survey before:
    
    350
    -      dismissVersion >= this._version ||
    
    351
    -      !isStable
    
    352
    -    ) {
    
    353
    -      // Don't show the survey.
    
    364
    +    this._shouldShow =
    
    365
    +      isStable &&
    
    366
    +      dismissVersion < this._version &&
    
    367
    +      this._startDate &&
    
    368
    +      now >= this._startDate &&
    
    369
    +      now < this._endDate;
    
    370
    +    this._locale = appLocale;
    
    371
    +    this._update();
    
    372
    +  },
    
    373
    +
    
    374
    +  /**
    
    375
    +   * Update the display.
    
    376
    +   */
    
    377
    +  _update() {
    
    378
    +    if (!this._initialized) {
    
    379
    +      return;
    
    380
    +    }
    
    381
    +    if (!this._shouldShow) {
    
    382
    +      if (this._areaEl.contains(document.activeElement)) {
    
    383
    +        // Move focus to the search input.
    
    384
    +        document.getElementById("search-input").focus();
    
    385
    +      }
    
    386
    +      document.body.classList.remove("show-survey");
    
    354 387
           return;
    
    355 388
         }
    
    356 389
     
    
    ... ... @@ -360,7 +393,7 @@ const SurveyArea = {
    360 393
         // match the languages that the survey itself supports. This should match
    
    361 394
         // the language of the survey when it is opened by the user.
    
    362 395
         for (const localeData of this._localeDataSet) {
    
    363
    -      if (localeData.browserLocales.includes(appLocale)) {
    
    396
    +      if (localeData.browserLocales.includes(this._locale)) {
    
    364 397
             this._localeData = localeData;
    
    365 398
             break;
    
    366 399
           }
    
    ... ... @@ -387,10 +420,152 @@ const SurveyArea = {
    387 420
       },
    
    388 421
     };
    
    389 422
     
    
    423
    +/**
    
    424
    + * Area for the Year End Campaign (YEC).
    
    425
    + * See tor-browser#42072.
    
    426
    + */
    
    427
    +const YecArea = {
    
    428
    +  /**
    
    429
    +   * The epoch time to start showing the banner, if at all.
    
    430
    +   *
    
    431
    +   * @type {?integer}
    
    432
    +   */
    
    433
    +  _startDate: Date.UTC(2025, 9, 14, 15), // 2025 October 14th 15:00 UTC.
    
    434
    +
    
    435
    +  /**
    
    436
    +   * The epoch time to stop showing the banner, if at all.
    
    437
    +   *
    
    438
    +   * @type {?integer}
    
    439
    +   */
    
    440
    +  _endDate: Date.UTC(2026, 0, 2, 0), // 2026 January 2nd 0:00 UTC.
    
    441
    +
    
    442
    +  /**
    
    443
    +   * Whether the area has been initialised.
    
    444
    +   *
    
    445
    +   * @type {boolean}
    
    446
    +   */
    
    447
    +  _initialized: false,
    
    448
    +
    
    449
    +  /**
    
    450
    +   * The app locale, or `null` whilst unset.
    
    451
    +   *
    
    452
    +   * @type {?string}
    
    453
    +   */
    
    454
    +  _locale: null,
    
    455
    +
    
    456
    +  /**
    
    457
    +   * Whether the banner should be shown.
    
    458
    +   *
    
    459
    +   * @type {boolean}
    
    460
    +   */
    
    461
    +  _shouldShow: false,
    
    462
    +
    
    463
    +  /**
    
    464
    +   * The banner element.
    
    465
    +   *
    
    466
    +   * @type {?Element}
    
    467
    +   */
    
    468
    +  _areaEl: null,
    
    469
    +
    
    470
    +  /**
    
    471
    +   * Initialize the widget.
    
    472
    +   */
    
    473
    +  init() {
    
    474
    +    this._initialized = true;
    
    475
    +
    
    476
    +    this._areaEl = document.getElementById("yec-banner");
    
    477
    +
    
    478
    +    document.getElementById("yec-close").addEventListener("click", () => {
    
    479
    +      this.dismiss();
    
    480
    +      dispatchEvent(new CustomEvent("UserDismissedYEC", { bubbles: true }));
    
    481
    +    });
    
    482
    +
    
    483
    +    this._update();
    
    484
    +  },
    
    485
    +
    
    486
    +  /**
    
    487
    +   * Close the banner.
    
    488
    +   */
    
    489
    +  dismiss() {
    
    490
    +    this._shouldShow = false;
    
    491
    +    this._update();
    
    492
    +  },
    
    493
    +
    
    494
    +  /**
    
    495
    +   * Possibly show the banner.
    
    496
    +   *
    
    497
    +   * @param {boolean} dismissYEC - Whether the user has dismissed YEC.
    
    498
    +   * @param {boolean} isStable - Whether this is a stable release.
    
    499
    +   * @param {string} appLocale - The app locale, as BCP47.
    
    500
    +   */
    
    501
    +  potentiallyShow(dismissYEC, isStable, appLocale) {
    
    502
    +    const now = Date.now();
    
    503
    +    this._shouldShow =
    
    504
    +      !dismissYEC &&
    
    505
    +      isStable &&
    
    506
    +      this._startDate &&
    
    507
    +      now >= this._startDate &&
    
    508
    +      now < this._endDate;
    
    509
    +    this._locale = appLocale;
    
    510
    +    this._update();
    
    511
    +  },
    
    512
    +
    
    513
    +  /**
    
    514
    +   * Update the visibility of the banner to reflect the new state.
    
    515
    +   */
    
    516
    +  _update() {
    
    517
    +    if (!this._initialized) {
    
    518
    +      return;
    
    519
    +    }
    
    520
    +    if (!this._shouldShow) {
    
    521
    +      if (this._areaEl.contains(document.activeElement)) {
    
    522
    +        document.documentElement.focus();
    
    523
    +      }
    
    524
    +      document.body.classList.remove("show-yec");
    
    525
    +      return;
    
    526
    +    }
    
    527
    +
    
    528
    +    const donateLink = document.getElementById("yec-donate-link");
    
    529
    +    const base = "https://www.torproject.org/donate";
    
    530
    +    const locale = this._locale;
    
    531
    +    donateLink.href = locale ? `${base}/donate-${locale}-yec2025` : base;
    
    532
    +
    
    533
    +    if (!this._addedHeadingCharObserver) {
    
    534
    +      // Observer to determine whether the heading contains Jacquard 12
    
    535
    +      // supported characters.
    
    536
    +      this._addedHeadingCharObserver = true;
    
    537
    +      const headingEl = document.getElementById("yec-heading");
    
    538
    +      const measure = () => {
    
    539
    +        const jacquard12Charset =
    
    540
    +          // eslint does not like the range \u{300}-\u{304} and onward, which
    
    541
    +          // are combining characters. But we want to detect the combining
    
    542
    +          // characters as individual characters.
    
    543
    +          // eslint-disable-next-line no-misleading-character-class
    
    544
    +          /^[\u{20}-\u{7e}\u{a0}-\u{a3}\u{a5}\u{a7}-\u{ab}\u{ae}-\u{b0}\u{b4}\u{b6}-\u{b8}\u{ba}-\u{bb}\u{bf}-\u{107}\u{10a}-\u{113}\u{116}-\u{11b}\u{11e}-\u{123}\u{126}-\u{127}\u{12a}-\u{12b}\u{12e}-\u{133}\u{136}-\u{137}\u{139}-\u{13e}\u{141}-\u{148}\u{14a}-\u{14d}\u{150}-\u{15b}\u{15e}-\u{161}\u{164}-\u{165}\u{16a}-\u{17e}\u{218}-\u{21b}\u{237}\u{2c6}-\u{2c7}\u{2d8}-\u{2dd}\u{300}-\u{304}\u{306}-\u{308}\u{30a}-\u{30c}\u{312}\u{326}-\u{328}\u{1e80}-\u{1e85}\u{1e9e}\u{1ef2}-\u{1ef3}\u{200a}\u{2013}-\u{2014}\u{2018}-\u{201a}\u{201c}-\u{201e}\u{2022}\u{2026}\u{2039}-\u{203a}\u{20ac}\u{2122}\u{2212}]+$/u;
    
    545
    +        headingEl.classList.toggle(
    
    546
    +          "all-jacquard12-chars",
    
    547
    +          jacquard12Charset.test(headingEl.textContent)
    
    548
    +        );
    
    549
    +      };
    
    550
    +
    
    551
    +      const headingObserver = new MutationObserver(measure);
    
    552
    +      headingObserver.observe(headingEl, {
    
    553
    +        subtree: true,
    
    554
    +        childList: true,
    
    555
    +        characterData: true,
    
    556
    +      });
    
    557
    +      measure();
    
    558
    +    }
    
    559
    +
    
    560
    +    document.body.classList.add("show-yec");
    
    561
    +  },
    
    562
    +};
    
    563
    +
    
    390 564
     window.addEventListener("DOMContentLoaded", () => {
    
    391 565
       SearchWidget.init();
    
    392 566
       MessageArea.init();
    
    393 567
       SurveyArea.init();
    
    568
    +  YecArea.init();
    
    394 569
     });
    
    395 570
     
    
    396 571
     window.addEventListener("InitialData", event => {
    
    ... ... @@ -401,8 +576,28 @@ window.addEventListener("InitialData", event => {
    401 576
         messageData,
    
    402 577
         surveyDismissVersion,
    
    403 578
         appLocale,
    
    579
    +    dismissYEC,
    
    404 580
       } = event.detail;
    
    405 581
       SearchWidget.setOnionizeState(!!searchOnionize);
    
    406 582
       MessageArea.setMessageData(messageData, !!isStable, !!torConnectEnabled);
    
    407 583
       SurveyArea.potentiallyShow(surveyDismissVersion, isStable, appLocale);
    
    584
    +  YecArea.potentiallyShow(dismissYEC, isStable, appLocale);
    
    585
    +
    
    586
    +  // Wait to show the content when the l10n population has completed.
    
    587
    +  if (document.hasPendingL10nMutations) {
    
    588
    +    window.addEventListener(
    
    589
    +      "L10nMutationsFinished",
    
    590
    +      () => {
    
    591
    +        document.body.classList.add("initialized");
    
    592
    +      },
    
    593
    +      { once: true }
    
    594
    +    );
    
    595
    +  } else {
    
    596
    +    document.body.classList.add("initialized");
    
    597
    +  }
    
    598
    +});
    
    599
    +
    
    600
    +window.addEventListener("DismissYEC", () => {
    
    601
    +  // User closed the banner in another about:tor instance.
    
    602
    +  YecArea.dismiss();
    
    408 603
     });

  • browser/components/abouttor/content/yec-heart.svg
    1
    +<svg width="16" height="16" viewBox="0 0 16 16" fill="context-fill" xmlns="http://www.w3.org/2000/svg">
    
    2
    +  <path d="M8 6C8 6 8 2 11.5 2C15 2 15 5 15 6C15 10.5 8 15 8 15V6Z"/>
    
    3
    +  <path d="M8 6C8 6 8 2 4.5 2C1 2 1 5 1 6C1 10.5 8 15 8 15L9 9L8 6Z"/>
    
    4
    +</svg>

  • browser/components/abouttor/content/yec2025-font.css
    1
    +/**
    
    2
    + * The embedded "Jacquard 12" font is under the following license:
    
    3
    + *
    
    4
    + * Copyright 2023 The Soft Type Project Authors (https://github.com/scfried/soft-type-jacquard)
    
    5
    + *
    
    6
    + * This Font Software is licensed under the SIL Open Font License, Version 1.1.
    
    7
    + * This license is copied below, and is also available with a FAQ at:
    
    8
    + * https://openfontlicense.org
    
    9
    + *
    
    10
    + *
    
    11
    + * -----------------------------------------------------------
    
    12
    + * SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
    
    13
    + * -----------------------------------------------------------
    
    14
    + *
    
    15
    + * PREAMBLE
    
    16
    + * The goals of the Open Font License (OFL) are to stimulate worldwide
    
    17
    + * development of collaborative font projects, to support the font creation
    
    18
    + * efforts of academic and linguistic communities, and to provide a free and
    
    19
    + * open framework in which fonts may be shared and improved in partnership
    
    20
    + * with others.
    
    21
    + *
    
    22
    + * The OFL allows the licensed fonts to be used, studied, modified and
    
    23
    + * redistributed freely as long as they are not sold by themselves. The
    
    24
    + * fonts, including any derivative works, can be bundled, embedded,
    
    25
    + * redistributed and/or sold with any software provided that any reserved
    
    26
    + * names are not used by derivative works. The fonts and derivatives,
    
    27
    + * however, cannot be released under any other type of license. The
    
    28
    + * requirement for fonts to remain under this license does not apply
    
    29
    + * to any document created using the fonts or their derivatives.
    
    30
    + *
    
    31
    + * DEFINITIONS
    
    32
    + * "Font Software" refers to the set of files released by the Copyright
    
    33
    + * Holder(s) under this license and clearly marked as such. This may
    
    34
    + * include source files, build scripts and documentation.
    
    35
    + *
    
    36
    + * "Reserved Font Name" refers to any names specified as such after the
    
    37
    + * copyright statement(s).
    
    38
    + *
    
    39
    + * "Original Version" refers to the collection of Font Software components as
    
    40
    + * distributed by the Copyright Holder(s).
    
    41
    + *
    
    42
    + * "Modified Version" refers to any derivative made by adding to, deleting,
    
    43
    + * or substituting -- in part or in whole -- any of the components of the
    
    44
    + * Original Version, by changing formats or by porting the Font Software to a
    
    45
    + * new environment.
    
    46
    + *
    
    47
    + * "Author" refers to any designer, engineer, programmer, technical
    
    48
    + * writer or other person who contributed to the Font Software.
    
    49
    + *
    
    50
    + * PERMISSION & CONDITIONS
    
    51
    + * Permission is hereby granted, free of charge, to any person obtaining
    
    52
    + * a copy of the Font Software, to use, study, copy, merge, embed, modify,
    
    53
    + * redistribute, and sell modified and unmodified copies of the Font
    
    54
    + * Software, subject to the following conditions:
    
    55
    + *
    
    56
    + * 1) Neither the Font Software nor any of its individual components,
    
    57
    + * in Original or Modified Versions, may be sold by itself.
    
    58
    + *
    
    59
    + * 2) Original or Modified Versions of the Font Software may be bundled,
    
    60
    + * redistributed and/or sold with any software, provided that each copy
    
    61
    + * contains the above copyright notice and this license. These can be
    
    62
    + * included either as stand-alone text files, human-readable headers or
    
    63
    + * in the appropriate machine-readable metadata fields within text or
    
    64
    + * binary files as long as those fields can be easily viewed by the user.
    
    65
    + *
    
    66
    + * 3) No Modified Version of the Font Software may use the Reserved Font
    
    67
    + * Name(s) unless explicit written permission is granted by the corresponding
    
    68
    + * Copyright Holder. This restriction only applies to the primary font name as
    
    69
    + * presented to the users.
    
    70
    + *
    
    71
    + * 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
    
    72
    + * Software shall not be used to promote, endorse or advertise any
    
    73
    + * Modified Version, except to acknowledge the contribution(s) of the
    
    74
    + * Copyright Holder(s) and the Author(s) or with their explicit written
    
    75
    + * permission.
    
    76
    + *
    
    77
    + * 5) The Font Software, modified or unmodified, in part or in whole,
    
    78
    + * must be distributed entirely under this license, and must not be
    
    79
    + * distributed under any other license. The requirement for fonts to
    
    80
    + * remain under this license does not apply to any document created
    
    81
    + * using the Font Software.
    
    82
    + *
    
    83
    + * TERMINATION
    
    84
    + * This license becomes null and void if any of the above conditions are
    
    85
    + * not met.
    
    86
    + *
    
    87
    + * DISCLAIMER
    
    88
    + * THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    
    89
    + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
    
    90
    + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    
    91
    + * OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
    
    92
    + * COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    
    93
    + * INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
    
    94
    + * DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    
    95
    + * FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
    
    96
    + * OTHER DEALINGS IN THE FONT SOFTWARE.
    
    97
    + */
    
    98
    +
    
    99
    +@font-face {
    
    100
    +  font-family: "Jacquard 12";
    
    101
    +  font-weight: 400 400;
    
    102
    +  font-style: normal;
    
    103
    +  /* woff2 stream */
    
    104
    +  src: url("data:font/woff2;base64,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");
    
    105
    +}

  • browser/components/abouttor/content/yec2025-image.svg
    1
    +<svg width="495" height="381" viewBox="0 0 495 381" fill="none" xmlns="http://www.w3.org/2000/svg">
    
    2
    +  <path d="M247.419 264.776C201.679 273.69 174.117 246.935 166.057 232.441L105.262 261.112L170.602 258.902L131.868 327.126L195.407 280.785L189.197 362.111L227.832 285.742L262.535 343.489L247.432 264.776H247.419Z" fill="#B6E368"/>
    
    3
    +  <path d="M223.938 98.8502C269.555 89.3133 297.484 115.702 305.741 130.086L366.144 100.584L300.841 103.686L338.631 34.949L275.741 82.1453L280.837 0.733295L243.255 77.6271L207.756 20.3445L223.938 98.8502Z" fill="#B6E368"/>
    
    4
    +  <g opacity="0.8">
    
    5
    +    <path fill-rule="evenodd" clip-rule="evenodd" d="M256.349 131.796H260.465V136.119H256.141V132.016H247.921V136.119H252.025V140.222H256.141V148.648H260.465V157.293H256.141V148.867H251.817V140.442H247.701V136.119H243.597V132.016H239.273V165.499H260.477V157.293H264.801V165.499H277.137V169.822H285.577V174.145H276.928V169.822H264.814V207.408H277.149V203.305H285.797V207.408H289.913V211.731H285.797V216.053H281.681V220.376H277.357V224.479H273.033V228.582H269.138V232.905H264.814V228.582H268.709V224.259H273.033V220.156H277.357V216.053H281.473V211.731H285.589V207.628H277.149V211.731H264.814V220.364H260.489V228.79H256.165V232.893H264.814V237.215H251.829V228.582H256.153V220.156H260.477V211.731H239.273V237.215H251.817V241.099H222.393V237.215H209.629V232.893H205.525V228.57H201.409V224.467H197.085V220.364H192.981V216.041H197.306V220.144H201.409V224.247H205.733V228.57H209.849V232.893H218.289V228.79H213.965V220.364H209.849V211.731H197.085V207.628H188.645V211.731H184.321V207.408H180.217V169.822H184.541V207.408H188.657V203.305H197.306V207.408H209.849V169.822H197.306V174.145H188.657V169.822H184.541V161.188H188.657V152.763H192.981V148.66H197.306V144.557H201.409V140.454H205.525V136.131H214.173V140.454H205.733V144.777H201.618V148.88H197.293V152.983H192.969V161.408H188.853V169.834H197.073V165.511H209.837V157.305H214.161V165.511H234.924V132.028H231.029V136.131H226.705V132.028H218.485V136.131H214.161V131.808H218.277V127.705H256.349V131.808V131.796ZM214.161 220.132H218.277V228.558H222.601V237.191H234.937V211.706H214.173V220.132H214.161ZM239.261 207.396H260.465V169.81H239.261V207.396ZM214.161 207.396H234.924V169.81H214.161V207.396Z" fill="#C272FF"/>
    
    6
    +    <path d="M192.968 216.029H188.644V211.706H192.968V216.029Z" fill="#C272FF"/>
    
    7
    +    <path d="M294.212 207.395H289.888V169.809H294.212V207.395Z" fill="#C272FF"/>
    
    8
    +    <path d="M269.113 140.429H273.008V144.532H277.332V148.635H281.448V152.738H285.772V161.164H289.888V169.797H285.564V161.371H281.448V152.946H277.124V148.843H273.008V144.74H268.684V140.417H260.465V136.094H269.113V140.417V140.429Z" fill="#C272FF"/>
    
    9
    +    <path d="M226.718 140.429H222.602V148.855H218.486V157.281H214.162V148.635H218.278V140.209H222.394V136.106H226.718V140.429Z" fill="#C272FF"/>
    
    10
    +    <path d="M260.464 136.119V131.796H256.348V127.693H218.276V131.796H214.16V136.119M260.464 136.119H256.14V132.016H247.92V136.119H252.024V140.222H256.14V148.648H260.464V157.293M260.464 136.119V140.442H268.683V144.764H273.008V148.867H277.123V152.97H281.448V161.396H285.564V169.822M260.464 136.119H269.112V140.442H273.008V144.545H277.332V148.648H281.448V152.75H285.772V161.176H289.888V169.81M214.16 136.119H205.512V140.442H201.396V144.545H197.292V148.648H192.968V152.75H188.644V161.176H184.528V169.81M214.16 136.119V140.442H205.72V144.764H201.604V148.867H197.28V152.97H192.956V161.396H188.84V169.822H197.06V165.499H209.824V157.293H214.148M214.16 136.119H218.484V132.016H226.704V136.119M289.888 169.81H294.212V207.396H289.888M289.888 169.81V207.396M260.464 157.281H256.14V148.855H251.816V140.429H247.7V136.107H243.596V132.004H239.272V165.487H260.476V157.281H260.464ZM260.464 157.281H264.788V165.487H277.123V169.81H285.564M289.888 207.396H285.772V203.293H277.123V207.396H264.788V169.81H276.903V174.132H285.551V169.81H289.875M289.888 207.396V211.718H285.772V216.041H281.656V220.364H277.332V224.467H273.008V228.57H269.112V232.892H264.788M264.788 232.88V228.558H268.683V224.235H273.008V220.132H277.332V216.029H281.448V211.706H285.564V207.603H277.123V211.706H264.788V220.339H260.464V228.765H256.14V232.868H264.788V232.88ZM264.788 232.88V237.203H251.803M251.803 237.191V228.558H256.128V220.132H260.452V211.706H239.248V237.191H251.791H251.803ZM251.803 237.191V241.074H222.38V237.191H209.616V232.868H205.512V228.545H201.396V224.442H197.072V220.339H192.968V216.017M192.968 216.029H197.292V220.132H201.396V224.235H205.72V228.558H209.836V232.88H218.276V228.777H213.952V220.352H209.836V211.718H197.072V207.615H188.632V211.718M192.968 216.029H188.644V211.706H192.968V216.029ZM188.632 211.706H184.308V207.383H180.204V169.797H184.528M184.528 169.81V207.396H188.644V203.293H197.292V207.396H209.836V169.81H197.292V174.132H188.644V169.81H184.528ZM214.16 157.281V165.487H234.923V132.004H231.028V136.107H226.704M214.16 157.281H218.484V148.855H222.6V140.429H226.716V136.107H222.392V140.21H218.276V148.635H214.16V157.281ZM214.16 220.132H218.276V228.558H222.6V237.191H234.936V211.706H214.172V220.132H214.16ZM239.26 207.396H260.464V169.81H239.26V207.396ZM214.16 207.396H234.923V169.81H214.16V207.396Z" stroke="#C272FF" stroke-width="0.618845"/>
    
    11
    +  </g>
    
    12
    +  <path d="M166.566 131.845H175.239L169.665 124.591L179.881 122.381L170.633 111.794L178.264 111.587L178.607 109.511L127.183 90.5711C125.738 90.0338 124.28 89.5942 122.81 89.2401L97.6982 24.4963C92.2226 10.3802 78.3437 0.904321 63.1542 0.904321C58.6095 0.904321 54.1139 1.73468 49.8265 3.3954L23.6612 13.4696C4.62526 20.8208 -4.86823 42.227 2.49382 61.2032L38.3608 153.715C43.8364 167.831 57.7153 177.319 72.8926 177.319C74.9261 177.319 76.935 177.148 78.9195 176.807C82.7169 180.238 87.1513 182.937 92.1001 184.756L143.855 203.818L137.804 193.072H149.686L145.643 183.242H158.493L153.238 173.546L119.454 161.103C130.674 153.727 136.958 140.771 135.954 127.534L175.349 142.041L166.566 131.845ZM151.731 175.28L154.904 181.105H142.446L146.501 190.935H134.141L139.139 199.812L92.8473 182.753C83.1946 179.2 75.5263 172.117 71.2389 162.825C66.9638 153.544 66.5718 143.165 70.1365 133.591L76.9963 115.164C80.2914 106.324 86.551 99.412 94.2316 95.1259L104.509 121.649C103.799 122.528 103.211 123.541 102.794 124.665L95.9343 143.091C94.9175 145.827 95.0278 148.782 96.2527 151.419C97.4655 154.069 99.6581 156.096 102.402 157.11L151.731 175.28ZM65.6653 144.337C65.4938 144.032 65.3468 143.702 65.2121 143.36L29.3328 50.8481C28.2549 48.0884 28.9653 45.7316 29.4798 44.5837C30.0066 43.4237 31.2805 41.3111 34.049 40.2488L60.202 30.1623C61.182 29.7838 62.1742 29.6006 63.1542 29.6006C65.9716 29.6006 69.4382 31.2247 70.8469 34.8636L93.4476 93.1232C85.2158 97.6169 78.503 104.98 74.9873 114.42L68.1275 132.858C66.7311 136.595 65.9103 140.466 65.6653 144.337ZM104.803 125.397C104.975 124.921 105.195 124.469 105.44 124.054L106.726 127.363C107.804 130.135 107.094 132.48 106.579 133.628H106.567C106.065 134.8 104.803 136.9 102.022 137.963L99.8174 138.817L104.803 125.397ZM116.918 160.163L103.149 155.095C100.932 154.289 99.1804 152.665 98.2004 150.528C97.2205 148.403 97.1225 146.034 97.9432 143.836L98.8129 141.492L102.794 139.965C106.297 138.622 107.89 135.96 108.539 134.495C109.188 133.042 110.083 130.086 108.723 126.594L106.983 122.113V122.064L106.273 120.281L106.163 119.988L96.1303 94.1245L96.1058 94.0757L95.4565 92.3906L95.3585 92.1219L72.8436 34.0821C71.0674 29.5029 66.6943 27.4637 63.1542 27.4637C61.9169 27.4637 60.6552 27.6957 59.4303 28.1597L33.2772 38.2461C29.7983 39.5894 28.1814 42.2514 27.5321 43.7045C26.8706 45.1699 25.9764 48.1372 27.3361 51.6296L63.2154 144.142C63.7666 145.595 64.5996 146.804 65.5918 147.744C65.7021 153.202 66.9393 158.624 69.2912 163.716C71.2389 167.929 73.8359 171.702 76.9718 174.938C75.6121 175.109 74.2646 175.182 72.8926 175.182C58.5973 175.182 45.5146 166.244 40.3575 152.934L4.49051 60.4217C-2.4428 42.5567 6.49946 22.396 24.433 15.4723L50.5982 5.39804C54.6406 3.8228 58.8668 3.04128 63.1542 3.04128C77.4618 3.04128 90.5322 11.9677 95.7015 25.2779L120.299 88.6906L120.385 88.9226L121.156 90.913L121.218 91.0595L131.581 117.79C132.414 119.939 133.014 122.113 133.381 124.311C133.406 124.384 133.418 124.457 133.43 124.53C133.553 125.19 133.639 125.861 133.7 126.533C133.7 126.594 133.712 126.643 133.712 126.704C135.133 140.039 128.629 153.214 116.918 160.163ZM135.697 125.165C135.317 122.43 134.619 119.683 133.577 117.008L123.765 91.7067C124.66 91.9632 125.554 92.244 126.436 92.5737L172.666 109.608L166.039 109.791L175.888 121.062L165.904 123.212L170.902 129.708H161.899L168.33 137.181L135.697 125.165Z" fill="white"/>
    
    13
    +  <path d="M488.077 306.123L422.933 212.255C415.84 202.035 404.252 195.831 391.819 195.55C388.193 192.314 383.893 189.701 379.018 187.906L332.347 170.713L332.151 170.64L320.771 170.957L329.198 180.592L318.639 182.875L325.034 191.191H316.802L323.417 198.872L356.38 211.01L348.847 216.212C339.145 222.903 333.449 233.222 332.31 244.078L302.004 232.917L307.259 242.576H293.846L297.888 252.406H286.643L291.126 260.355L344.694 280.088C345.221 280.284 345.735 280.467 346.262 280.626L404.13 364.016C411.406 374.481 423.374 380.733 436.15 380.733C444.076 380.733 451.707 378.352 458.249 373.846L478.228 360.072C486.766 354.174 492.499 345.321 494.361 335.137C496.223 324.94 493.993 314.646 488.077 306.123ZM324.678 197.052L321.469 193.328H329.37L322.388 184.255L333.192 181.923L325.377 172.972L331.795 172.789L378.271 189.909C382.092 191.313 385.535 193.255 388.548 195.611C381.48 196.039 374.706 198.371 368.826 202.425L358.536 209.52L324.678 197.052ZM345.429 278.086L344.168 277.622L292.609 258.621L290.306 254.543H301.085L297.043 244.713H310.861L306.598 236.885L332.138 246.288L334.245 247.069L354.237 254.433C356.932 255.422 359.749 255.397 362.273 254.53C362.971 254.311 363.632 254.018 364.269 253.651C366.695 252.32 368.667 250.147 369.696 247.375L374.179 235.359L386.012 227.19C387.495 226.176 389.148 225.651 390.924 225.651C392.296 225.651 395.751 226.017 398.091 229.388L401.447 234.223C401.226 235.078 400.969 235.921 400.675 236.775L393.497 256.106L393.142 257.022C390.14 264.507 385.02 270.49 378.748 274.52C378.148 274.911 377.536 275.289 376.911 275.631C368.287 280.504 357.777 281.896 347.61 278.806C346.887 278.599 346.152 278.354 345.429 278.086ZM362.432 246.544C362.665 245.226 363.461 242.747 366.033 240.976L371.092 237.484L367.687 246.63C366.829 248.95 365.176 250.745 363.142 251.844C362.101 249.683 362.224 247.656 362.432 246.544ZM402.366 238.424L402.709 237.471C402.819 237.142 402.929 236.824 403.027 236.495L463.234 323.255C465.023 325.819 464.888 328.42 464.643 329.739C464.398 331.058 463.614 333.525 461.042 335.307L441.062 349.082C439.58 350.107 437.926 350.62 436.15 350.62C434.778 350.62 431.312 350.266 428.972 346.884L379.973 276.279C386.588 272.005 391.966 265.704 395.138 257.803L402.366 238.424ZM492.254 334.746C490.49 344.38 485.075 352.745 477.003 358.313L457.024 372.088C450.85 376.349 443.635 378.596 436.15 378.596C424.072 378.596 412.766 372.698 405.894 362.807L349.496 281.529C352.534 282.25 355.584 282.592 358.598 282.592C365.519 282.592 372.256 280.76 378.136 277.39L427.208 348.105C430.136 352.305 434.435 352.757 436.15 352.757C438.367 352.757 440.425 352.11 442.275 350.84L462.254 337.066C465.464 334.843 466.456 331.766 466.75 330.118C467.044 328.481 467.228 325.245 464.998 322.046L403.774 233.808L402.084 231.378L399.854 228.166C396.939 223.966 392.639 223.514 390.924 223.514H390.912C388.695 223.514 386.637 224.161 384.787 225.431L375.478 231.854L372.403 233.979L364.808 239.218C361.599 241.428 360.619 244.517 360.313 246.154C360.068 247.533 359.908 250.012 361.158 252.65C359.198 253.224 357.042 253.187 354.984 252.43L334.38 244.847C335.323 234.394 340.738 224.405 350.06 217.97L358.83 211.913L360.986 210.424L370.039 204.184C376.213 199.934 383.44 197.675 390.912 197.675H390.961C392.039 197.675 393.117 197.724 394.171 197.822C405.012 198.774 414.934 204.477 421.169 213.476L486.313 307.344C491.898 315.391 494.005 325.123 492.254 334.746Z" fill="white"/>
    
    14
    +  <path d="M82.7096 239.196L95.6423 239.231L95.6325 242.957L82.7096 242.922V259.141H78.9108V242.912L65.5817 242.877L65.5925 239.151L78.9108 239.186V223.021H82.7096V239.196Z" fill="#C272FF"/>
    
    15
    +  <path d="M410.924 116.181L423.856 116.216L423.846 119.937L410.924 119.902V136.101H407.125V119.892L393.796 119.857L393.806 116.136L407.125 116.171V100.028H410.924V116.181Z" fill="#C272FF"/>
    
    16
    +  <path d="M62.4132 304.747C62.4132 303.479 61.387 302.452 60.1215 302.452C58.8559 302.452 57.8297 303.479 57.8297 304.747C57.8297 306.014 58.8559 307.041 60.1215 307.041V310.767C56.801 310.767 54.1093 308.072 54.1093 304.747C54.1093 301.422 56.801 298.727 60.1215 298.727C63.4419 298.727 66.1336 301.422 66.1336 304.747C66.1336 308.072 63.4419 310.767 60.1215 310.767V307.041C61.387 307.041 62.4132 306.014 62.4132 304.747Z" fill="#C272FF"/>
    
    17
    +  <path d="M359.727 133.175C363.047 133.175 365.739 135.87 365.739 139.195C365.739 142.52 363.047 145.215 359.727 145.215C356.406 145.215 353.715 142.52 353.715 139.195C353.715 135.87 356.406 133.175 359.727 133.175Z" fill="#C272FF"/>
    
    18
    +  <path d="M416.842 157.255C420.163 157.255 422.854 159.95 422.854 163.275C422.854 166.6 420.163 169.295 416.842 169.295C413.522 169.295 410.83 166.6 410.83 163.275C410.83 159.95 413.522 157.255 416.842 157.255Z" fill="#C272FF"/>
    
    19
    +  <path d="M101.492 281.67C101.492 280.403 100.466 279.375 99.2004 279.375C97.9348 279.375 96.9087 280.403 96.9087 281.67C96.9087 282.937 97.9348 283.965 99.2004 283.965V287.69C95.88 287.69 93.1883 284.995 93.1883 281.67C93.1883 278.345 95.88 275.65 99.2004 275.65C102.521 275.65 105.213 278.345 105.213 281.67C105.213 284.995 102.521 287.69 99.2004 287.69V283.965C100.466 283.965 101.492 282.937 101.492 281.67Z" fill="#C272FF"/>
    
    20
    +</svg>

  • browser/components/abouttor/jar.mn
    ... ... @@ -8,3 +8,6 @@ browser.jar:
    8 8
       content/browser/abouttor/26a1-high-voltage.svg  (content/26a1-high-voltage.svg)
    
    9 9
       content/browser/abouttor/2728-sparkles.svg      (content/2728-sparkles.svg)
    
    10 10
       content/browser/abouttor/2764-red-heart.svg     (content/2764-red-heart.svg)
    
    11
    +  content/browser/abouttor/yec-heart.svg          (content/yec-heart.svg)
    
    12
    +  content/browser/abouttor/yec2025-image.svg      (content/yec2025-image.svg)
    
    13
    +  content/browser/abouttor/yec2025-font.css       (content/yec2025-font.css)

  • toolkit/content/license.html
    ... ... @@ -98,6 +98,7 @@
    98 98
           <li><a href="about:license#harfbuzz">HarfBuzz License</a></li>
    
    99 99
           <li><a href="about:license#icu">ICU License</a></li>
    
    100 100
           <li><a href="about:license#immutable">Immutable.js License</a></li>
    
    101
    +      <li><a href="about:license#jacquard12">Jacquard 12 Font License</a></li>
    
    101 102
           <li><a href="about:license#jpnic">Japan Network Information Center License</a></li>
    
    102 103
           <li><a href="about:license#jszip">JSZip License</a></li>
    
    103 104
           <li><a href="about:license#jemalloc">jemalloc License</a></li>
    
    ... ... @@ -2943,7 +2944,104 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    2943 2944
     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    
    2944 2945
     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    
    2945 2946
     </pre>
    
    2947
    +    <hr>
    
    2948
    +    <h1><a id="jacquard12"></a>Immutable.js License</h1>
    
    2949
    +    <p>This license applies to embedded "Jacquard 12" font in <code>browser/components/abouttor/content/yec2025-font.css</code>.</p>
    
    2950
    +<pre>
    
    2951
    +Copyright 2023 The Soft Type Project Authors (https://github.com/scfried/soft-type-jacquard)
    
    2952
    +
    
    2953
    +This Font Software is licensed under the SIL Open Font License, Version 1.1.
    
    2954
    +This license is copied below, and is also available with a FAQ at:
    
    2955
    +https://openfontlicense.org
    
    2956
    +
    
    2957
    +
    
    2958
    +-----------------------------------------------------------
    
    2959
    +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
    
    2960
    +-----------------------------------------------------------
    
    2961
    +
    
    2962
    +PREAMBLE
    
    2963
    +The goals of the Open Font License (OFL) are to stimulate worldwide
    
    2964
    +development of collaborative font projects, to support the font creation
    
    2965
    +efforts of academic and linguistic communities, and to provide a free and
    
    2966
    +open framework in which fonts may be shared and improved in partnership
    
    2967
    +with others.
    
    2968
    +
    
    2969
    +The OFL allows the licensed fonts to be used, studied, modified and
    
    2970
    +redistributed freely as long as they are not sold by themselves. The
    
    2971
    +fonts, including any derivative works, can be bundled, embedded,
    
    2972
    +redistributed and/or sold with any software provided that any reserved
    
    2973
    +names are not used by derivative works. The fonts and derivatives,
    
    2974
    +however, cannot be released under any other type of license. The
    
    2975
    +requirement for fonts to remain under this license does not apply
    
    2976
    +to any document created using the fonts or their derivatives.
    
    2977
    +
    
    2978
    +DEFINITIONS
    
    2979
    +"Font Software" refers to the set of files released by the Copyright
    
    2980
    +Holder(s) under this license and clearly marked as such. This may
    
    2981
    +include source files, build scripts and documentation.
    
    2982
    +
    
    2983
    +"Reserved Font Name" refers to any names specified as such after the
    
    2984
    +copyright statement(s).
    
    2985
    +
    
    2986
    +"Original Version" refers to the collection of Font Software components as
    
    2987
    +distributed by the Copyright Holder(s).
    
    2946 2988
     
    
    2989
    +"Modified Version" refers to any derivative made by adding to, deleting,
    
    2990
    +or substituting -- in part or in whole -- any of the components of the
    
    2991
    +Original Version, by changing formats or by porting the Font Software to a
    
    2992
    +new environment.
    
    2993
    +
    
    2994
    +"Author" refers to any designer, engineer, programmer, technical
    
    2995
    +writer or other person who contributed to the Font Software.
    
    2996
    +
    
    2997
    +PERMISSION &amp; CONDITIONS
    
    2998
    +Permission is hereby granted, free of charge, to any person obtaining
    
    2999
    +a copy of the Font Software, to use, study, copy, merge, embed, modify,
    
    3000
    +redistribute, and sell modified and unmodified copies of the Font
    
    3001
    +Software, subject to the following conditions:
    
    3002
    +
    
    3003
    +1) Neither the Font Software nor any of its individual components,
    
    3004
    +in Original or Modified Versions, may be sold by itself.
    
    3005
    +
    
    3006
    +2) Original or Modified Versions of the Font Software may be bundled,
    
    3007
    +redistributed and/or sold with any software, provided that each copy
    
    3008
    +contains the above copyright notice and this license. These can be
    
    3009
    +included either as stand-alone text files, human-readable headers or
    
    3010
    +in the appropriate machine-readable metadata fields within text or
    
    3011
    +binary files as long as those fields can be easily viewed by the user.
    
    3012
    +
    
    3013
    +3) No Modified Version of the Font Software may use the Reserved Font
    
    3014
    +Name(s) unless explicit written permission is granted by the corresponding
    
    3015
    +Copyright Holder. This restriction only applies to the primary font name as
    
    3016
    +presented to the users.
    
    3017
    +
    
    3018
    +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
    
    3019
    +Software shall not be used to promote, endorse or advertise any
    
    3020
    +Modified Version, except to acknowledge the contribution(s) of the
    
    3021
    +Copyright Holder(s) and the Author(s) or with their explicit written
    
    3022
    +permission.
    
    3023
    +
    
    3024
    +5) The Font Software, modified or unmodified, in part or in whole,
    
    3025
    +must be distributed entirely under this license, and must not be
    
    3026
    +distributed under any other license. The requirement for fonts to
    
    3027
    +remain under this license does not apply to any document created
    
    3028
    +using the Font Software.
    
    3029
    +
    
    3030
    +TERMINATION
    
    3031
    +This license becomes null and void if any of the above conditions are
    
    3032
    +not met.
    
    3033
    +
    
    3034
    +DISCLAIMER
    
    3035
    +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    
    3036
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
    
    3037
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    
    3038
    +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
    
    3039
    +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    
    3040
    +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
    
    3041
    +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    
    3042
    +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
    
    3043
    +OTHER DEALINGS IN THE FONT SOFTWARE.
    
    3044
    +</pre>
    
    2947 3045
         <hr>
    
    2948 3046
     
    
    2949 3047
         <h1><a id="jpnic"></a>Japan Network Information Center License</h1>
    

  • toolkit/locales/en-US/toolkit/global/tor-browser.ftl
    ... ... @@ -724,3 +724,20 @@ onion-site-saved-keys-dialog-remove-button = Remove
    724 724
     onion-site-saved-keys-dialog-remove-all-button = Remove all
    
    725 725
     onion-site-saved-keys-dialog-fetch-keys-error-message = Unable to retrieve keys from Tor
    
    726 726
     onion-site-saved-keys-dialog-remove-keys-error-message = Unable to remove key
    
    727
    +
    
    728
    +## Year end campaign.
    
    729
    +
    
    730
    +yec-donate-button = Donate now
    
    731
    +# Here "Close" is a verb, referring to closing the banner.
    
    732
    +yec-close-button =
    
    733
    +    .title = Close
    
    734
    +
    
    735
    +## 2025 Year end campaign.
    
    736
    +
    
    737
    +# Here "Free" is a verb, as in "release" or "liberate".
    
    738
    +yec2025-title = Free the internet
    
    739
    +# The second sentence's translation should be wrapped in '<b data-l10n-name="highlight">' and '</b>', which will make the text green and bold.
    
    740
    +yec2025-body = Support tools that break the chains of censorship and surveillance. <b data-l10n-name="highlight">Donate to the Tor Project today.</b>
    
    741
    +# The end date should match the end of the year 2025.
    
    742
    +# The "$250,000" should be localised: it should be shown as USD (United States dollar) currency, but you may use numbers and formatting appropriate to your locale.
    
    743
    +yec2025-matching = Through December 31, your gift will be matched, up to $250,000!