morgan pushed to branch tor-browser-128.4.0esr-14.5-1 at The Tor Project / Applications / Tor Browser
Commits: 6d2b4add by Henry Wilkes at 2024-10-29T21:02:40+00:00 fixup! Bug 16940: After update, load local change notes.
Bug 42186: Revert the entire commit.
- - - - - 201d50e6 by Henry Wilkes at 2024-10-29T21:02:40+00:00 fixup! Add TorStrings module for localization
Bug 42186: Drop about:tbupdate.
- - - - - b4b207fa by Henry Wilkes at 2024-10-29T21:02:40+00:00 fixup! Bug 7494: Create local home page for TBB.
Bug 42186: Move override page logic to about:tor commit.
- - - - -
15 changed files:
- − browser/actors/AboutTBUpdateChild.sys.mjs - − browser/actors/AboutTBUpdateParent.sys.mjs - browser/actors/moz.build - − browser/base/content/abouttbupdate/aboutTBUpdate.css - − browser/base/content/abouttbupdate/aboutTBUpdate.js - − browser/base/content/abouttbupdate/aboutTBUpdate.xhtml - browser/base/content/browser.js - browser/base/jar.mn - browser/components/BrowserContentHandler.sys.mjs - browser/components/BrowserGlue.sys.mjs - browser/components/about/AboutRedirector.cpp - browser/components/about/components.conf - toolkit/modules/RemotePageAccessManager.sys.mjs - − toolkit/torbutton/chrome/locale/en-US/aboutTBUpdate.dtd - toolkit/torbutton/jar.mn
Changes:
===================================== browser/actors/AboutTBUpdateChild.sys.mjs deleted ===================================== @@ -1,8 +0,0 @@ -// Copyright (c) 2020, The Tor Project, Inc. -// See LICENSE for licensing information. -// -// vim: set sw=2 sts=2 ts=8 et syntax=javascript: - -import { RemotePageChild } from "resource://gre/actors/RemotePageChild.sys.mjs"; - -export class AboutTBUpdateChild extends RemotePageChild {}
===================================== browser/actors/AboutTBUpdateParent.sys.mjs deleted ===================================== @@ -1,128 +0,0 @@ -// Copyright (c) 2020, The Tor Project, Inc. -// See LICENSE for licensing information. -// -// vim: set sw=2 sts=2 ts=8 et syntax=javascript: - -import { AppConstants } from "resource://gre/modules/AppConstants.sys.mjs"; - -const kRequestUpdateMessageName = "FetchUpdateData"; - -/** - * This code provides services to the about:tbupdate page. Whenever - * about:tbupdate needs to do something chrome-privileged, it sends a - * message that's handled here. It is modeled after Mozilla's about:home - * implementation. - */ -export class AboutTBUpdateParent extends JSWindowActorParent { - async receiveMessage(aMessage) { - if (aMessage.name == kRequestUpdateMessageName) { - return this.getReleaseNoteInfo(); - } - return undefined; - } - - get moreInfoURL() { - try { - return Services.prefs.getCharPref("torbrowser.post_update.url"); - } catch (e) {} - - // Use the default URL as a fallback. - return Services.urlFormatter.formatURLPref("startup.homepage_override_url"); - } - - // Read the text from the beginning of the changelog file that is located - // at TorBrowser/Docs/ChangeLog.txt (or, - // TorBrowser.app/Contents/Resources/TorBrowser/Docs/ on macOS, to support - // Gatekeeper signing) and return an object that contains the following - // properties: - // version e.g., Tor Browser 8.5 - // releaseDate e.g., March 31 2019 - // releaseNotes details of changes (lines 2 - end of ChangeLog.txt) - // We attempt to parse the first line of ChangeLog.txt to extract the - // version and releaseDate. If parsing fails, we return the entire first - // line in version and omit releaseDate. - async getReleaseNoteInfo() { - let info = { moreInfoURL: this.moreInfoURL }; - - try { - // "XREExeF".parent is the directory that contains firefox, i.e., - // Browser/ or, TorBrowser.app/Contents/MacOS/ on macOS. - let f = Services.dirsvc.get("XREExeF", Ci.nsIFile).parent; - if (AppConstants.platform === "macosx") { - f = f.parent; - f.append("Resources"); - } - f.append("TorBrowser"); - f.append("Docs"); - f.append("ChangeLog.txt"); - - // NOTE: We load in the entire file, but only use the first few lines - // before the first blank line. - const logLines = (await IOUtils.readUTF8(f.path)) - .replace(/\n\r?\n.*/ms, "") - .split(/\n\r?/); - - // Read the first line to get the version and date. - // Assume everything after the last "-" is the date. - const firstLine = logLines.shift(); - const match = firstLine?.match(/(.*)-+(.*)/); - if (match) { - info.version = match[1].trim(); - info.releaseDate = match[2].trim(); - } else { - // No date. - info.version = firstLine?.trim(); - } - - // We want to read the rest of the release notes as a tree. Each entry - // will contain the text for that line. - // We choose a negative index for the top node of this tree to ensure no - // line will appear less indented. - const topEntry = { indent: -1, children: undefined }; - let prevEntry = topEntry; - - for (let line of logLines) { - const indent = line.match(/^ */)[0]; - line = line.trim(); - if (line.startsWith("*")) { - // Treat as a bullet point. - let entry = { - text: line.replace(/^*\s/, ""), - indent: indent.length, - }; - let parentEntry; - if (entry.indent > prevEntry.indent) { - // A sub-list of the previous item. - prevEntry.children = []; - parentEntry = prevEntry; - } else { - // Same list or end of sub-list. - // Search for the first parent whose indent comes before ours. - parentEntry = prevEntry.parent; - while (entry.indent <= parentEntry.indent) { - parentEntry = parentEntry.parent; - } - } - entry.parent = parentEntry; - parentEntry.children.push(entry); - prevEntry = entry; - } else if (prevEntry === topEntry) { - // Unexpected, missing bullet point on first line. - // Place as its own bullet point instead, and set as prevEntry for the - // next loop. - prevEntry = { text: line, indent: indent.length, parent: topEntry }; - topEntry.children = [prevEntry]; - } else { - // Append to the previous bullet point. - prevEntry.text += ` ${line}`; - } - } - - info.releaseNotes = topEntry.children; - } catch (e) { - console.error(e); - } - - return info; - } -}
===================================== browser/actors/moz.build ===================================== @@ -90,9 +90,3 @@ FINAL_TARGET_FILES.actors += [ BROWSER_CHROME_MANIFESTS += [ "test/browser/browser.toml", ] - -if CONFIG["BASE_BROWSER_UPDATE"]: - FINAL_TARGET_FILES.actors += [ - "AboutTBUpdateChild.sys.mjs", - "AboutTBUpdateParent.sys.mjs", - ]
===================================== browser/base/content/abouttbupdate/aboutTBUpdate.css deleted ===================================== @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2019, The Tor Project, Inc. - * See LICENSE for licensing information. - * - * vim: set sw=2 sts=2 ts=8 et syntax=css: - */ - -:root { - --abouttor-text-color: white; - --abouttor-bg-toron-color: #420C5D; -} - -body { - font-family: Helvetica, Arial, sans-serif; - color: var(--abouttor-text-color); - background-color: var(--abouttor-bg-toron-color); - margin-block: 40px; - margin-inline: 50px; - display: grid; - grid-template-columns: auto auto; - align-items: baseline; - gap: 40px 50px; -} - -body > *:not([hidden]) { - display: contents; -} - -.label-column { - grid-column: 1; -} - -.content { - grid-column: 2; -} - -.content.en-US-content { - font-family: monospace; - line-height: 1.4; -} - -.label-column, .content { - margin: 0; - padding: 0; - font-size: 1rem; - font-weight: normal; -} - -a { - color: inherit; -} - -.no-line-break { - white-space: nowrap; -} - -ul { - padding-inline: 1em 0; -} - -h3, h4 { - font-size: 1.1rem; - font-weight: bold; -} - -h3.build-system-heading { - font-size: 1.5rem; - font-weight: normal; - margin-block-start: 3em; -}
===================================== browser/base/content/abouttbupdate/aboutTBUpdate.js deleted ===================================== @@ -1,110 +0,0 @@ -// Copyright (c) 2020, The Tor Project, Inc. -// See LICENSE for licensing information. -// -// vim: set sw=2 sts=2 ts=8 et syntax=javascript: - -/* eslint-env mozilla/remote-page */ - -/** - * An object representing a bullet point in the release notes. - * - * typedef {Object} ReleaseBullet - * @property {string} text - The text for this bullet point. - * @property {?Array<ReleaseBullet>} children - A sub-list of bullet points. - */ - -/** - * Fill an element with the given list of release bullet points. - * - * @param {Element} container - The element to fill with bullet points. - * @param {Array<ReleaseBullet>} bulletPoints - The list of bullet points. - * @param {string} [childTag="h3"] - The element tag name to use for direct - * children. Initially, the children are h3 sub-headings. - */ -function fillReleaseNotes(container, bulletPoints, childTag = "h3") { - for (const { text, children } of bulletPoints) { - const childEl = document.createElement(childTag); - // Keep dashes like "[tor-browser]" on the same line by nowrapping the word. - for (const [index, part] of text.split(/(\S+-\S+)/).entries()) { - if (!part) { - continue; - } - const span = document.createElement("span"); - span.textContent = part; - span.classList.toggle("no-line-break", index % 2); - childEl.appendChild(span); - } - container.appendChild(childEl); - if (children) { - if (childTag == "h3" && text.toLowerCase() === "build system") { - // Special case: treat the "Build System" heading's children as - // sub-headings. - childEl.classList.add("build-system-heading"); - fillReleaseNotes(container, children, "h4"); - } else { - const listEl = document.createElement("ul"); - fillReleaseNotes(listEl, children, "li"); - if (childTag == "li") { - // Insert within the "li" element. - childEl.appendChild(listEl); - } else { - container.appendChild(listEl); - } - } - } - } -} - -/** - * Set the content for the specified container, or hide it if we have no - * content. - * - * @template C - * @param {string} containerId - The id for the container. - * @param {?C} content - The content for this container, or a falsey value if - * the container has no content. - * @param {function(contentEl: Elemenet, content: C)} [fillContent] - A function - * to fill the ".content" contentEl with the given 'content'. If unspecified, - * the 'content' will become the contentEl's textContent. - */ -function setContent(containerId, content, fillContent) { - const container = document.getElementById(containerId); - if (!content) { - container.hidden = true; - return; - } - const contentEl = container.querySelector(".content"); - // Release notes are only in English. - contentEl.setAttribute("lang", "en-US"); - contentEl.setAttribute("dir", "ltr"); - contentEl.classList.add("en-US-content"); - if (fillContent) { - fillContent(contentEl, content); - } else { - contentEl.textContent = content; - } -} - -/** - * Callback when we receive the update details. - * - * @param {Object} aData - The update details. - * @param {?string} aData.version - The update version. - * @param {?string} aData.releaseDate - The release date. - * @param {?string} aData.moreInfoURL - A URL for more info. - * @param {?Array<ReleaseBullet>} aData.releaseNotes - Release notes as bullet - * points. - */ -function onUpdate(aData) { - setContent("version-row", aData.version); - setContent("releasedate-row", aData.releaseDate); - setContent("releasenotes", aData.releaseNotes, fillReleaseNotes); - - if (aData.moreInfoURL) { - document.getElementById("infolink").setAttribute("href", aData.moreInfoURL); - } else { - document.getElementById("fullinfo").hidden = true; - } -} - -RPMSendQuery("FetchUpdateData").then(onUpdate);
===================================== browser/base/content/abouttbupdate/aboutTBUpdate.xhtml deleted ===================================== @@ -1,52 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<!DOCTYPE html [ <!ENTITY % htmlDTD PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> -%htmlDTD; -<!ENTITY % tbUpdateDTD SYSTEM "chrome://browser/locale/aboutTBUpdate.dtd"> -%tbUpdateDTD; ]> - -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta - http-equiv="Content-Security-Policy" - content="default-src chrome:; object-src 'none'" - /> - <title>&aboutTBUpdate.changelogTitle;</title> - <link - rel="stylesheet" - type="text/css" - href="chrome://browser/content/abouttbupdate/aboutTBUpdate.css" - /> - <script - src="chrome://browser/content/abouttbupdate/aboutTBUpdate.js" - type="text/javascript" - /> - <!-- Hack: we are not using Fluent translations in this page (yet), but we use - - this tag so it sets up the page automatically for us. --> - <link rel="localization" href="branding/brand.ftl" /> - </head> - <body> - <!-- NOTE: We don't use the <dl>, <dt> and <dd> elements to form name-value - - pairs because this semantics is relatively new, whilst firefox - - currently still maps these to the more limited "definitionlist", "term" - - and "definition" roles. --> - <div id="version-row"> - <span class="label-column">&aboutTBUpdate.version;</span> - <span class="content"></span> - </div> - <div id="releasedate-row"> - <span class="label-column">&aboutTBUpdate.releaseDate;</span> - <span class="content"></span> - </div> - <div id="fullinfo"> - <p class="content"> - &aboutTBUpdate.linkPrefix;<a id="infolink">&aboutTBUpdate.linkLabel;</a - >&aboutTBUpdate.linkSuffix; - </p> - </div> - <section id="releasenotes"> - <h2 class="label-column">&aboutTBUpdate.releaseNotes;</h2> - <div class="content"></div> - </section> - </body> -</html>
===================================== browser/base/content/browser.js ===================================== @@ -771,10 +771,6 @@ if (Services.prefs.getBoolPref("browser.profiles.enabled")) { gInitialPages.push("about:profilemanager"); }
-if (AppConstants.BASE_BROWSER_UPDATE) { - gInitialPages.push("about:tbupdate"); -} - function isInitialPage(url) { if (!(url instanceof Ci.nsIURI)) { try {
===================================== browser/base/jar.mn ===================================== @@ -33,11 +33,6 @@ browser.jar: content/browser/aboutTabCrashed.css (content/aboutTabCrashed.css) content/browser/aboutTabCrashed.js (content/aboutTabCrashed.js) content/browser/aboutTabCrashed.xhtml (content/aboutTabCrashed.xhtml) -#ifdef BASE_BROWSER_UPDATE - content/browser/abouttbupdate/aboutTBUpdate.xhtml (content/abouttbupdate/aboutTBUpdate.xhtml) - content/browser/abouttbupdate/aboutTBUpdate.js (content/abouttbupdate/aboutTBUpdate.js) - content/browser/abouttbupdate/aboutTBUpdate.css (content/abouttbupdate/aboutTBUpdate.css) -#endif content/browser/blanktab.html (content/blanktab.html) content/browser/browser.css (content/browser.css) content/browser/browser.js (content/browser.js)
===================================== browser/components/BrowserContentHandler.sys.mjs ===================================== @@ -783,16 +783,6 @@ nsBrowserContentHandler.prototype = { // into account because that requires waiting for the session file // to be read. If a crash occurs after updating, before restarting, // we may open the startPage in addition to restoring the session. - // - // Tor Browser: Instead of opening the post-update "override page" - // directly, we ensure that about:tor will be opened in a special - // mode that notifies the user that their browser was updated. - // The about:tor page will provide a link to the override page - // where the user can learn more about the update, as well as a - // link to the Tor Browser changelog page (about:tbupdate). The - // override page URL comes from the openURL attribute within the - // updates.xml file or, if no showURL action is present, from the - // startup.homepage_override_url pref. willRestoreSession = lazy.SessionStartup.isAutomaticRestoreEnabled();
@@ -887,6 +877,13 @@ nsBrowserContentHandler.prototype = { old_forkVersion ); if (overridePage && AppConstants.BASE_BROWSER_UPDATE) { + // Tor Browser: Instead of opening the post-update "override page" + // directly, we ensure that about:tor will be opened, which should + // notify the user that their browser was updated. + // + // The overridePage comes from the openURL attribute within the + // updates.xml file or, if no showURL action is present, from the + // startup.homepage_override_url pref. Services.prefs.setCharPref( "torbrowser.post_update.url", overridePage
===================================== browser/components/BrowserGlue.sys.mjs ===================================== @@ -1022,21 +1022,6 @@ let JSWINDOWACTORS = { }, };
-if (AppConstants.BASE_BROWSER_UPDATE) { - JSWINDOWACTORS.AboutTBUpdate = { - parent: { - esModuleURI: "resource:///actors/AboutTBUpdateParent.sys.mjs", - }, - child: { - esModuleURI: "resource:///actors/AboutTBUpdateChild.sys.mjs", - events: { - DOMWindowCreated: { capture: true }, - }, - }, - matches: ["about:tbupdate"], - }; -} - ChromeUtils.defineLazyGetter( lazy, "WeaveService",
===================================== browser/components/about/AboutRedirector.cpp ===================================== @@ -166,13 +166,6 @@ static const RedirEntry kRedirMap[] = { nsIAboutModule::URI_MUST_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS | nsIAboutModule::HIDE_FROM_ABOUTABOUT}, -#ifdef BASE_BROWSER_UPDATE - {"tbupdate", "chrome://browser/content/abouttbupdate/aboutTBUpdate.xhtml", - nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | - nsIAboutModule::URI_MUST_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT | - nsIAboutModule::HIDE_FROM_ABOUTABOUT | - nsIAboutModule::IS_SECURE_CHROME_UI}, -#endif // The correct URI must be obtained by GetManualChromeURI {"manual", "about:blank", nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
===================================== browser/components/about/components.conf ===================================== @@ -35,9 +35,6 @@ pages = [ 'welcomeback', ]
-if defined('BASE_BROWSER_UPDATE'): - pages.append('tbupdate') - Classes = [ { 'cid': '{7e4bb6ad-2fc4-4dc6-89ef-23e8e5ccf980}',
===================================== toolkit/modules/RemotePageAccessManager.sys.mjs ===================================== @@ -237,9 +237,6 @@ export let RemotePageAccessManager = { RPMAddMessageListener: ["*"], RPMRemoveMessageListener: ["*"], }, - "about:tbupdate": { - RPMSendQuery: ["FetchUpdateData"], - }, "about:torconnect": { RPMAddMessageListener: [ "torconnect:state-change",
===================================== toolkit/torbutton/chrome/locale/en-US/aboutTBUpdate.dtd deleted ===================================== @@ -1,18 +0,0 @@ -<!-- Copyright (c) 2022, The Tor Project, Inc. - - This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<!ENTITY aboutTBUpdate.changelogTitle "Tor Browser Changelog"> -<!ENTITY aboutTBUpdate.version "Version"> -<!ENTITY aboutTBUpdate.releaseDate "Release Date"> -<!ENTITY aboutTBUpdate.releaseNotes "Release Notes"> -<!-- LOCALIZATION NOTE: the following entities are used to create the link to - - obtain more information about the latest update. - - The markup on the page looks like this: - - &aboutTBUpdate.linkPrefix;<a href="...">&aboutTBUpdate.linkLabel;</a>&aboutTBUpdate.linkSuffix; - - So, linkPrefix is what precedes the link, linkLabel is the link itself, - - and linkSuffix is a text after the link. --> -<!ENTITY aboutTBUpdate.linkPrefix "For the most up-to-date information about this release, "> -<!ENTITY aboutTBUpdate.linkLabel "visit our website"> -<!ENTITY aboutTBUpdate.linkSuffix ".">
===================================== toolkit/torbutton/jar.mn ===================================== @@ -7,8 +7,5 @@ torbutton.jar: # browser branding % override chrome://branding/locale/brand.properties chrome://torbutton/locale/brand.properties
-# Strings for the about:tbupdate page -% override chrome://browser/locale/aboutTBUpdate.dtd chrome://torbutton/locale/aboutTBUpdate.dtd - % locale torbutton en-US %locale/en-US/ locale/en-US/ (chrome/locale/en-US/*)
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/50cede2acdc7be01648dcd0e560a7726e3e3d140...b4b207fad998264e70bef16f187bb5533d39940e
tbb-commits@lists.torproject.org