Fix Windows delta updates (#31937)

Chromium 142 broke delta updates on Windows. This commit fixes them by
reverting upstream commits 13ca199c and a4d120da with a few patches,
vendored code and chromium_src overrides. The changes should affect the
browser Windows installer only, and not the Omaha update client.

Co-authored-by: Max Karolinskiy <max@brave.com>
This commit is contained in:
Michael Herrmann
2025-12-04 19:16:50 +01:00
committed by GitHub
co-authored by Max Karolinskiy
parent d34a60dc3c
commit 49faa97bb6
227 changed files with 3532 additions and 89 deletions
+58
View File
@@ -17,6 +17,7 @@ import os.path
import sys
import glob
from lib.l10n.grd_utils import (braveify_grd_in_place, braveify_grd_tree,
INSTALLER_STRINGS,
GOOGLE_CHROME_STRINGS_MIGRATION_MAP,
get_override_file_path, textify,
write_xml_file_from_tree)
@@ -108,6 +109,61 @@ def migrate_google_chrome_strings(brave_strings_xml_tree,
return migrate_google_chrome_xtb_translations_for_messages(message_ids)
def add_installer_strings_xtb_translations_for_messages(message_ids):
installer_xtb_files = glob.glob(
os.path.join(
BRAVE_SOURCE_ROOT,
'chromium_src/chrome/installer/setup/resources/setup_resources_*.xtb'
))
for installer_xtb_path in installer_xtb_files:
installer_xtb_xml_tree = etree.parse(installer_xtb_path)
lang = os.path.basename(installer_xtb_path).replace(
'setup_resources_', '').replace('.xtb', '')
if not lang:
print(
'Skipping file {} because unable to determine language'.format(
installer_xtb_path))
continue
brave_xtb_path = os.path.join(
BRAVE_SOURCE_ROOT,
'app/resources/brave_strings_{}.xtb'.format(lang))
if not os.path.exists(brave_xtb_path):
print('Unable to find brave translation file {}'.format(
brave_xtb_path))
return False
messages = [(message_id,
installer_xtb_xml_tree.xpath('//translation[@id="' +
message_id + '"]')[0].text)
for message_id in message_ids]
write_new_translations_to_xtb(brave_xtb_path, messages)
return True
def add_installer_strings(brave_strings_xml_tree, installer_strings):
print('Adding installer strings...')
installer_strings_grd_path = os.path.join(
BRAVE_SOURCE_ROOT,
'chromium_src/chrome/installer/setup/resources/setup_resources.grd')
installer_strings_xml_tree = etree.parse(installer_strings_grd_path)
message_ids = []
messages_element = brave_strings_xml_tree.xpath('//messages')[0]
if_element = etree.SubElement(messages_element, 'if')
if_element.set('expr', 'is_win')
for item in installer_strings:
message_elem = installer_strings_xml_tree.xpath(
'//message[@name="{}"]'.format(item))[0]
message_text = message_elem.text.lstrip().rstrip()
message_id = tclib.GenerateMessageId(message_text)
message_ids.append(message_id)
new_element = etree.SubElement(if_element, 'message')
new_element.set('name', item)
new_element.text = message_elem.text
new_element.set('desc', message_elem.get('desc'))
return add_installer_strings_xtb_translations_for_messages(message_ids)
def parse_args():
parser = argparse.ArgumentParser(
description='Rebase strings/l10n on the current Chromium version.')
@@ -234,6 +290,8 @@ def main():
if not migrate_google_chrome_strings(
xml_tree, GOOGLE_CHROME_STRINGS_MIGRATION_MAP):
return 1
if not add_installer_strings(xml_tree, INSTALLER_STRINGS):
return 1
elem1 = xml_tree.xpath('//message[@name="IDS_SXS_SHORTCUT_NAME"]')[0]
elem1.text = 'Brave Nightly'
elem1.attrib.pop('desc')
+28 -3
View File
@@ -28,6 +28,10 @@ GOOGLE_CHROME_STRINGS_MIGRATION_MAP = {
'IDS_SHORTCUT_NAME_DEV': 'IDS_CHROME_SHORTCUT_NAME_DEV'
}
# Installer strings that need to be in brave_strings.grd until we move Windows
# to Omaha 4.
INSTALLER_STRINGS = ['IDS_SETUP_PATCH_FAILED']
def braveify_grd_text(text, is_main_text, branding_replacements_only):
"""Replaces text string to Brave wording"""
@@ -168,9 +172,12 @@ def update_xtbs_locally(grd_file_path, brave_source_root, only_for_lang):
brave_strings_string_ids = []
if os.path.basename(grd_file_path) == 'brave_strings.grd':
assert len(grd_strings) == len(chromium_grd_strings) + \
len(GOOGLE_CHROME_STRINGS_MIGRATION_MAP)
brave_strings_string_ids = remove_google_chrome_strings(
grd_strings, GOOGLE_CHROME_STRINGS_MIGRATION_MAP)
len(GOOGLE_CHROME_STRINGS_MIGRATION_MAP) + \
len(INSTALLER_STRINGS)
brave_strings_string_ids = remove_installer_strings(
remove_google_chrome_strings(grd_strings,
GOOGLE_CHROME_STRINGS_MIGRATION_MAP),
INSTALLER_STRINGS)
assert len(grd_strings) == len(chromium_grd_strings), (
f'String count in {grd_file_path} and in {chromium_grd_file_path} do' +
f'not match: {len(grd_strings)} vs {len(chromium_grd_strings)}.')
@@ -403,6 +410,24 @@ def remove_google_chrome_strings(brave_grd_strings, google_chrome_strings_map):
return string_ids
def remove_installer_strings(brave_grd_strings, installer_string):
string_ids = []
string_names = [
string_name[4:].lower() for string_name in installer_string
]
to_remove = []
for string_tuple in brave_grd_strings:
if string_tuple[0] in string_names:
to_remove.append(string_tuple)
string_ids.append(string_tuple[2])
assert len(to_remove) == len(installer_string)
for string_tuple in to_remove:
brave_grd_strings.remove(string_tuple)
return string_ids
def add_google_chrome_translations(brave_strings_xtb_file, xml_tree,
string_ids):
brave_xtb_tree = lxml.etree.parse(brave_strings_xtb_file)