Google Chrome does not enforce that strings are defined at compile-time.
For example, chromium_strings.grd and google_chrome_strings.grd are separate files with mostly the same definitions. Grit generates chromium_strings.h and google_chrome_strings.h for them.
But source files always include chromium_strings.h, never google_chrome_strings.h.
This means that if someone forgets to update google_chrome_strings.grd, or if there is a problem with <if> expressions, then a string might not make it into the resources -- but Google Chrome will still compile successfully because the string's resource ID is #define'd in chromium_strings.h.
If we update chromium_strings.h to refer to either the Chromium or the Google Chrome header depending on the build config, we would catch these issues at compile time. Furthermore, we might not need to create extraneous unused strings in chromium_strings.grd anymore because we won't have to worry about mirroring the values from google_chrome_strings.grd.
More context: https://groups.google.com/a/chromium.org/d/topic/chromium-dev/qmY9yb1MT5o/discussion
Comment 1 by robliao@google.com
, Nov 1