| Index: components/webui_generator/generator/view_model.py
 | 
| diff --git a/components/webui_generator/generator/view_model.py b/components/webui_generator/generator/view_model.py
 | 
| deleted file mode 100644
 | 
| index a92080722d55202796f838e1a1afe541f6226791..0000000000000000000000000000000000000000
 | 
| --- a/components/webui_generator/generator/view_model.py
 | 
| +++ /dev/null
 | 
| @@ -1,329 +0,0 @@
 | 
| -# 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.
 | 
| -
 | 
| -import os
 | 
| -import datetime
 | 
| -import util
 | 
| -
 | 
| -H_FILE_TEMPLATE = \
 | 
| -"""// Copyright %(year)d 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.
 | 
| -
 | 
| -// NOTE: this file is generated from "%(source)s". Do not modify directly.
 | 
| -
 | 
| -#ifndef %(include_guard)s
 | 
| -#define %(include_guard)s
 | 
| -
 | 
| -#include "base/macros.h"
 | 
| -#include "components/webui_generator/view_model.h"
 | 
| -#include "%(export_h_include_path)s"
 | 
| -
 | 
| -namespace content {
 | 
| -class BrowserContext;
 | 
| -}
 | 
| -
 | 
| -%(children_forward_declarations)s
 | 
| -
 | 
| -namespace gen {
 | 
| -
 | 
| -class %(export_macro)s %(class_name)s : public ::webui_generator::ViewModel {
 | 
| - public:
 | 
| -  using FactoryFunction = %(class_name)s* (*)(content::BrowserContext*);
 | 
| -
 | 
| -%(context_keys)s
 | 
| -
 | 
| -  static %(class_name)s* Create(content::BrowserContext* context);
 | 
| -  static void SetFactory(FactoryFunction factory);
 | 
| -
 | 
| -  %(class_name)s();
 | 
| -
 | 
| -%(children_getters)s
 | 
| -
 | 
| -%(context_getters)s
 | 
| -
 | 
| -%(event_handlers)s
 | 
| -
 | 
| - void Initialize() override {}
 | 
| - void OnAfterChildrenReady() override {}
 | 
| - void OnViewBound() override {}
 | 
| -
 | 
| - private:
 | 
| -  void OnEvent(const std::string& event) final;
 | 
| -
 | 
| -  static FactoryFunction factory_function_;
 | 
| -};
 | 
| -
 | 
| -}  // namespace gen
 | 
| -
 | 
| -#endif  // %(include_guard)s
 | 
| -"""
 | 
| -
 | 
| -CHILD_FORWARD_DECLARATION_TEMPLATE = \
 | 
| -"""namespace gen {
 | 
| -  class %(child_type)s;
 | 
| -}
 | 
| -"""
 | 
| -CONTEXT_KEY_DECLARATION_TEMPLATE = \
 | 
| -"""  static const char %s[];"""
 | 
| -
 | 
| -CHILD_GETTER_DECLARATION_TEMPLATE = \
 | 
| -"""  virtual gen::%(child_type)s* %(method_name)s() const;""";
 | 
| -
 | 
| -CONTEXT_VALUE_GETTER_DECLARATION_TEMPLATE = \
 | 
| -"""  %(type)s %(method_name)s() const;"""
 | 
| -
 | 
| -EVENT_HANDLER_DECLARATION_TEMPLATE = \
 | 
| -"""  virtual void %s() = 0;"""
 | 
| -
 | 
| -CC_FILE_TEMPLATE = \
 | 
