BUILD.gn 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. # Copyright 2014 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/buildflag_header.gni")
  5. import("//build/config/features.gni")
  6. import("//pdf/features.gni")
  7. import("//ppapi/buildflags/buildflags.gni")
  8. import("//testing/libfuzzer/fuzzer_test.gni")
  9. import("//testing/test.gni")
  10. import("//third_party/pdfium/pdfium.gni")
  11. import("//tools/grit/repack.gni")
  12. import("//v8/gni/v8.gni")
  13. # Generate a buildflag header for compile-time checking of PDF support.
  14. buildflag_header("buildflags") {
  15. header = "buildflags.h"
  16. flags = [
  17. "ENABLE_INK=$enable_ink",
  18. "ENABLE_PDF=$enable_pdf",
  19. ]
  20. }
  21. if (enable_pdf) {
  22. config("strict") {
  23. configs = [ "//build/config/compiler:wexit_time_destructors" ]
  24. }
  25. config("pdfium_includes") {
  26. include_dirs = [ "//third_party/pdfium" ]
  27. }
  28. static_library("pdf") {
  29. sources = [ "pdf.cc" ]
  30. configs += [ ":strict" ]
  31. public = [ "pdf.h" ]
  32. deps = [
  33. ":internal",
  34. "//base",
  35. "//build:chromeos_buildflags",
  36. "//ui/gfx/geometry",
  37. ]
  38. }
  39. source_set("features") {
  40. sources = [ "pdf_features.cc" ]
  41. configs += [ ":strict" ]
  42. public = [ "pdf_features.h" ]
  43. deps = [
  44. "//base",
  45. "//build:chromeos_buildflags",
  46. ]
  47. }
  48. source_set("internal") {
  49. visibility = [ ":*" ]
  50. sources = [
  51. "accessibility.cc",
  52. "accessibility.h",
  53. "document_attachment_info.cc",
  54. "document_attachment_info.h",
  55. "document_layout.cc",
  56. "document_layout.h",
  57. "document_metadata.cc",
  58. "document_metadata.h",
  59. "draw_utils/coordinates.cc",
  60. "draw_utils/coordinates.h",
  61. "draw_utils/shadow.cc",
  62. "draw_utils/shadow.h",
  63. "file_extension.cc",
  64. "file_extension.h",
  65. "metrics_handler.cc",
  66. "metrics_handler.h",
  67. "page_orientation.cc",
  68. "page_orientation.h",
  69. "paint_aggregator.cc",
  70. "paint_aggregator.h",
  71. "paint_manager.cc",
  72. "paint_manager.h",
  73. "paint_ready_rect.cc",
  74. "paint_ready_rect.h",
  75. "parsed_params.cc",
  76. "parsed_params.h",
  77. "pdf_engine.h",
  78. "pdf_init.cc",
  79. "pdf_init.h",
  80. "pdf_transform.cc",
  81. "pdf_transform.h",
  82. "pdf_utils/dates.cc",
  83. "pdf_utils/dates.h",
  84. "pdf_view_plugin_base.cc",
  85. "pdf_view_plugin_base.h",
  86. "pdfium/pdfium_api_string_buffer_adapter.cc",
  87. "pdfium/pdfium_api_string_buffer_adapter.h",
  88. "pdfium/pdfium_document.cc",
  89. "pdfium/pdfium_document.h",
  90. "pdfium/pdfium_engine.cc",
  91. "pdfium/pdfium_engine.h",
  92. "pdfium/pdfium_engine_exports.cc",
  93. "pdfium/pdfium_engine_exports.h",
  94. "pdfium/pdfium_form_filler.cc",
  95. "pdfium/pdfium_form_filler.h",
  96. "pdfium/pdfium_mem_buffer_file_write.cc",
  97. "pdfium/pdfium_mem_buffer_file_write.h",
  98. "pdfium/pdfium_page.cc",
  99. "pdfium/pdfium_page.h",
  100. "pdfium/pdfium_permissions.cc",
  101. "pdfium/pdfium_permissions.h",
  102. "pdfium/pdfium_print.cc",
  103. "pdfium/pdfium_print.h",
  104. "pdfium/pdfium_range.cc",
  105. "pdfium/pdfium_range.h",
  106. "pdfium/pdfium_unsupported_features.cc",
  107. "pdfium/pdfium_unsupported_features.h",
  108. "preview_mode_client.cc",
  109. "preview_mode_client.h",
  110. "ui/document_properties.cc",
  111. "ui/document_properties.h",
  112. "ui/file_name.cc",
  113. "ui/file_name.h",
  114. "ui/thumbnail.cc",
  115. "ui/thumbnail.h",
  116. ]
  117. public_configs = [ ":pdfium_includes" ]
  118. configs += [ ":strict" ]
  119. public_deps = [
  120. "//printing/mojom",
  121. "//skia",
  122. "//v8",
  123. ]
  124. deps = [
  125. ":accessibility",
  126. ":buildflags",
  127. ":content_restriction",
  128. ":features",
  129. "//base",
  130. "//base:i18n",
  131. "//build:chromeos_buildflags",
  132. "//components/strings",
  133. "//gin",
  134. "//pdf/loader",
  135. "//printing",
  136. "//third_party/blink/public:blink_headers",
  137. "//third_party/blink/public/common:headers",
  138. "//third_party/icu",
  139. "//third_party/pdfium",
  140. "//ui/base",
  141. "//ui/base/cursor/mojom:cursor_type",
  142. "//ui/events:events_base",
  143. "//ui/events/blink",
  144. "//ui/gfx/codec",
  145. "//ui/gfx/range",
  146. ]
  147. if (is_linux || is_chromeos) {
  148. sources += [
  149. "pdfium/pdfium_font_linux.cc",
  150. "pdfium/pdfium_font_linux.h",
  151. ]
  152. deps += [
  153. ":font_table_linux",
  154. "//components/services/font/public/cpp",
  155. ]
  156. }
  157. }
  158. source_set("assert_enums") {
  159. visibility = [ ":*" ]
  160. testonly = true
  161. sources = [ "pdfium/pdfium_assert_matching_enums.cc" ]
  162. deps = [
  163. ":accessibility",
  164. ":content_restriction",
  165. ":internal",
  166. ":pdf",
  167. "//third_party/blink/public/common:headers",
  168. "//third_party/pdfium",
  169. "//ui/base",
  170. ]
  171. }
  172. source_set("content_restriction") {
  173. # Exists separately to expose this header for testing.
  174. public = [ "content_restriction.h" ]
  175. }
  176. source_set("accessibility") {
  177. visibility = [
  178. ":*",
  179. "//components:components_browsertests${exec_target_suffix}",
  180. "//components/pdf/renderer",
  181. "//components/pdf/renderer:unit_tests",
  182. ]
  183. sources = [
  184. "accessibility_helper.cc",
  185. "accessibility_helper.h",
  186. "accessibility_structs.cc",
  187. "accessibility_structs.h",
  188. "pdf_accessibility_action_handler.h",
  189. "pdf_accessibility_data_handler.h",
  190. ]
  191. configs += [ ":strict" ]
  192. deps = [
  193. "//base",
  194. "//skia",
  195. "//ui/gfx/geometry",
  196. ]
  197. }
  198. static_library("pdf_view_web_plugin") {
  199. # The PDF viewer relies on plugin infrastructure, which is currently tied to
  200. # PPAPI support. Fuchsia does not have plugins enabled and is in a state
  201. # where this code builds but does not work in Chrome.
  202. # TODO(crbug.com/1306610): Remove this assert when this is no longer true.
  203. assert(enable_plugins || is_fuchsia)
  204. visibility = [
  205. ":*",
  206. "//components/pdf/renderer",
  207. ]
  208. sources = [
  209. "pdf_view_web_plugin.cc",
  210. "post_message_receiver.cc",
  211. "post_message_receiver.h",
  212. "v8_value_converter.h",
  213. ]
  214. configs += [ ":strict" ]
  215. public = [ "pdf_view_web_plugin.h" ]
  216. public_deps = [ "//pdf/mojom" ]
  217. deps = [
  218. ":accessibility",
  219. ":buildflags",
  220. ":content_restriction",
  221. ":internal",
  222. "//base",
  223. "//base:i18n",
  224. "//cc/paint",
  225. "//gin",
  226. "//net",
  227. "//pdf/loader",
  228. "//printing",
  229. "//services/network/public/mojom:url_loader_base",
  230. "//skia",
  231. "//third_party/blink/public:blink_headers",
  232. "//third_party/blink/public/common:headers",
  233. "//ui/base/cursor",
  234. "//ui/base/cursor/mojom:cursor_type",
  235. "//ui/events/blink",
  236. "//ui/gfx/range",
  237. "//v8",
  238. ]
  239. }
  240. source_set("pdf_test_utils") {
  241. visibility = [ "//pdf/*" ]
  242. testonly = true
  243. sources = [
  244. "test/mock_web_associated_url_loader.cc",
  245. "test/mock_web_associated_url_loader.h",
  246. "test/test_client.cc",
  247. "test/test_client.h",
  248. "test/test_document_loader.cc",
  249. "test/test_document_loader.h",
  250. "test/test_helpers.cc",
  251. "test/test_helpers.h",
  252. "test/test_pdfium_engine.cc",
  253. "test/test_pdfium_engine.h",
  254. ]
  255. deps = [
  256. ":internal",
  257. "//base",
  258. "//cc:test_support",
  259. "//pdf/loader",
  260. "//testing/gmock",
  261. "//testing/gtest",
  262. "//third_party/blink/public:blink",
  263. "//ui/gfx/range",
  264. "//ui/latency:latency",
  265. ]
  266. }
  267. if (is_linux || is_chromeos) {
  268. # TODO(crbug.com/1302059): After PPAPI deprecation, there will only be one
  269. # caller left. Move inside the file with the caller.
  270. static_library("font_table_linux") {
  271. sources = [ "font_table_linux.cc" ]
  272. configs += [ ":strict" ]
  273. public = [ "font_table_linux.h" ]
  274. deps = [ "//base" ]
  275. }
  276. }
  277. test("pdf_unittests") {
  278. testonly = true
  279. sources = [
  280. "document_layout_unittest.cc",
  281. "draw_utils/coordinates_unittest.cc",
  282. "file_extension_unittest.cc",
  283. "page_orientation_unittest.cc",
  284. "paint_manager_unittest.cc",
  285. "parsed_params_unittest.cc",
  286. "pdf_transform_unittest.cc",
  287. "pdf_utils/dates_unittest.cc",
  288. "pdf_view_web_plugin_unittest.cc",
  289. "pdfium/accessibility_unittest.cc",
  290. "pdfium/findtext_unittest.cc",
  291. "pdfium/pdfium_engine_exports_unittest.cc",
  292. "pdfium/pdfium_engine_unittest.cc",
  293. "pdfium/pdfium_form_filler_unittest.cc",
  294. "pdfium/pdfium_page_unittest.cc",
  295. "pdfium/pdfium_permissions_unittest.cc",
  296. "pdfium/pdfium_print_unittest.cc",
  297. "pdfium/pdfium_test_base.cc",
  298. "pdfium/pdfium_test_base.h",
  299. "test/run_all_unittests.cc",
  300. "ui/document_properties_unittest.cc",
  301. "ui/file_name_unittest.cc",
  302. "ui/thumbnail_unittest.cc",
  303. ]
  304. data = [ "test/data/" ]
  305. deps = [
  306. ":accessibility",
  307. ":assert_enums",
  308. ":buildflags",
  309. ":content_restriction",
  310. ":features",
  311. ":internal",
  312. ":pdf",
  313. ":pdf_test_utils",
  314. ":pdf_view_web_plugin",
  315. "//base",
  316. "//base:i18n",
  317. "//base/test:test_support",
  318. "//cc:test_support",
  319. "//gin",
  320. "//mojo/core/embedder",
  321. "//mojo/public/cpp/bindings",
  322. "//net",
  323. "//pdf/loader",
  324. "//pdf/loader:unit_tests",
  325. "//printing",
  326. "//skia",
  327. "//testing/gmock",
  328. "//testing/gtest",
  329. "//third_party/blink/public:blink",
  330. "//third_party/blink/public:test_support",
  331. "//third_party/blink/public/common:headers",
  332. "//third_party/pdfium",
  333. "//ui/base",
  334. "//ui/base/cursor",
  335. "//ui/events/blink:blink",
  336. "//ui/gfx:test_support",
  337. "//ui/gfx/geometry",
  338. "//ui/gfx/range",
  339. "//v8",
  340. ]
  341. if (v8_use_external_startup_data) {
  342. deps += [ "//tools/v8_context_snapshot" ]
  343. configs += [
  344. "//tools/v8_context_snapshot:use_v8_context_snapshot",
  345. "//v8:external_startup_data",
  346. ]
  347. }
  348. data_deps = [
  349. ":pdf_unittests_pak",
  350. "//ui/resources:ui_test_pak_data",
  351. ]
  352. assert_no_deps = [
  353. "//ppapi/c/*",
  354. "//ppapi/cpp/*",
  355. ]
  356. }
  357. repack("pdf_unittests_pak") {
  358. sources =
  359. [ "$root_gen_dir/components/strings/components_strings_en-US.pak" ]
  360. output = "$root_out_dir/pdf_tests_resources.pak"
  361. deps = [ "//components/strings" ]
  362. }
  363. fuzzer_test("pdf_dates_fuzzer") {
  364. sources = [ "pdf_utils/dates_fuzzer.cc" ]
  365. deps = [
  366. ":internal",
  367. "//base",
  368. ]
  369. }
  370. } else {
  371. # Dummy groups when PDF support is disabled so targets can unconditionally
  372. # depend on it.
  373. group("features") {
  374. }
  375. group("pdf") {
  376. }
  377. }