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
5import("//build/config/crypto.gni")
6import("//build/config/features.gni")
7import("//build/config/ui.gni")
8
9gypi_values = exec_script(
10    "//build/gypi_to_gn.py",
11    [ rebase_path("../../chrome_browser_ui.gypi") ],
12    "scope",
13    [ "../../chrome_browser_ui.gypi" ])
14
15static_library("ui") {
16  output_name = "browser_ui"
17
18  sources = []
19  defines = []
20  libs = []
21
22  configs += [ "//build/config/compiler:wexit_time_destructors" ]
23
24  # Since browser and browser_ui actually depend on each other,
25  # we must omit the dependency from browser_ui to browser.
26  # However, this means browser_ui and browser should more or less
27  # have the same dependencies. Once browser_ui is untangled from
28  # browser, then we can clean up these dependencies.
29  public_deps = [
30    "//components/dom_distiller/core",
31    "//sync",
32  ]
33  deps = [
34    # NOTE: New dependencies should generally be added in the OS!="ios"
35    # dependencies block below, rather than here.
36    "//base/allocator",
37    "//chrome:extra_resources",
38    "//chrome:resources",
39    "//chrome:strings",
40    "//chrome/app/resources:platform_locale_settings",
41    "//chrome/app/theme:theme_resources",
42    "//chrome/browser/history:in_memory_url_index_cache_proto",
43    "//chrome/browser/net:cert_logger_proto",
44    "//chrome/common",
45    "//chrome/common/net",
46    "//components/auto_login_parser",
47    "//components/dom_distiller/webui",
48    "//components/feedback/proto",
49    "//components/invalidation",
50    "//components/omaha_query_params",
51    "//components/onc",
52    "//components/password_manager/core/browser",
53    "//components/resources",
54    "//components/strings",
55    "//content/public/browser",
56    "//content/public/common",
57    "//crypto",
58    "//skia",
59    "//third_party/cacheinvalidation",
60    "//third_party/icu",
61    "//third_party/libusb",
62    "//third_party/libxml",
63    "//third_party/zlib",
64    "//ui/accessibility",
65    "//ui/base",
66    "//ui/events",
67    "//ui/gfx",
68    "//ui/gfx/geometry",
69    "//ui/message_center",
70    "//ui/native_theme",
71    "//ui/resources",
72    "//ui/snapshot",
73    "//ui/strings",
74  ]
75
76  if (!is_ios) {
77    sources += rebase_path(gypi_values.chrome_browser_ui_non_ios_sources,
78                           ".", "//chrome")
79    deps += [
80      "//chrome/browser/devtools",
81      "//chrome/browser/ui/views",
82      "//chrome/browser/ui/webui/omnibox:mojo_bindings",
83      "//chrome/installer/util",
84      "//components/autofill/content/browser:risk_proto",
85      "//components/power",
86      "//device/bluetooth",
87      "//device/nfc",
88      "//media",
89      "//mojo/system",
90      "//net:net_with_v8",
91      "//storage/browser",
92      "//storage/common",
93      "//third_party/WebKit/public:resources",
94      "//third_party/adobe/flash:flapper_version_h",
95      "//third_party/expat",
96      "//third_party/hunspell",
97      "//third_party/leveldatabase",
98      "//third_party/npapi",
99      "//third_party/libjingle",
100      "//third_party/re2",
101      "//ui/compositor",
102      "//ui/surface",
103      "//ui/web_dialogs",
104      "//v8",
105    ]
106    # TODO(GYP)
107    #'defines': [
108    #  '<@(nacl_defines)',
109    #],
110    #'direct_dependent_settings': {
111    #  'defines': [
112    #    '<@(nacl_defines)',
113    #  ],
114    #  },
115  } else {
116    # iOS.
117    sources += rebase_path(gypi_values.chrome_browser_ui_ios_sources,
118                           ".", "//chrome")
119    deps += [ "//net" ]
120  }
121
122  if (printing_mode != 0) {
123    deps += [ "//printing" ]
124  }
125
126  if (enable_one_click_signin) {
127    sources += rebase_path(
128        gypi_values.chrome_browser_ui_one_click_signin_sources,
129        ".", "//chrome")
130  }
131  if (enable_task_manager) {
132    sources += rebase_path(gypi_values.chrome_browser_ui_task_manager_sources,
133                           ".", "//chrome")
134    if (!toolkit_views || is_mac) {
135      sources -= [ "views/task_manager_view.cc" ]
136    }
137  }
138  if (!enable_nacl) {
139    sources += rebase_path(gypi_values.chrome_browser_ui_nacl_sources,
140                           ".", "//chrome")
141    deps += [
142      #"//native_client/src/trusted/service_runtime/service_runtime.gyp:sel",  TODO(GYP)
143    ]
144  }
145  if (debug_devtools) {
146    defines += [ "DEBUG_DEVTOOLS=1" ]
147  }
148  if (enable_configuration_policy) {
149    sources += rebase_path(gypi_values.chrome_browser_ui_policy_sources,
150                           ".", "//chrome")
151    deps += [ "//components/policy" ]
152  }
153  if (enable_plugins) {
154    sources += rebase_path(gypi_values.chrome_browser_ui_plugin_sources,
155                           ".", "//chrome")
156    deps += [ "//ppapi:ppapi_ipc" ]
157  }
158  if (safe_browsing_mode == 1) {
159    defines += [ "FULL_SAFE_BROWSING" ]
160    deps += [
161      "//chrome/browser/safe_browsing:chunk_proto",
162      "//chrome/common/safe_browsing:proto",
163      "//chrome/browser/safe_browsing:report_proto",
164    ]
165  }
166  if (is_chromeos) {
167    sources += rebase_path(gypi_values.chrome_browser_ui_chromeos_sources,
168                           ".", "//chrome")
169    deps += [
170      #"browser_chromeos",  TODO(GYP)
171    ]
172  } else {
173    sources += rebase_path(gypi_values.chrome_browser_ui_non_chromeos_sources,
174                           ".", "//chrome")
175  }
176  if (use_cups) {
177    configs += [ "//printing:cups" ]
178  }
179  if (use_ash) {
180    sources += rebase_path(gypi_values.chrome_browser_ui_ash_sources,
181                           ".", "//chrome")
182    deps += [
183      "//ash",
184      "//ash:ash_with_content",
185      "//ash/strings",
186      "//components/user_manager",
187    ]
188    if (!is_chromeos) {
189      sources += rebase_path(gypi_values.chrome_browser_ui_ash_non_chromeos,
190                             ".", "//chrome")
191    }
192  } else {  # Not ash.
193    sources += rebase_path(gypi_values.chrome_browser_ui_non_ash_sources,
194                           ".", "//chrome")
195  }
196  if (toolkit_views) {
197    sources += rebase_path(gypi_values.chrome_browser_ui_views_sources,
198                           ".", "//chrome")
199    if (!is_chromeos) {
200      sources += rebase_path(
201          gypi_values.chrome_browser_ui_views_non_chromeos_sources,
202          ".", "//chrome")
203    }
204    if (!is_mac) {
205      sources += rebase_path(
206          gypi_values.chrome_browser_ui_views_non_mac_sources,
207          ".", "//chrome")
208    }
209    if (use_ash) {
210      sources += rebase_path(gypi_values.chrome_browser_ui_ash_views_sources,
211                             ".", "//chrome")
212      }
213  }
214  if (use_aura && !use_ozone && is_desktop_linux) {
215    deps += [
216      "//build/config/linux:gio",
217      # gtk2 is the only component that can interact with gtk2 in our new
218      # world.
219      "//chrome/browser/ui/libgtk2ui",
220    ]
221  }
222  if (is_win || is_mac || is_desktop_linux) {
223    sources += rebase_path(gypi_values.chrome_browser_ui_desktop_sources,
224                           ".", "//chrome")
225  }
226  if (use_aura) {
227    sources += rebase_path(gypi_values.chrome_browser_ui_aura_sources,
228                           ".", "//chrome")
229    deps += [
230      # aura uses some of ash resources.
231      "//ash/resources",
232      "//ui/aura",
233      "//ui/keyboard",
234      "//ui/keyboard:resources",
235      "//ui/wm",
236    ]
237    if (!is_chromeos) {
238      sources += rebase_path(gypi_values.chrome_browser_ui_aura_non_chromeos,
239                             ".", "//chrome")
240    }
241  }
242  if (ui_compositor_image_transport) {
243    deps += [ "//ui/gl" ]
244  }
245  if (use_nss_certs) {
246    sources += rebase_path(gypi_values.chrome_browser_ui_nss_sources,
247                           ".", "//chrome")
248  }
249  if (!enable_themes) {
250    sources -= [ "webui/theme_source.cc" ]
251  }
252  if (printing_mode == 1) {
253    sources += rebase_path(gypi_values.chrome_browser_ui_print_preview_sources,
254                           ".", "//chrome")
255  }
256  if (is_linux || is_android) {
257    sources += rebase_path(gypi_values.chrome_browser_ui_android_linux_sources,
258                           ".", "//chrome")
259  }
260
261  if (is_android) {
262    deps += [
263      "//chrome/browser:jni_headers",
264      "//crypto:platform",
265      #'../components/components.gyp:web_contents_delegate_android',  TODO(GYP)
266    ]
267    deps -= [
268      "//chrome/browser/ui/views",
269      "//components/feedback/proto",
270      "//third_party/libusb",
271      "//ui/events",
272    ]
273    sources += rebase_path(gypi_values.chrome_browser_ui_android_sources,
274                           ".", "//chrome")
275
276    defines += [ "CHROME_BUILD_ID=" + android_chrome_build_id ]
277  } else {  # Non-Android.
278    sources += rebase_path(gypi_values.chrome_browser_ui_non_android_sources,
279                           ".", "//chrome")
280  }
281
282  if (is_mac) {
283    sources += rebase_path(gypi_values.chrome_browser_ui_mac_sources,
284                           ".", "//chrome")
285    sources -= [
286      # Mac has its own way of drawing tabs.
287      "tabs/tab_resources.cc",
288      "tabs/tab_resources.h",
289    ]
290    deps += [
291      "//third_party/google_toolbox_for_mac",
292      ":generate_localizer",
293      #'../third_party/apple_sample_code/apple_sample_code.gyp:apple_sample_code',  TODO(GYP)
294      #'../third_party/molokocacao/molokocacao.gyp:molokocacao',  TODO(GYP)
295      #'../third_party/mozilla/mozilla.gyp:mozilla',  TODO(GYP)
296    ]
297    include_dirs = [ "$target_gen_dir" ]
298    libs += [ "Quartz.framework" ]
299    configs += [
300      "//third_party/google_toolbox_for_mac:google_toolbox_for_mac_config",
301    ]
302  } else {  # non-Mac.
303    sources += rebase_path(gypi_values.chrome_browser_ui_non_mac_sources,
304                           ".", "//chrome")
305  }
306
307  if (is_win) {
308    sources += rebase_path(gypi_values.chrome_browser_ui_win_sources,
309                           ".", "//chrome")
310    public_deps += [
311      "//ui/views",
312      "//ui/views/controls/webview",
313    ]
314    deps += [
315      "//chrome/installer/util:strings",
316      "//third_party/wtl",
317      "//third_party/iaccessible2",
318      "//third_party/isimpledom",
319      "//ui/app_list",
320      #'metro_utils',  TODO(GYP)
321      #'../google_update/google_update.gyp:google_update',  TODO(GYP)
322    ]
323  } else {  # 'OS!="win"
324    if (toolkit_views) {
325      public_deps += [
326        "//ui/views",
327        "//ui/views/controls/webview",
328      ]
329    }
330  }
331  if (is_desktop_linux) {
332    sources += rebase_path(gypi_values.chrome_browser_ui_desktop_linux_sources,
333                           ".", "//chrome")
334  }
335  if (is_linux) {  # Both desktop Linux and ChromeOS.
336    sources += rebase_path(gypi_values.chrome_browser_ui_linux_sources,
337                           ".", "//chrome")
338    configs += [ "//build/config/linux:udev" ]
339    if (use_aura) {
340      configs += [ "//build/config/linux:fontconfig" ]
341      deps += [ "//dbus" ]
342    }
343    if (use_x11) {
344      sources += rebase_path(gypi_values.chrome_browser_ui_x11_sources,
345                             ".", "//chrome")
346      configs += [ "//build/config/linux:x11" ]
347    }
348  }
349
350  if (enable_app_list) {
351    sources += rebase_path(gypi_values.chrome_browser_ui_app_list_sources,
352                           ".", "//chrome")
353    deps += [ "//ui/app_list" ]
354  } else {
355    sources += rebase_path(gypi_values.chrome_browser_ui_non_app_list_sources,
356                           ".", "//chrome")
357  }
358  if (enable_autofill_dialog) {
359    sources += rebase_path(
360        gypi_values.chrome_browser_ui_autofill_dialog_sources,
361        ".", "//chrome")
362    if (!is_android && !is_ios) {
363      sources += rebase_path(
364          gypi_values.chrome_browser_ui_autofill_dialog_non_mobile_sources,
365          ".", "//chrome")
366      deps += [
367        "//third_party/libaddressinput",
368        "//third_party/libaddressinput:strings",
369      ]
370    }
371  }
372  if (enable_extensions) {
373    deps += [
374      "//chrome/browser/extensions",
375      "//chrome/common/extensions/api",
376      "//chrome/common/extensions/api:api_registration",
377    ]
378    sources += rebase_path(gypi_values.chrome_browser_ui_extensions_sources,
379                           ".", "//chrome")
380  }
381  if (enable_google_now && !is_android) {
382    sources += rebase_path(
383        gypi_values.chrome_browser_ui_google_now_non_android_sources,
384        ".", "//chrome")
385  }
386  if (enable_webrtc) {
387    sources += rebase_path(gypi_values.chrome_browser_ui_webrtc_sources,
388                           ".", "//chrome")
389  }
390  if (enable_service_discovery) {
391    sources += rebase_path(
392        gypi_values.chrome_browser_ui_service_discovery_sources,
393        ".", "//chrome")
394  }
395  if (enable_spellcheck) {
396    deps += [ "//third_party/hunspell" ]
397  }
398}
399
400if (is_mac) {
401  nib_gypi_values = exec_script(
402      "//build/gypi_to_gn.py",
403      [ rebase_path("../../chrome_nibs.gypi") ],
404      "scope",
405      [ "../../chrome_nibs.gypi" ])
406
407  action("generate_localizer") {
408    script = "//chrome/tools/build/mac/generate_localizer"
409    sources = [ ]
410    table_path = "$target_gen_dir/ui_localizer_table.h"
411    outputs = [ table_path ]
412    args = [ rebase_path(table_path, root_build_dir) ] +
413             rebase_path(nib_gypi_values.mac_translated_xibs,
414                         root_build_dir,
415                         "//chrome")
416  }
417}
418
419# In GYP this is part of test_support_common.
420source_set("test_support") {
421  testonly = true
422
423  sources = [
424    "browser.h",
425    "cocoa/find_bar/find_bar_host_unittest_util_cocoa.mm",
426    "cocoa/run_loop_testing.h",
427    "cocoa/run_loop_testing.mm",
428    "find_bar/find_bar_host_unittest_util.h",
429    "fullscreen/fullscreen_controller_state_test.cc",
430    "fullscreen/fullscreen_controller_state_test.h",
431    "fullscreen/fullscreen_controller_state_tests.h",
432    "fullscreen/fullscreen_controller_test.cc",
433    "fullscreen/fullscreen_controller_test.h",
434    "login/login_prompt_test_utils.cc",
435    "login/login_prompt_test_utils.h",
436    "passwords/manage_passwords_ui_controller_mock.cc",
437    "passwords/manage_passwords_ui_controller_mock.h",
438    "pdf/pdf_browsertest_base.cc",
439    "pdf/pdf_browsertest_base.h",
440    "test/test_confirm_bubble_model.cc",
441    "test/test_confirm_bubble_model.h",
442    "views/find_bar_host_unittest_util_views.cc",
443    "website_settings/mock_permission_bubble_request.cc",
444    "website_settings/mock_permission_bubble_request.h",
445  ]
446
447  public_deps = [
448    ":ui",
449  ]
450  deps = [
451    "//chrome/app/theme:theme_resources",
452    "//chrome/browser",
453    "//content/public/browser",
454    "//content/public/common",
455    "//content/test:test_support",
456    "//net:test_support",
457    "//skia",
458    "//testing/gtest",
459    "//ui/base",
460  ]
461}
462