1# Copyright 2018 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("//third_party/closure_compiler/compile_js.gni")
6import("//third_party/closure_compiler/js_unit_tests.gni")
7import("//ui/file_manager/base/gn/js_test_gen_html.gni")
8
9visibility = [
10  "//ui/file_manager/file_manager/foreground/*",
11  "//ui/file_manager/file_manager/test/*",
12]
13
14group("closure_compile") {
15  testonly = true
16  visibility += [ "//ui/file_manager:closure_compile" ]
17  deps = [
18    ":closure_compile_module",
19    ":js_test_gen_html_type_check_auto",
20    ":test_support_type_check",
21  ]
22}
23
24js_type_check("closure_compile_module") {
25  deps = [
26    ":actions_controller",
27    ":actions_model",
28    ":android_app_list_model",
29    ":app_state_controller",
30    ":closure_compile_externs",
31    ":column_visibility_controller",
32    ":constants",
33    ":dialog_action_controller",
34    ":dialog_type",
35    ":directory_contents",
36    ":directory_model",
37    ":directory_tree_naming_controller",
38    ":drop_effect_and_label",
39    ":elements_importer",
40    ":empty_folder_controller",
41    ":file_list_model",
42    ":file_manager",
43    ":file_manager_commands",
44    ":file_selection",
45    ":file_tasks",
46    ":file_transfer_controller",
47    ":file_watcher",
48    ":folder_shortcuts_data_model",
49    ":gear_menu_controller",
50    ":import_controller",
51    ":last_modified_controller",
52    ":launch_param",
53    ":list_thumbnail_loader",
54    ":main",
55    ":main_window_component",
56    ":metadata_box_controller",
57    ":metadata_update_controller",
58    ":metrics_start",
59    ":naming_controller",
60    ":navigation_list_model",
61    ":navigation_uma",
62    ":progress_center_item_group",
63    ":providers_model",
64    ":quick_view_controller",
65    ":quick_view_model",
66    ":quick_view_uma",
67    ":scan_controller",
68    ":search_controller",
69    ":selection_menu_controller",
70    ":sort_menu_controller",
71    ":spinner_controller",
72    ":task_controller",
73    ":task_history",
74    ":thumbnail_loader",
75    ":toolbar_controller",
76    ":web_store_utils",
77    ":webui_command_extender",
78  ]
79}
80
81js_library("closure_compile_externs") {
82  sources = []
83  externs_list = [
84    "$externs_path/command_line_private.js",
85    "$externs_path/metrics_private.js",
86    "//ui/file_manager/externs/background/crostini.js",
87    "//ui/file_manager/externs/background/drive_sync_handler.js",
88    "//ui/file_manager/externs/background/file_browser_background.js",
89    "//ui/file_manager/externs/background/file_browser_background_full.js",
90    "//ui/file_manager/externs/background/file_operation_manager.js",
91    "//ui/file_manager/externs/background/import_runner.js",
92    "//ui/file_manager/externs/background/media_import_handler.js",
93    "//ui/file_manager/externs/background/task_queue.js",
94    "//ui/file_manager/externs/background/duplicate_finder.js",
95    "//ui/file_manager/externs/background/media_scanner.js",
96    "//ui/file_manager/externs/background/progress_center.js",
97    "//ui/file_manager/externs/background_window.js",
98    "//ui/file_manager/externs/chrome_echo_private.js",
99    "//ui/file_manager/externs/chrome_webstore_widget_private.js",
100    "//ui/file_manager/externs/command_handler_deps.js",
101    "//ui/file_manager/externs/css_rule.js",
102    "//ui/file_manager/externs/directory_change_event.js",
103    "//ui/file_manager/externs/entries_changed_event.js",
104    "//ui/file_manager/externs/gallery_foreground.js",
105    "//ui/file_manager/externs/menu_item_update_event.js",
106    "//ui/file_manager/externs/paper_elements.js",
107    "//ui/file_manager/externs/platform.js",
108    "//ui/file_manager/externs/search_item.js",
109  ]
110}
111
112js_type_check("test_support_type_check") {
113  testonly = true
114  deps = [
115    ":fake_android_app_list_model",
116    ":mock_actions_model",
117    ":mock_directory_model",
118    ":mock_folder_shortcut_data_model",
119    ":mock_navigation_list_model",
120    ":mock_thumbnail_loader",
121  ]
122}
123
124js_library("actions_controller") {
125  deps = [
126    ":actions_model",
127    ":file_selection",
128    "ui:file_manager_ui",
129    "//ui/webui/resources/js:assert",
130    "//ui/webui/resources/js:cr",
131    "//ui/webui/resources/js/cr:ui",
132    "//ui/webui/resources/js/cr/ui:context_menu_handler",
133  ]
134}
135
136js_library("actions_model") {
137  deps = [
138    ":folder_shortcuts_data_model",
139    "metadata:metadata_model",
140    "ui:files_alert_dialog",
141    "ui:list_container",
142    "//ui/file_manager/file_manager/common/js:util",
143    "//ui/file_manager/file_manager/foreground/js/ui:action_model_ui",
144    "//ui/webui/resources/js:cr",
145  ]
146  externs_list =
147      [ "//ui/file_manager/externs/background/drive_sync_handler.js" ]
148}
149
150js_library("mock_actions_model") {
151  testonly = true
152  deps = [
153    "//ui/webui/resources/js:cr",
154    "//ui/webui/resources/js/cr:event_target",
155  ]
156}
157
158js_library("fake_file_selection_handler") {
159  testonly = true
160  deps = [
161    "//ui/webui/resources/js:cr",
162    "//ui/webui/resources/js/cr:event_target",
163  ]
164}
165
166js_unittest("actions_model_unittest") {
167  deps = [
168    ":actions_model",
169    "metadata:mock_metadata",
170    "//ui/file_manager/base/js:mock_chrome",
171    "//ui/file_manager/base/js:test_error_reporting",
172    "//ui/file_manager/file_manager/background/js:mock_drive_sync_handler",
173    "//ui/file_manager/file_manager/background/js:mock_volume_manager",
174    "//ui/file_manager/file_manager/foreground/js/ui:action_model_ui",
175  ]
176}
177
178js_library("fake_android_app_list_model") {
179  testonly = true
180  deps = [ ":android_app_list_model" ]
181}
182
183js_library("mock_directory_model") {
184  testonly = true
185  deps = [
186    ":directory_contents",
187    ":directory_model",
188    "//ui/file_manager/file_manager/common/js:mock_entry",
189    "//ui/file_manager/file_manager/common/js:util",
190  ]
191}
192
193js_library("mock_folder_shortcut_data_model") {
194  testonly = true
195  deps = [
196    ":folder_shortcuts_data_model",
197    "//ui/file_manager/file_manager/common/js:mock_entry",
198    "//ui/webui/resources/js/cr/ui:array_data_model",
199  ]
200}
201
202js_library("mock_navigation_list_model") {
203  testonly = true
204  deps = [ ":navigation_list_model" ]
205}
206
207js_library("mock_thumbnail_loader") {
208  testonly = true
209  deps = [ ":thumbnail_loader" ]
210}
211
212js_library("android_app_list_model") {
213  deps = [ "//ui/webui/resources/js/cr:event_target" ]
214}
215
216js_library("app_state_controller") {
217  deps = [
218    ":dialog_type",
219    ":directory_model",
220    "ui:file_manager_ui",
221  ]
222}
223
224js_library("column_visibility_controller") {
225  deps = [
226    ":directory_model",
227    "ui:file_manager_ui",
228    "//ui/file_manager/base/js:volume_manager_types",
229  ]
230}
231
232js_library("constants") {
233}
234
235js_library("dialog_action_controller") {
236  deps = [
237    ":dialog_type",
238    ":directory_contents",
239    ":directory_model",
240    ":file_selection",
241    ":launch_param",
242    ":naming_controller",
243    "metadata:metadata_model",
244    "ui:dialog_footer",
245    "//ui/file_manager/file_manager/common/js:metrics",
246    "//ui/webui/resources/js/cr/ui:command",
247  ]
248}
249
250js_library("dialog_type") {
251}
252
253js_library("directory_contents") {
254  deps = [
255    ":constants",
256    ":file_list_model",
257    "metadata:metadata_model",
258    "//ui/file_manager/base/js:volume_manager_types",
259    "//ui/file_manager/file_manager/common/js:async_util",
260    "//ui/file_manager/file_manager/common/js:metrics",
261    "//ui/file_manager/file_manager/common/js:util",
262    "//ui/webui/resources/js:cr",
263    "//ui/webui/resources/js/cr/ui:array_data_model",
264  ]
265}
266
267js_library("directory_model") {
268  deps = [
269    ":directory_contents",
270    ":file_watcher",
271    "ui:file_list_selection_model",
272    "//ui/file_manager/file_manager/common/js:importer_common",
273  ]
274  externs_list = [
275    "//ui/file_manager/externs/background/file_operation_manager.js",
276    "//ui/file_manager/externs/entries_changed_event.js",
277  ]
278}
279
280js_library("navigation_uma") {
281  deps = [
282    ":dialog_type",
283    "//ui/file_manager/file_manager/common/js:metrics",
284  ]
285}
286
287js_library("directory_tree_naming_controller") {
288  deps = [
289    ":directory_model",
290    "ui:directory_tree",
291    "//ui/file_manager/file_manager/common/js:util",
292    "//ui/webui/resources/js/cr/ui:dialogs",
293  ]
294}
295
296js_library("drop_effect_and_label") {
297}
298
299js_library("elements_importer") {
300}
301
302js_library("empty_folder_controller") {
303  deps = [
304    ":directory_model",
305    ":file_list_model",
306    "ui:empty_folder",
307  ]
308}
309
310js_library("file_list_model") {
311  deps = [
312    "metadata:metadata_model",
313    "//ui/file_manager/file_manager/common/js:file_type",
314    "//ui/file_manager/file_manager/common/js:util",
315    "//ui/webui/resources/js/cr/ui:array_data_model",
316  ]
317}
318
319js_unittest("file_list_model_unittest") {
320  deps = [
321    ":file_list_model",
322    "//ui/webui/resources/js:webui_resource_test",
323  ]
324}
325
326js_library("file_manager") {
327  deps = [
328    ":android_app_list_model",
329    ":app_state_controller",
330    ":column_visibility_controller",
331    ":dialog_action_controller",
332    ":dialog_type",
333    ":directory_model",
334    ":elements_importer",
335    ":empty_folder_controller",
336    ":file_selection",
337    ":file_transfer_controller",
338    ":folder_shortcuts_data_model",
339    ":gear_menu_controller",
340    ":import_controller",
341    ":last_modified_controller",
342    ":launch_param",
343    ":main_window_component",
344    ":metadata_update_controller",
345    ":naming_controller",
346    ":navigation_uma",
347    ":providers_model",
348    ":quick_view_controller",
349    ":quick_view_model",
350    ":quick_view_uma",
351    ":scan_controller",
352    ":search_controller",
353    ":selection_menu_controller",
354    ":sort_menu_controller",
355    ":spinner_controller",
356    ":task_controller",
357    ":toolbar_controller",
358    "ui:commandbutton",
359    "ui:directory_tree",
360    "ui:file_manager_ui",
361    "//ui/file_manager/base/js:filtered_volume_manager",
362    "//ui/webui/resources/js/cr/ui:list_selection_model",
363  ]
364}
365
366js_library("file_manager_commands") {
367  deps = [
368    ":actions_controller",
369    ":dialog_type",
370    ":directory_contents",
371    ":directory_model",
372    ":directory_tree_naming_controller",
373    ":file_selection",
374    ":file_transfer_controller",
375    ":naming_controller",
376    ":providers_model",
377    ":spinner_controller",
378    ":task_controller",
379    "ui:directory_tree",
380    "ui:file_manager_ui",
381    "//ui/webui/resources/cr_elements/cr_input:cr_input",
382  ]
383  externs_list = [ "//ui/file_manager/externs/command_handler_deps.js" ]
384}
385
386js_library("file_selection") {
387  deps = [
388    ":constants",
389    ":directory_model",
390    "metadata:metadata_model",
391    "ui:list_container",
392    "//ui/file_manager/base/js:volume_manager_types",
393    "//ui/file_manager/file_manager/common/js:file_type",
394    "//ui/file_manager/file_manager/common/js:util",
395    "//ui/webui/resources/js:assert",
396    "//ui/webui/resources/js:cr",
397  ]
398}
399
400js_library("file_tasks") {
401  deps = [
402    ":directory_model",
403    ":naming_controller",
404    ":task_history",
405    "metadata:metadata_model",
406    "ui:file_manager_ui",
407  ]
408  externs_list = [ "//ui/file_manager/externs/background/crostini.js" ]
409}
410
411js_unittest("file_tasks_unittest") {
412  deps = [
413    ":file_tasks",
414    "metadata:mock_metadata",
415    "//ui/file_manager/base/js:mock_chrome",
416    "//ui/file_manager/base/js:test_error_reporting",
417    "//ui/file_manager/file_manager/background/js:mock_crostini",
418    "//ui/file_manager/file_manager/common/js:mock_entry",
419  ]
420}
421
422js_library("file_transfer_controller") {
423  deps = [
424    ":directory_model",
425    ":drop_effect_and_label",
426    ":file_selection",
427    ":webui_command_extender",
428    "metadata:metadata_model",
429    "metadata:thumbnail_model",
430    "ui:directory_tree",
431    "ui:file_manager_ui",
432    "ui:list_container",
433    "ui:progress_center_panel",
434    "//ui/file_manager/file_manager/common/js:progress_center_common",
435  ]
436  externs_list = [ "//ui/file_manager/externs/background/progress_center.js" ]
437}
438
439js_unittest("file_transfer_controller_unittest") {
440  deps = [
441    ":fake_file_selection_handler",
442    ":file_transfer_controller",
443    "//ui/file_manager/base/js:mock_chrome",
444    "//ui/file_manager/file_manager/background/js:mock_volume_manager",
445    "//ui/file_manager/file_manager/foreground/js:mock_directory_model",
446    "//ui/file_manager/file_manager/foreground/js/metadata:mock_metadata",
447    "//ui/webui/resources/js:webui_resource_test",
448  ]
449}
450
451js_library("file_watcher") {
452  deps = [
453    "//ui/file_manager/base/js:volume_manager_types",
454    "//ui/file_manager/file_manager/common/js:async_util",
455    "//ui/file_manager/file_manager/common/js:util",
456    "//ui/webui/resources/js:assert",
457  ]
458}
459
460js_library("folder_shortcuts_data_model") {
461  deps = [
462    "//ui/file_manager/base/js:filtered_volume_manager",
463    "//ui/file_manager/base/js:volume_manager_types",
464    "//ui/file_manager/file_manager/common/js:async_util",
465    "//ui/file_manager/file_manager/common/js:metrics",
466    "//ui/file_manager/file_manager/common/js:util",
467    "//ui/webui/resources/js/cr:event_target",
468  ]
469}
470
471js_library("gear_menu_controller") {
472  deps = [
473    ":directory_model",
474    ":file_manager_commands",
475    "ui:gear_menu",
476    "//ui/file_manager/file_manager/foreground/elements:files_toggle_ripple",
477  ]
478}
479
480js_library("import_controller") {
481  deps = [
482    ":actions_controller",
483    ":dialog_type",
484    ":directory_tree_naming_controller",
485    ":file_selection",
486    ":file_transfer_controller",
487    ":naming_controller",
488    ":providers_model",
489    ":spinner_controller",
490    ":task_controller",
491    "ui:directory_tree",
492    "ui:file_manager_ui",
493    "//ui/file_manager/file_manager/common/js:importer_common",
494  ]
495  externs_list = [
496    "//ui/file_manager/externs/background/import_runner.js",
497    "//ui/file_manager/externs/background/media_import_handler.js",
498    "//ui/file_manager/externs/background/duplicate_finder.js",
499    "//ui/file_manager/externs/background/task_queue.js",
500    "//ui/file_manager/externs/command_handler_deps.js",
501  ]
502}
503
504js_unittest("import_controller_unittest") {
505  deps = [
506    ":import_controller",
507    "//ui/file_manager/base/js:mock_chrome",
508    "//ui/file_manager/base/js:test_error_reporting",
509    "//ui/file_manager/file_manager/background/js:mock_media_scanner",
510    "//ui/file_manager/file_manager/background/js:mock_volume_manager",
511    "//ui/file_manager/file_manager/common/js:test_importer_common",
512  ]
513}
514
515js_library("last_modified_controller") {
516  deps = [
517    ":directory_model",
518    "ui:file_table",
519  ]
520}
521
522js_library("launch_param") {
523  deps = [
524    ":dialog_type",
525    "//ui/file_manager/base/js:volume_manager_types",
526  ]
527}
528
529js_library("list_thumbnail_loader") {
530  deps = [
531    ":directory_model",
532    ":file_list_model",
533    ":thumbnail_loader",
534    "metadata:thumbnail_model",
535    "//ui/file_manager/base/js:volume_manager_types",
536  ]
537}
538
539js_unittest("list_thumbnail_loader_unittest") {
540  deps = [
541    ":list_thumbnail_loader",
542    ":mock_thumbnail_loader",
543    "//ui/file_manager/base/js:test_error_reporting",
544    "//ui/file_manager/file_manager/common/js:mock_entry",
545  ]
546}
547
548js_library("main") {
549  deps = [
550    ":file_manager",
551    "//ui/file_manager/file_manager/common/js:files_app_entry_types",
552    "//ui/file_manager/file_manager/common/js:metrics",
553    "//ui/file_manager/file_manager/common/js:util",
554  ]
555}
556
557js_library("main_window_component") {
558  deps = [
559    ":app_state_controller",
560    ":dialog_type",
561    ":directory_contents",
562    ":directory_model",
563    ":file_selection",
564    ":naming_controller",
565    ":task_controller",
566    "ui:file_manager_ui",
567  ]
568}
569
570js_library("metadata_box_controller") {
571  deps = [
572    ":quick_view_model",
573    "metadata:metadata_model",
574    "ui:file_metadata_formatter",
575    "//ui/file_manager/file_manager/common/js:file_type",
576    "//ui/file_manager/file_manager/foreground/elements:files_metadata_box",
577    "//ui/file_manager/file_manager/foreground/elements:files_quick_view",
578  ]
579}
580
581js_library("metadata_update_controller") {
582  deps = [
583    ":directory_model",
584    "metadata:metadata_model",
585    "ui:file_metadata_formatter",
586    "ui:list_container",
587  ]
588}
589
590js_library("metrics_start") {
591  deps = [ "//ui/file_manager/file_manager/common/js:metrics" ]
592}
593
594js_library("naming_controller") {
595  deps = [
596    ":directory_contents",
597    ":directory_model",
598    ":file_selection",
599    "ui:list_container",
600    "//ui/webui/resources/js/cr/ui:dialogs",
601  ]
602}
603
604js_library("navigation_list_model") {
605  deps = [
606    ":android_app_list_model",
607    ":folder_shortcuts_data_model",
608    "//ui/webui/resources/js/cr:event_target",
609    "//ui/webui/resources/js/cr/ui:array_data_model",
610  ]
611}
612
613js_unittest("navigation_list_model_unittest") {
614  deps = [
615    ":fake_android_app_list_model",
616    ":mock_directory_model",
617    ":mock_folder_shortcut_data_model",
618    ":navigation_list_model",
619    "//ui/file_manager/base/js:mock_chrome",
620    "//ui/file_manager/base/js:test_error_reporting",
621    "//ui/file_manager/file_manager/background/js:mock_volume_manager",
622  ]
623}
624
625js_library("progress_center_item_group") {
626  deps = [
627    "//ui/file_manager/file_manager/common/js:progress_center_common",
628    "//ui/file_manager/file_manager/common/js:util",
629  ]
630}
631
632js_unittest("progress_center_item_group_unittest") {
633  deps = [
634    ":progress_center_item_group",
635    "//ui/file_manager/base/js:test_error_reporting",
636  ]
637}
638
639js_library("providers_model") {
640  deps = [ "//ui/webui/resources/js:assert" ]
641}
642
643js_unittest("providers_model_unittest") {
644  deps = [
645    ":providers_model",
646    "//ui/file_manager/base/js:mock_chrome",
647    "//ui/file_manager/base/js:test_error_reporting",
648    "//ui/file_manager/file_manager/background/js:mock_volume_manager",
649    "//ui/webui/resources/js:load_time_data",
650  ]
651}
652
653js_library("quick_view_controller") {
654  deps = [
655    ":dialog_type",
656    ":file_selection",
657    ":metadata_box_controller",
658    ":quick_view_model",
659    ":quick_view_uma",
660    ":task_controller",
661    "metadata:metadata_model",
662    "ui:list_container",
663    "//ui/webui/resources/js/cr/ui:list_selection_model",
664  ]
665}
666
667js_library("quick_view_model") {
668  deps = [
669    "//ui/webui/resources/js:cr",
670    "//ui/webui/resources/js/cr:event_target",
671  ]
672}
673
674js_library("quick_view_uma") {
675  deps = [
676    ":dialog_type",
677    ":file_tasks",
678    "//ui/file_manager/file_manager/common/js:file_type",
679  ]
680}
681
682js_library("scan_controller") {
683  deps = [
684    ":directory_model",
685    ":file_manager_commands",
686    ":file_selection",
687    ":spinner_controller",
688    "ui:list_container",
689  ]
690}
691
692js_library("search_controller") {
693  deps = [
694    ":directory_model",
695    ":task_controller",
696    "ui:location_line",
697    "ui:search_box",
698  ]
699}
700
701js_library("selection_menu_controller") {
702  deps = [
703    ":directory_model",
704    ":file_manager_commands",
705    "//ui/file_manager/file_manager/foreground/elements:files_toggle_ripple",
706  ]
707}
708
709js_library("sort_menu_controller") {
710  deps = [
711    ":file_list_model",
712    "//ui/file_manager/file_manager/foreground/elements:files_toggle_ripple",
713  ]
714}
715
716js_library("spinner_controller") {
717}
718
719js_unittest("spinner_controller_unittest") {
720  deps = [
721    ":spinner_controller",
722    "//ui/file_manager/base/js:test_error_reporting",
723    "//ui/webui/resources/js:assert",
724    "//ui/webui/resources/js:util",
725  ]
726}
727
728js_library("task_controller") {
729  deps = [
730    ":dialog_type",
731    ":directory_model",
732    ":file_selection",
733    ":file_tasks",
734    ":metadata_update_controller",
735    ":task_history",
736    "metadata:metadata_model",
737    "ui:file_manager_ui",
738  ]
739}
740
741js_unittest("task_controller_unittest") {
742  deps = [
743    ":fake_file_selection_handler",
744    ":task_controller",
745    "metadata:mock_metadata",
746    "//ui/file_manager/base/js:mock_chrome",
747    "//ui/file_manager/base/js:test_error_reporting",
748    "//ui/file_manager/file_manager/background/js:mock_crostini",
749    "//ui/file_manager/file_manager/common/js:mock_entry",
750  ]
751}
752
753js_library("task_history") {
754  deps = [ "//ui/webui/resources/js/cr:event_target" ]
755}
756
757# TODO(tapted): Move this into //ui/file_manager/base.
758js_library("thumbnail_loader") {
759  visibility += [ "//ui/file_manager/gallery/*" ]
760  deps = [
761    "//ui/file_manager/file_manager/common/js:file_type",
762    "//ui/file_manager/file_manager/common/js:util",
763    "//ui/file_manager/image_loader:image_loader_client",
764    "//ui/webui/resources/js:assert",
765  ]
766}
767
768js_unittest("thumbnail_loader_unittest") {
769  deps = [
770    ":thumbnail_loader",
771    "//ui/file_manager/base/js:test_error_reporting",
772    "//ui/file_manager/file_manager/common/js:mock_entry",
773  ]
774}
775
776js_library("toolbar_controller") {
777  deps = [
778    ":file_selection",
779    "ui:list_container",
780    "ui:location_line",
781    "//ui/file_manager/file_manager/common/js:util",
782    "//ui/webui/resources/js/cr/ui:command",
783  ]
784}
785
786js_library("web_store_utils") {
787  deps = [ ":constants" ]
788}
789
790js_library("webui_command_extender") {
791  deps = [
792    "//ui/webui/resources/js:cr",
793    "//ui/webui/resources/js/cr/ui:command",
794  ]
795}
796
797js_test_gen_html("js_test_gen_html") {
798  deps = [
799    ":actions_model_unittest",
800    ":file_list_model_unittest",
801    ":file_tasks_unittest",
802    ":file_transfer_controller_unittest",
803    ":import_controller_unittest",
804    ":list_thumbnail_loader_unittest",
805    ":navigation_list_model_unittest",
806    ":progress_center_item_group_unittest",
807    ":providers_model_unittest",
808    ":spinner_controller_unittest",
809    ":task_controller_unittest",
810    ":thumbnail_loader_unittest",
811  ]
812}
813