0

Grit: Generate resource_ids as part of the build

Eliminates the need to manually run "grit update_resource_ids"

Bug: 979886
Change-Id: Ifa89368bfe6f8ba36750536a42d2a308c2555604
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1980793
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Reviewed-by: Samuel Huang <huangs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#728095}
This commit is contained in:
Andrew Grieve
2020-01-03 00:51:33 +00:00
committed by Commit Bot
parent 423c6e6c1b
commit 11c825d76a
6 changed files with 367 additions and 312 deletions
.gn
tools
grit
grit
tool
update_resource_ids
grit_rule.gni
gritsettings

1
.gn

@ -662,4 +662,5 @@ exec_script_whitelist =
"//remoting/host/installer/win/generate_clsids.gni",
"//tools/grit/grit_rule.gni",
"//tools/gritsettings/BUILD.gn",
]

@ -106,8 +106,7 @@ def _MultiReplace(data, repl):
return ''.join(res)
def _CreateAndOutputResult(data, repl, output):
new_data = _MultiReplace(data, repl)
def _WriteFile(output, new_data):
if output:
with open(output, 'wt') as fh:
fh.write(new_data)
@ -118,18 +117,24 @@ def _CreateAndOutputResult(data, repl, output):
class _Args:
"""Encapsulated arguments for this module."""
def __init__(self):
self.input = None
self.output = None
self.add_header = False
self.analyze_inputs = False
self.count = False
self.depfile = None
self.fake = False
self.input = None
self.naive = False
self.output = None
self.parse = False
self.tokenize = False
@staticmethod
def Parse(raw_args):
own_opts, raw_args = getopt.getopt(raw_args, 'o:cpt', [
'add-header',
'analyze-inputs',
'count',
'depfile=',
'fake',
'naive',
'parse',
@ -144,8 +149,14 @@ class _Args:
for (key, val) in own_opts:
if key == '-o':
args.output = val
elif key == '--add-header':
args.add_header = True
elif key == '--analyze-inputs':
args.analyze_inputs = True
elif key in ('--count', '-c'):
args.count = True
elif key == '--depfile':
args.depfile = val
elif key == '--fake':
args.fake = True
elif key == '--naive':
@ -164,7 +175,8 @@ start IDs while preserving structure.
Usage: grit update_resource_ids [--parse|-p] [--read-grd|-r] [--tokenize|-t]
[--naive] [--fake] [-o OUTPUT_FILE]
RESOURCE_IDS_FILE
[--analyze-inputs] [--depfile DEPFILE]
[--add-header] RESOURCE_IDS_FILE
RESOURCE_IDS_FILE is the path of the input resource_ids file.
@ -188,6 +200,9 @@ Other options:
--tokenize|-t Tokenizes RESOURCE_IDS_FILE and reprints it as syntax-
highlighted output.
--depfile=DEPFILE Write out a depfile for ninja to know about dependencies.
--analyze-inputs Writes dependencies to stdout.
--add-header Adds a "THIS FILE IS GENERATED" header to the output.
"""
def __init(self):
@ -242,13 +257,32 @@ Other options:
item_list = common.BuildItemList(root_obj)
src_dir = os.path.abspath(os.sep.join([file_dir, root_obj['SRCDIR'].val]))
usage_gen = reader.GenerateResourceUsages(item_list, src_dir, args.fake)
seen_files = set()
usage_gen = reader.GenerateResourceUsages(item_list, src_dir, args.fake,
seen_files)
if args.count:
return self._DumpResourceCounts(usage_gen)
for item, tag_name_to_usage in usage_gen:
item.SetUsages(tag_name_to_usage)
if args.analyze_inputs:
print('\n'.join(sorted(seen_files)))
return 0
new_ids_gen = assigner.GenerateNewIds(item_list, args.naive)
# Create replacement specs usable by _MultiReplace().
repl = [(tag.lo, tag.hi, str(new_id)) for tag, new_id in new_ids_gen]
_CreateAndOutputResult(data, repl, args.output)
# Update "SRCDIR" entry.
new_srcdir = os.path.relpath(src_dir, os.path.dirname(args.output))
repl.append(
(root_obj['SRCDIR'].lo, root_obj['SRCDIR'].hi, repr(new_srcdir)))
new_data = _MultiReplace(data, repl)
if args.add_header:
new_data = ('# GENERATED FILE.\n' +
'# Edit {} instead.\n'.format(args.input) +
'#################\n') + new_data
_WriteFile(args.output, new_data)
if args.depfile:
deps_data = '{}: {}'.format(args.output, ' '.join(sorted(seen_files)))
_WriteFile(args.depfile, deps_data)

@ -15,29 +15,34 @@ import collections
import os
from grit import grd_reader
from grit import util
from grit.tool.update_resource_ids import common
TAGS_OF_INTEREST = set(['include', 'message', 'structure'])
def _CountResourceUsage(grd):
def _CountResourceUsage(grd, seen_files):
tag_name_to_count = {tag: set() for tag in TAGS_OF_INTEREST}
# Pass '_chromium', but '_google_chrome' would produce the same result.
root = grd_reader.Parse(grd, defines={'_chromium': True})
seen_files.add(grd)
# Count all descendant tags, regardless of whether they're active.
for node in root.Preorder():
if node.name in TAGS_OF_INTEREST:
tag_name_to_count[node.name].add(node.attrs['name'])
elif node.name == 'part':
part_path = os.path.join(os.path.dirname(grd), node.GetInputPath())
seen_files.add(util.normpath(part_path))
return {k: len(v) for k, v in tag_name_to_count.iteritems() if v}
def GenerateResourceUsages(item_list, src_dir, fake):
def GenerateResourceUsages(item_list, src_dir, fake, seen_files):
"""Visits a list of ItemInfo to generate maps from tag name to usage.
Args:
root_obj: Root dict of a resource_ids file.
src_dir: Absolute directory of Chrome's src/ directory.
fake: For testing: Sets 10 as usages for all tags, to avoid reading GRD.
seen_files: A set to collect paths of files read.
Yields:
Tuple (item, tag_name_to_usage), where |item| is from |item_list| and
|tag_name_to_usage| is a dict() mapping tag name to (int) usage.
@ -64,9 +69,12 @@ def GenerateResourceUsages(item_list, src_dir, fake):
raise ValueError('%s: Generated GRD must use META with "sizes" field '
'to specify size bounds.' % item.grd)
grd_file = os.sep.join([src_dir, item.grd])
if not os.path.isfile(grd_file):
raise ValueError('Nonexistent GRD provided: %s' % item.grd)
tag_name_to_usage = _CountResourceUsage(grd_file)
if not os.path.exists(grd_file):
# Silently skip missing files so that src-internal files do not break
# public checkouts.
yield item, {}
continue
tag_name_to_usage = _CountResourceUsage(grd_file, seen_files)
tag_names = set(tag_name_to_usage.keys())
if not tag_names.issubset(supported_tag_names):
missing = [t + 's' for t in tag_names - supported_tag_names]

@ -223,7 +223,10 @@ _strip_resource_files = is_android && is_official_build
_js_minifier = "//tools/grit/minify_with_uglify.py"
_css_minifier = "//tools/grit/minimize_css.py"
grit_resource_id_file = "//tools/gritsettings/resource_ids"
grit_resource_id_target = "//tools/gritsettings:default_resource_ids"
grit_resource_id_file =
get_label_info(grit_resource_id_target, "target_gen_dir") +
"/default_resource_ids"
grit_info_script = "//tools/grit/grit_info.py"
# TODO(asvitkine): Add predetermined ids files for other platforms.
@ -238,171 +241,167 @@ if (is_win) {
}
template("grit") {
assert(defined(invoker.source),
"\"source\" must be defined for the grit template $target_name")
if (defined(invoker.resource_ids)) {
resource_ids = invoker.resource_ids
if (defined(invoker.output_dir)) {
_output_dir = invoker.output_dir
} else {
resource_ids = grit_resource_id_file
_output_dir = target_gen_dir
}
if (defined(invoker.output_dir)) {
output_dir = invoker.output_dir
} else {
output_dir = target_gen_dir
_grit_outputs =
get_path_info(rebase_path(invoker.outputs, ".", _output_dir), "abspath")
# Add .info output for all pak files
_pak_info_outputs = []
foreach(output, _grit_outputs) {
if (get_path_info(output, "extension") == "pak") {
_pak_info_outputs += [ output + ".info" ]
}
}
if (defined(invoker.output_name)) {
grit_output_name = invoker.output_name
_grit_output_name = invoker.output_name
} else {
grit_output_name = target_name
_grit_output_name = target_name
}
# These are all passed as arguments to the script so have to be relative to
# the build directory.
rebased_output_dir = rebase_path(output_dir, root_build_dir)
source_path = rebase_path(invoker.source, root_build_dir)
# Compute flags.
grit_flags = []
if (defined(invoker.grit_flags)) {
grit_flags += invoker.grit_flags
}
if (resource_ids != "") {
grit_flags += [
"-f",
rebase_path(resource_ids, root_build_dir),
]
}
if (grit_predetermined_resource_ids_file != "") {
grit_flags += [
"-p",
rebase_path(grit_predetermined_resource_ids_file, root_build_dir),
]
}
if (defined(invoker.source_is_generated)) {
source_is_generated = invoker.source_is_generated
} else {
source_is_generated = false
}
assert_files_flags = []
# We want to make sure the declared outputs actually match what Grit is
# writing. We write the list to a file (some of the output lists are long
# enough to not fit on a Windows command line) and ask Grit to verify those
# are the actual outputs at runtime.
asserted_list_file =
"$target_out_dir/${grit_output_name}_expected_outputs.txt"
write_file(asserted_list_file,
rebase_path(invoker.outputs, root_build_dir, output_dir))
assert_files_flags += [ "--assert-file-list=" +
rebase_path(asserted_list_file, root_build_dir) ]
grit_outputs =
get_path_info(rebase_path(invoker.outputs, ".", output_dir), "abspath")
# Add .info output for all pak files
pak_info_outputs = []
foreach(output, grit_outputs) {
if (get_path_info(output, "extension") == "pak") {
pak_info_outputs += [ output + ".info" ]
}
}
grit_custom_target = target_name + "_grit"
action(grit_custom_target) {
_grit_custom_target = target_name + "_grit"
action(_grit_custom_target) {
testonly = defined(invoker.testonly) && invoker.testonly
script = "//tools/grit/grit.py"
depfile = "$target_gen_dir/$target_name.d"
inputs = [
invoker.source,
asserted_list_file,
]
if (resource_ids != "") {
# The script depends on the ID file. Only add this dependency if the ID
# file is specified.
inputs += [ resource_ids ]
}
if (grit_predetermined_resource_ids_file != "") {
# If the predetermined ID file is present, the script outputs depend on
# it too.
inputs += [ grit_predetermined_resource_ids_file ]
}
deps = [
"//tools/grit:grit_sources",
]
outputs = [ "${depfile}.stamp" ] + _grit_outputs + _pak_info_outputs
depfile = "$target_gen_dir/$target_name.d"
outputs = [ "${depfile}.stamp" ] + grit_outputs + pak_info_outputs
args = [
"-i",
source_path,
"build",
"-o",
rebased_output_dir,
"--depdir",
".",
"--depfile",
rebase_path(depfile, root_build_dir),
"--write-only-new=1",
"--depend-on-stamp",
] + grit_defines
# Add brotli executable if using brotli.
if (defined(invoker.use_brotli) && invoker.use_brotli) {
brotli_target = "//third_party/brotli:brotli($host_toolchain)"
brotli_executable = get_label_info(brotli_target, "root_out_dir") + "/" +
get_label_info(brotli_target, "name")
if (host_os == "win") {
brotli_executable += ".exe"
}
inputs += [ brotli_executable ]
args += [
"--brotli",
rebase_path(brotli_executable, root_build_dir),
]
}
_grit_flags = grit_defines
# Add extra defines with -D flags.
define_args = []
if (defined(invoker.defines)) {
foreach(i, invoker.defines) {
define_args += [
_grit_flags += [
"-D",
i,
]
}
}
args += define_args + grit_flags + assert_files_flags
if (defined(invoker.grit_flags)) {
_grit_flags += invoker.grit_flags
}
_rebased_source_path = rebase_path(invoker.source, root_build_dir)
_source_is_generated =
defined(invoker.source_is_generated) && invoker.source_is_generated
if (!_source_is_generated && compute_inputs_for_analyze) {
# Only call exec_script when the user has explicitly opted into greater
# precision at the expense of performance.
_rel_inputs = exec_script("//tools/grit/grit_info.py",
[
"--inputs",
_rebased_source_path,
] + _grit_flags,
"list lines")
inputs += rebase_path(_rel_inputs, ".", root_build_dir)
}
args = [
"-i",
_rebased_source_path,
"build",
"-o",
rebase_path(_output_dir, root_build_dir),
"--depdir",
".",
"--depfile",
rebase_path(depfile, root_build_dir),
"--write-only-new=1",
"--depend-on-stamp",
] + _grit_flags
# Add brotli executable if using brotli.
if (defined(invoker.use_brotli) && invoker.use_brotli) {
_brotli_target = "//third_party/brotli:brotli($host_toolchain)"
_brotli_executable = get_label_info(_brotli_target, "root_out_dir") +
"/" + get_label_info(_brotli_target, "name")
if (host_os == "win") {
_brotli_executable += ".exe"
}
inputs += [ _brotli_executable ]
args += [
"--brotli",
rebase_path(_brotli_executable, root_build_dir),
]
}
_resource_ids = grit_resource_id_file
if (defined(invoker.resource_ids)) {
_resource_ids = invoker.resource_ids
}
if (_resource_ids != "") {
inputs += [ _resource_ids ]
args += [
"-f",
rebase_path(_resource_ids, root_build_dir),
]
if (_resource_ids == grit_resource_id_file) {
deps += [ grit_resource_id_target ]
}
}
if (grit_predetermined_resource_ids_file != "") {
inputs += [ grit_predetermined_resource_ids_file ]
args += [
"-p",
rebase_path(grit_predetermined_resource_ids_file, root_build_dir),
]
}
# We want to make sure the declared outputs actually match what Grit is
# writing. We write the list to a file (some of the output lists are long
# enough to not fit on a Windows command line) and ask Grit to verify those
# are the actual outputs at runtime.
_asserted_list_file =
"$target_out_dir/${_grit_output_name}_expected_outputs.txt"
write_file(_asserted_list_file,
rebase_path(invoker.outputs, root_build_dir, _output_dir))
inputs += [ _asserted_list_file ]
args += [
"--assert-file-list",
rebase_path(_asserted_list_file, root_build_dir),
]
if (enable_resource_whitelist_generation) {
rc_grit_outputs = []
foreach(output, grit_outputs) {
_rc_grit_outputs = []
foreach(output, _grit_outputs) {
if (get_path_info(output, "extension") == "rc") {
rc_grit_outputs += [ output ]
_rc_grit_outputs += [ output ]
}
}
if (rc_grit_outputs != []) {
if (_rc_grit_outputs != []) {
# Resource whitelisting cannot be used with .rc files.
# Make sure that there aren't any .pak outputs which would require
# whitelist annotations.
assert(pak_info_outputs == [], "can't combine .pak and .rc outputs")
assert(_pak_info_outputs == [], "can't combine .pak and .rc outputs")
} else {
args += [ "--whitelist-support" ]
}
}
if (_strip_resource_files) {
js_minifier_command = rebase_path(_js_minifier, root_build_dir)
css_minifier_command = rebase_path(_css_minifier, root_build_dir)
_js_minifier_command = rebase_path(_js_minifier, root_build_dir)
_css_minifier_command = rebase_path(_css_minifier, root_build_dir)
args += [
"--js-minifier",
js_minifier_command,
_js_minifier_command,
"--css-minifier",
css_minifier_command,
_css_minifier_command,
]
inputs += [
_js_minifier,
@ -410,27 +409,6 @@ template("grit") {
]
}
# Must be after the args are computed since they are re-used.
# See the comments for the two variables used in this condition for
# why this works this way.
if (compute_inputs_for_analyze && !source_is_generated) {
grit_info_script = "//tools/grit/grit_info.py"
grit_info_args = [
"--inputs",
source_path,
] + grit_flags + grit_defines + define_args
# Only call exec_script when the user has explicitly opted into greater
# precision at the expense of performance.
rel_inputs = exec_script(grit_info_script,
grit_info_args,
"list lines",
[ grit_info_script ])
inputs += rebase_path(rel_inputs, ".", root_build_dir)
} else {
assert(source_is_generated || !source_is_generated) # Prevent error.
}
if (defined(invoker.visibility)) {
# This needs to include both what the invoker specified (since they
# probably include generated headers from this target), as well as the
@ -442,9 +420,6 @@ template("grit") {
visibility = [ ":${invoker.target_name}" ] + invoker.visibility
}
deps = [
"//tools/grit:grit_sources",
]
if (defined(invoker.use_brotli) && invoker.use_brotli) {
if (is_mac && is_asan) {
deps += [ "//tools/grit:brotli_mac_asan_workaround" ]
@ -468,11 +443,11 @@ template("grit") {
# Since we generate a file, we need to be run before the targets that
# depend on us.
sources = []
foreach(output, grit_outputs) {
extension = get_path_info(output, "extension")
if (extension != "json" && extension != "gz" && extension != "pak" &&
extension != "xml") {
sources += [ output ]
foreach(_output, _grit_outputs) {
_extension = get_path_info(_output, "extension")
if (_extension != "json" && _extension != "gz" && _extension != "pak" &&
_extension != "xml") {
sources += [ _output ]
}
}
@ -481,7 +456,7 @@ template("grit") {
# action publicly so other scripts can take the outputs from the grit
# script as inputs.
public_deps = [
":$grit_custom_target",
":$_grit_custom_target",
]
deps = [
@ -499,6 +474,6 @@ template("grit") {
if (defined(invoker.visibility)) {
visibility = invoker.visibility
}
output_name = grit_output_name
output_name = _grit_output_name
}
}

@ -0,0 +1,41 @@
# Copyright 2020 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/compute_inputs_for_analyze.gni")
import("//tools/grit/grit_rule.gni")
action("default_resource_ids") {
script = "//tools/grit/grit.py"
inputs = [
"resource_ids.spec",
]
outputs = [
grit_resource_id_file,
]
deps = [
"//tools/grit:grit_sources",
]
depfile = "$target_gen_dir/$target_name.d"
_rebased_input = rebase_path(inputs[0], root_build_dir)
args = [
"update_resource_ids",
"-o",
rebase_path(grit_resource_id_file, root_build_dir),
"--add-header",
"--depfile",
rebase_path(depfile, root_build_dir),
_rebased_input,
]
if (compute_inputs_for_analyze) {
_depfile_inputs = exec_script(script,
[
"update_resource_ids",
"--analyze-inputs",
_rebased_input,
],
"list lines")
inputs += rebase_path(_depfile_inputs, ".", root_build_dir)
}
}

@ -30,10 +30,6 @@
# "META": {"join": <duplicate count>},
# for the item following duplicates. Be sure to look for duplicates that
# may appear earlier than those that immediately precede the item.
# * To update IDs, run the following (from src/):
#
# python tools/grit/grit.py update_resource_ids \
# -o tools/gritsettings/resource_ids tools/gritsettings/resource_ids
{
# The first entry in the file, SRCDIR, is special: It is a relative path from
# this file to the base of your checkout.
@ -60,13 +56,13 @@
"chrome/app/generated_resources.grd": {
# Big alignment since strings (previous item) are frequently added.
"META": {"join": 2, "align": 200},
"messages": [800],
"messages": [600],
},
"chrome/app/resources/locale_settings.grd": {
# Big alignment since strings (previous item) are frequently added.
"META": {"align": 1000},
"messages": [9000],
"messages": [1000],
},
# These each start with the same resource id because we only use one
@ -74,29 +70,29 @@
"chrome/app/resources/locale_settings_chromiumos.grd": {
# Big alignment since strings (previous item) are frequently added.
"META": {"align": 100},
"messages": [9100],
"messages": [1100],
},
"chrome/app/resources/locale_settings_google_chromeos.grd": {
"messages": [9100],
"messages": [1100],
},
"chrome/app/resources/locale_settings_linux.grd": {
"messages": [9100],
"messages": [1100],
},
"chrome/app/resources/locale_settings_mac.grd": {
"messages": [9100],
"messages": [1100],
},
"chrome/app/resources/locale_settings_win.grd": {
"messages": [9100],
"messages": [1100],
},
"chrome/app/theme/chrome_unscaled_resources.grd": {
"META": {"join": 5},
"includes": [9150],
"includes": [1120],
},
# Leave space for theme_resources since it has many structures.
"chrome/app/theme/theme_resources.grd": {
"structures": [9230],
"structures": [1140],
},
# END chrome/app section.
@ -104,92 +100,92 @@
"chrome/browser/dev_ui_browser_resources.grd": {
# Big alignment at start of section.
"META": {"align": 100},
"includes": [9500],
"includes": [1200],
},
"chrome/browser/browser_resources.grd": {
"includes": [9570],
"structures": [9910],
"includes": [1220],
"structures": [1240],
},
"chrome/browser/resources/bookmarks/bookmarks_resources.grd": {
"includes": [9940],
"structures": [9960],
"includes": [1260],
"structures": [1280],
},
"chrome/browser/resources/bookmarks/bookmarks_resources_vulcanized.grd": {
"includes": [9980],
"includes": [1300],
},
"chrome/browser/resources/chromeos/camera/camera_resources.grd": {
"includes": [9990],
"structures": [10050],
"includes": [1320],
"structures": [1340],
},
"chrome/browser/resources/chromeos/camera/src/strings/camera_strings.grd": {
"messages": [10110],
"messages": [1360],
},
"chrome/browser/resources/chromeos/cellular_setup/cellular_setup_resources.grd": {
"structures": [10200],
"structures": [1380],
},
"chrome/browser/resources/chromeos/multidevice_setup/multidevice_setup_resources.grd": {
"structures": [10210],
"structures": [1400],
},
"chrome/browser/resources/component_extension_resources.grd": {
"includes": [10220],
"structures": [10360],
"includes": [1420],
"structures": [1440],
},
"chrome/browser/resources/downloads/downloads_resources_vulcanized.grd": {
"includes": [10370],
"includes": [1460],
},
"chrome/browser/resources/downloads/downloads_resources.grd": {
"includes": [10380],
"structures": [10390],
"includes": [1480],
"structures": [1500],
},
"chrome/browser/resources/extensions/extensions_resources_vulcanized.grd": {
"includes": [10400],
"includes": [1520],
},
"chrome/browser/resources/extensions/extensions_resources.grd": {
"includes": [10410],
"structures": [10450],
"includes": [1540],
"structures": [1560],
},
"chrome/browser/resources/history/history_resources_vulcanized.grd": {
"includes": [10470],
"includes": [1580],
},
"chrome/browser/resources/history/history_resources.grd": {
"includes": [10480],
"includes": [1600],
},
"chrome/browser/resources/local_ntp/local_ntp_resources.grd": {
"includes": [10510],
"includes": [1620],
},
"chrome/browser/resources/new_tab_page/new_tab_page_resources.grd": {
"includes": [10550],
"structures": [10560],
"includes": [1640],
"structures": [1660],
},
"chrome/browser/resources/print_preview/print_preview_resources_vulcanized.grd": {
"includes": [10570],
"includes": [1680],
},
"chrome/browser/resources/print_preview/print_preview_resources.grd": {
"includes": [10580],
"structures": [10630],
"includes": [1700],
"structures": [1720],
},
"chrome/browser/resources/settings/os_settings_resources_vulcanized.grd": {
"includes": [10670],
"includes": [1740],
},
"chrome/browser/resources/settings/os_settings_resources.grd": {
"structures": [10680],
"structures": [1760],
},
"chrome/browser/resources/settings/settings_resources_vulcanized.grd": {
"includes": [11160],
"includes": [1780],
},
"chrome/browser/resources/settings/settings_resources.grd": {
"structures": [11170],
"structures": [1800],
},
"chrome/browser/resources/tab_strip/tab_strip_resources.grd": {
"structures": [11620],
"includes": [11640],
"structures": [1820],
"includes": [1840],
},
"chrome/browser/resources/welcome/welcome_resources.grd": {
"includes": [11660],
"structures": [11690],
"includes": [1860],
"structures": [1880],
},
"chrome/browser/vr/testapp/vr_testapp_resources.grd": {
"includes": [11710],
"includes": [1900],
},
# END chrome/browser section.
@ -197,43 +193,43 @@
"chrome/browser/media/kaleidoscope/internal/kaleidoscope_resources.grd": {
# Big alignment at start of section.
"META": {"align": 100},
"includes": [11800],
"includes": [2000],
},
"chrome/browser/resources/bluetooth_internals/resources.grd": {
"includes": [11810],
"includes": [2020],
},
"chrome/browser/resources/invalidations/invalidations_resources.grd": {
"includes": [11850],
"includes": [2040],
},
"chrome/browser/resources/media/webrtc_logs_resources.grd": {
"includes": [11860],
"includes": [2060],
},
"chrome/browser/resources/net_internals/net_internals_resources.grd": {
"includes": [11870],
"includes": [2080],
},
"chrome/browser/resources/omnibox/resources.grd": {
"includes": [11880],
"includes": [2100],
},
"chrome/browser/resources/quota_internals/quota_internals_resources.grd": {
"includes": [11900],
"includes": [2120],
},
"chrome/browser/resources/sync_file_system_internals/sync_file_system_internals_resources.grd": {
"includes": [11910],
"includes": [2140],
},
"chrome/browser/resources/usb_internals/resources.grd": {
"includes": [11920],
"includes": [2160],
},
"chrome/browser/resources/webapks/webapks_ui_resources.grd": {
"includes": [11930],
"includes": [2180],
},
"components/sync/driver/resources.grd": {
"includes": [11940],
"includes": [2200],
},
"content/browser/resources/media/media_internals_resources.grd": {
"includes": [11960],
"includes": [2220],
},
"content/browser/webrtc/resources/resources.grd": {
"includes": [11970],
"includes": [2240],
},
# END chrome/ WebUI resources section
@ -241,21 +237,21 @@
"chrome/android/features/test_dummy/internal/resources/resources.grd": {
# Big alignment at start of section.
"META": {"align": 100},
"includes": [12000],
"includes": [2300],
},
"chrome/common/common_resources.grd": {
"includes": [12010],
"includes": [2320],
},
"chrome/credential_provider/gaiacp/gaia_resources.grd": {
"includes": [12020],
"messages": [12030],
"includes": [2340],
"messages": [2360],
},
"chrome/renderer/resources/renderer_resources.grd": {
"includes": [12070],
"structures": [12150],
"includes": [2380],
"structures": [2400],
},
"chrome/test/data/webui_test_resources.grd": {
"includes": [12160],
"includes": [2420],
},
# END chrome/ miscellaneous section.
@ -263,10 +259,10 @@
"chromeos/chromeos_strings.grd": {
# Big alignment at start of section.
"META": {"align": 100},
"messages": [12200],
"messages": [2500],
},
"chromeos/components/help_app_ui/resources/help_app_resources.grd": {
"includes": [12250],
"includes": [2520],
},
# Both help_app_bundle_resources.grd and help_app_bundle_mock_resources.grd
# start with the same id because only one of them is built depending on if
@ -274,14 +270,14 @@
# of languages (74).
"chromeos/components/help_app_ui/resources/app/help_app_bundle_resources.grd": {
"META": {"sizes": {"includes": [100],}}, # Relies on src-internal.
"includes": [12260],
"includes": [2540],
},
"chromeos/components/help_app_ui/resources/mock/help_app_bundle_mock_resources.grd": {
"includes": [12260],
"includes": [2540],
},
"chromeos/components/media_app_ui/resources/media_app_resources.grd": {
"META": {"join": 2},
"includes": [12380],
"includes": [2560],
},
# Both media_app_bundle_resources.grd and media_app_bundle_mock_resources.grd
# start with the same id because only one of them is built depending on if
@ -289,17 +285,17 @@
# of languages (74).
"chromeos/components/media_app_ui/resources/app/app/media_app_bundle_resources.grd": {
"META": {"sizes": {"includes": [120],}}, # Relies on src-internal.
"includes": [12390],
"includes": [2580],
},
"chromeos/components/media_app_ui/resources/mock/media_app_bundle_mock_resources.grd": {
"includes": [12390],
"includes": [2580],
},
"chromeos/components/sample_system_web_app_ui/resources/sample_system_web_app_resources.grd": {
"META": {"join": 2},
"includes": [12530],
"includes": [2600],
},
"chromeos/resources/chromeos_resources.grd": {
"includes": [12540],
"includes": [2620],
},
# END chromeos/ section.
@ -310,37 +306,37 @@
"components/components_chromium_strings.grd": {
# Big alignment at start of section.
"META": {"align": 100},
"messages": [12600],
"messages": [2700],
},
"components/components_google_chrome_strings.grd": {
"messages": [12600],
"messages": [2700],
},
"components/components_locale_settings.grd": {
"META": {"join": 2},
"includes": [12620],
"messages": [12630],
"includes": [2720],
"messages": [2740],
},
"components/components_strings.grd": {
"messages": [12640],
"messages": [2760],
},
"components/omnibox/resources/omnibox_resources.grd": {
"includes": [14590],
"includes": [2780],
},
"components/policy/resources/policy_templates.grd": {
"structures": [14600],
"structures": [2800],
},
"components/resources/components_resources.grd": {
"includes": [14610],
"includes": [2820],
},
"components/resources/components_scaled_resources.grd": {
"structures": [14690],
"structures": [2840],
},
"components/embedder_support/android/java/strings/web_contents_delegate_android_strings.grd": {
"messages": [14730],
"messages": [2860],
},
"components/autofill/core/browser/autofill_address_rewriter_resources.grd":{
"includes": [14750]
"includes": [2880]
},
# END components/ section.
@ -373,26 +369,26 @@
"ios/chrome/app/theme/ios_theme_resources.grd": {
# Big alignment since strings (previous item) are frequently added.
"META": {"align": 100},
"structures": [1400],
"structures": [700],
},
"ios/chrome/share_extension/strings/ios_share_extension_strings.grd": {
"messages": [1440],
"messages": [720],
},
"ios/chrome/search_widget_extension/strings/ios_search_widget_extension_strings.grd": {
"messages": [1450],
"messages": [740],
},
"ios/chrome/search_widget_extension/strings/ios_search_widget_extension_chromium_strings.grd": {
"messages": [1470],
"messages": [760],
},
"ios/chrome/search_widget_extension/strings/ios_search_widget_extension_google_chrome_strings.grd": {
"messages": [1470],
"messages": [760],
},
"ios/chrome/content_widget_extension/strings/ios_content_widget_extension_chromium_strings.grd": {
"META": {"join": 2},
"messages": [1480],
"messages": [780],
},
"ios/chrome/content_widget_extension/strings/ios_content_widget_extension_google_chrome_strings.grd": {
"messages": [1480],
"messages": [780],
},
# END ios/ section.
@ -403,19 +399,19 @@
"content/app/resources/content_resources.grd": {
# Big alignment at start of section.
"META": {"join": 3, "align": 100},
"structures": [14800],
"structures": [2900],
},
"content/content_resources.grd": {
"includes": [14830],
"includes": [2920],
},
"content/shell/shell_resources.grd": {
"includes": [14870],
"includes": [2940],
},
# This file is generated during the build.
"<(SHARED_INTERMEDIATE_DIR)/content/browser/tracing/tracing_resources.grd": {
"META": {"sizes": {"includes": [20],}},
"includes": [14880],
"includes": [2960],
},
# END content/ section.
@ -425,10 +421,10 @@
"ios/web/ios_web_resources.grd": {
# Big alignment at start of section.
"META": {"align": 100},
"includes": [14800],
"includes": [2900],
},
"ios/web/test/test_resources.grd": {
"includes": [14810],
"includes": [2920],
},
# END ios/web/ section.
@ -437,143 +433,143 @@
"android_webview/ui/aw_resources.grd": {
# Big alignment at start of section.
"META": {"join": 2, "align": 100},
"includes": [15000],
"includes": [3000],
},
"android_webview/ui/aw_strings.grd": {
"messages": [15010],
"messages": [3020],
},
"ash/app_list/resources/app_list_resources.grd": {
"structures": [15020],
"structures": [3040],
},
"ash/ash_strings.grd": {
"messages": [15030],
"messages": [3060],
},
"ash/components/ash_components_strings.grd": {
"messages": [15770],
"messages": [3080],
},
"ash/keyboard/ui/keyboard_resources.grd": {
"includes": [16020],
"includes": [3100],
},
"ash/login/resources/login_resources.grd": {
"structures": [16100],
"structures": [3120],
},
"ash/public/cpp/resources/ash_public_unscaled_resources.grd": {
"includes": [16110],
"includes": [3140],
},
"chromecast/renderer/resources/extensions_renderer_resources.grd": {
"includes": [16120],
"includes": [3160],
},
"cloud_print/virtual_driver/win/install/virtual_driver_setup_resources.grd": {
"includes": [16130],
"messages": [16140],
"includes": [3180],
"messages": [3200],
},
"device/bluetooth/bluetooth_strings.grd": {
"messages": [16150],
"messages": [3220],
},
"device/fido/fido_strings.grd": {
"messages": [16190],
"messages": [3240],
},
"extensions/browser/resources/extensions_browser_resources.grd": {
"structures": [16200],
"structures": [3260],
},
"extensions/extensions_resources.grd": {
"includes": [16210],
"includes": [3280],
},
"extensions/renderer/resources/extensions_renderer_resources.grd": {
"includes": [16220],
"structures": [16290],
"includes": [3300],
"structures": [3320],
},
"extensions/shell/app_shell_resources.grd": {
"includes": [16300],
"includes": [3340],
},
"extensions/strings/extensions_strings.grd": {
"messages": [16310],
"messages": [3360],
},
"headless/lib/resources/headless_lib_resources.grd": {
"includes": [16390],
"includes": [3380],
},
"mojo/public/js/mojo_bindings_resources.grd": {
"includes": [16400],
"includes": [3400],
},
"net/base/net_resources.grd": {
"includes": [16420],
"includes": [3420],
},
"remoting/resources/remoting_strings.grd": {
"messages": [16430],
"messages": [3440],
},
"services/services_strings.grd": {
"messages": [16810],
"messages": [3460],
},
"third_party/blink/public/blink_image_resources.grd": {
"structures": [16820],
"structures": [3480],
},
"third_party/blink/public/blink_resources.grd": {
"includes": [16830],
"includes": [3500],
},
"third_party/blink/renderer/modules/media_controls/resources/media_controls_resources.grd": {
"includes": [16910],
"structures": [16920],
"includes": [3520],
"structures": [3540],
},
"third_party/blink/public/strings/blink_strings.grd": {
"messages": [16930],
"messages": [3560],
},
"third_party/ink/ink_resources.grd": {
"includes": [17240],
"includes": [3580],
},
"third_party/libaddressinput/chromium/address_input_strings.grd": {
"messages": [17250],
"messages": [3600],
},
"ui/base/test/ui_base_test_resources.grd": {
"messages": [17300],
"messages": [3620],
},
"ui/chromeos/resources/ui_chromeos_resources.grd": {
"structures": [17310],
"structures": [3640],
},
"ui/chromeos/ui_chromeos_strings.grd": {
"messages": [17410],
"messages": [3660],
},
"ui/file_manager/file_manager_resources.grd": {
"includes": [18330],
"includes": [3680],
},
"ui/resources/ui_resources.grd": {
"structures": [18550],
"structures": [3700],
},
"ui/resources/ui_unscaled_resources.grd": {
"includes": [18690],
"includes": [3720],
},
"ui/strings/app_locale_settings.grd": {
"messages": [18720],
"messages": [3740],
},
"ui/strings/ui_strings.grd": {
"messages": [18730],
"messages": [3760],
},
"ui/views/resources/views_resources.grd": {
"structures": [19030],
"structures": [3780],
},
"ui/webui/resources/webui_resources.grd": {
"includes": [19090],
"structures": [19250],
"includes": [3800],
"structures": [3820],
},
"weblayer/weblayer_resources.grd": {
"includes": [19870],
"includes": [3840],
},
# This file is generated during the build.
"<(SHARED_INTERMEDIATE_DIR)/devtools/devtools_resources.grd": {
"META": {"sizes": {"includes": [500],}},
"includes": [19880],
"includes": [3860],
},
# END "everything else" section.