summaryrefslogtreecommitdiffstats
path: root/chromium/docs/website/site/developers/design-documents/linuxresourcesandlocalizedstrings/index.md
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/docs/website/site/developers/design-documents/linuxresourcesandlocalizedstrings/index.md')
-rw-r--r--chromium/docs/website/site/developers/design-documents/linuxresourcesandlocalizedstrings/index.md100
1 files changed, 0 insertions, 100 deletions
diff --git a/chromium/docs/website/site/developers/design-documents/linuxresourcesandlocalizedstrings/index.md b/chromium/docs/website/site/developers/design-documents/linuxresourcesandlocalizedstrings/index.md
deleted file mode 100644
index d177a850633..00000000000
--- a/chromium/docs/website/site/developers/design-documents/linuxresourcesandlocalizedstrings/index.md
+++ /dev/null
@@ -1,100 +0,0 @@
----
-breadcrumbs:
-- - /developers
- - For Developers
-- - /developers/design-documents
- - Design Documents
-page_name: linuxresourcesandlocalizedstrings
-title: LinuxResourcesAndLocalizedStrings
----
-
-Resources (and localized strings) on Linux
-**Goals**
-Find a way to load binary data blobs and localized strings on linux. It's not an
-explicit goal for us to provide a solution for OSX, but a cross platform
-solution would be preferred.
-**Background**
-On Windows, we store resources in dll files. They are compiled into dll files
-using Visual Studio's resource compiler (rc.exe) which read .rc files. .rc files
-are just lists of resource ids and the actual file on disk that they represent
-or an inlined string (for translations). From code we reference the resource
-using the resource ids which are found in a header file. For localized strings,
-we use GRIT to generate the .rc files.
-Most resources are compiled directly into chrome.dll. There are two exceptions:
-theme images are in theme.dll and languages are in locale specific dlls (e.g.,
-en-US.dll). Having a separate theme.dll was to make it easier to transition to a
-real theming system and to make it easier for UI developers to test changes to
-the theme (by not having to re-link chrome.dll). Locale data is in a separate
-dll because we would like to reduce the chrome download size by providing
-localized builds of chrome. One would only need to download the strings for
-languages that are of interest. This doesn't save much in download right now,
-but if ICU data files could be split into chunks, then it could save > 1mb of
-download.
-On Linux, data resources are normally just kept as files on disk that are read
-during runtime. The location of these resources are normally hard-coded into the
-binary at compile time. Localized strings are normally handled using gettext.
-From code, gettext uses the English string to reference the localized string.
-gettext has another interface called catgets which can be used to reference
-strings using a resource id. This is pretty similar to what we do on Windows.
-**Requirements**
-The standard Linux method of reading data resources from disk seems like a
-non-starter because we use lots of small image files to create the Chromium UI.
-We could possibly work around this by image spriting, but we would still read
-more files from disk that windows currently is. Also, while catgets might be a
-good solution for localized strings, it doesn't handle binary data.
-**Design Ideas**
-Roll our own resource handling. This would involve a disk format for data
-resources and strings, and code to load the file and read ranges of bytes from
-the file. To create the disk format, we would use a python script that reads the
-.rc files at compile time and generates our data file. This would be similar to
-the Visual Studio resource compiler except it wouldn't be able to put data
-directly into the dll (shared object). The code to load the file and read a
-range of bytes would exist in base so we can load data resources (like the tld
-data file) in sub module tests.
-The main drawback is that we won't be able to bundle binary data blobs directly
-into the chrome binary. We currently do this for everything other than the theme
-images and localized strings. Putting the data directly into chrome makes it
-easier for the renderer process to access resources because it doesn't have to
-go to disk. To work around this, on linux we would have to load the data
-resource in the renderer process before sandboxing it. This is similar to what
-we already do for localized resources in the renderer process.
-This has the benefit that we don't need to maintain different resource file
-definitions across platforms, it would be sufficient to update the main .rc
-file. We also don't have to change any of the callers or the current use of
-resource IDs throughout the code base. We just need to change ResourceBundle to
-handle the new data file.
-This would also work cross platform, so we may eventually be able to move
-Windows over to it so we all use the same system.
-Data File Format version 4
-uint32 file version
-uint32 number of resources in the file
-uint8 encoding of the text resources in the file
-<uint16 resource id, uint32 file offset>\*
-two zero bytes, uint32 end of last file
-<resource data>\*
-Unsigned ints will be little endian byte order and strings will be encoded in
-conformity to the encoding field. Valid encodings correspond to the following
-values:
-0 -> Binary: PAK file is not expected to contain any text resources.
-1 -> UTF8: PAK file may contain binary data, but all text resources are
-encoded in UTF8.
-2 -> UTF16: PAK file may contain binary data, but all text resources are
-encoded in UTF16.
-The length of each resource can be computed by subtracting from the start of the
-next resource. To aid in computing the last resource, we include an extra index
-entry with the resource id set to zero.
-**Other Ideas**
-Leave everything in code.
-This would work for data blobs, but it doesn't match the current method of
-having a separate dll per locale. We could possibly put all the locale strings
-into chrome.dll, but this would require more work for indexing the values
-properly (i.e., GRIT would no longer work). It would also make it harder to
-transition to a single language download.
-Leave everything in code, but in .so files (dlls)
-Each data resource would become a .c file which we compile into a single .so.
-This is very similar to the current approach on Windows and would allow us to
-embed data resources into the main chrome.so. This might also be a bit faster to
-load because it doesn't have to parse the data file index. The only drawback to
-this approach is that it loads data as code. On Windows, you can load a dll with
-LoadLibraryEx(LOAD_AS_DATAFILE) which prevents code execution in the case of a
-corrupt file. I don't know of a way to do something similar on Linux. \ No newline at end of file