# Copyright 2023 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""
Assembles a binary protobuf from a element locator text proto.
"""
import os
import sys
# go up 3 parent directories to //src/third_party/blink
path_to_blink = os.path.abspath(
os.path.join(os.path.dirname(os.path.abspath(__file__)),
*[os.path.pardir] * 3))
# go up 2 parent directories to //src
path_to_src_root = os.path.join(path_to_blink, *[os.path.pardir] * 2)
# allow importing modules from //src/components/resources/protobufs
sys.path.insert(
0,
os.path.normpath(
os.path.join(path_to_src_root, 'components/resources/protobufs')))
from binary_proto_generator import BinaryProtoGenerator
class ElementLocatorProtoGenerator(BinaryProtoGenerator):
def ImportProtoModule(self):
import element_locator_pb2
globals()['element_locator_pb2'] = element_locator_pb2
def EmptyProtoInstance(self):
# pylint: disable=undefined-variable
# `element_locator_pb2` is placed directly in `globals()`
return element_locator_pb2.ElementLocator()
def ProcessPb(self, opts, pb):
binary_pb_str = pb.SerializeToString()
outdir = opts.outdir
if not os.path.exists(outdir):
os.makedirs(outdir)
outfile = os.path.join(outdir, opts.outbasename)
with open(outfile, 'wb') as f:
f.write(binary_pb_str)
def main():
generator = ElementLocatorProtoGenerator()
generator.Run()
if __name__ == '__main__':
sys.exit(main())