| -"""// Copyright %(year)d 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.
 | 
| -
 | 
| -// NOTE: this file is generated from "%(source)s". Do not modify directly.
 | 
| -
 | 
| -#include "%(header_path)s"
 | 
| -
 | 
| -#include "base/logging.h"
 | 
| -#include "components/webui_generator/view.h"
 | 
| -%(children_includes)s
 | 
| -
 | 
| -namespace gen {
 | 
| -
 | 
| -%(context_keys)s
 | 
| -
 | 
| -%(class_name)s::FactoryFunction %(class_name)s::factory_function_;
 | 
| -
 | 
| -%(class_name)s* %(class_name)s::Create(content::BrowserContext* context) {
 | 
| -  CHECK(factory_function_) << "Factory function for %(class_name)s was not "
 | 
| -      "set.";
 | 
| -  return factory_function_(context);
 | 
| -}
 | 
| -
 | 
| -void %(class_name)s::SetFactory(FactoryFunction factory) {
 | 
| -  factory_function_ = factory;
 | 
| -}
 | 
| -
 | 
| -%(class_name)s::%(class_name)s() {
 | 
| -%(constructor_body)s
 | 
| -}
 | 
| -
 | 
| -%(children_getters)s
 | 
| -
 | 
| -%(context_getters)s
 | 
| -
 | 
| -void %(class_name)s::OnEvent(const std::string& event) {
 | 
| -%(event_dispatcher_body)s
 | 
| -  LOG(ERROR) << "Unknown event '" << event << "'";
 | 
| -}
 | 
| -
 | 
| -}  // namespace gen
 | 
| -"""
 | 
| -
 | 
| -CONTEXT_KEY_DEFINITION_TEMPLATE = \
 | 
| -"""const char %(class_name)s::%(name)s[] = "%(value)s";"""
 | 
| -
 | 
| -CHILD_GETTER_DEFINITION_TEMPLATE = \
 | 
| -"""gen::%(child_type)s* %(class_name)s::%(method_name)s() const {
 | 
| -  return static_cast<gen::%(child_type)s*>(
 | 
| -      view()->GetChild("%(child_id)s")->GetViewModel());
 | 
| -}
 | 
| -"""
 | 
| -
 | 
| -CONTEXT_VALUE_GETTER_DEFINITION_TEMPLATE = \
 | 
| -"""%(type)s %(class_name)s::%(method_name)s() const {
 | 
| -    return context().%(context_getter)s(%(key_constant)s);
 | 
| -}
 | 
| -"""
 | 
| -
 | 
| -FIELD_TYPE_TO_GETTER_TYPE = {
 | 
| -  'boolean': 'bool',
 | 
| -  'integer': 'int',
 | 
| -  'double': 'double',
 | 
| -  'string': 'std::string',
 | 
| -  'string_list': 'login::StringList'
 | 
| -}
 | 
| -
 | 
| -DISPATCH_EVENT_TEMPLATE = \
 | 
| -"""  if (event == "%(event_id)s") {
 | 
| -    %(method_name)s();
 | 
| -    return;
 | 
| -  }"""
 | 
| -
 | 
| -def GetCommonSubistitutions(declaration):
 | 
| -  subs = {}
 | 
| -  subs['year'] = datetime.date.today().year
 | 
| -  subs['class_name'] = declaration.view_model_class
 | 
| -  subs['source'] = declaration.path
 | 
| -  return subs
 | 
| -
 | 
| -def FieldNameToConstantName(field_name):
 | 
| -  return 'kContextKey' + util.ToUpperCamelCase(field_name)
 | 
| -
 | 
| -def GenContextKeysDeclarations(fields):
 | 
| -  return '\n'.join(
 | 
| -      (CONTEXT_KEY_DECLARATION_TEMPLATE % \
 | 
| -          FieldNameToConstantName(f.name) for f in fields))
 | 
| -
 | 
| -def GenChildrenForwardDeclarations(children):
 | 
| -  lines = []
 | 
| -  for declaration in set(children.itervalues()):
 | 
| -    lines.append(CHILD_FORWARD_DECLARATION_TEMPLATE % {
 | 
| -                     'child_type': declaration.view_model_class
 | 
| -                 })
 | 
| -  return '\n'.join(lines)
 | 
| -
 | 
| -def ChildIdToChildGetterName(id):
 | 
| -  return 'Get%s' % util.ToUpperCamelCase(id)
 | 
| -
 | 
| -def GenChildrenGettersDeclarations(children):
 | 
| -  lines = []
 | 
| -  for id, declaration in children.iteritems():
 | 
