fixup! [M120 Migration][NaCl][PPFWK] Upgradable pepper plugin requirement
[platform/framework/web/chromium-efl.git] / headless / BUILD.gn
1 # Copyright 2015 The Chromium Authors
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import("//build/config/c++/c++.gni")
6 import("//build/config/chrome_build.gni")
7 import("//build/config/python.gni")
8 import("//build/util/lastchange.gni")
9 import("//build/util/process_version.gni")
10 import("//headless/headless.gni")
11 import("//mojo/public/tools/bindings/mojom.gni")
12 import("//pdf/features.gni")
13 import("//printing/buildflags/buildflags.gni")
14 import("//testing/test.gni")
15 import("//third_party/closure_compiler/compile_js.gni")
16 import("//third_party/inspector_protocol/inspector_protocol.gni")
17 import("//tools/grit/grit_rule.gni")
18 import("//tools/grit/repack.gni")
19 import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
20
21 assert(!is_ios && !is_android)
22
23 if (headless_use_policy) {
24   assert(headless_use_prefs,
25          "'headless_use_policy' requires 'headless_use_prefs'.")
26 }
27
28 if (headless_enable_commands) {
29   assert(
30       !headless_use_embedded_resources,
31       "'headless_enable_commands' is not compatible with 'headless_use_embedded_resources'.")
32 }
33
34 # Headless defines config applied to every target below.
35 config("headless_defines_config") {
36   defines = []
37
38   if (headless_enable_commands) {
39     defines += [ "HEADLESS_ENABLE_COMMANDS" ]
40   }
41
42   if (headless_use_prefs) {
43     defines += [ "HEADLESS_USE_PREFS" ]
44   }
45
46   if (headless_use_policy) {
47     defines += [ "HEADLESS_USE_POLICY" ]
48   }
49
50   if (headless_mode_policy_supported) {
51     defines += [ "HEADLESS_MODE_POLICY_SUPPORTED" ]
52   }
53 }
54
55 # For code inside the build component "headless".
56 config("inside_headless_component") {
57   defines = [ "HEADLESS_IMPLEMENTATION" ]
58 }
59
60 group("headless_lib") {
61   deps = [ ":headless_non_renderer" ]
62 }
63
64 repack("resource_pack_data") {
65   sources = [
66     "$root_gen_dir/components/components_resources.pak",
67     "$root_gen_dir/content/content_resources.pak",
68     "$root_gen_dir/net/net_resources.pak",
69     "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak",
70     "$root_gen_dir/third_party/blink/public/resources/blink_scaled_resources_100_percent.pak",
71     "$root_gen_dir/ui/resources/ui_resources_100_percent.pak",
72     "$root_gen_dir/ui/resources/webui_resources.pak",
73   ]
74
75   deps = [
76     "//components/resources:components_resources",
77     "//content:content_resources",
78     "//net:net_resources",
79     "//third_party/blink/public:resources",
80     "//third_party/blink/public:scaled_resources_100_percent",
81     "//ui/resources",
82   ]
83
84   output = "$root_out_dir/headless_lib_data.pak"
85 }
86
87 repack("resource_pack_strings") {
88   sources = [
89     "$root_gen_dir/components/strings/components_strings_en-US.pak",
90     "$root_gen_dir/third_party/blink/public/strings/blink_strings_en-US.pak",
91     "$root_gen_dir/ui/strings/app_locale_settings_en-US.pak",
92     "$root_gen_dir/ui/strings/ax_strings_en-US.pak",
93     "$root_gen_dir/ui/strings/ui_strings_en-US.pak",
94   ]
95
96   sources += [ "${root_gen_dir}/components/strings/components_${branding_path_product}_strings_en-US.pak" ]
97
98   deps = [
99     "//components/strings",
100     "//third_party/blink/public/strings",
101     "//ui/strings",
102   ]
103
104   if (!is_fuchsia) {
105     sources +=
106         [ "$root_gen_dir/content/browser/devtools/devtools_resources.pak" ]
107     deps += [ "//content/browser/devtools:devtools_resources" ]
108   }
109
110   output = "$root_out_dir/headless_lib_strings.pak"
111 }
112
113 action("embedded_resource_pack_data") {
114   # TODO(altimin): Consider zipping file here, it can reduce size up to 80%.
115   script = "lib/embed_data.py"
116
117   inputs = [ "$root_out_dir/headless_lib_data.pak" ]
118
119   outputs = [
120     "$root_gen_dir/headless/embedded_resource_pack_data.cc",
121     "$root_gen_dir/headless/embedded_resource_pack_data.h",
122   ]
123
124   args = [
125     "--data_file",
126     rebase_path("$root_out_dir/headless_lib_data.pak", root_build_dir),
127     "--gendir",
128     rebase_path("$root_gen_dir", root_build_dir),
129     "--header_file",
130     "headless/embedded_resource_pack_data.h",
131     "--source_file",
132     "headless/embedded_resource_pack_data.cc",
133     "--namespace",
134     "headless",
135     "--variable_name",
136     "kHeadlessResourcePackData",
137   ]
138
139   deps = [ ":resource_pack_data" ]
140 }
141
142 action("embedded_resource_pack_strings") {
143   # TODO(altimin): Consider zipping file here, it can reduce size up to 80%.
144   script = "lib/embed_data.py"
145
146   inputs = [ "$root_out_dir/headless_lib_strings.pak" ]
147
148   outputs = [
149     "$root_gen_dir/headless/embedded_resource_pack_strings.cc",
150     "$root_gen_dir/headless/embedded_resource_pack_strings.h",
151   ]
152
153   args = [
154     "--data_file",
155     rebase_path("$root_out_dir/headless_lib_strings.pak", root_build_dir),
156     "--gendir",
157     rebase_path("$root_gen_dir", root_build_dir),
158     "--header_file",
159     "headless/embedded_resource_pack_strings.h",
160     "--source_file",
161     "headless/embedded_resource_pack_strings.cc",
162     "--namespace",
163     "headless",
164     "--variable_name",
165     "kHeadlessResourcePackStrings",
166   ]
167
168   deps = [ ":resource_pack_strings" ]
169 }
170
171 devtools_domains = [
172   "accessibility",
173   "animation",
174   "browser",
175   "cache_storage",
176   "console",
177   "css",
178   "database",
179   "debugger",
180   "device_orientation",
181   "dom",
182   "dom_debugger",
183   "dom_snapshot",
184   "dom_storage",
185   "emulation",
186   "fetch",
187   "headless_experimental",
188   "heap_profiler",
189   "indexeddb",
190   "input",
191   "inspector",
192   "io",
193   "layer_tree",
194   "log",
195   "memory",
196   "network",
197   "page",
198   "performance",
199   "profiler",
200   "runtime",
201   "security",
202   "service_worker",
203   "storage",
204   "target",
205   "tracing",
206 ]
207
208 generated_devtools_api_sources = []
209 generated_devtools_api_headers = []
210 foreach(domain, devtools_domains) {
211   generated_devtools_api_headers += [
212     "$target_gen_dir/public/devtools/domains/" + domain + ".h",
213     "$target_gen_dir/public/devtools/domains/types_" + domain + ".h",
214     "$target_gen_dir/public/devtools/internal/type_conversions_" + domain +
215         ".h",
216     "$target_gen_dir/public/devtools/internal/" +
217         "types_forward_declarations_" + domain + ".h",
218   ]
219   generated_devtools_api_sources += [
220     "$target_gen_dir/public/devtools/domains/" + domain + ".cc",
221     "$target_gen_dir/public/devtools/domains/types_" + domain + ".cc",
222   ]
223 }
224
225 action("gen_devtools_client_api") {
226   script = "lib/browser/devtools_api/client_api_generator.py"
227   deps = [ "//third_party/blink/public/devtools_protocol:protocol_version" ]
228   public_deps = [ ":protocol_sources" ]
229   inputs = [
230     "$root_gen_dir/third_party/blink/public/devtools_protocol/protocol.json",
231   ]
232
233   outputs = generated_devtools_api_headers + generated_devtools_api_sources
234   sources = [
235     "lib/browser/devtools_api/domain_cc.template",
236     "lib/browser/devtools_api/domain_h.template",
237     "lib/browser/devtools_api/domain_type_conversions_h.template",
238     "lib/browser/devtools_api/domain_types_cc.template",
239     "lib/browser/devtools_api/domain_types_forward_declarations_h.template",
240     "lib/browser/devtools_api/domain_types_h.template",
241   ]
242
243   args = [
244     "--protocol",
245     rebase_path(inputs[0], root_build_dir),
246     "--output_dir",
247     rebase_path(target_gen_dir, root_build_dir) + "/public",
248   ]
249 }
250
251 inspector_protocol_generate("protocol_sources") {
252   visibility = [
253     ":backend_cdp_bindings",
254     ":gen_devtools_client_api",
255   ]
256   deps = [ "//third_party/blink/public/devtools_protocol:protocol_version" ]
257   _blink_protocol_path = rebase_path(
258           "$root_gen_dir/third_party/blink/public/devtools_protocol/protocol.json",
259           root_build_dir)
260
261   inspector_protocol_dir = "//third_party/inspector_protocol"
262   out_dir = target_gen_dir
263   config_file = "protocol_config.json"
264   config_values = [ "protocol.path=$_blink_protocol_path" ]
265   use_embedder_types = true
266
267   inputs = [
268     "$root_gen_dir/third_party/blink/public/devtools_protocol/protocol.json",
269     config_file,
270   ]
271
272   # These are relative to $target_gen_dir.
273   outputs = [
274     "lib/browser/protocol/browser.cc",
275     "lib/browser/protocol/browser.h",
276     "lib/browser/protocol/headless_experimental.cc",
277     "lib/browser/protocol/headless_experimental.h",
278     "lib/browser/protocol/page.cc",
279     "lib/browser/protocol/page.h",
280     "lib/browser/protocol/target.cc",
281     "lib/browser/protocol/target.h",
282     "lib/browser/protocol/protocol.h",
283   ]
284 }
285
286 static_library("backend_cdp_bindings") {
287   deps = [
288     ":protocol_sources",
289     "//base",
290     "//third_party/inspector_protocol:crdtp",
291   ]
292   sources = get_target_outputs(":protocol_sources")
293   visibility = [ ":headless_non_renderer" ]
294   configs += [
295     "//build/config/compiler:wexit_time_destructors",
296     ":headless_defines_config",
297     ":inside_headless_component",
298   ]
299 }
300
301 # Code that is not needed in a renderer process.
302 component("headless_non_renderer") {
303   sources = [
304     "lib/browser/command_line_handler.cc",
305     "lib/browser/command_line_handler.h",
306     "lib/browser/directory_enumerator.cc",
307     "lib/browser/directory_enumerator.h",
308     "lib/browser/headless_browser_context_impl.cc",
309     "lib/browser/headless_browser_context_impl.h",
310     "lib/browser/headless_browser_context_options.cc",
311     "lib/browser/headless_browser_context_options.h",
312     "lib/browser/headless_browser_impl.cc",
313     "lib/browser/headless_browser_impl.h",
314     "lib/browser/headless_browser_main_parts.cc",
315     "lib/browser/headless_browser_main_parts.h",
316     "lib/browser/headless_client_hints_controller_delegate.cc",
317     "lib/browser/headless_client_hints_controller_delegate.h",
318     "lib/browser/headless_content_browser_client.cc",
319     "lib/browser/headless_content_browser_client.h",
320     "lib/browser/headless_devtools.cc",
321     "lib/browser/headless_devtools.h",
322     "lib/browser/headless_devtools_manager_delegate.cc",
323     "lib/browser/headless_devtools_manager_delegate.h",
324     "lib/browser/headless_permission_manager.cc",
325     "lib/browser/headless_permission_manager.h",
326     "lib/browser/headless_platform_event_source.cc",
327     "lib/browser/headless_platform_event_source.h",
328     "lib/browser/headless_request_context_manager.cc",
329     "lib/browser/headless_request_context_manager.h",
330     "lib/browser/headless_web_contents_impl.cc",
331     "lib/browser/headless_web_contents_impl.h",
332     "lib/browser/headless_window_tree_host.h",
333     "lib/browser/protocol/browser_handler.cc",
334     "lib/browser/protocol/browser_handler.h",
335     "lib/browser/protocol/domain_handler.h",
336     "lib/browser/protocol/headless_devtools_session.cc",
337     "lib/browser/protocol/headless_devtools_session.h",
338     "lib/browser/protocol/headless_handler.cc",
339     "lib/browser/protocol/headless_handler.h",
340     "lib/browser/protocol/page_handler.cc",
341     "lib/browser/protocol/page_handler.h",
342     "lib/browser/protocol/target_handler.cc",
343     "lib/browser/protocol/target_handler.h",
344     "lib/headless_content_client.cc",
345     "lib/headless_content_client.h",
346     "lib/headless_content_main_delegate.cc",
347     "lib/headless_content_main_delegate.h",
348     "lib/renderer/headless_content_renderer_client.cc",
349     "lib/renderer/headless_content_renderer_client.h",
350     "lib/switches.cc",
351     "lib/utility/headless_content_utility_client.cc",
352     "lib/utility/headless_content_utility_client.h",
353     "public/headless_browser.h",
354     "public/headless_browser_context.h",
355     "public/headless_export.h",
356     "public/headless_web_contents.h",
357     "public/internal/message_dispatcher.h",
358     "public/internal/value_conversions.h",
359     "public/switches.h",
360     "public/util/error_reporter.cc",
361     "public/util/error_reporter.h",
362     "public/util/user_agent.cc",
363     "public/util/user_agent.h",
364   ]
365
366   configs += [ "//build/config/compiler:wexit_time_destructors" ]
367
368   if (is_mac) {
369     sources += [
370       "lib/browser/headless_browser_impl_mac.mm",
371       "lib/browser/headless_shell_application_mac.h",
372       "lib/browser/headless_shell_application_mac.mm",
373       "lib/headless_content_main_delegate_mac.mm",
374     ]
375   }
376
377   if (is_posix) {
378     sources += [ "lib/browser/headless_browser_main_parts_posix.cc" ]
379   }
380
381   if (use_aura) {
382     sources += [
383       "lib/browser/headless_browser_impl_aura.cc",
384       "lib/browser/headless_focus_client.cc",
385       "lib/browser/headless_focus_client.h",
386       "lib/browser/headless_screen.cc",
387       "lib/browser/headless_screen.h",
388       "lib/browser/headless_window_parenting_client.cc",
389       "lib/browser/headless_window_parenting_client.h",
390       "lib/browser/headless_window_tree_host.cc",
391     ]
392   }
393
394   sources += generated_devtools_api_headers + generated_devtools_api_sources
395
396   public_deps = [
397     "//base",
398     "//net",
399   ]
400
401   data_deps = []
402   data = []
403   defines = []
404
405   if (enable_printing) {
406     public_deps += [ "//skia" ]
407     sources += [
408       "lib/renderer/headless_print_render_frame_helper_delegate.cc",
409       "lib/renderer/headless_print_render_frame_helper_delegate.h",
410     ]
411   }
412
413   deps = [
414     ":backend_cdp_bindings",
415     ":gen_devtools_client_api",
416     "//base:base_static",
417     "//build:branding_buildflags",
418     "//build:chromeos_buildflags",
419     "//components/cookie_config",
420     "//components/crash/core/common:common",
421     "//components/devtools/devtools_pipe",
422     "//components/embedder_support",
423     "//components/embedder_support:browser_util",
424     "//components/embedder_support:embedder_support",
425     "//components/embedder_support/origin_trials",
426     "//components/headless/clipboard",
427     "//components/headless/command_handler:switches",
428     "//components/headless/select_file_dialog",
429     "//components/keyed_service/content",
430     "//components/origin_trials:browser",
431     "//components/origin_trials:common",
432     "//components/os_crypt/sync",
433     "//components/policy:generated",
434     "//components/policy/content",
435     "//components/policy/core/common:common_constants",
436     "//components/pref_registry",
437     "//components/prefs",
438     "//components/profile_metrics",
439     "//components/security_state/core",
440     "//components/version_info",
441     "//content/public/app",
442     "//content/public/browser",
443     "//content/public/common",
444     "//content/public/renderer",
445     "//content/public/utility",
446     "//printing/buildflags",
447     "//services/cert_verifier/public/mojom",
448     "//services/device/public/cpp/geolocation",
449     "//services/service_manager/public/cpp",
450     "//third_party/inspector_protocol:crdtp",
451     "//ui/base",
452     "//ui/compositor",
453     "//ui/display",
454     "//ui/events/devices",
455     "//ui/gfx",
456     "//url",
457   ]
458
459   if (headless_use_policy) {
460     sources += [
461       "lib/browser/policy/headless_browser_policy_connector.cc",
462       "lib/browser/policy/headless_browser_policy_connector.h",
463       "lib/browser/policy/headless_policies.cc",
464       "lib/browser/policy/headless_policies.h",
465       "lib/browser/policy/headless_prefs.cc",
466       "lib/browser/policy/headless_prefs.h",
467     ]
468     deps += [
469       "//components/headless/policy",
470       "//components/policy/content",
471       "//components/policy/core/browser",
472       "//components/policy/core/common:policy_path_constants",
473     ]
474   }
475
476   if (enable_printing) {
477     deps += [
478       "//components/printing/browser",
479       "//components/printing/browser/headless",
480       "//components/printing/browser/print_to_pdf",
481       "//components/printing/common:mojo_interfaces",
482       "//components/printing/renderer:renderer",
483       "//components/services/print_compositor",
484       "//components/services/print_compositor/public/mojom",
485       "//printing",
486       "//printing/mojom",
487     ]
488   }
489
490   if (use_ozone) {
491     deps += [ "//ui/ozone" ]
492   }
493
494   if (headless_use_prefs) {
495     deps += [
496       "//components/origin_trials:browser",
497       "//components/origin_trials:common",
498       "//components/user_prefs",
499       "//third_party/blink/public/common",
500     ]
501   }
502
503   if (is_component_build) {
504     deps += [
505       "//components/crash/core/common",
506       "//components/security_state/content",
507       "//gin",
508       "//third_party/blink/public:blink",
509       "//ui/gl",
510       "//v8",
511     ]
512
513     if (enable_printing) {
514       deps += [
515         "//components/printing/browser",
516         "//components/printing/renderer",
517         "//components/services/print_compositor",
518         "//components/services/print_compositor/public/mojom",
519       ]
520     }
521
522     if (headless_use_prefs) {
523       deps += [ "//components/os_crypt/sync" ]
524     }
525   }
526
527   if (!is_fuchsia) {
528     deps += [
529       "//components/crash/content/browser",
530       "//components/crash/core/app",
531     ]
532     sources += [
533       "lib/headless_crash_reporter_client.cc",
534       "lib/headless_crash_reporter_client.h",
535     ]
536   }
537
538   if (is_win) {
539     deps += [ "//sandbox" ]
540   }
541
542   if (is_linux || is_chromeos) {
543     data_deps += [ "//components/crash/core/app:chrome_crashpad_handler" ]
544   }
545
546   # Normally set to false (see build/args/headless.gn), but we can optionally
547   # use external v8 startup data too.
548   if ((!is_win || is_component_build) && v8_use_external_startup_data) {
549     public_deps += [ "//v8" ]
550     if (use_v8_context_snapshot) {
551       data += [ "$root_out_dir/$v8_context_snapshot_filename" ]
552       data_deps += [ "//tools/v8_context_snapshot" ]
553     } else {
554       data += [ "$root_out_dir/snapshot_blob.bin" ]
555     }
556   }
557
558   if (is_mac) {
559     deps += [ ":mac_helpers" ]
560     frameworks = [
561       "AppKit.framework",
562       "CoreFoundation.framework",
563     ]
564   } else {
565     deps += [ "//ui/aura" ]
566   }
567
568   if (headless_use_embedded_resources) {
569     defines += [ "HEADLESS_USE_EMBEDDED_RESOURCES" ]
570     deps += [
571       ":embedded_resource_pack_data",
572       ":embedded_resource_pack_strings",
573     ]
574     sources += [
575       "$root_gen_dir/headless/embedded_resource_pack_data.cc",
576       "$root_gen_dir/headless/embedded_resource_pack_data.h",
577       "$root_gen_dir/headless/embedded_resource_pack_strings.cc",
578       "$root_gen_dir/headless/embedded_resource_pack_strings.h",
579     ]
580   } else {
581     deps += [
582       ":resource_pack_data",
583       ":resource_pack_strings",
584     ]
585   }
586
587   if (use_dbus) {
588     defines += [ "USE_DBUS" ]
589     deps += [ "//device/bluetooth" ]
590   }
591
592   configs += [ ":inside_headless_component" ]
593   configs += [ ":headless_defines_config" ]
594 }
595
596 group("headless_tests") {
597   testonly = true
598
599   deps = [
600     ":headless_browsertests",
601     ":headless_unittests",
602   ]
603 }
604
605 test("headless_unittests") {
606   sources = [
607     "lib/browser/headless_browser_impl_unittest.cc",
608     "lib/browser/headless_client_hints_controller_delegate_unittest.cc",
609     "public/domains/types_unittest.cc",
610     "public/util/error_reporter_unittest.cc",
611
612     # Headers for code under test that aren't normally exposed.
613     "public/headless_export.h",
614     "public/util/error_reporter.h",
615   ]
616
617   # Headers for generated API code under test.
618   sources += generated_devtools_api_headers
619
620   defines = []
621
622   deps = [
623     ":gen_devtools_client_api",
624     ":headless_non_renderer",
625     ":headless_shell_lib",
626     "//base/test:run_all_unittests",
627     "//base/test:test_support",
628     "//components/embedder_support",
629     "//components/embedder_support:browser_util",
630     "//components/embedder_support/origin_trials",
631     "//components/security_state/content",
632     "//content/public/app",
633     "//content/public/child:child",
634     "//content/public/common",
635     "//testing/gmock",
636     "//testing/gtest",
637     "//ui/gfx:test_support",
638   ]
639
640   if (is_win) {
641     deps += [ "//components/crash/core/app:crash_export_thunks" ]
642   }
643
644   if (enable_printing) {
645     deps += [
646       "//components/printing/browser",
647       "//components/printing/browser/headless",
648       "//printing",
649       "//printing/buildflags",
650       "//third_party/blink/public:blink",
651     ]
652   }
653
654   configs += [ ":headless_defines_config" ]
655 }
656
657 if (is_mac) {
658   copy("mac_helpers") {
659     sources = [ "$root_out_dir/chrome_crashpad_handler" ]
660
661     deps = [ "//components/crash/core/app:chrome_crashpad_handler" ]
662
663     outputs = [ "$root_out_dir/Helpers/{{source_file_part}}" ]
664   }
665 }
666
667 test("headless_browsertests") {
668   configs += [
669     "//net:net_test_config",
670     "//v8:external_startup_data",
671   ]
672   sources = [
673     "test/headless_browser_browsertest.cc",
674     "test/headless_browser_context_browsertest.cc",
675     "test/headless_browser_test.cc",
676     "test/headless_browser_test.h",
677     "test/headless_browser_test_utils.cc",
678     "test/headless_browser_test_utils.h",
679     "test/headless_browser_user_agent_metadata_browsertest.cc",
680     "test/headless_client_browsertest.cc",
681     "test/headless_devtooled_browsertest.cc",
682     "test/headless_devtooled_browsertest.h",
683     "test/headless_devtools_client_browsertest.cc",
684     "test/headless_origin_trials_browsertest.cc",
685     "test/headless_test_launcher.cc",
686     "test/headless_web_contents_browsertest.cc",
687     "test/test_network_interceptor.cc",
688     "test/test_network_interceptor.h",
689   ]
690
691   if (enable_printing && enable_pdf) {
692     sources += [ "test/headless_printtopdf_browsertest.cc" ]
693   }
694
695   if (headless_use_policy) {
696     sources += [ "test/headless_policy_browsertest.cc" ]
697   }
698
699   if (headless_enable_commands) {
700     sources += [ "test/headless_command_browsertest.cc" ]
701   }
702
703   # TODO(crbug.com/1318548): Enable on Fuchsia when no longer flakily timeout.
704   if (!is_fuchsia) {
705     sources += [
706       "test/headless_compositor_browsertest.cc",
707       "test/headless_protocol_browsertest.cc",
708       "test/headless_protocol_browsertest.h",
709     ]
710   }
711
712   data = [
713     "test/data/",
714     "test/dom_tree_extraction_expected_nodes.txt",
715     "test/dom_tree_extraction_expected_styles.txt",
716     "$root_out_dir/headless_lib_data.pak",
717     "$root_out_dir/headless_lib_strings.pak",
718     "//net/tools/testserver/",
719     "//third_party/blink/web_tests/http/tests/inspector-protocol/",
720     "//third_party/pywebsocket3/",
721   ]
722
723   data_deps = []
724
725   if (headless_enable_commands) {
726     data += [ "$root_out_dir/headless_command_resources.pak" ]
727     data_deps += [ "//components/headless/command_handler" ]
728   }
729
730   if (is_fuchsia) {
731     additional_manifest_fragments = [
732       "//build/config/fuchsia/test/fonts.shard.test-cml",
733
734       # TODO(https://crbug.com/1185811): Investigate removing the requirement
735       # for VmexResource.
736       "//build/config/fuchsia/test/mark_vmo_executable.shard.test-cml",
737       "//build/config/fuchsia/test/network.shard.test-cml",
738       "//third_party/fuchsia-sdk/sdk/pkg/vulkan/client.shard.cml",
739     ]
740   }
741
742   if (is_mac) {
743     data_deps += [ ":mac_helpers" ]
744   }
745
746   defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
747
748   deps = [
749     ":headless_shell_lib",
750     "//base",
751     "//cc:test_support",
752     "//components/devtools/simple_devtools_protocol_client",
753     "//components/embedder_support",
754     "//components/embedder_support:browser_util",
755     "//components/embedder_support:embedder_support",
756     "//components/headless/select_file_dialog",
757     "//components/headless/test",
758     "//components/policy/core/browser",
759     "//components/security_state/content",
760     "//components/version_info",
761     "//content/test:browsertest_support",
762     "//content/test:test_support",
763     "//gin",
764     "//net:test_support",
765     "//pdf:buildflags",
766     "//printing/buildflags",
767     "//services/device/public/cpp:test_support",
768     "//services/network/public/mojom",
769     "//testing/gmock",
770     "//testing/gtest",
771     "//tools/v8_context_snapshot:buildflags",
772     "//ui/base/clipboard",
773     "//ui/shell_dialogs",
774   ]
775
776   if (is_mac) {
777     deps += [ "//services/device/public/cpp:test_support" ]
778   }
779
780   if (!is_fuchsia) {
781     deps += [ "//third_party/crashpad/crashpad/client" ]
782   }
783
784   if (enable_printing) {
785     deps += [
786       "//components/headless/command_handler:switches",
787       "//components/printing/browser",
788       "//printing",
789     ]
790
791     if (enable_pdf) {
792       deps += [ "//pdf" ]
793     }
794   }
795
796   if (headless_use_policy) {
797     deps += [
798       "//components/headless/policy",
799       "//components/policy/core/common:test_support",
800     ]
801   }
802
803   if (headless_enable_commands) {
804     deps += [
805       "//components/headless/command_handler",
806       "//components/headless/command_handler:switches",
807     ]
808   }
809
810   configs += [ ":headless_defines_config" ]
811 }
812
813 if (is_win) {
814   # Headless library with only browser dependencies. This is used when no child
815   # dependencies are needed in the target (e.g. chrome:main_dll).
816   static_library("headless_shell_browser_lib") {
817     sources = [
818       "app/headless_shell.cc",
819       "public/headless_shell.h",
820     ]
821     deps = [
822       ":headless_non_renderer",
823       "//build:branding_buildflags",
824       "//components/crash/core/app:app",
825       "//components/crash/core/app:run_as_crashpad_handler",
826       "//components/devtools/simple_devtools_protocol_client",
827       "//components/embedder_support",
828       "//content:sandbox_helper_win",
829       "//content/public/app",
830       "//content/public/browser",
831       "//content/public/common",
832       "//net",
833       "//printing/buildflags",
834       "//sandbox",
835     ]
836     if (headless_use_policy) {
837       deps += [
838         "//components/headless/policy",
839         "//components/policy/content",
840       ]
841     }
842     if (enable_printing) {
843       deps += [ "//components/printing/browser/headless:headless" ]
844     }
845     if (headless_enable_commands) {
846       deps += [ "//components/headless/command_handler" ]
847     }
848
849     configs += [
850       ":headless_defines_config",
851       "//build/config/compiler:wexit_time_destructors",
852     ]
853   }
854 }
855
856 # Headless library with all included dependencies. Use this library unless you
857 # have browser/child dependencies restrictions.
858 static_library("headless_shell_lib") {
859   sources = [
860     "app/headless_shell.cc",
861     "public/headless_shell.h",
862   ]
863   defines = []
864
865   if (!is_component_build && !build_chrome) {
866     sources += [
867       "lib/utility/headless_content_utility_client.cc",
868       "lib/utility/headless_content_utility_client.h",
869     ]
870   }
871
872   deps = [
873     "//build:branding_buildflags",
874     "//components/devtools/simple_devtools_protocol_client",
875     "//components/embedder_support",
876     "//components/policy/content",
877     "//components/security_state/content",
878     "//content",
879     "//content/public/app",
880     "//content/public/browser",
881     "//content/public/child:child",
882     "//content/public/common",
883     "//content/public/utility",
884     "//printing/buildflags",
885   ]
886
887   public_deps = [
888     ":headless_non_renderer",
889     "//base",
890     "//third_party/inspector_protocol:crdtp",
891   ]
892
893   if (!is_component_build) {
894     public_deps += [ ":headless_non_renderer" ]
895   }
896
897   if (!is_fuchsia) {
898     deps += [ "//components/crash/content/browser" ]
899   }
900
901   if (enable_printing) {
902     deps += [
903       "//components/printing/browser",
904       "//components/printing/browser/headless:headless",
905       "//components/printing/renderer",
906       "//components/services/print_compositor",
907       "//components/services/print_compositor/public/mojom",
908     ]
909   }
910
911   if (headless_use_policy) {
912     deps += [
913       "//components/headless/policy",
914       "//components/policy/content",
915     ]
916   }
917
918   if (headless_enable_commands) {
919     deps += [ "//components/headless/command_handler" ]
920   }
921
922   if (is_win) {
923     defines = [ "HEADLESS_USE_CRASHPAD" ]
924
925     deps += [
926       "//components/crash/core/app:run_as_crashpad_handler",
927       "//content:sandbox_helper_win",
928       "//sandbox",
929     ]
930   }
931
932   if (is_mac) {
933     deps += [ "//components/os_crypt/sync" ]
934   }
935
936   if (is_win || (is_posix && !is_mac)) {
937     deps += [ "//components/crash/core/app" ]
938   }
939
940   configs += [
941     ":headless_defines_config",
942     "//build/config/compiler:wexit_time_destructors",
943   ]
944 }
945
946 executable("headless_shell") {
947   configs -= [ "//build/config/compiler:thinlto_optimize_default" ]
948   configs += [ "//build/config/compiler:thinlto_optimize_max" ]
949
950   sources = [ "app/headless_shell_main.cc" ]
951   defines = []
952
953   deps = [ ":headless_shell_lib" ]
954
955   if (!headless_use_embedded_resources) {
956     data = [
957       "$root_out_dir/headless_lib_data.pak",
958       "$root_out_dir/headless_lib_strings.pak",
959     ]
960   }
961
962   if (is_win) {
963     deps += [
964       "//build/win:default_exe_manifest",
965       "//content/public/app",
966     ]
967   }
968
969   if (is_mac) {
970     deps += [ "//sandbox/mac:seatbelt" ]
971   }
972
973   configs += [
974     ":headless_defines_config",
975     "//build/config/compiler:wexit_time_destructors",
976   ]
977 }