1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport("//build/config/features.gni")
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport("//third_party/protobuf/proto_library.gni")
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport("//tools/grit/grit_rule.gni")
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochif (is_component_build) {
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  component("policy_component") {
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    deps = [
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "//components/policy/core/browser",
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "//components/policy/core/common",
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ]
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  group("policy_component_browser") {
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    deps = [ ":policy_component" ]
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  group("policy_component_common") {
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    deps = [ ":policy_component" ]
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} else {  # Compile to separate libraries.
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  group("policy_component") {
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    deps = [
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ":policy_component_browser",
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ":policy_component_common",
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ]
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  component("policy_component_browser") {
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    deps = [ "//components/policy/core/browser" ]
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  component("policy_component_common") {
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    deps = [ "//components/policy/core/common" ]
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdochif (enable_configuration_policy) {
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # TODO(brettw) this component should use target_gen_dir instead but the GYP
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # build puts everything into the following directory. We do the same for now.
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  policy_gen_dir = "$root_gen_dir/policy"
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # This protobuf is equivalent to chrome_settings.proto but shares messages
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # for policies of the same type, so that less classes have to be generated
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # and compiled.
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  cloud_policy_proto_path = "$policy_gen_dir/cloud_policy.proto"
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # This is the "full" protobuf, which defines one protobuf message per
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # policy. It is also the format currently used by the server.
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  chrome_settings_proto_path = "$policy_gen_dir/chrome_settings.proto"
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  constants_header_path = "$policy_gen_dir/policy_constants.h"
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  constants_source_path = "$policy_gen_dir/policy_constants.cc"
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  protobuf_decoder_path = "$policy_gen_dir/cloud_policy_generated.cc"
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  action("cloud_policy_code_generate") {
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    script = "tools/generate_policy_source.py"
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if (is_chromeos) {
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      chromeos_flag = "1"
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    } else {
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      chromeos_flag = "0"
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    inputs = [
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "resources/policy_templates.json",
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ]
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    outputs = [
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      constants_header_path,
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      constants_source_path,
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      protobuf_decoder_path,
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      chrome_settings_proto_path,
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      cloud_policy_proto_path,
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ]
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    args = [
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "--policy-constants-header=" +
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          rebase_path(constants_header_path, root_build_dir),
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "--policy-constants-source=" +
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          rebase_path(constants_source_path, root_build_dir),
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "--chrome-settings-protobuf=" +
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          rebase_path(chrome_settings_proto_path, root_build_dir),
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "--cloud-policy-protobuf=" +
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          rebase_path(cloud_policy_proto_path, root_build_dir),
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "--cloud-policy-decoder=" +
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          rebase_path(protobuf_decoder_path, root_build_dir),
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      os,
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      chromeos_flag,
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      rebase_path("resources/policy_templates.json", root_build_dir),
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ]
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  proto_library("cloud_policy_proto_generated_compile") {
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    sources = [ cloud_policy_proto_path ]
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    proto_out_dir = "policy/proto"
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    cc_generator_options = "dllexport_decl=POLICY_PROTO_EXPORT:"
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    cc_include = "components/policy/policy_proto_export.h"
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    defines = [ "POLICY_PROTO_COMPILATION" ]
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    deps = [
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ":cloud_policy_code_generate",
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ]
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # This target builds the "full" protobuf, used for tests only.
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  proto_library("chrome_settings_proto_generated_compile") {
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    sources = [ chrome_settings_proto_path ]
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    proto_out_dir = "policy/proto"
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    deps = [
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ":cloud_policy_code_generate",
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ":cloud_policy_proto_generated_compile",
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ]
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static_library("policy") {
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    sources = [
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      constants_header_path,
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      constants_source_path,
120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      protobuf_decoder_path,
121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ]
122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    defines = [ "POLICY_COMPONENT_IMPLEMENTATION" ]
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    deps = [
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ":cloud_policy_code_generate",
127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ":cloud_policy_proto_generated_compile",
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "//base",
129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "//third_party/protobuf:protobuf_lite",
130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ]
131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  group("test_support") {
134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    deps = [
135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ":chrome_settings_proto_generated_compile",
136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ":policy",
137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ]
138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static_library("policy_component_test_support") {
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    testonly = true
142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    sources = [
143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/browser/configuration_policy_pref_store_test.cc",
144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/browser/configuration_policy_pref_store_test.h",
145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/cloud/mock_cloud_external_data_manager.cc",
146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/cloud/mock_cloud_external_data_manager.h",
147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/cloud/mock_cloud_policy_client.cc",
148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/cloud/mock_cloud_policy_client.h",
149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/cloud/mock_cloud_policy_store.cc",
150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/cloud/mock_cloud_policy_store.h",
151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/cloud/mock_device_management_service.cc",
152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/cloud/mock_device_management_service.h",
153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/cloud/mock_user_cloud_policy_store.cc",
154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/cloud/mock_user_cloud_policy_store.h",
155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/cloud/policy_builder.cc",
156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/cloud/policy_builder.h",
157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/configuration_policy_provider_test.cc",
158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/configuration_policy_provider_test.h",
159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/mock_configuration_policy_provider.cc",
160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/mock_configuration_policy_provider.h",
161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/mock_policy_service.cc",
162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/mock_policy_service.h",
163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/policy_test_utils.cc",
164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/policy_test_utils.h",
165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/preferences_mock_mac.cc",
166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "core/common/preferences_mock_mac.h",
167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ]
168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    if (is_chromeos) {
170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      sources -= [
171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        "core/common/cloud/mock_user_cloud_policy_store.cc",
172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        "core/common/cloud/mock_user_cloud_policy_store.h",
173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ]
174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    deps = [
177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ":policy_component",
178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ":test_support",
179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "//components/policy/proto",
180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "//testing/gmock",
181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      "//testing/gtest",
182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ]
183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#TODO(GYP) policy templates, chrome_manifest_bundle
187