| -    lines.append(CHILD_GETTER_DECLARATION_TEMPLATE % {
 | 
| -                     'child_type': declaration.view_model_class,
 | 
| -                     'method_name': ChildIdToChildGetterName(id)
 | 
| -                 })
 | 
| -  return '\n'.join(lines)
 | 
| -
 | 
| -def FieldNameToGetterName(field_name):
 | 
| -  return 'Get%s' % util.ToUpperCamelCase(field_name)
 | 
| -
 | 
| -def GenContextGettersDeclarations(context_fields):
 | 
| -  lines = []
 | 
| -  for field in context_fields:
 | 
| -    lines.append(CONTEXT_VALUE_GETTER_DECLARATION_TEMPLATE % {
 | 
| -                     'type': FIELD_TYPE_TO_GETTER_TYPE[field.type],
 | 
| -                     'method_name': FieldNameToGetterName(field.name)
 | 
| -                 })
 | 
| -  return '\n'.join(lines)
 | 
| -
 | 
| -def EventIdToMethodName(event):
 | 
| -  return 'On' + util.ToUpperCamelCase(event)
 | 
| -
 | 
| -def GenEventHandlersDeclarations(events):
 | 
| -  lines = []
 | 
| -  for event in events:
 | 
| -    lines.append(EVENT_HANDLER_DECLARATION_TEMPLATE %
 | 
| -                     EventIdToMethodName(event))
 | 
| -  return '\n'.join(lines)
 | 
| -
 | 
| -def GenHFile(declaration):
 | 
| -  subs = GetCommonSubistitutions(declaration)
 | 
| -  subs['include_guard'] = \
 | 
| -      util.PathToIncludeGuard(declaration.view_model_include_path)
 | 
| -  subs['context_keys'] = GenContextKeysDeclarations(declaration.fields)
 | 
| -  subs['children_forward_declarations'] = \
 | 
| -      GenChildrenForwardDeclarations(declaration.children)
 | 
| -  subs['children_getters'] = \
 | 
| -      GenChildrenGettersDeclarations(declaration.children);
 | 
| -  subs['context_getters'] = \
 | 
| -      GenContextGettersDeclarations(declaration.fields);
 | 
| -  subs['event_handlers'] = GenEventHandlersDeclarations(declaration.events)
 | 
| -  subs['export_h_include_path'] = declaration.export_h_include_path
 | 
| -  subs['export_macro'] = declaration.component_export_macro
 | 
| -  return H_FILE_TEMPLATE % subs
 | 
| -
 | 
| -def GenContextKeysDefinitions(declaration):
 | 
| -  lines = []
 | 
| -  for field in declaration.fields:
 | 
| -    definition = CONTEXT_KEY_DEFINITION_TEMPLATE % {
 | 
| -      'class_name': declaration.view_model_class,
 | 
| -      'name': FieldNameToConstantName(field.name),
 | 
| -      'value': field.id
 | 
| -    }
 | 
| -    lines.append(definition)
 | 
| -  return '\n'.join(lines)
 | 
| -
 | 
| -def GenChildrenIncludes(children):
 | 
| -  lines = []
 | 
| -  for declaration in set(children.itervalues()):
 | 
| -    lines.append('#include "%s"' % declaration.view_model_include_path)
 | 
| -  return '\n'.join(lines)
 | 
| -
 | 
| -def GenContextFieldInitialization(field):
 | 
| -  lines = []
 | 
| -  key_constant = FieldNameToConstantName(field.name)
 | 
| -  setter_method = 'Set' + util.ToUpperCamelCase(field.type)
 | 
| -  if field.type == 'string_list':
 | 
| -    lines.append('  {')
 | 
| -    lines.append('    std::vector<std::string> defaults;')
 | 
| -    for s in field.default_value:
 | 
| -      lines.append('    defaults.push_back("%s");' % s)
 | 
| -    lines.append('    context().%s(%s, defaults);' %
 | 
| -                     (setter_method, key_constant))
 | 
| -    lines.append('  }')
 | 
| -  else:
 | 
| -    setter = '  context().%s(%s, ' % (setter_method, key_constant)
 | 
| -    if field.type in ['integer', 'double']:
 | 
| -      setter += str(field.default_value)
 | 
