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

Unified Diff: mojo/services/html_viewer/generate_blink_resource_map.py

Issue 827223002: [mojo] Make HTML viewer load the blink resources from the generated pak file. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adding new blink_resource_constants.h file Created 5 years, 11 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 | « mojo/services/html_viewer/blink_resource_constants.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/services/html_viewer/generate_blink_resource_map.py
diff --git a/mojo/services/html_viewer/generate_blink_resource_map.py b/mojo/services/html_viewer/generate_blink_resource_map.py
new file mode 100644
index 0000000000000000000000000000000000000000..4044154a3048f4fb8ec6ca4e4c2cd327617f8ab8
--- /dev/null
+++ b/mojo/services/html_viewer/generate_blink_resource_map.py
@@ -0,0 +1,151 @@
+# Copyright 2015 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.
+
+from string import Template
+
+import optparse
+import os
+import sys
+
+try:
+ grit_module_path = os.path.join(
+ os.path.dirname(__file__), '..', '..', '..', 'tools', 'grit')
+ sys.path.insert(0, grit_module_path)
+ from grit.format import data_pack as DataPack
+except ImportError, e:
+ print 'ImportError: ', e
+ sys.exit(-1)
+
+def is_ascii(s):
+ return all(ord(c) < 128 for c in s)
+
+header_template = \
+"""// Copyright 2015 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.
+
+#ifndef MOJO_SERVICES_HTML_VIEWER_BLINK_RESOURCE_MAP_H_
+#define MOJO_SERVICES_HTML_VIEWER_BLINK_RESOURCE_MAP_H_
+
+#include <map>
+
+namespace html_viewer {
+
+class BlinkResourceMap {
+ public:
+ BlinkResourceMap();
+ const char* GetResource(int id, int* length);
+
+ private:
+ struct ResourceEntry {
+ const char* data;
+ int length;
+
+ ResourceEntry()
+ : data(nullptr)
+ , length(0) {
+ }
+
+ ResourceEntry(const char* data, int length)
+ : data(data)
+ , length(length) {
+ }
+ };
+ typedef std::map<int, ResourceEntry> ResourceMap;
+ ResourceMap resources_;
+};
+
+} // namespace html_viewer
+#endif // MOJO_SERVICES_HTML_VIEWER_BLINK_RESOURCE_MAP_H_"""
+
+cpp_template = \
+"""// Copyright 2015 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.
+
+#include "$header_file_name"
+
+#include "base/macros.h"
+
+namespace html_viewer {
+
+$definitions
+
+BlinkResourceMap::BlinkResourceMap()
+{
+ $map_initializer
+}
+
+const char* BlinkResourceMap::GetResource(int id, int* length)
+{
+ ResourceMap::iterator it = resources_.find(id);
+ if (it == resources_.end()) {
+ *length = 0;
+ return nullptr;
+ }
+ *length = it->second.length;
+ return it->second.data;
+}
+
+} // namespace html_viewer"""
+
+def main():
+ parser = optparse.OptionParser(
+ usage='Usage: %prog --pak-file PAK_FILE --header HEADER --cpp CPP\n')
+ parser.add_option('-i', '--pak-file', action='store', dest='pak_file',
+ help='The .pak file to be extracted.')
+ parser.add_option('', '--header', action='store', dest='header_file',
+ help='Header file to be generated.')
+ parser.add_option('', '--cpp', action='store', dest='cpp_file',
+ help='C++ file to be generated.')
+
+ (options, _) = parser.parse_args()
+ if (not options.pak_file or not options.header_file or not options.cpp_file):
+ parser.print_help()
+ sys.exit(-1)
+
+ header_file = open(options.header_file, 'w+')
+ cpp_file = open(options.cpp_file, 'w+')
+
+ pak_contents = DataPack.ReadDataPack(options.pak_file)
+ resourceIds = []
+
+ header_contents = dict()
+ cpp_contents = dict()
+
+ definitions = []
+
+ for (resId, data) in pak_contents.resources.iteritems():
+ if not is_ascii(data):
+ continue
+ resourceIds.append(resId)
+ hex_values = ['0x{0:02x}'.format(ord(char)) for char in data]
+ f = lambda A, n=12: [A[i:i+n] for i in range(0, len(A), n)]
+ hex_values_string = ',\n '.join(', '.join(x) for x in f(hex_values))
+ cpp_definition = \
+ 'const char kResource%s[%d] = {\n %s \n};' % \
+ (str(resId), len(hex_values), hex_values_string)
+ definitions.append(cpp_definition)
+
+ header_file_contents = Template(header_template).substitute(header_contents)
+ header_file.write(header_file_contents)
+ header_file.close()
+
+ map_initializer = []
+ for resId in resourceIds:
+ insert_statement = \
+ 'resources_.insert(std::pair<int, ResourceEntry>(\n' \
+ ' %s, ResourceEntry(kResource%s, arraysize(kResource%s))));'
+ map_initializer.append( \
+ insert_statement % (str(resId), str(resId), str(resId)))
+
+ cpp_contents['definitions']= '\n'.join(definitions)
+ cpp_contents['header_file_name'] = os.path.basename(options.header_file)
+ cpp_contents['map_initializer'] = '\n '.join(map_initializer)
+ cpp_file_contents = Template(cpp_template).substitute(cpp_contents)
+ cpp_file.write(cpp_file_contents)
+ cpp_file.close()
+
+if __name__ == '__main__':
+ main()
« no previous file with comments | « mojo/services/html_viewer/blink_resource_constants.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698