BUILD.gn 29 KB

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