Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1166)

Unified Diff: chrome/installer/util/prebuild/create_string_rc.py

Issue 2791593002: Allow installer::GetLocalizedString to return mode-specific strings. (Closed)
Patch Set: manzagop review part the deux Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/installer/util/l10n_string_util_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/installer/util/prebuild/create_string_rc.py
diff --git a/chrome/installer/util/prebuild/create_string_rc.py b/chrome/installer/util/prebuild/create_string_rc.py
index 9f73dacbfc2857f64f95d9245bf4b3ca43fe9fbd..ec654661d5a5198ee16ff3c57fc7d589a8fe48bd 100755
--- a/chrome/installer/util/prebuild/create_string_rc.py
+++ b/chrome/installer/util/prebuild/create_string_rc.py
@@ -30,6 +30,7 @@ IDS_L10N_OFFSET_* for the language we are interested in.
"""
import argparse
+import exceptions
import glob
import io
import os
@@ -45,32 +46,107 @@ from grit.extern import tclib
# The IDs of strings we want to import from the .grd files and include in
# setup.exe's resources.
STRING_IDS = [
- 'IDS_PRODUCT_NAME',
- 'IDS_SXS_SHORTCUT_NAME',
- 'IDS_PRODUCT_DESCRIPTION',
'IDS_ABOUT_VERSION_COMPANY_NAME',
- 'IDS_INSTALL_HIGHER_VERSION',
+ 'IDS_APP_SHORTCUTS_SUBDIR_NAME',
+ 'IDS_APP_SHORTCUTS_SUBDIR_NAME_CANARY',
+ 'IDS_INBOUND_MDNS_RULE_DESCRIPTION',
+ 'IDS_INBOUND_MDNS_RULE_DESCRIPTION_CANARY',
+ 'IDS_INBOUND_MDNS_RULE_NAME',
+ 'IDS_INBOUND_MDNS_RULE_NAME_CANARY',
+ 'IDS_INSTALL_EXISTING_VERSION_LAUNCHED',
'IDS_INSTALL_FAILED',
- 'IDS_SAME_VERSION_REPAIR_FAILED',
- 'IDS_SETUP_PATCH_FAILED',
- 'IDS_INSTALL_OS_NOT_SUPPORTED',
+ 'IDS_INSTALL_HIGHER_VERSION',
+ 'IDS_INSTALL_INSUFFICIENT_RIGHTS',
+ 'IDS_INSTALL_INVALID_ARCHIVE',
'IDS_INSTALL_OS_ERROR',
+ 'IDS_INSTALL_OS_NOT_SUPPORTED',
'IDS_INSTALL_SINGLETON_ACQUISITION_FAILED',
'IDS_INSTALL_TEMP_DIR_FAILED',
'IDS_INSTALL_UNCOMPRESSION_FAILED',
- 'IDS_INSTALL_INVALID_ARCHIVE',
- 'IDS_INSTALL_INSUFFICIENT_RIGHTS',
- 'IDS_SHORTCUT_TOOLTIP',
+ 'IDS_PRODUCT_DESCRIPTION',
+ 'IDS_PRODUCT_NAME',
+ 'IDS_SAME_VERSION_REPAIR_FAILED',
+ 'IDS_SETUP_PATCH_FAILED',
'IDS_SHORTCUT_NEW_WINDOW',
- 'IDS_APP_SHORTCUTS_SUBDIR_NAME',
- 'IDS_APP_SHORTCUTS_SUBDIR_NAME_CANARY',
- 'IDS_INBOUND_MDNS_RULE_NAME',
- 'IDS_INBOUND_MDNS_RULE_NAME_CANARY',
- 'IDS_INBOUND_MDNS_RULE_DESCRIPTION',
- 'IDS_INBOUND_MDNS_RULE_DESCRIPTION_CANARY',
- 'IDS_INSTALL_EXISTING_VERSION_LAUNCHED',
+ 'IDS_SHORTCUT_TOOLTIP',
+ 'IDS_SXS_SHORTCUT_NAME',
]
+# Certain strings are conditional on a brand's install mode (see
+# chrome/install_static/install_modes.h for details). This allows
+# installer::GetLocalizedString to return a resource specific to the current
+# install mode at runtime (e.g., "Google Chrome SxS" as IDS_SHORTCUT_NAME for
+# the localized shortcut name for Google Chrome's canary channel).
+# l10n_util::GetStringUTF16 (used within the rest of Chrome) is unaffected, and
+# will always return the requested string.
+#
+# This mapping provides brand- and mode-specific string ids for a given input id
+# as described here:
+# {
+# resource_id_1: { # A resource ID for use with GetLocalizedString.
+# brand_1: [ # 'google_chrome', for example.
+# string_id_1, # Strings listed in order of the brand's modes, as
+# string_id_2, # specified in install_static::InstallConstantIndex.
+# ...
+# string_id_N,
+# ],
+# brand_2: [ # 'chromium', for example.
+# ...
+# ],
+# },
+# resource_id_2: ...
+# }
+# 'resource_id_1' names an existing string ID. All calls to
+# installer::GetLocalizedString with this string ID will map to the
+# mode-specific string.
+#
+# Note: Update the test expectations in GetBaseMessageIdForMode.GoogleStringIds
+# when adding to/modifying this structure.
+MODE_SPECIFIC_STRINGS = {
+ 'IDS_APP_SHORTCUTS_SUBDIR_NAME': {
+ 'google_chrome': [
+ 'IDS_APP_SHORTCUTS_SUBDIR_NAME',
+ 'IDS_APP_SHORTCUTS_SUBDIR_NAME_CANARY',
+ ],
+ 'chromium': [
+ 'IDS_APP_SHORTCUTS_SUBDIR_NAME',
+ ],
+ },
+ 'IDS_INBOUND_MDNS_RULE_DESCRIPTION': {
+ 'google_chrome': [
+ 'IDS_INBOUND_MDNS_RULE_DESCRIPTION',
+ 'IDS_INBOUND_MDNS_RULE_DESCRIPTION_CANARY',
+ ],
+ 'chromium': [
+ 'IDS_INBOUND_MDNS_RULE_DESCRIPTION',
+ ],
+ },
+ 'IDS_INBOUND_MDNS_RULE_NAME': {
+ 'google_chrome': [
+ 'IDS_INBOUND_MDNS_RULE_NAME',
+ 'IDS_INBOUND_MDNS_RULE_NAME_CANARY',
+ ],
+ 'chromium': [
+ 'IDS_INBOUND_MDNS_RULE_NAME',
+ ],
+ },
+ # In contrast to the strings above, this one (IDS_PRODUCT_NAME) is used
+ # throughout Chrome in mode-independent contexts. Within the installer (the
+ # place where this mapping matters), it is only used for mode-specific strings
+ # such as the name of Chrome's shortcut.
+ 'IDS_PRODUCT_NAME': {
+ 'google_chrome': [
+ 'IDS_PRODUCT_NAME',
+ 'IDS_SXS_SHORTCUT_NAME',
+ ],
+ 'chromium': [
+ 'IDS_PRODUCT_NAME',
+ ],
+ },
+}
+# Note: Update the test expectations in GetBaseMessageIdForMode.GoogleStringIds
+# when adding to/modifying the above structure.
+
# The ID of the first resource string.
FIRST_RESOURCE_ID = 1600
@@ -215,7 +291,7 @@ class XtbHandler(sax.handler.ContentHandler):
class StringRcMaker(object):
"""Makes .h and .rc files containing strings and translations."""
- def __init__(self, name, inputs, outdir):
+ def __init__(self, name, inputs, outdir, brand):
"""Constructs a maker.
Args:
@@ -227,6 +303,7 @@ class StringRcMaker(object):
self.name = name
self.inputs = inputs
self.outdir = outdir
+ self.brand = brand
def MakeFiles(self):
translated_strings = self.__ReadSourceAndTranslatedStrings()
@@ -347,6 +424,7 @@ class StringRcMaker(object):
lines = []
do_languages_lines = ['\n#define DO_LANGUAGES']
installer_string_mapping_lines = ['\n#define DO_INSTALLER_STRING_MAPPING']
+ do_mode_strings_lines = ['\n#define DO_MODE_STRINGS']
# Write the values for how the languages ids are offset.
seen_languages = set()
@@ -370,6 +448,18 @@ class StringRcMaker(object):
resource_id))
resource_id += 1
+ # Handle mode-specific strings.
+ for string_id, brands in MODE_SPECIFIC_STRINGS.iteritems():
+ # Populate the DO_MODE_STRINGS macro.
+ brand_strings = brands.get(self.brand)
+ if not brand_strings:
+ raise exceptions.RuntimeError(
+ 'No strings declared for brand \'%s\' in MODE_SPECIFIC_STRINGS for '
+ 'message %s' % (self.brand, string_id))
+ do_mode_strings_lines.append(
+ ' HANDLE_MODE_STRING(%s_BASE, %s)'
+ % (string_id, ', '.join([ ('%s_BASE' % s) for s in brand_strings])))
+
# Write out base ID values.
for string_id in STRING_IDS:
lines.append('#define %s_BASE %s_%s' % (string_id,
@@ -383,6 +473,7 @@ class StringRcMaker(object):
outfile.write('\n#ifndef RC_INVOKED')
outfile.write(' \\\n'.join(do_languages_lines))
outfile.write(' \\\n'.join(installer_string_mapping_lines))
+ outfile.write(' \\\n'.join(do_mode_strings_lines))
# .rc files must end in a new line
outfile.write('\n#endif // ndef RC_INVOKED\n')
@@ -398,6 +489,12 @@ def ParseCommandLine():
parser = argparse.ArgumentParser(
description='Generate .h and .rc files for installer strings.')
+ brands = [b for b in MODE_SPECIFIC_STRINGS.itervalues().next().iterkeys()]
+ parser.add_argument('-b',
+ choices=brands,
+ required=True,
+ help='identifier of the browser brand (e.g., chromium).',
+ dest='brand')
parser.add_argument('-i', action='append',
type=GrdPathAndXtbDirPair,
required=True,
@@ -417,7 +514,7 @@ def ParseCommandLine():
def main():
args = ParseCommandLine()
- StringRcMaker(args.name, args.inputs, args.outdir).MakeFiles()
+ StringRcMaker(args.name, args.inputs, args.outdir, args.brand).MakeFiles()
return 0
« no previous file with comments | « chrome/installer/util/l10n_string_util_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698