| -    elif field.type == 'boolean':
 | 
| -      setter += 'true' if field.default_value else 'false'
 | 
| -    else:
 | 
| -      assert field.type == 'string'
 | 
| -      setter += '"%s"' % field.default_value
 | 
| -    setter += ");"
 | 
| -    lines.append(setter)
 | 
| -  return '\n'.join(lines)
 | 
| -
 | 
| -def GenChildrenGettersDefenitions(declaration):
 | 
| -  lines = []
 | 
| -  for id, child in declaration.children.iteritems():
 | 
| -    lines.append(CHILD_GETTER_DEFINITION_TEMPLATE % {
 | 
| -                     'child_type': child.view_model_class,
 | 
| -                     'class_name': declaration.view_model_class,
 | 
| -                     'method_name': ChildIdToChildGetterName(id),
 | 
| -                     'child_id': id
 | 
| -                 });
 | 
| -  return '\n'.join(lines)
 | 
| -
 | 
| -def GenContextGettersDefinitions(declaration):
 | 
| -  lines = []
 | 
| -  for field in declaration.fields:
 | 
| -    lines.append(CONTEXT_VALUE_GETTER_DEFINITION_TEMPLATE % {
 | 
| -                     'type': FIELD_TYPE_TO_GETTER_TYPE[field.type],
 | 
| -                     'class_name': declaration.view_model_class,
 | 
| -                     'method_name': FieldNameToGetterName(field.name),
 | 
| -                     'context_getter': 'Get' + util.ToUpperCamelCase(
 | 
| -                                                        field.type),
 | 
| -                     'key_constant': FieldNameToConstantName(field.name)
 | 
| -                 });
 | 
| -  return '\n'.join(lines)
 | 
| -
 | 
| -def GenEventDispatcherBody(events):
 | 
| -  lines = []
 | 
| -  for event in events:
 | 
| -    lines.append(DISPATCH_EVENT_TEMPLATE % {
 | 
| -                     'event_id': util.ToLowerCamelCase(event),
 | 
| -                     'method_name': EventIdToMethodName(event)
 | 
| -                 });
 | 
| -  return '\n'.join(lines)
 | 
| -
 | 
| -def GenCCFile(declaration):
 | 
| -  subs = GetCommonSubistitutions(declaration)
 | 
| -  subs['header_path'] = declaration.view_model_include_path
 | 
| -  subs['context_keys'] = GenContextKeysDefinitions(declaration)
 | 
| -  subs['children_includes'] = GenChildrenIncludes(declaration.children)
 | 
| -  initializations = [GenContextFieldInitialization(field) \
 | 
| -                         for field in declaration.fields]
 | 
| -  initializations.append('  base::DictionaryValue diff;');
 | 
| -  initializations.append('  context().GetChangesAndReset(&diff);');
 | 
| -  subs['constructor_body'] = '\n'.join(initializations)
 | 
| -  subs['children_getters'] = GenChildrenGettersDefenitions(declaration)
 | 
| -  subs['context_getters'] = GenContextGettersDefinitions(declaration)
 | 
| -  subs['event_dispatcher_body'] = GenEventDispatcherBody(declaration.events)
 | 
| -  return CC_FILE_TEMPLATE % subs
 | 
| -
 | 
| -def ListOutputs(declaration, destination):
 | 
| -  dirname = os.path.join(destination, os.path.dirname(declaration.path))
 | 
| -  h_file_path = os.path.join(dirname, declaration.view_model_h_name)
 | 
| -  cc_file_path = os.path.join(dirname, declaration.view_model_cc_name)
 | 
| -  return [h_file_path, cc_file_path]
 | 
| -
 | 
| -def Gen(declaration, destination):
 | 
| -  h_file_path, cc_file_path = ListOutputs(declaration, destination)
 | 
| -  util.CreateDirIfNotExists(os.path.dirname(h_file_path))
 | 
| -  open(h_file_path, 'w').write(GenHFile(declaration))
 | 
| -  open(cc_file_path, 'w').write(GenCCFile(declaration))
 | 
| -
 | 
| 
 |