summaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
authorTorne (Richard Coles) <torne@google.com>2013-12-18 16:25:09 +0000
committerTorne (Richard Coles) <torne@google.com>2013-12-18 16:25:09 +0000
commita3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7 (patch)
treedafc1c6417406a7fbd422ad0bb890e96909ef564 /ui
parentd5f893c0bc79db3066bb5ae5d3d972ba1be7dd5f (diff)
downloadchromium_org-a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7.tar.gz
Merge from Chromium at DEPS revision 240154
This commit was generated by merge_to_master.py. Change-Id: I8f2ba858cf0e7f413dddedc2ae91dc37f7136c2e
Diffstat (limited to 'ui')
-rw-r--r--ui/accessibility/OWNERS3
-rw-r--r--ui/accessibility/accessibility.gyp4
-rw-r--r--ui/accessibility/ax_serializable_tree.cc11
-rw-r--r--ui/accessibility/ax_tree.cc81
-rw-r--r--ui/accessibility/ax_tree.h25
-rw-r--r--ui/accessibility/ax_tree_serializer.h300
-rw-r--r--ui/accessibility/ax_tree_serializer_unittest.cc182
-rw-r--r--ui/accessibility/ax_tree_source.h5
-rw-r--r--ui/accessibility/ax_tree_unittest.cc107
-rw-r--r--ui/accessibility/ax_tree_update.cc2
-rw-r--r--ui/accessibility/ax_tree_update.h21
-rw-r--r--ui/android/java/res/drawable-ldpi/autofill_popup_background_down.9.pngbin289 -> 0 bytes
-rw-r--r--ui/android/java/res/drawable-ldpi/autofill_popup_background_up.9.pngbin288 -> 0 bytes
-rw-r--r--ui/android/java/res/drawable/autofill_popup_background_down.9.pngbin335 -> 289 bytes
-rw-r--r--ui/android/java/res/drawable/autofill_popup_background_up.9.pngbin326 -> 288 bytes
-rw-r--r--ui/android/java/res/drawable/color_button_background.xml36
-rw-r--r--ui/android/java/res/drawable/color_picker_border.xml8
-rw-r--r--ui/android/java/res/layout/color_picker_dialog_content.xml69
-rw-r--r--ui/android/java/res/layout/date_time_suggestion.xml35
-rw-r--r--ui/android/java/res/values/colors.xml1
-rw-r--r--ui/android/java/res/values/dimens.xml1
-rw-r--r--ui/android/java/resource_map/OWNERS3
-rw-r--r--ui/android/java/resource_map/org/chromium/ui/R.java12
-rw-r--r--ui/android/java/src/org/chromium/ui/ColorPickerAdvanced.java2
-rw-r--r--ui/android/java/src/org/chromium/ui/ColorPickerAdvancedComponent.java1
-rw-r--r--ui/android/java/src/org/chromium/ui/ColorPickerDialog.java23
-rw-r--r--ui/android/java/src/org/chromium/ui/ColorPickerMoreButton.java1
-rw-r--r--ui/android/java/src/org/chromium/ui/ColorPickerSimple.java195
-rw-r--r--ui/android/java/src/org/chromium/ui/ColorSuggestion.java24
-rw-r--r--ui/android/java/src/org/chromium/ui/ColorSuggestionListAdapter.java142
-rw-r--r--ui/android/java/src/org/chromium/ui/OnColorChangedListener.java1
-rw-r--r--ui/android/java/src/org/chromium/ui/UiUtils.java4
-rw-r--r--ui/android/java/src/org/chromium/ui/autofill/AutofillDividerDrawable.java5
-rw-r--r--ui/android/java/src/org/chromium/ui/autofill/AutofillListAdapter.java6
-rw-r--r--ui/android/java/src/org/chromium/ui/autofill/AutofillPopup.java8
-rw-r--r--ui/android/java/src/org/chromium/ui/base/Clipboard.java97
-rw-r--r--ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java2
-rw-r--r--ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java6
-rw-r--r--ui/android/java/src/org/chromium/ui/base/ViewAndroid.java4
-rw-r--r--ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java2
-rw-r--r--ui/android/java/src/org/chromium/ui/base/WindowAndroid.java10
-rw-r--r--ui/android/java/src/org/chromium/ui/gfx/BitmapHelper.java6
-rw-r--r--ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java299
-rw-r--r--ui/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java2
-rw-r--r--ui/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java14
-rw-r--r--ui/android/java/strings/android_ui_strings.grd27
-rw-r--r--ui/android/window_open_disposition_java.target.darwin-arm.mk6
-rw-r--r--ui/android/window_open_disposition_java.target.darwin-mips.mk6
-rw-r--r--ui/android/window_open_disposition_java.target.darwin-x86.mk6
-rw-r--r--ui/android/window_open_disposition_java.target.linux-arm.mk6
-rw-r--r--ui/android/window_open_disposition_java.target.linux-mips.mk6
-rw-r--r--ui/android/window_open_disposition_java.target.linux-x86.mk6
-rw-r--r--ui/app_list/app_list.gyp7
-rw-r--r--ui/app_list/app_list_model.cc11
-rw-r--r--ui/app_list/app_list_model.h3
-rw-r--r--ui/app_list/app_list_model_observer.h3
-rw-r--r--ui/app_list/app_list_model_unittest.cc25
-rw-r--r--ui/app_list/app_list_view_delegate.h9
-rw-r--r--ui/app_list/app_list_view_delegate_observer.h24
-rw-r--r--ui/app_list/cocoa/app_list_view_controller.h7
-rw-r--r--ui/app_list/cocoa/app_list_view_controller.mm35
-rw-r--r--ui/app_list/cocoa/app_list_view_controller_unittest.mm30
-rw-r--r--ui/app_list/cocoa/app_list_window_controller.mm7
-rw-r--r--ui/app_list/cocoa/app_list_window_controller_unittest.mm25
-rw-r--r--ui/app_list/cocoa/apps_grid_view_item.mm7
-rw-r--r--ui/app_list/cocoa/apps_search_box_controller.mm7
-rw-r--r--ui/app_list/cocoa/apps_search_results_controller_unittest.mm13
-rw-r--r--ui/app_list/search_box_model.cc20
-rw-r--r--ui/app_list/search_box_model.h25
-rw-r--r--ui/app_list/search_box_model_observer.h3
-rw-r--r--ui/app_list/speech_ui_model.cc54
-rw-r--r--ui/app_list/speech_ui_model.h47
-rw-r--r--ui/app_list/speech_ui_model_observer.h39
-rw-r--r--ui/app_list/test/app_list_test_model.cc1
-rw-r--r--ui/app_list/test/app_list_test_view_delegate.cc65
-rw-r--r--ui/app_list/test/app_list_test_view_delegate.h25
-rw-r--r--ui/app_list/views/app_list_item_view.cc28
-rw-r--r--ui/app_list/views/app_list_item_view.h5
-rw-r--r--ui/app_list/views/app_list_main_view.cc28
-rw-r--r--ui/app_list/views/app_list_main_view.h21
-rw-r--r--ui/app_list/views/app_list_main_view_unittest.cc90
-rw-r--r--ui/app_list/views/app_list_view.cc153
-rw-r--r--ui/app_list/views/app_list_view.h37
-rw-r--r--ui/app_list/views/app_list_view_observer.h24
-rw-r--r--ui/app_list/views/apps_grid_view.cc34
-rw-r--r--ui/app_list/views/apps_grid_view.h6
-rw-r--r--ui/app_list/views/folder_header_view.cc15
-rw-r--r--ui/app_list/views/page_switcher.h2
-rw-r--r--ui/app_list/views/search_box_view.cc35
-rw-r--r--ui/app_list/views/search_box_view.h9
-rw-r--r--ui/app_list/views/speech_view.cc227
-rw-r--r--ui/app_list/views/speech_view.h64
-rw-r--r--ui/aura/aura.gyp39
-rw-r--r--ui/aura/client/default_activation_client.cc1
-rw-r--r--ui/aura/env.cc10
-rw-r--r--ui/aura/env.h2
-rw-r--r--ui/aura/gestures/gesture_recognizer_unittest.cc8
-rw-r--r--ui/aura/remote_root_window_host_win.cc134
-rw-r--r--ui/aura/remote_root_window_host_win.h38
-rw-r--r--ui/aura/root_window.cc80
-rw-r--r--ui/aura/root_window.h17
-rw-r--r--ui/aura/root_window_host_win.h2
-rw-r--r--ui/aura/root_window_host_x11.cc40
-rw-r--r--ui/aura/root_window_host_x11.h6
-rw-r--r--ui/aura/root_window_host_x11_unittest.cc55
-rw-r--r--ui/aura/root_window_unittest.cc33
-rw-r--r--ui/aura/test/test_aura_initializer.cc27
-rw-r--r--ui/aura/test/test_aura_initializer.h27
-rw-r--r--ui/aura/window.cc316
-rw-r--r--ui/aura/window.h69
-rw-r--r--ui/aura/window_layer_type.h24
-rw-r--r--ui/aura/window_observer.h10
-rw-r--r--ui/aura/window_targeter.cc59
-rw-r--r--ui/aura/window_targeter.h25
-rw-r--r--ui/aura/window_targeter_unittest.cc54
-rw-r--r--ui/aura/window_tree_host_delegate.h3
-rw-r--r--ui/aura/window_unittest.cc369
-rw-r--r--ui/base/accelerators/menu_label_accelerator_util_linux.cc2
-rw-r--r--ui/base/accessibility/accessible_text_utils.cc2
-rw-r--r--ui/base/clipboard/clipboard.cc94
-rw-r--r--ui/base/clipboard/clipboard.h22
-rw-r--r--ui/base/clipboard/clipboard_android.cc51
-rw-r--r--ui/base/clipboard/clipboard_aura.cc3
-rw-r--r--ui/base/clipboard/clipboard_gtk.cc16
-rw-r--r--ui/base/clipboard/clipboard_unittest.cc109
-rw-r--r--ui/base/clipboard/custom_data_helper.cc28
-rw-r--r--ui/base/clipboard/custom_data_helper.h20
-rw-r--r--ui/base/clipboard/scoped_clipboard_writer.cc13
-rw-r--r--ui/base/clipboard/scoped_clipboard_writer.h13
-rw-r--r--ui/base/cursor/cursors_aura.cc69
-rw-r--r--ui/base/gtk/gtk_hig_constants.h2
-rw-r--r--ui/base/ime/chromeos/character_composer.cc (renamed from ui/base/ime/character_composer.cc)29
-rw-r--r--ui/base/ime/chromeos/character_composer.h (renamed from ui/base/ime/character_composer.h)53
-rw-r--r--ui/base/ime/chromeos/character_composer_unittest.cc (renamed from ui/base/ime/character_composer_unittest.cc)283
-rw-r--r--ui/base/ime/chromeos/ibus_bridge.cc44
-rw-r--r--ui/base/ime/chromeos/ibus_bridge.h59
-rw-r--r--ui/base/ime/chromeos/mock_ime_engine_handler.cc17
-rw-r--r--ui/base/ime/chromeos/mock_ime_engine_handler.h22
-rw-r--r--ui/base/ime/composition_text.h2
-rw-r--r--ui/base/ime/fake_input_method.cc197
-rw-r--r--ui/base/ime/fake_input_method.h66
-rw-r--r--ui/base/ime/ime.gypi35
-rw-r--r--ui/base/ime/ime_unittests.gypi4
-rw-r--r--ui/base/ime/input_method.h2
-rw-r--r--ui/base/ime/input_method_auralinux.cc (renamed from ui/base/ime/input_method_linux_x11.cc)88
-rw-r--r--ui/base/ime/input_method_auralinux.h (renamed from ui/base/ime/input_method_linux_x11.h)25
-rw-r--r--ui/base/ime/input_method_base.cc53
-rw-r--r--ui/base/ime/input_method_base.h30
-rw-r--r--ui/base/ime/input_method_base_unittest.cc108
-rw-r--r--ui/base/ime/input_method_factory.cc94
-rw-r--r--ui/base/ime/input_method_factory.h78
-rw-r--r--ui/base/ime/input_method_ibus.cc289
-rw-r--r--ui/base/ime/input_method_ibus.h32
-rw-r--r--ui/base/ime/input_method_ibus_unittest.cc93
-rw-r--r--ui/base/ime/input_method_imm32.cc12
-rw-r--r--ui/base/ime/input_method_initializer.cc13
-rw-r--r--ui/base/ime/input_method_minimal.cc67
-rw-r--r--ui/base/ime/input_method_minimal.h37
-rw-r--r--ui/base/ime/input_method_win.cc6
-rw-r--r--ui/base/ime/linux/fake_input_method_context.cc2
-rw-r--r--ui/base/ime/linux/fake_input_method_context.h3
-rw-r--r--ui/base/ime/linux/linux_input_method_context.h4
-rw-r--r--ui/base/ime/text_input_client.h8
-rw-r--r--ui/base/l10n/l10n_util.cc139
-rw-r--r--ui/base/l10n/l10n_util.h108
-rw-r--r--ui/base/l10n/l10n_util_collator.h21
-rw-r--r--ui/base/l10n/time_format.cc22
-rw-r--r--ui/base/l10n/time_format.h14
-rw-r--r--ui/base/layout.cc2
-rw-r--r--ui/base/layout.h1
-rw-r--r--ui/base/layout_unittest.cc5
-rw-r--r--ui/base/resource/data_pack.cc22
-rw-r--r--ui/base/resource/resource_bundle.cc14
-rw-r--r--ui/base/resource/resource_bundle.h4
-rw-r--r--ui/base/strings/ui_strings.grd5
-rw-r--r--ui/base/strings/ui_strings.target.darwin-arm.mk4
-rw-r--r--ui/base/strings/ui_strings.target.darwin-mips.mk4
-rw-r--r--ui/base/strings/ui_strings.target.darwin-x86.mk4
-rw-r--r--ui/base/strings/ui_strings.target.linux-arm.mk4
-rw-r--r--ui/base/strings/ui_strings.target.linux-mips.mk4
-rw-r--r--ui/base/strings/ui_strings.target.linux-x86.mk4
-rw-r--r--ui/base/text/bytes_formatting.cc24
-rw-r--r--ui/base/text/bytes_formatting.h13
-rw-r--r--ui/base/ui_base_paths.cc2
-rw-r--r--ui/base/x/root_window_property_watcher_x.h3
-rw-r--r--ui/base/x/x11_util.cc5
-rw-r--r--ui/compositor/compositor.cc15
-rw-r--r--ui/compositor/compositor.h29
-rw-r--r--ui/compositor/layer.cc43
-rw-r--r--ui/compositor/layer.h20
-rw-r--r--ui/compositor/layer_animator.cc11
-rw-r--r--ui/compositor/layer_animator.h13
-rw-r--r--ui/compositor/layer_unittest.cc5
-rw-r--r--ui/compositor/scoped_layer_animation_settings.cc16
-rw-r--r--ui/compositor/scoped_layer_animation_settings.h7
-rw-r--r--ui/compositor/test/default_context_factory.cc3
-rw-r--r--ui/compositor/test/default_context_factory.h2
-rw-r--r--ui/compositor/test/test_context_factory.cc3
-rw-r--r--ui/compositor/test/test_context_factory.h2
-rw-r--r--ui/events/cocoa/events_mac.mm4
-rw-r--r--ui/events/dom4_keycode_converter.target.darwin-arm.mk6
-rw-r--r--ui/events/dom4_keycode_converter.target.darwin-mips.mk6
-rw-r--r--ui/events/dom4_keycode_converter.target.darwin-x86.mk6
-rw-r--r--ui/events/dom4_keycode_converter.target.linux-arm.mk6
-rw-r--r--ui/events/dom4_keycode_converter.target.linux-mips.mk6
-rw-r--r--ui/events/dom4_keycode_converter.target.linux-x86.mk6
-rw-r--r--ui/events/event.cc35
-rw-r--r--ui/events/event.h18
-rw-r--r--ui/events/event_dispatcher.cc29
-rw-r--r--ui/events/event_dispatcher.h28
-rw-r--r--ui/events/event_dispatcher_unittest.cc11
-rw-r--r--ui/events/event_processor.cc24
-rw-r--r--ui/events/event_processor.h30
-rw-r--r--ui/events/event_processor_unittest.cc163
-rw-r--r--ui/events/event_source.cc19
-rw-r--r--ui/events/event_source.h29
-rw-r--r--ui/events/event_target.cc4
-rw-r--r--ui/events/event_target.h25
-rw-r--r--ui/events/event_target_iterator.h48
-rw-r--r--ui/events/event_targeter.cc56
-rw-r--r--ui/events/event_targeter.h45
-rw-r--r--ui/events/event_unittest.cc66
-rw-r--r--ui/events/event_utils.h11
-rw-r--r--ui/events/events.gyp21
-rw-r--r--ui/events/events.target.darwin-arm.mk334
-rw-r--r--ui/events/events.target.darwin-mips.mk328
-rw-r--r--ui/events/events.target.darwin-x86.mk334
-rw-r--r--ui/events/events.target.linux-arm.mk334
-rw-r--r--ui/events/events.target.linux-mips.mk328
-rw-r--r--ui/events/events.target.linux-x86.mk334
-rw-r--r--ui/events/events_base.target.darwin-arm.mk6
-rw-r--r--ui/events/events_base.target.darwin-mips.mk6
-rw-r--r--ui/events/events_base.target.darwin-x86.mk6
-rw-r--r--ui/events/events_base.target.linux-arm.mk6
-rw-r--r--ui/events/events_base.target.linux-mips.mk6
-rw-r--r--ui/events/events_base.target.linux-x86.mk6
-rw-r--r--ui/events/events_stub.cc5
-rw-r--r--ui/events/gestures/gesture_recognizer.h5
-rw-r--r--ui/events/gestures/gesture_recognizer_impl.cc12
-rw-r--r--ui/events/gestures/gesture_recognizer_impl.h5
-rw-r--r--ui/events/keycodes/keyboard_code_conversion_mac.h2
-rw-r--r--ui/events/keycodes/keyboard_code_conversion_mac.mm6
-rw-r--r--ui/events/keycodes/keyboard_code_conversion_win.cc6
-rw-r--r--ui/events/keycodes/keyboard_code_conversion_win.h1
-rw-r--r--ui/events/keycodes/keyboard_code_conversion_x.cc12
-rw-r--r--ui/events/keycodes/keyboard_code_conversion_x.h2
-rw-r--r--ui/events/keycodes/keyboard_codes_posix.h5
-rw-r--r--ui/events/latency_info.cc10
-rw-r--r--ui/events/latency_info.h15
-rw-r--r--ui/events/ozone/events_ozone.cc6
-rw-r--r--ui/events/test/events_test_utils_x11.cc117
-rw-r--r--ui/events/test/events_test_utils_x11.h11
-rw-r--r--ui/events/test/run_all_unittests.cc (renamed from ui/events/test/events_unittests.cc)2
-rw-r--r--ui/events/test/test_event_processor.cc32
-rw-r--r--ui/events/test/test_event_processor.h35
-rw-r--r--ui/events/test/test_event_target.cc87
-rw-r--r--ui/events/test/test_event_target.h65
-rw-r--r--ui/events/win/events_win.cc29
-rw-r--r--ui/events/x/device_data_manager.cc76
-rw-r--r--ui/events/x/device_data_manager.h30
-rw-r--r--ui/events/x/events_x.cc4
-rw-r--r--ui/events/x/events_x_unittest.cc2
-rw-r--r--ui/gfx/android/gfx_jni_registrar.cc2
-rw-r--r--ui/gfx/android/view_configuration.cc56
-rw-r--r--ui/gfx/android/view_configuration.h32
-rw-r--r--ui/gfx/canvas.cc16
-rw-r--r--ui/gfx/canvas.h4
-rw-r--r--ui/gfx/font.cc4
-rw-r--r--ui/gfx/font.h5
-rw-r--r--ui/gfx/font_list_unittest.cc6
-rw-r--r--ui/gfx/font_unittest.cc19
-rw-r--r--ui/gfx/frame_time.h5
-rw-r--r--ui/gfx/gfx.gyp16
-rw-r--r--ui/gfx/gfx.target.darwin-arm.mk7
-rw-r--r--ui/gfx/gfx.target.darwin-mips.mk7
-rw-r--r--ui/gfx/gfx.target.darwin-x86.mk7
-rw-r--r--ui/gfx/gfx.target.linux-arm.mk7
-rw-r--r--ui/gfx/gfx.target.linux-mips.mk7
-rw-r--r--ui/gfx/gfx.target.linux-x86.mk7
-rw-r--r--ui/gfx/gfx_jni_headers.target.darwin-arm.mk9
-rw-r--r--ui/gfx/gfx_jni_headers.target.darwin-mips.mk9
-rw-r--r--ui/gfx/gfx_jni_headers.target.darwin-x86.mk9
-rw-r--r--ui/gfx/gfx_jni_headers.target.linux-arm.mk9
-rw-r--r--ui/gfx/gfx_jni_headers.target.linux-mips.mk9
-rw-r--r--ui/gfx/gfx_jni_headers.target.linux-x86.mk9
-rw-r--r--ui/gfx/gfx_view_jni_headers.target.darwin-arm.mk226
-rw-r--r--ui/gfx/gfx_view_jni_headers.target.darwin-mips.mk224
-rw-r--r--ui/gfx/gfx_view_jni_headers.target.darwin-x86.mk230
-rw-r--r--ui/gfx/gfx_view_jni_headers.target.linux-arm.mk226
-rw-r--r--ui/gfx/gfx_view_jni_headers.target.linux-mips.mk224
-rw-r--r--ui/gfx/gfx_view_jni_headers.target.linux-x86.mk230
-rw-r--r--ui/gfx/gpu_memory_buffer.h10
-rw-r--r--ui/gfx/image/image_family.cc2
-rw-r--r--ui/gfx/image/image_family.h2
-rw-r--r--ui/gfx/pango_util.cc3
-rw-r--r--ui/gfx/platform_font.h5
-rw-r--r--ui/gfx/platform_font_ios.h1
-rw-r--r--ui/gfx/platform_font_ios.mm4
-rw-r--r--ui/gfx/platform_font_mac.h1
-rw-r--r--ui/gfx/platform_font_mac.mm4
-rw-r--r--ui/gfx/platform_font_ozone.cc3
-rw-r--r--ui/gfx/platform_font_pango.cc9
-rw-r--r--ui/gfx/platform_font_pango.h5
-rw-r--r--ui/gfx/platform_font_win.cc7
-rw-r--r--ui/gfx/platform_font_win.h1
-rw-r--r--ui/gfx/rect_base.h6
-rw-r--r--ui/gfx/rect_base_impl.h22
-rw-r--r--ui/gfx/rect_unittest.cc40
-rw-r--r--ui/gfx/render_text.cc4
-rw-r--r--ui/gfx/render_text.h24
-rw-r--r--ui/gfx/render_text_unittest.cc58
-rw-r--r--ui/gfx/render_text_win.cc38
-rw-r--r--ui/gfx/text_elider.cc264
-rw-r--r--ui/gfx/text_elider.h65
-rw-r--r--ui/gfx/utf16_indexing.cc8
-rw-r--r--ui/gfx/utf16_indexing.h6
-rw-r--r--ui/gl/gl.gyp2
-rw-r--r--ui/gl/gl.target.darwin-arm.mk10
-rw-r--r--ui/gl/gl.target.darwin-mips.mk10
-rw-r--r--ui/gl/gl.target.darwin-x86.mk10
-rw-r--r--ui/gl/gl.target.linux-arm.mk10
-rw-r--r--ui/gl/gl.target.linux-mips.mk10
-rw-r--r--ui/gl/gl.target.linux-x86.mk10
-rw-r--r--ui/gl/gl_image_io_surface.cc79
-rw-r--r--ui/gl/gl_image_io_surface.h42
-rw-r--r--ui/gl/gl_image_mac.cc8
-rw-r--r--ui/gl/gl_jni_headers.target.darwin-arm.mk6
-rw-r--r--ui/gl/gl_jni_headers.target.darwin-mips.mk6
-rw-r--r--ui/gl/gl_jni_headers.target.darwin-x86.mk6
-rw-r--r--ui/gl/gl_jni_headers.target.linux-arm.mk6
-rw-r--r--ui/gl/gl_jni_headers.target.linux-mips.mk6
-rw-r--r--ui/gl/gl_jni_headers.target.linux-x86.mk6
-rw-r--r--ui/gl/io_surface_support_mac.cc76
-rw-r--r--ui/gl/io_surface_support_mac.h10
-rw-r--r--ui/gl/surface_jni_headers.target.darwin-arm.mk6
-rw-r--r--ui/gl/surface_jni_headers.target.darwin-mips.mk6
-rw-r--r--ui/gl/surface_jni_headers.target.darwin-x86.mk6
-rw-r--r--ui/gl/surface_jni_headers.target.linux-arm.mk6
-rw-r--r--ui/gl/surface_jni_headers.target.linux-mips.mk6
-rw-r--r--ui/gl/surface_jni_headers.target.linux-x86.mk6
-rw-r--r--ui/keyboard/keyboard.gyp1
-rw-r--r--ui/keyboard/keyboard_controller.cc4
-rw-r--r--ui/keyboard/keyboard_controller.h5
-rw-r--r--ui/keyboard/keyboard_controller_proxy.cc38
-rw-r--r--ui/keyboard/keyboard_controller_proxy.h12
-rw-r--r--ui/keyboard/keyboard_resources.grd2
-rw-r--r--ui/keyboard/keyboard_ui_controller.cc2
-rw-r--r--ui/keyboard/keyboard_ui_handler.cc3
-rw-r--r--ui/keyboard/keyboard_util.cc5
-rw-r--r--ui/keyboard/keyboard_util.h8
-rw-r--r--ui/keyboard/resources/api_adapter.js12
-rw-r--r--ui/keyboard/resources/elements/kb-altkey.html17
-rw-r--r--ui/keyboard/resources/elements/kb-key-codes.html231
-rw-r--r--ui/keyboard/resources/elements/kb-key-sequence.html1
-rw-r--r--ui/keyboard/resources/elements/kb-key.html18
-rw-r--r--ui/keyboard/resources/elements/kb-keyboard.html253
-rw-r--r--ui/keyboard/resources/index.html2
-rw-r--r--ui/keyboard/resources/layouts/dvorak.html94
-rw-r--r--ui/keyboard/resources/layouts/qwerty.html102
-rw-r--r--ui/keyboard/resources/layouts/spacebar-row.html2
-rw-r--r--ui/keyboard/resources/layouts/system-qwerty.html69
-rw-r--r--ui/keyboard/resources/main.css59
-rw-r--r--ui/keyboard/resources/polymer.min.js5
-rw-r--r--ui/keyboard/resources/polymer_loader.js11
-rw-r--r--ui/keyboard/resources/webui_index.html2
-rw-r--r--ui/message_center/cocoa/notification_controller_unittest.mm25
-rw-r--r--ui/message_center/cocoa/popup_collection_unittest.mm28
-rw-r--r--ui/message_center/cocoa/popup_controller_unittest.mm4
-rw-r--r--ui/message_center/cocoa/tray_controller_unittest.mm4
-rw-r--r--ui/message_center/cocoa/tray_view_controller.mm2
-rw-r--r--ui/message_center/cocoa/tray_view_controller_unittest.mm20
-rw-r--r--ui/message_center/fake_message_center.cc5
-rw-r--r--ui/message_center/fake_message_center.h3
-rw-r--r--ui/message_center/message_center.gyp2
-rw-r--r--ui/message_center/message_center.h7
-rw-r--r--ui/message_center/message_center_impl.cc74
-rw-r--r--ui/message_center/message_center_impl.h17
-rw-r--r--ui/message_center/message_center_impl_unittest.cc122
-rw-r--r--ui/message_center/message_center_observer.h4
-rw-r--r--ui/message_center/message_center_tray.cc13
-rw-r--r--ui/message_center/message_center_tray.h1
-rw-r--r--ui/message_center/message_center_tray_unittest.cc12
-rw-r--r--ui/message_center/notification.cc10
-rw-r--r--ui/message_center/notification.h10
-rw-r--r--ui/message_center/notification_blocker.cc10
-rw-r--r--ui/message_center/notification_blocker.h13
-rw-r--r--ui/message_center/notification_list.cc85
-rw-r--r--ui/message_center/notification_list.h21
-rw-r--r--ui/message_center/notification_list_unittest.cc127
-rw-r--r--ui/message_center/notifier_settings.cc34
-rw-r--r--ui/message_center/notifier_settings.h44
-rw-r--r--ui/message_center/views/bounded_label.cc1
-rw-r--r--ui/message_center/views/message_center_button_bar.cc13
-rw-r--r--ui/message_center/views/message_center_focus_border.cc25
-rw-r--r--ui/message_center/views/message_center_focus_border.h30
-rw-r--r--ui/message_center/views/message_center_view.cc4
-rw-r--r--ui/message_center/views/message_popup_collection.cc4
-rw-r--r--ui/message_center/views/message_popup_collection.h2
-rw-r--r--ui/message_center/views/message_view.cc29
-rw-r--r--ui/message_center/views/message_view.h8
-rw-r--r--ui/message_center/views/notification_view.cc30
-rw-r--r--ui/message_center/views/notifier_settings_view.cc35
-rw-r--r--ui/message_center/views/padded_button.cc15
-rw-r--r--ui/message_center/views/padded_button.h1
-rw-r--r--ui/message_center/views/toast_contents_view.cc1
-rw-r--r--ui/metro_viewer/metro_viewer_messages.h5
-rw-r--r--ui/native_theme/native_theme.target.darwin-arm.mk10
-rw-r--r--ui/native_theme/native_theme.target.darwin-mips.mk10
-rw-r--r--ui/native_theme/native_theme.target.darwin-x86.mk10
-rw-r--r--ui/native_theme/native_theme.target.linux-arm.mk10
-rw-r--r--ui/native_theme/native_theme.target.linux-mips.mk10
-rw-r--r--ui/native_theme/native_theme.target.linux-x86.mk10
-rw-r--r--ui/oak/oak_aura_window_display.cc4
-rw-r--r--ui/resources/default_100_percent/common/app_list_mic_off.pngbin0 -> 3450 bytes
-rw-r--r--ui/resources/default_100_percent/common/app_list_mic_on.pngbin0 -> 3516 bytes
-rw-r--r--ui/resources/default_100_percent/common/app_list_mic_recording.pngbin0 -> 3191 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_bottom.pngbin0 -> 137 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_bottom_hover.pngbin0 -> 132 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_bottom_left.pngbin0 -> 165 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.pngbin0 -> 174 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.pngbin0 -> 178 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_bottom_pressed.pngbin0 -> 139 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_bottom_right.pngbin0 -> 147 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.pngbin0 -> 136 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.pngbin0 -> 139 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_center.pngbin0 -> 111 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_center_hover.pngbin0 -> 111 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_center_left.pngbin0 -> 123 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_center_left_hover.pngbin0 -> 124 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_center_left_pressed.pngbin0 -> 124 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_center_pressed.pngbin0 -> 111 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_center_right.pngbin0 -> 114 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_center_right_hover.pngbin0 -> 114 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_center_right_pressed.pngbin0 -> 111 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_menu_bottom.pngbin0 -> 190 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.pngbin0 -> 192 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.pngbin0 -> 196 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_menu_center.pngbin0 -> 134 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_menu_center_hover.pngbin0 -> 133 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.pngbin0 -> 130 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_menu_top.pngbin0 -> 179 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_menu_top_hover.pngbin0 -> 180 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.pngbin0 -> 180 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_top.pngbin0 -> 133 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_top_hover.pngbin0 -> 132 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_top_left.pngbin0 -> 162 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_top_left_hover.pngbin0 -> 163 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_top_left_pressed.pngbin0 -> 156 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_top_pressed.pngbin0 -> 133 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_top_right.pngbin0 -> 142 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_top_right_hover.pngbin0 -> 141 bytes
-rw-r--r--ui/resources/default_100_percent/common/combobox_button_top_right_pressed.pngbin0 -> 133 bytes
-rw-r--r--ui/resources/default_100_percent/common/password_undo_arrow.pngbin1186 -> 0 bytes
-rw-r--r--ui/resources/default_200_percent/common/app_list_mic_off.pngbin0 -> 6701 bytes
-rw-r--r--ui/resources/default_200_percent/common/app_list_mic_on.pngbin0 -> 6763 bytes
-rw-r--r--ui/resources/default_200_percent/common/app_list_mic_recording.pngbin0 -> 5740 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_bottom.pngbin0 -> 151 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_bottom_hover.pngbin0 -> 144 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_bottom_left.pngbin0 -> 205 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.pngbin0 -> 209 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.pngbin0 -> 225 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_bottom_pressed.pngbin0 -> 150 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_bottom_right.pngbin0 -> 162 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.pngbin0 -> 148 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.pngbin0 -> 148 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_center.pngbin0 -> 115 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_center_hover.pngbin0 -> 115 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_center_left.pngbin0 -> 132 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_center_left_hover.pngbin0 -> 129 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_center_left_pressed.pngbin0 -> 133 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_center_pressed.pngbin0 -> 115 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_center_right.pngbin0 -> 118 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_center_right_hover.pngbin0 -> 118 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_center_right_pressed.pngbin0 -> 115 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_menu_bottom.pngbin0 -> 271 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.pngbin0 -> 271 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.pngbin0 -> 296 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_menu_center.pngbin0 -> 177 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_menu_center_hover.pngbin0 -> 176 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.pngbin0 -> 175 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_menu_top.pngbin0 -> 254 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_menu_top_hover.pngbin0 -> 251 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.pngbin0 -> 270 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_top.pngbin0 -> 139 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_top_hover.pngbin0 -> 143 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_top_left.pngbin0 -> 194 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_top_left_hover.pngbin0 -> 192 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_top_left_pressed.pngbin0 -> 186 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_top_pressed.pngbin0 -> 146 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_top_right.pngbin0 -> 153 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_top_right_hover.pngbin0 -> 145 bytes
-rw-r--r--ui/resources/default_200_percent/common/combobox_button_top_right_pressed.pngbin0 -> 146 bytes
-rw-r--r--ui/resources/default_200_percent/common/password_undo_arrow.pngbin1436 -> 0 bytes
-rw-r--r--ui/resources/ui_resources.grd40
-rw-r--r--ui/resources/ui_resources.target.darwin-arm.mk8
-rw-r--r--ui/resources/ui_resources.target.darwin-mips.mk8
-rw-r--r--ui/resources/ui_resources.target.darwin-x86.mk8
-rw-r--r--ui/resources/ui_resources.target.linux-arm.mk8
-rw-r--r--ui/resources/ui_resources.target.linux-mips.mk8
-rw-r--r--ui/resources/ui_resources.target.linux-x86.mk8
-rw-r--r--ui/shell_dialogs/DEPS1
-rw-r--r--ui/shell_dialogs/select_file_dialog_mac.mm15
-rw-r--r--ui/shell_dialogs/select_file_dialog_win.cc4
-rw-r--r--ui/shell_dialogs/shell_dialogs.target.darwin-arm.mk6
-rw-r--r--ui/shell_dialogs/shell_dialogs.target.darwin-mips.mk6
-rw-r--r--ui/shell_dialogs/shell_dialogs.target.darwin-x86.mk6
-rw-r--r--ui/shell_dialogs/shell_dialogs.target.linux-arm.mk6
-rw-r--r--ui/shell_dialogs/shell_dialogs.target.linux-mips.mk6
-rw-r--r--ui/shell_dialogs/shell_dialogs.target.linux-x86.mk6
-rw-r--r--ui/snapshot/DEPS1
-rw-r--r--ui/snapshot/snapshot.target.darwin-arm.mk10
-rw-r--r--ui/snapshot/snapshot.target.darwin-mips.mk10
-rw-r--r--ui/snapshot/snapshot.target.darwin-x86.mk10
-rw-r--r--ui/snapshot/snapshot.target.linux-arm.mk10
-rw-r--r--ui/snapshot/snapshot.target.linux-mips.mk10
-rw-r--r--ui/snapshot/snapshot.target.linux-x86.mk10
-rw-r--r--ui/surface/accelerated_surface_transformer_win_unittest.cc2
-rw-r--r--ui/surface/surface.target.darwin-arm.mk6
-rw-r--r--ui/surface/surface.target.darwin-mips.mk6
-rw-r--r--ui/surface/surface.target.darwin-x86.mk6
-rw-r--r--ui/surface/surface.target.linux-arm.mk6
-rw-r--r--ui/surface/surface.target.linux-mips.mk6
-rw-r--r--ui/surface/surface.target.linux-x86.mk6
-rw-r--r--ui/surface/transport_dib_posix.cc1
-rw-r--r--ui/test/DEPS1
-rw-r--r--ui/ui.gyp15
-rw-r--r--ui/ui.target.darwin-arm.mk6
-rw-r--r--ui/ui.target.darwin-mips.mk6
-rw-r--r--ui/ui.target.darwin-x86.mk6
-rw-r--r--ui/ui.target.linux-arm.mk6
-rw-r--r--ui/ui.target.linux-mips.mk6
-rw-r--r--ui/ui.target.linux-x86.mk6
-rw-r--r--ui/ui_base_jni_headers.target.darwin-arm.mk6
-rw-r--r--ui/ui_base_jni_headers.target.darwin-mips.mk6
-rw-r--r--ui/ui_base_jni_headers.target.darwin-x86.mk6
-rw-r--r--ui/ui_base_jni_headers.target.linux-arm.mk6
-rw-r--r--ui/ui_base_jni_headers.target.linux-mips.mk6
-rw-r--r--ui/ui_base_jni_headers.target.linux-x86.mk6
-rw-r--r--ui/views/accessibility/native_view_accessibility_win.cc2
-rw-r--r--ui/views/border.cc1
-rw-r--r--ui/views/border.h2
-rw-r--r--ui/views/bubble/bubble_border.cc2
-rw-r--r--ui/views/bubble/bubble_border.h1
-rw-r--r--ui/views/bubble/bubble_delegate.cc8
-rw-r--r--ui/views/bubble/bubble_delegate_unittest.cc14
-rw-r--r--ui/views/bubble/bubble_frame_view.cc6
-rw-r--r--ui/views/bubble/tray_bubble_view.cc30
-rw-r--r--ui/views/controls/button/checkbox.cc9
-rw-r--r--ui/views/controls/button/custom_button.cc36
-rw-r--r--ui/views/controls/button/custom_button.h3
-rw-r--r--ui/views/controls/button/custom_button_unittest.cc79
-rw-r--r--ui/views/controls/button/image_button.cc23
-rw-r--r--ui/views/controls/button/image_button.h20
-rw-r--r--ui/views/controls/button/image_button_unittest.cc1
-rw-r--r--ui/views/controls/button/label_button.cc37
-rw-r--r--ui/views/controls/button/label_button.h30
-rw-r--r--ui/views/controls/button/label_button_border.cc8
-rw-r--r--ui/views/controls/button/text_button.cc41
-rw-r--r--ui/views/controls/button/text_button.h9
-rw-r--r--ui/views/controls/combobox/combobox.cc443
-rw-r--r--ui/views/controls/combobox/combobox.h73
-rw-r--r--ui/views/controls/combobox/combobox_listener.h4
-rw-r--r--ui/views/controls/combobox/combobox_unittest.cc209
-rw-r--r--ui/views/controls/focusable_border.cc7
-rw-r--r--ui/views/controls/focusable_border.h6
-rw-r--r--ui/views/controls/image_view.cc71
-rw-r--r--ui/views/controls/image_view.h10
-rw-r--r--ui/views/controls/label_unittest.cc6
-rw-r--r--ui/views/controls/link.cc20
-rw-r--r--ui/views/controls/link.h3
-rw-r--r--ui/views/controls/menu/menu_controller.cc85
-rw-r--r--ui/views/controls/menu/menu_controller.h3
-rw-r--r--ui/views/controls/menu/menu_item_view.h5
-rw-r--r--ui/views/controls/menu/menu_runner.cc44
-rw-r--r--ui/views/controls/menu/menu_runner.h14
-rw-r--r--ui/views/controls/menu/menu_runner_handler.h31
-rw-r--r--ui/views/controls/native/native_view_host.cc2
-rw-r--r--ui/views/controls/slider.cc23
-rw-r--r--ui/views/controls/slider.h6
-rw-r--r--ui/views/controls/styled_label_unittest.cc1
-rw-r--r--ui/views/controls/textfield/native_textfield_views.cc34
-rw-r--r--ui/views/controls/textfield/native_textfield_views_unittest.cc99
-rw-r--r--ui/views/controls/textfield/textfield.cc24
-rw-r--r--ui/views/controls/textfield/textfield.h9
-rw-r--r--ui/views/controls/tree/tree_view.cc21
-rw-r--r--ui/views/controls/tree/tree_view.h4
-rw-r--r--ui/views/controls/webview/web_dialog_view.cc5
-rw-r--r--ui/views/controls/webview/webview.cc2
-rw-r--r--ui/views/corewm/capture_controller_unittest.cc3
-rw-r--r--ui/views/corewm/tooltip_aura.cc2
-rw-r--r--ui/views/corewm/tooltip_controller.cc1
-rw-r--r--ui/views/event_utils.h6
-rw-r--r--ui/views/event_utils_aura.cc8
-rw-r--r--ui/views/event_utils_win.cc15
-rw-r--r--ui/views/examples/button_example.cc1
-rw-r--r--ui/views/examples/double_split_view_example.cc1
-rw-r--r--ui/views/examples/examples_main.cc12
-rw-r--r--ui/views/examples/examples_window.cc1
-rw-r--r--ui/views/examples/examples_window_with_content.cc1
-rw-r--r--ui/views/examples/multiline_example.cc2
-rw-r--r--ui/views/examples/scroll_view_example.cc1
-rw-r--r--ui/views/examples/single_split_view_example.cc1
-rw-r--r--ui/views/examples/text_example.cc1
-rw-r--r--ui/views/examples/widget_example.cc1
-rw-r--r--ui/views/focus/focus_traversal_unittest.cc2
-rw-r--r--ui/views/focus_border.cc56
-rw-r--r--ui/views/focus_border.h49
-rw-r--r--ui/views/ime/input_method_bridge_unittest.cc4
-rw-r--r--ui/views/linux_ui/linux_ui.h3
-rw-r--r--ui/views/painter.cc99
-rw-r--r--ui/views/painter.h16
-rw-r--r--ui/views/shadow_border.cc2
-rw-r--r--ui/views/test/menu_runner_test_api.cc26
-rw-r--r--ui/views/test/menu_runner_test_api.h37
-rw-r--r--ui/views/test/test_views_delegate.h4
-rw-r--r--ui/views/view.cc70
-rw-r--r--ui/views/view.h33
-rw-r--r--ui/views/view_unittest.cc40
-rw-r--r--ui/views/views.gyp11
-rw-r--r--ui/views/views_delegate.h3
-rw-r--r--ui/views/widget/desktop_aura/desktop_native_widget_aura.cc9
-rw-r--r--ui/views/widget/desktop_aura/desktop_native_widget_aura.h2
-rw-r--r--ui/views/widget/desktop_aura/desktop_root_window_host.h4
-rw-r--r--ui/views/widget/desktop_aura/desktop_root_window_host_win.cc19
-rw-r--r--ui/views/widget/desktop_aura/desktop_root_window_host_win.h3
-rw-r--r--ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc75
-rw-r--r--ui/views/widget/desktop_aura/desktop_root_window_host_x11.h14
-rw-r--r--ui/views/widget/desktop_aura/desktop_screen_x11.cc4
-rw-r--r--ui/views/widget/drop_target_win.cc4
-rw-r--r--ui/views/widget/native_widget_aura.cc10
-rw-r--r--ui/views/widget/native_widget_aura.h2
-rw-r--r--ui/views/widget/native_widget_private.h4
-rw-r--r--ui/views/widget/native_widget_win.cc4
-rw-r--r--ui/views/widget/native_widget_win.h2
-rw-r--r--ui/views/widget/widget.cc3
-rw-r--r--ui/views/widget/widget_unittest.cc90
-rw-r--r--ui/views/win/hwnd_message_handler.cc72
-rw-r--r--ui/views/win/hwnd_message_handler.h28
-rw-r--r--ui/views/window/custom_frame_view.cc88
-rw-r--r--ui/views/window/dialog_client_view.cc1
-rw-r--r--ui/web_dialogs/web_dialog_delegate.cc4
-rw-r--r--ui/web_dialogs/web_dialog_delegate.h6
-rw-r--r--ui/webui/resources/js/cr/ui/autocomplete_list.js19
-rw-r--r--ui/webui/resources/js/cr/ui/command.js11
-rw-r--r--ui/webui/resources/js/cr/ui/list.js37
-rw-r--r--ui/webui/resources/js/cr/ui/menu_item.js4
-rw-r--r--ui/webui/resources/js/util.js20
647 files changed, 14057 insertions, 4185 deletions
diff --git a/ui/accessibility/OWNERS b/ui/accessibility/OWNERS
new file mode 100644
index 0000000000..2c197f64f6
--- /dev/null
+++ b/ui/accessibility/OWNERS
@@ -0,0 +1,3 @@
+dmazzoni@chromium.org
+dtseng@chromium.org
+aboxhall@chromium.org
diff --git a/ui/accessibility/accessibility.gyp b/ui/accessibility/accessibility.gyp
index 673657b2f9..1402d3b975 100644
--- a/ui/accessibility/accessibility.gyp
+++ b/ui/accessibility/accessibility.gyp
@@ -41,12 +41,12 @@
'type': 'executable',
'dependencies': [
'../../base/base.gyp:base',
- '../../base/base.gyp:test_support_base',
+ '../../base/base.gyp:run_all_unittests',
'../../testing/gtest.gyp:gtest',
- '../../testing/gtest.gyp:gtest_main',
'accessibility',
],
'sources': [
+ 'ax_tree_serializer_unittest.cc',
'ax_tree_unittest.cc',
]
},
diff --git a/ui/accessibility/ax_serializable_tree.cc b/ui/accessibility/ax_serializable_tree.cc
index 12bc595991..ca52ab39a2 100644
--- a/ui/accessibility/ax_serializable_tree.cc
+++ b/ui/accessibility/ax_serializable_tree.cc
@@ -20,6 +20,10 @@ class AX_EXPORT AXTreeSourceAdapter : public AXTreeSource<AXNode> {
virtual ~AXTreeSourceAdapter() {}
// AXTreeSource implementation.
+ virtual AXNode* GetRoot() const OVERRIDE {
+ return tree_->GetRoot();
+ }
+
virtual AXNode* GetFromId(int32 id) const OVERRIDE {
return tree_->GetFromId(id);
}
@@ -37,11 +41,8 @@ class AX_EXPORT AXTreeSourceAdapter : public AXTreeSource<AXNode> {
return node->ChildAtIndex(index);
}
- virtual int32 GetParentId(const AXNode* node) const OVERRIDE {
- if (node->parent())
- return node->parent()->id();
- else
- return 0;
+ virtual AXNode* GetParent(const AXNode* node) const OVERRIDE {
+ return node->parent();
}
virtual void SerializeNode(
diff --git a/ui/accessibility/ax_tree.cc b/ui/accessibility/ax_tree.cc
index b7d6f8ad30..5edb649ae8 100644
--- a/ui/accessibility/ax_tree.cc
+++ b/ui/accessibility/ax_tree.cc
@@ -6,6 +6,8 @@
#include <set>
+#include "base/logging.h"
+#include "base/strings/stringprintf.h"
#include "ui/accessibility/ax_node.h"
namespace ui {
@@ -18,12 +20,12 @@ AXTree::AXTree()
AXTreeUpdate initial_state;
initial_state.nodes.push_back(root);
- Unserialize(initial_state);
+ CHECK(Unserialize(initial_state)) << error();
}
AXTree::AXTree(const AXTreeUpdate& initial_state)
: root_(NULL) {
- Unserialize(initial_state);
+ CHECK(Unserialize(initial_state)) << error();
}
AXTree::~AXTree() {
@@ -41,11 +43,41 @@ AXNode* AXTree::GetFromId(int32 id) const {
}
bool AXTree::Unserialize(const AXTreeUpdate& update) {
+ std::set<AXNode*> pending_nodes;
+
+ if (update.node_id_to_clear != 0) {
+ AXNode* node = GetFromId(update.node_id_to_clear);
+ if (!node) {
+ error_ = base::StringPrintf("Bad node_id_to_clear: %d",
+ update.node_id_to_clear);
+ return false;
+ }
+ if (node == root_) {
+ DestroyNodeAndSubtree(root_);
+ root_ = NULL;
+ } else {
+ for (int i = 0; i < node->child_count(); ++i)
+ DestroyNodeAndSubtree(node->ChildAtIndex(i));
+ std::vector<AXNode*> children;
+ node->SwapChildren(children);
+ pending_nodes.insert(node);
+ }
+ }
+
for (size_t i = 0; i < update.nodes.size(); ++i) {
- if (!UpdateNode(update.nodes[i]))
+ if (!UpdateNode(update.nodes[i], &pending_nodes))
return false;
}
+ if (!pending_nodes.empty()) {
+ error_ = "Nodes left pending by the update:";
+ for (std::set<AXNode*>::iterator iter = pending_nodes.begin();
+ iter != pending_nodes.end(); ++iter) {
+ error_ += base::StringPrintf(" %d", (*iter)->id());
+ }
+ return false;
+ }
+
return true;
}
@@ -53,7 +85,8 @@ AXNode* AXTree::CreateNode(AXNode* parent, int32 id, int32 index_in_parent) {
return new AXNode(parent, id, index_in_parent);
}
-bool AXTree::UpdateNode(const AXNodeData& src) {
+bool AXTree::UpdateNode(
+ const AXNodeData& src, std::set<AXNode*>* pending_nodes) {
// This method updates one node in the tree based on serialized data
// received in an AXTreeUpdate. See AXTreeUpdate for pre and post
// conditions.
@@ -61,10 +94,15 @@ bool AXTree::UpdateNode(const AXNodeData& src) {
// Look up the node by id. If it's not found, then either the root
// of the tree is being swapped, or we're out of sync with the source
// and this is a serious error.
- AXNode* node = static_cast<AXNode*>(GetFromId(src.id));
- if (!node) {
- if (src.role != AX_ROLE_ROOT_WEB_AREA)
+ AXNode* node = GetFromId(src.id);
+ if (node) {
+ pending_nodes->erase(node);
+ } else {
+ if (src.role != AX_ROLE_ROOT_WEB_AREA) {
+ error_ = base::StringPrintf(
+ "%d is not in the tree and not the new root", src.id);
return false;
+ }
node = CreateAndInitializeNode(NULL, src.id, 0);
}
@@ -79,7 +117,8 @@ bool AXTree::UpdateNode(const AXNodeData& src) {
// Now build a new children vector, reusing nodes when possible,
// and swap it in.
std::vector<AXNode*> new_children;
- bool success = CreateNewChildVector(node, src.child_ids, &new_children);
+ bool success = CreateNewChildVector(
+ node, src.child_ids, &new_children, pending_nodes);
node->SwapChildren(new_children);
// Update the root of the tree if needed.
@@ -106,21 +145,22 @@ AXNode* AXTree::CreateAndInitializeNode(
void AXTree::DestroyNodeAndSubtree(AXNode* node) {
id_map_.erase(node->id());
- for (int i = 0; i < node->child_count(); ++i) {
- AXNode* child = static_cast<AXNode*>(node->ChildAtIndex(i));
- child->Destroy();
- }
+ for (int i = 0; i < node->child_count(); ++i)
+ DestroyNodeAndSubtree(node->ChildAtIndex(i));
node->Destroy();
}
bool AXTree::DeleteOldChildren(AXNode* node,
- const std::vector<int32> new_child_ids) {
+ const std::vector<int32> new_child_ids) {
// Create a set of child ids in |src| for fast lookup, and return false
// if a duplicate is found;
std::set<int32> new_child_id_set;
for (size_t i = 0; i < new_child_ids.size(); ++i) {
- if (new_child_id_set.find(new_child_ids[i]) != new_child_id_set.end())
+ if (new_child_id_set.find(new_child_ids[i]) != new_child_id_set.end()) {
+ error_ = base::StringPrintf("Node %d has duplicate child id %d",
+ node->id(), new_child_ids[i]);
return false;
+ }
new_child_id_set.insert(new_child_ids[i]);
}
@@ -136,24 +176,31 @@ bool AXTree::DeleteOldChildren(AXNode* node,
}
bool AXTree::CreateNewChildVector(AXNode* node,
- const std::vector<int32> new_child_ids,
- std::vector<AXNode*>* new_children) {
+ const std::vector<int32> new_child_ids,
+ std::vector<AXNode*>* new_children,
+ std::set<AXNode*>* pending_nodes) {
bool success = true;
for (size_t i = 0; i < new_child_ids.size(); ++i) {
int32 child_id = new_child_ids[i];
int32 index_in_parent = static_cast<int32>(i);
- AXNode* child = static_cast<AXNode*>(GetFromId(child_id));
+ AXNode* child = GetFromId(child_id);
if (child) {
if (child->parent() != node) {
// This is a serious error - nodes should never be reparented.
// If this case occurs, continue so this node isn't left in an
// inconsistent state, but return failure at the end.
+ error_ = base::StringPrintf(
+ "Node %d reparented from %d to %d",
+ child->id(),
+ child->parent() ? child->parent()->id() : 0,
+ node->id());
success = false;
continue;
}
child->SetIndexInParent(index_in_parent);
} else {
child = CreateAndInitializeNode(node, child_id, index_in_parent);
+ pending_nodes->insert(child);
}
new_children->push_back(child);
}
diff --git a/ui/accessibility/ax_tree.h b/ui/accessibility/ax_tree.h
index 84108e0591..773a773adf 100644
--- a/ui/accessibility/ax_tree.h
+++ b/ui/accessibility/ax_tree.h
@@ -5,8 +5,9 @@
#ifndef UI_ACCESSIBILITY_AX_TREE_H_
#define UI_ACCESSIBILITY_AX_TREE_H_
-#include "base/containers/hash_tables.h"
+#include <set>
+#include "base/containers/hash_tables.h"
#include "ui/accessibility/ax_export.h"
#include "ui/accessibility/ax_tree.h"
#include "ui/accessibility/ax_tree_update.h"
@@ -29,15 +30,26 @@ class AX_EXPORT AXTree {
virtual AXNode* GetRoot() const;
virtual AXNode* GetFromId(int32 id) const;
+ // Returns true on success. If it returns false, it's a fatal error
+ // and this tree should be destroyed, and the source of the tree update
+ // should not be trusted any longer.
virtual bool Unserialize(const AXTreeUpdate& update);
+ // A string describing the error from an unsuccessful Unserialize,
+ // for testing and debugging.
+ const std::string& error() { return error_; }
+
protected:
// Subclasses can override this to use a subclass of AXNode.
virtual AXNode* CreateNode(AXNode* parent, int32 id, int32 index_in_parent);
// This is called from within Unserialize(), it returns true on success.
- // Subclasses can override this to do additional processing.
- virtual bool UpdateNode(const AXNodeData& src);
+ // Subclasses can override this to do additional processing. |pending_nodes|
+ // is updated to contain all nodes that have been implicitly referenced
+ // as part of this update, but haven't been updated yet. It's an error if
+ // there are any pending nodes at the end of Unserialize.
+ virtual bool UpdateNode(const AXNodeData& src,
+ std::set<AXNode*>* pending_nodes);
// Subclasses can override this to do special behavior when the root changes.
virtual void OnRootChanged();
@@ -61,13 +73,16 @@ class AX_EXPORT AXTree {
// pointers to child nodes, reusing existing nodes already in the tree
// if they exist, and creating otherwise. Reparenting is disallowed, so
// if the id already exists as the child of another node, that's an
- // error. Returns true on success, false on fatal error.
+ // error. Returns true on success, false on fatal error. See
+ // UpdateNode, above, for an explanation of |pending_nodes|.
bool CreateNewChildVector(AXNode* node,
const std::vector<int32> new_child_ids,
- std::vector<AXNode*>* new_children);
+ std::vector<AXNode*>* new_children,
+ std::set<AXNode*>* pending_nodes);
AXNode* root_;
base::hash_map<int32, AXNode*> id_map_;
+ std::string error_;
};
} // namespace ui
diff --git a/ui/accessibility/ax_tree_serializer.h b/ui/accessibility/ax_tree_serializer.h
index cbc01c043a..e6049964c7 100644
--- a/ui/accessibility/ax_tree_serializer.h
+++ b/ui/accessibility/ax_tree_serializer.h
@@ -9,6 +9,7 @@
#include "base/containers/hash_tables.h"
#include "base/logging.h"
+#include "base/stl_util.h"
#include "ui/accessibility/ax_tree_source.h"
#include "ui/accessibility/ax_tree_update.h"
@@ -17,23 +18,44 @@ namespace ui {
struct ClientTreeNode;
// AXTreeSerializer is a helper class that serializes incremental
-// updates to an AXTreeSource as a vector of AXNodeData structs.
-// These structs can be unserialized by an AXTree. An AXTreeSerializer
-// keeps track of the tree of node ids that its client is aware of, so
-// it will automatically include, as part of any update, any additional nodes
-// that the client is not aware of yet.
+// updates to an AXTreeSource as a AXTreeUpdate struct.
+// These structs can be unserialized by a client object such as an
+// AXTree. An AXTreeSerializer keeps track of the tree of node ids that its
+// client is aware of so that it will never generate an AXTreeUpdate that
+// results in an invalid tree.
//
-// When the AXTreeSource changes, call SerializeChanges to serialize the
-// changes to the tree as an AXTreeUpdate. If a single node has changed,
-// pass that node to SerializeChanges. If a node has been added or removed,
-// pass the parent of that node to SerializeChanges and it will automatically
-// handle changes to its set of children.
+// Every node in the source tree must have an id that's a unique positive
+// integer, the same node must not appear twice.
//
-// TODO(dmazzoni): add sample usage code.
+// Usage:
+//
+// You must call SerializeChanges() every time a node in the tree changes,
+// and send the generated AXTreeUpdate to the client.
+//
+// If a node is added, call SerializeChanges on its parent.
+// If a node is removed, call SerializeChanges on its parent.
+// If a whole new subtree is added, just call SerializeChanges on its root.
+// If the root of the tree changes, call SerializeChanges on the new root.
+//
+// AXTreeSerializer will avoid re-serializing nodes that do not change.
+// For example, if node 1 has children 2, 3, 4, 5 and then child 2 is
+// removed and a new child 6 is added, the AXTreeSerializer will only
+// update nodes 1 and 6 (and any children of node 6 recursively). It will
+// assume that nodes 3, 4, and 5 are not modified unless you explicitly
+// call SerializeChanges() on them.
+//
+// As long as the source tree has unique ids for every node and no loops,
+// and as long as every update is applied to the client tree, AXTreeSerializer
+// will continue to work. If the source tree makes a change but fails to
+// call SerializeChanges properly, the trees may get out of sync - but
+// because AXTreeSerializer always keeps track of what updates it's sent,
+// it will never send an invalid update and the client tree will not break,
+// it just may not contain all of the changes.
template<class AXSourceNode>
class AXTreeSerializer {
public:
explicit AXTreeSerializer(AXTreeSource<AXSourceNode>* tree);
+ ~AXTreeSerializer();
// Throw out the internal state that keeps track of the nodes the client
// knows about. This has the effect that the next update will send the
@@ -44,13 +66,71 @@ class AXTreeSerializer {
void SerializeChanges(const AXSourceNode* node,
AXTreeUpdate* out_update);
+ // Only for unit testing. Normally this class relies on getting a call
+ // to SerializeChanges() every time the source tree changes. For unit
+ // testing, it's convenient to create a static AXTree for the initial
+ // state and then call ChangeTreeSourceForTesting and then SerializeChanges
+ // to simulate the changes you'd get if a tree changed from the initial
+ // state to the second tree's state.
+ void ChangeTreeSourceForTesting(AXTreeSource<AXSourceNode>* new_tree);
+
private:
+ // Return the least common ancestor of a node in the source tree
+ // and a node in the client tree, or NULL if there is no such node.
+ // The least common ancestor is the closest ancestor to |node| (which
+ // may be |node| itself) that's in both the source tree and client tree,
+ // and for which both the source and client tree agree on their ancestor
+ // chain up to the root.
+ //
+ // Example 1:
+ //
+ // Client Tree Source tree |
+ // 1 1 |
+ // / \ / \ |
+ // 2 3 2 4 |
+ //
+ // LCA(source node 2, client node 2) is node 2.
+ // LCA(source node 3, client node 4) is node 1.
+ //
+ // Example 2:
+ //
+ // Client Tree Source tree |
+ // 1 1 |
+ // / \ / \ |
+ // 2 3 2 3 |
+ // / \ / / |
+ // 4 7 8 4 |
+ // / \ / \ |
+ // 5 6 5 6 |
+ //
+ // LCA(source node 8, client node 7) is node 2.
+ // LCA(source node 5, client node 5) is node 1.
+ // It's not node 5, because the two trees disagree on the parent of
+ // node 4, so the LCA is the first ancestor both trees agree on.
+ const AXSourceNode* LeastCommonAncestor(const AXSourceNode* node,
+ ClientTreeNode* client_node);
+
+ // Return the least common ancestor of |node| that's in the client tree.
+ // This just walks up the ancestors of |node| until it finds a node that's
+ // also in the client tree, and then calls LeastCommonAncestor on the
+ // source node and client node.
+ const AXSourceNode* LeastCommonAncestor(const AXSourceNode* node);
+
+ // Walk the subtree rooted at |node| and return true if any nodes that
+ // would be updated are being reparented. If so, update |lca| to point
+ // to the least common ancestor of the previous LCA and the previous
+ // parent of the node being reparented.
+ bool AnyDescendantWasReparented(const AXSourceNode* node,
+ const AXSourceNode** lca);
+
+ ClientTreeNode* ClientTreeNodeById(int32 id);
+
// Delete the given client tree node and recursively delete all of its
// descendants.
void DeleteClientSubtree(ClientTreeNode* client_node);
+ // Helper function, called recursively with each new node to serialize.
void SerializeChangedNodes(const AXSourceNode* node,
- std::set<int>* ids_serialized,
AXTreeUpdate* out_update);
// The tree source.
@@ -82,6 +162,11 @@ AXTreeSerializer<AXSourceNode>::AXTreeSerializer(
}
template<class AXSourceNode>
+AXTreeSerializer<AXSourceNode>::~AXTreeSerializer() {
+ Reset();
+}
+
+template<class AXSourceNode>
void AXTreeSerializer<AXSourceNode>::Reset() {
if (client_root_) {
DeleteClientSubtree(client_root_);
@@ -90,11 +175,153 @@ void AXTreeSerializer<AXSourceNode>::Reset() {
}
template<class AXSourceNode>
+void AXTreeSerializer<AXSourceNode>::ChangeTreeSourceForTesting(
+ AXTreeSource<AXSourceNode>* new_tree) {
+ tree_ = new_tree;
+}
+
+template<class AXSourceNode>
+const AXSourceNode* AXTreeSerializer<AXSourceNode>::LeastCommonAncestor(
+ const AXSourceNode* node, ClientTreeNode* client_node) {
+ if (node == NULL || client_node == NULL)
+ return NULL;
+
+ std::vector<const AXSourceNode*> ancestors;
+ while (node) {
+ ancestors.push_back(node);
+ node = tree_->GetParent(node);
+ }
+
+ std::vector<ClientTreeNode*> client_ancestors;
+ while (client_node) {
+ client_ancestors.push_back(client_node);
+ client_node = client_node->parent;
+ }
+
+ // Start at the root. Keep going until the source ancestor chain and
+ // client ancestor chain disagree. The last node before they disagree
+ // is the LCA.
+ const AXSourceNode* lca = NULL;
+ int source_index = static_cast<int>(ancestors.size() - 1);
+ int client_index = static_cast<int>(client_ancestors.size() - 1);
+ while (source_index >= 0 && client_index >= 0) {
+ if (tree_->GetId(ancestors[source_index]) !=
+ client_ancestors[client_index]->id) {
+ return lca;
+ }
+ lca = ancestors[source_index];
+ source_index--;
+ client_index--;
+ }
+ return lca;
+}
+
+template<class AXSourceNode>
+const AXSourceNode* AXTreeSerializer<AXSourceNode>::LeastCommonAncestor(
+ const AXSourceNode* node) {
+ // Walk up the tree until the source node's id also exists in the
+ // client tree, then call LeastCommonAncestor on those two nodes.
+ ClientTreeNode* client_node = ClientTreeNodeById(tree_->GetId(node));
+ while (node && !client_node) {
+ node = tree_->GetParent(node);
+ if (node)
+ client_node = ClientTreeNodeById(tree_->GetId(node));
+ }
+ return LeastCommonAncestor(node, client_node);
+}
+
+template<class AXSourceNode>
+bool AXTreeSerializer<AXSourceNode>::AnyDescendantWasReparented(
+ const AXSourceNode* node, const AXSourceNode** lca) {
+ bool result = false;
+ int id = tree_->GetId(node);
+ int child_count = tree_->GetChildCount(node);
+ for (int i = 0; i < child_count; ++i) {
+ const AXSourceNode* child = tree_->GetChildAtIndex(node, i);
+ int child_id = tree_->GetId(child);
+ ClientTreeNode* client_child = ClientTreeNodeById(child_id);
+ if (client_child) {
+ if (!client_child->parent) {
+ // If the client child has no parent, it must have been the
+ // previous root node, so there is no LCA and we can exit early.
+ *lca = NULL;
+ return true;
+ } else if (client_child->parent->id != id) {
+ // If the client child's parent is not this node, update the LCA
+ // and return true (reparenting was found).
+ *lca = LeastCommonAncestor(*lca, client_child);
+ result = true;
+ } else {
+ // This child is already in the client tree, we won't
+ // recursively serialize it so we don't need to check this
+ // subtree recursively for reparenting.
+ continue;
+ }
+ }
+
+ // This is a new child or reparented child, check it recursively.
+ if (AnyDescendantWasReparented(child, lca))
+ result = true;
+ }
+ return result;
+}
+
+template<class AXSourceNode>
+ClientTreeNode* AXTreeSerializer<AXSourceNode>::ClientTreeNodeById(int32 id) {
+ base::hash_map<int32, ClientTreeNode*>::iterator iter =
+ client_id_map_.find(id);
+ if (iter != client_id_map_.end())
+ return iter->second;
+ else
+ return NULL;
+}
+
+template<class AXSourceNode>
void AXTreeSerializer<AXSourceNode>::SerializeChanges(
const AXSourceNode* node,
AXTreeUpdate* out_update) {
- std::set<int> ids_serialized;
- SerializeChangedNodes(node, &ids_serialized, out_update);
+ // If the node isn't in the client tree, we need to serialize starting
+ // with the LCA.
+ const AXSourceNode* lca = LeastCommonAncestor(node);
+
+ if (client_root_) {
+ // If the LCA is anything other than the node itself, tell the
+ // client to first delete the subtree rooted at the LCA.
+ bool need_delete = (lca != node);
+ if (lca) {
+ // Check for any reparenting within this subtree - if there is
+ // any, we need to delete and reserialize the whole subtree
+ // that contains the old and new parents of the reparented node.
+ if (AnyDescendantWasReparented(lca, &lca))
+ need_delete = true;
+ }
+
+ if (lca == NULL) {
+ // If there's no LCA, just tell the client to destroy the whole
+ // tree and then we'll serialize everything from the new root.
+ out_update->node_id_to_clear = client_root_->id;
+ DeleteClientSubtree(client_root_);
+ client_id_map_.erase(client_root_->id);
+ client_root_ = NULL;
+ } else if (need_delete) {
+ // Otherwise, if we need to reserialize a subtree, first we need
+ // to delete those nodes in our client tree so that
+ // SerializeChangedNodes() will be sure to send them again.
+ out_update->node_id_to_clear = tree_->GetId(lca);
+ ClientTreeNode* client_lca = ClientTreeNodeById(tree_->GetId(lca));
+ CHECK(client_lca);
+ for (size_t i = 0; i < client_lca->children.size(); ++i) {
+ client_id_map_.erase(client_lca->children[i]->id);
+ DeleteClientSubtree(client_lca->children[i]);
+ }
+ client_lca->children.clear();
+ }
+ }
+
+ // Serialize from the LCA, or from the root if there isn't one.
+ if (!lca)
+ lca = tree_->GetRoot();
+ SerializeChangedNodes(lca, out_update);
}
template<class AXSourceNode>
@@ -110,13 +337,7 @@ void AXTreeSerializer<AXSourceNode>::DeleteClientSubtree(
template<class AXSourceNode>
void AXTreeSerializer<AXSourceNode>::SerializeChangedNodes(
const AXSourceNode* node,
- std::set<int>* ids_serialized,
AXTreeUpdate* out_update) {
- int id = tree_->GetId(node);
- if (ids_serialized->find(id) != ids_serialized->end())
- return;
- ids_serialized->insert(id);
-
// This method has three responsibilities:
// 1. Serialize |node| into an AXNodeData, and append it to
// the AXTreeUpdate to be sent to the client.
@@ -129,14 +350,9 @@ void AXTreeSerializer<AXSourceNode>::SerializeChangedNodes(
// we keep track of what accessibility objects the client already knows
// about. If we don't find it, then this must be the new root of the
// accessibility tree.
- //
- // TODO(dmazzoni): handle the case where the root changes.
- ClientTreeNode* client_node = NULL;
- base::hash_map<int32, ClientTreeNode*>::iterator iter =
- client_id_map_.find(id);
- if (iter != client_id_map_.end()) {
- client_node = iter->second;
- } else {
+ int id = tree_->GetId(node);
+ ClientTreeNode* client_node = ClientTreeNodeById(id);
+ if (!client_node) {
if (client_root_) {
client_id_map_.erase(client_root_->id);
DeleteClientSubtree(client_root_);
@@ -151,9 +367,6 @@ void AXTreeSerializer<AXSourceNode>::SerializeChangedNodes(
// Iterate over the ids of the children of |node|.
// Create a set of the child ids so we can quickly look
// up which children are new and which ones were there before.
- // Also catch the case where a child is already in the client tree
- // data structure with a different parent, and make sure the old parent
- // clears this node first.
base::hash_set<int32> new_child_ids;
int child_count = tree_->GetChildCount(node);
for (int i = 0; i < child_count; ++i) {
@@ -161,27 +374,10 @@ void AXTreeSerializer<AXSourceNode>::SerializeChangedNodes(
int new_child_id = tree_->GetId(child);
new_child_ids.insert(new_child_id);
+ // This is a sanity check - there shouldn't be any reparenting
+ // because we've already handled it above.
ClientTreeNode* client_child = client_id_map_[new_child_id];
- if (client_child && client_child->parent != client_node) {
- // The child is being reparented. Find the source tree node
- // corresponding to the old parent, or the closest ancestor
- // still in the tree.
- ClientTreeNode* client_parent = client_child->parent;
- AXSourceNode* parent = NULL;
- while (client_parent) {
- parent = tree_->GetFromId(client_parent->id);
- if (parent)
- break;
- client_parent = client_parent->parent;
- }
- CHECK(parent);
-
- // Call SerializeChangedNodes recursively on the old parent,
- // so that the update that clears |child| from its old parent
- // occurs stricly before the update that adds |child| to its
- // new parent.
- SerializeChangedNodes(parent, ids_serialized, out_update);
- }
+ CHECK(!client_child || client_child->parent == client_node);
}
// Go through the old children and delete subtrees for child
@@ -244,7 +440,7 @@ void AXTreeSerializer<AXSourceNode>::SerializeChangedNodes(
// Serialize all of the new children, recursively.
for (size_t i = 0; i < children_to_serialize.size(); ++i)
- SerializeChangedNodes(children_to_serialize[i], ids_serialized, out_update);
+ SerializeChangedNodes(children_to_serialize[i], out_update);
}
} // namespace ui
diff --git a/ui/accessibility/ax_tree_serializer_unittest.cc b/ui/accessibility/ax_tree_serializer_unittest.cc
new file mode 100644
index 0000000000..3ec8de71f4
--- /dev/null
+++ b/ui/accessibility/ax_tree_serializer_unittest.cc
@@ -0,0 +1,182 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/memory/scoped_ptr.h"
+#include "base/strings/string_number_conversions.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/accessibility/ax_node.h"
+#include "ui/accessibility/ax_serializable_tree.h"
+#include "ui/accessibility/ax_tree.h"
+#include "ui/accessibility/ax_tree_serializer.h"
+
+namespace ui {
+
+// The framework for these tests is that each test sets up |treedata0_|
+// and |treedata1_| and then calls GetTreeSerializer, which creates a
+// serializer for a tree that's initially in state |treedata0_|, but then
+// changes to state |treedata1_|. This allows each test to check the
+// updates created by AXTreeSerializer or unit-test its private
+// member functions.
+class AXTreeSerializerTest : public testing::Test {
+ public:
+ AXTreeSerializerTest() {}
+ virtual ~AXTreeSerializerTest() {}
+
+ protected:
+ void CreateTreeSerializer();
+
+ AXTreeUpdate treedata0_;
+ AXTreeUpdate treedata1_;
+ scoped_ptr<AXSerializableTree> tree0_;
+ scoped_ptr<AXSerializableTree> tree1_;
+ scoped_ptr<AXTreeSource<AXNode> > tree0_source_;
+ scoped_ptr<AXTreeSource<AXNode> > tree1_source_;
+ scoped_ptr<AXTreeSerializer<AXNode> > serializer_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(AXTreeSerializerTest);
+};
+
+void AXTreeSerializerTest::CreateTreeSerializer() {
+ if (serializer_)
+ return;
+
+ tree0_.reset(new AXSerializableTree(treedata0_));
+ tree1_.reset(new AXSerializableTree(treedata1_));
+
+ // Serialize tree0 so that AXTreeSerializer thinks that its client
+ // is totally in sync.
+ tree0_source_.reset(tree0_->CreateTreeSource());
+ serializer_.reset(new AXTreeSerializer<AXNode>(tree0_source_.get()));
+ AXTreeUpdate unused_update;
+ serializer_->SerializeChanges(tree0_->GetRoot(), &unused_update);
+
+ // Pretend that tree0_ turned into tree1_. The next call to
+ // AXTreeSerializer will force it to consider these changes to
+ // the tree and send them as part of the next update.
+ tree1_source_.reset(tree1_->CreateTreeSource());
+ serializer_->ChangeTreeSourceForTesting(tree1_source_.get());
+}
+
+// In this test, one child is added to the root. Only the root and
+// new child should be added.
+TEST_F(AXTreeSerializerTest, UpdateContainsOnlyChangedNodes) {
+ // (1 (2 3))
+ treedata0_.nodes.resize(3);
+ treedata0_.nodes[0].id = 1;
+ treedata0_.nodes[0].role = AX_ROLE_ROOT_WEB_AREA;
+ treedata0_.nodes[0].child_ids.push_back(2);
+ treedata0_.nodes[0].child_ids.push_back(3);
+ treedata0_.nodes[1].id = 2;
+ treedata0_.nodes[2].id = 3;
+
+ // (1 (4 2 3))
+ treedata1_.nodes.resize(4);
+ treedata1_.nodes[0].id = 1;
+ treedata1_.nodes[0].role = AX_ROLE_ROOT_WEB_AREA;
+ treedata1_.nodes[0].child_ids.push_back(4);
+ treedata1_.nodes[0].child_ids.push_back(2);
+ treedata1_.nodes[0].child_ids.push_back(3);
+ treedata1_.nodes[1].id = 2;
+ treedata1_.nodes[2].id = 3;
+ treedata1_.nodes[3].id = 4;
+
+ CreateTreeSerializer();
+ AXTreeUpdate update;
+ serializer_->SerializeChanges(tree1_->GetFromId(1), &update);
+
+ // The update should only touch nodes 1 and 4 - nodes 2 and 3 are unchanged
+ // and shouldn't be affected.
+ EXPECT_EQ(0, update.node_id_to_clear);
+ ASSERT_EQ(static_cast<size_t>(2), update.nodes.size());
+ EXPECT_EQ(1, update.nodes[0].id);
+ EXPECT_EQ(4, update.nodes[1].id);
+}
+
+// When the root changes, the whole tree is updated, even if some of it
+// is unaffected.
+TEST_F(AXTreeSerializerTest, NewRootUpdatesEntireTree) {
+ // (1 (2 (3 (4))))
+ treedata0_.nodes.resize(4);
+ treedata0_.nodes[0].id = 1;
+ treedata0_.nodes[0].role = AX_ROLE_ROOT_WEB_AREA;
+ treedata0_.nodes[0].child_ids.push_back(2);
+ treedata0_.nodes[1].id = 2;
+ treedata0_.nodes[1].child_ids.push_back(3);
+ treedata0_.nodes[2].id = 3;
+ treedata0_.nodes[2].child_ids.push_back(4);
+ treedata0_.nodes[3].id = 4;
+
+ // (5 (2 (3 (4))))
+ treedata1_.nodes.resize(4);
+ treedata1_.nodes[0].id = 5;
+ treedata1_.nodes[0].role = AX_ROLE_ROOT_WEB_AREA;
+ treedata1_.nodes[0].child_ids.push_back(2);
+ treedata1_.nodes[1].id = 2;
+ treedata1_.nodes[1].child_ids.push_back(3);
+ treedata1_.nodes[2].id = 3;
+ treedata1_.nodes[2].child_ids.push_back(4);
+ treedata1_.nodes[3].id = 4;
+
+ CreateTreeSerializer();
+ AXTreeUpdate update;
+ serializer_->SerializeChanges(tree1_->GetFromId(4), &update);
+
+ // The update should delete the subtree rooted at node id=1, and
+ // then include all four nodes in the update, even though the
+ // subtree rooted at id=2 didn't actually change.
+ EXPECT_EQ(1, update.node_id_to_clear);
+ ASSERT_EQ(static_cast<size_t>(4), update.nodes.size());
+ EXPECT_EQ(5, update.nodes[0].id);
+ EXPECT_EQ(2, update.nodes[1].id);
+ EXPECT_EQ(3, update.nodes[2].id);
+ EXPECT_EQ(4, update.nodes[3].id);
+}
+
+// When a node is reparented, the subtree including both the old parent
+// and new parent of the reparented node must be deleted and recreated.
+TEST_F(AXTreeSerializerTest, ReparentingUpdatesSubtree) {
+ // (1 (2 (3 (4) 5)))
+ treedata0_.nodes.resize(5);
+ treedata0_.nodes[0].id = 1;
+ treedata0_.nodes[0].role = AX_ROLE_ROOT_WEB_AREA;
+ treedata0_.nodes[0].child_ids.push_back(2);
+ treedata0_.nodes[1].id = 2;
+ treedata0_.nodes[1].child_ids.push_back(3);
+ treedata0_.nodes[1].child_ids.push_back(5);
+ treedata0_.nodes[2].id = 3;
+ treedata0_.nodes[2].child_ids.push_back(4);
+ treedata0_.nodes[3].id = 4;
+ treedata0_.nodes[4].id = 5;
+
+ // Node 5 has been reparented from being a child of node 2,
+ // to a child of node 4.
+ // (1 (2 (3 (4 (5)))))
+ treedata1_.nodes.resize(5);
+ treedata1_.nodes[0].id = 1;
+ treedata1_.nodes[0].role = AX_ROLE_ROOT_WEB_AREA;
+ treedata1_.nodes[0].child_ids.push_back(2);
+ treedata1_.nodes[1].id = 2;
+ treedata1_.nodes[1].child_ids.push_back(3);
+ treedata1_.nodes[2].id = 3;
+ treedata1_.nodes[2].child_ids.push_back(4);
+ treedata1_.nodes[3].id = 4;
+ treedata1_.nodes[3].child_ids.push_back(5);
+ treedata1_.nodes[4].id = 5;
+
+ CreateTreeSerializer();
+ AXTreeUpdate update;
+ serializer_->SerializeChanges(tree1_->GetFromId(4), &update);
+
+ // The update should delete the subtree rooted at node id=2, and
+ // then include nodes 2...5.
+ EXPECT_EQ(2, update.node_id_to_clear);
+ ASSERT_EQ(static_cast<size_t>(4), update.nodes.size());
+ EXPECT_EQ(2, update.nodes[0].id);
+ EXPECT_EQ(3, update.nodes[1].id);
+ EXPECT_EQ(4, update.nodes[2].id);
+ EXPECT_EQ(5, update.nodes[3].id);
+}
+
+} // namespace ui
diff --git a/ui/accessibility/ax_tree_source.h b/ui/accessibility/ax_tree_source.h
index 383e70e3f0..35bdbb711c 100644
--- a/ui/accessibility/ax_tree_source.h
+++ b/ui/accessibility/ax_tree_source.h
@@ -21,14 +21,13 @@ template<class AXNodeSource>
class AX_EXPORT AXTreeSource {
public:
virtual ~AXTreeSource() {}
+ virtual AXNodeSource* GetRoot() const = 0;
virtual AXNodeSource* GetFromId(int32 id) const = 0;
virtual int32 GetId(const AXNodeSource* node) const = 0;
virtual int GetChildCount(const AXNodeSource* node) const = 0;
virtual AXNodeSource* GetChildAtIndex(const AXNodeSource* node, int index)
const = 0;
-
- // Returns the id of this node's parent, or 0 if it doesn't have a parent.
- virtual int32 GetParentId(const AXNodeSource* node) const = 0;
+ virtual AXNodeSource* GetParent(const AXNodeSource* node) const = 0;
// Serialize one node in the tree.
virtual void SerializeNode(
diff --git a/ui/accessibility/ax_tree_unittest.cc b/ui/accessibility/ax_tree_unittest.cc
index 3f11899c85..9e21280a06 100644
--- a/ui/accessibility/ax_tree_unittest.cc
+++ b/ui/accessibility/ax_tree_unittest.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "base/memory/scoped_ptr.h"
+#include "base/strings/string_number_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/accessibility/ax_node.h"
#include "ui/accessibility/ax_serializable_tree.h"
@@ -11,7 +12,7 @@
namespace ui {
-TEST(AXTreeTest, TestSerialize) {
+TEST(AXTreeTest, SerializeSimpleAXTree) {
AXNodeData root;
root.id = 1;
root.role = AX_ROLE_ROOT_WEB_AREA;
@@ -58,4 +59,108 @@ TEST(AXTreeTest, TestSerialize) {
EXPECT_EQ(checkbox.role, checkbox_node->data().role);
}
+TEST(AXTreeTest, DeleteUnknownSubtreeFails) {
+ AXNodeData root;
+ root.id = 1;
+ root.role = AX_ROLE_ROOT_WEB_AREA;
+
+ AXTreeUpdate initial_state;
+ initial_state.nodes.push_back(root);
+ AXTree tree(initial_state);
+
+ // This should fail because we're asking it to delete
+ // a subtree rooted at id=2, which doesn't exist.
+ AXTreeUpdate update;
+ update.node_id_to_clear = 2;
+ update.nodes.resize(1);
+ update.nodes[0].id = 1;
+ update.nodes[0].id = AX_ROLE_ROOT_WEB_AREA;
+ EXPECT_FALSE(tree.Unserialize(update));
+ ASSERT_EQ("Bad node_id_to_clear: 2", tree.error());
+}
+
+TEST(AXTreeTest, LeaveOrphanedDeletedSubtreeFails) {
+ AXTreeUpdate initial_state;
+ initial_state.nodes.resize(3);
+ initial_state.nodes[0].id = 1;
+ initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA;
+ initial_state.nodes[0].child_ids.push_back(2);
+ initial_state.nodes[0].child_ids.push_back(3);
+ initial_state.nodes[1].id = 2;
+ initial_state.nodes[2].id = 3;
+ AXTree tree(initial_state);
+
+ // This should fail because we delete a subtree rooted at id=2
+ // but never update it.
+ AXTreeUpdate update;
+ update.node_id_to_clear = 2;
+ update.nodes.resize(1);
+ update.nodes[0].id = 3;
+ EXPECT_FALSE(tree.Unserialize(update));
+ ASSERT_EQ("Nodes left pending by the update: 2", tree.error());
+}
+
+TEST(AXTreeTest, LeaveOrphanedNewChildFails) {
+ AXTreeUpdate initial_state;
+ initial_state.nodes.resize(1);
+ initial_state.nodes[0].id = 1;
+ initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA;
+ AXTree tree(initial_state);
+
+ // This should fail because we add a new child to the root node
+ // but never update it.
+ AXTreeUpdate update;
+ update.nodes.resize(1);
+ update.nodes[0].id = 1;
+ update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA;
+ update.nodes[0].child_ids.push_back(2);
+ EXPECT_FALSE(tree.Unserialize(update));
+ ASSERT_EQ("Nodes left pending by the update: 2", tree.error());
+}
+
+TEST(AXTreeTest, DuplicateChildIdFails) {
+ AXTreeUpdate initial_state;
+ initial_state.nodes.resize(1);
+ initial_state.nodes[0].id = 1;
+ initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA;
+ AXTree tree(initial_state);
+
+ // This should fail because a child id appears twice.
+ AXTreeUpdate update;
+ update.nodes.resize(2);
+ update.nodes[0].id = 1;
+ update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA;
+ update.nodes[0].child_ids.push_back(2);
+ update.nodes[0].child_ids.push_back(2);
+ update.nodes[1].id = 2;
+ EXPECT_FALSE(tree.Unserialize(update));
+ ASSERT_EQ("Node 1 has duplicate child id 2", tree.error());
+}
+
+TEST(AXTreeTest, InvalidReparentingFails) {
+ AXTreeUpdate initial_state;
+ initial_state.nodes.resize(3);
+ initial_state.nodes[0].id = 1;
+ initial_state.nodes[0].role = AX_ROLE_ROOT_WEB_AREA;
+ initial_state.nodes[0].child_ids.push_back(2);
+ initial_state.nodes[1].id = 2;
+ initial_state.nodes[1].child_ids.push_back(3);
+ initial_state.nodes[2].id = 3;
+
+ AXTree tree(initial_state);
+
+ // This should fail because node 3 is reparented from node 2 to node 1
+ // without deleting node 1's subtree first.
+ AXTreeUpdate update;
+ update.nodes.resize(3);
+ update.nodes[0].id = 1;
+ update.nodes[0].role = AX_ROLE_ROOT_WEB_AREA;
+ update.nodes[0].child_ids.push_back(3);
+ update.nodes[0].child_ids.push_back(2);
+ update.nodes[1].id = 2;
+ update.nodes[2].id = 3;
+ EXPECT_FALSE(tree.Unserialize(update));
+ ASSERT_EQ("Node 3 reparented from 2 to 1", tree.error());
+}
+
} // namespace ui
diff --git a/ui/accessibility/ax_tree_update.cc b/ui/accessibility/ax_tree_update.cc
index 083c577a6b..dc785d9e06 100644
--- a/ui/accessibility/ax_tree_update.cc
+++ b/ui/accessibility/ax_tree_update.cc
@@ -6,7 +6,7 @@
namespace ui {
-AXTreeUpdate::AXTreeUpdate() {
+AXTreeUpdate::AXTreeUpdate() : node_id_to_clear(0) {
}
AXTreeUpdate::~AXTreeUpdate() {
diff --git a/ui/accessibility/ax_tree_update.h b/ui/accessibility/ax_tree_update.h
index 0599821afc..0280efe644 100644
--- a/ui/accessibility/ax_tree_update.h
+++ b/ui/accessibility/ax_tree_update.h
@@ -15,13 +15,18 @@ namespace ui {
// to an AXTree. The sender and receiver must be in sync; the update
// is only meant to bring the tree from a specific previous state into
// its next state. Trying to apply it to the wrong tree should immediately
-// die with a fatal assertion. An AXTreeUpdate is just an ordered vector
-// of AXNodeData structures to be applied to the tree in order.
+// die with a fatal assertion.
+//
+// An AXTreeUpdate consists of an optional node id to clear (meaning
+// that all of that node's children and their descendants are deleted),
+// followed by an ordered vector of AXNodeData structures to be applied
+// to the tree in order.
//
// Suppose that the next AXNodeData to be applied is |node|. The following
// invariants must hold:
-// 1. Either |node.id| is already in the tree, or else |node| is the new
-// root of the tree and |node.role| == WebAXRoleRootWebArea.
+// 1. Either |node.id| is already in the tree, or else the tree is empty,
+// |node| is the new root of the tree, and
+// |node.role| == WebAXRoleRootWebArea.
// 2. Every child id in |node.child_ids| must either be already a child
// of this node, or a new id not previously in the tree. It is not
// allowed to "reparent" a child to this node without first removing
@@ -35,6 +40,14 @@ struct AX_EXPORT AXTreeUpdate {
AXTreeUpdate();
~AXTreeUpdate();
+ // The id of a node to clear, before applying any updates,
+ // or 0 if no nodes should be cleared. Clearing a node means deleting
+ // all of its children and their descendants, but leaving that node in
+ // the tree. It's an error to clear a node but not subsequently update it
+ // as part of the tree update.
+ int node_id_to_clear;
+
+ // A vector of nodes to update, according to the rules above.
std::vector<AXNodeData> nodes;
// TODO(dmazzoni): location changes
diff --git a/ui/android/java/res/drawable-ldpi/autofill_popup_background_down.9.png b/ui/android/java/res/drawable-ldpi/autofill_popup_background_down.9.png
deleted file mode 100644
index 0fb3b87b8f..0000000000
--- a/ui/android/java/res/drawable-ldpi/autofill_popup_background_down.9.png
+++ /dev/null
Binary files differ
diff --git a/ui/android/java/res/drawable-ldpi/autofill_popup_background_up.9.png b/ui/android/java/res/drawable-ldpi/autofill_popup_background_up.9.png
deleted file mode 100644
index 4ab1786471..0000000000
--- a/ui/android/java/res/drawable-ldpi/autofill_popup_background_up.9.png
+++ /dev/null
Binary files differ
diff --git a/ui/android/java/res/drawable/autofill_popup_background_down.9.png b/ui/android/java/res/drawable/autofill_popup_background_down.9.png
index 2022fd7438..0fb3b87b8f 100644
--- a/ui/android/java/res/drawable/autofill_popup_background_down.9.png
+++ b/ui/android/java/res/drawable/autofill_popup_background_down.9.png
Binary files differ
diff --git a/ui/android/java/res/drawable/autofill_popup_background_up.9.png b/ui/android/java/res/drawable/autofill_popup_background_up.9.png
index 62fc5a6bf9..4ab1786471 100644
--- a/ui/android/java/res/drawable/autofill_popup_background_up.9.png
+++ b/ui/android/java/res/drawable/autofill_popup_background_up.9.png
Binary files differ
diff --git a/ui/android/java/res/drawable/color_button_background.xml b/ui/android/java/res/drawable/color_button_background.xml
new file mode 100644
index 0000000000..66bcce2e4d
--- /dev/null
+++ b/ui/android/java/res/drawable/color_button_background.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2013 The Chromium Authors. All rights reserved.
+ Use of this source code is governed by a BSD-style license that can be
+ found in the LICENSE file.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:top="0dp"
+ android:right="0dp"
+ android:bottom="0dp"
+ android:left="0dp">
+ <shape android:shape="rectangle">
+ <solid android:color="@color/color_picker_border_color"/>
+ </shape>
+ </item>
+ <item android:top="0px"
+ android:right="1px"
+ android:bottom="0px"
+ android:left="1px">
+ <shape android:shape="rectangle">
+ <solid android:color="@color/color_picker_background_color"/>
+ </shape>
+ </item>
+ <item
+ android:id="@+id/color_button_swatch"
+ android:top="1px"
+ android:right="2px"
+ android:bottom="1px"
+ android:left="2px">
+ <shape android:shape="rectangle">
+ <solid android:color="#FF0000"/>
+ </shape>
+ </item>
+</layer-list>
diff --git a/ui/android/java/res/drawable/color_picker_border.xml b/ui/android/java/res/drawable/color_picker_border.xml
index b48be9bb41..6cd6bbfbd6 100644
--- a/ui/android/java/res/drawable/color_picker_border.xml
+++ b/ui/android/java/res/drawable/color_picker_border.xml
@@ -3,8 +3,10 @@
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
+
<shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="rectangle">
- <solid android:color="#00000000"/>
- <stroke android:width="1px" android:color="@color/color_picker_border_color" />
+ android:shape="rectangle">
+
+ <stroke android:width="1px" android:color="@color/color_picker_border_color" />
+ <solid android:color="@color/color_picker_background_color"/>
</shape> \ No newline at end of file
diff --git a/ui/android/java/res/layout/color_picker_dialog_content.xml b/ui/android/java/res/layout/color_picker_dialog_content.xml
index 8aa4dbaeff..38a492d0b2 100644
--- a/ui/android/java/res/layout/color_picker_dialog_content.xml
+++ b/ui/android/java/res/layout/color_picker_dialog_content.xml
@@ -4,53 +4,48 @@
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="15dp">
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ <ScrollView
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:padding="15dp">
+ android:layout_height="wrap_content">
<org.chromium.ui.ColorPickerAdvanced
android:id="@+id/color_picker_advanced"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
+ </ScrollView>
- <FrameLayout
- android:id="@+id/color_picker_simple_border"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/color_picker_border"
- android:paddingStart="1px"
- android:paddingEnd="1px"
- android:paddingTop="1px">
+ <org.chromium.ui.ColorPickerSimple
+ android:id="@+id/color_picker_simple"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:divider="@color/color_picker_border_color"
+ android:dividerHeight="1px"
+ android:paddingStart="1px"
+ android:paddingEnd="1px"
+ android:paddingTop="1px"
+ android:background="@drawable/color_picker_border" />
- <org.chromium.ui.ColorPickerSimple
- android:id="@+id/color_picker_simple"
- android:layout_width="match_parent"
- android:layout_height="100dp"/>
- </FrameLayout>
+ <FrameLayout
+ android:id="@+id/more_colors_button_border"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@drawable/color_picker_border"
+ android:padding="1px">
- <FrameLayout
- android:id="@+id/more_colors_button_border"
+ <org.chromium.ui.ColorPickerMoreButton
+ android:id="@+id/more_colors_button"
+ style="?android:attr/buttonBarButtonStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_below="@+id/color_picker_simple_border"
- android:background="@drawable/color_picker_border"
- android:padding="1px">
-
- <org.chromium.ui.ColorPickerMoreButton
- android:id="@+id/more_colors_button"
- style="?android:attr/buttonBarButtonStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="48dp"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@string/color_picker_button_more" />
- </FrameLayout>
-
- </RelativeLayout>
-</ScrollView> \ No newline at end of file
+ android:minHeight="48dp"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/color_picker_button_more" />
+ </FrameLayout>
+</LinearLayout>
diff --git a/ui/android/java/res/layout/date_time_suggestion.xml b/ui/android/java/res/layout/date_time_suggestion.xml
new file mode 100644
index 0000000000..e47ac7682c
--- /dev/null
+++ b/ui/android/java/res/layout/date_time_suggestion.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2013 The Chromium Authors. All rights reserved.
+
+ Use of this source code is governed by a BSD-style license that can be
+ found in the LICENSE file.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/date_time_suggestion"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="44dp"
+ android:orientation="horizontal"
+ android:gravity="center_vertical">
+ <TextView
+ android:id="@+id/date_time_suggestion_value"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="10dp"
+ android:layout_marginEnd="10dp"
+ android:ellipsize="end"
+ android:singleLine="true"
+ android:textSize="18sp" />
+ <TextView
+ android:id="@+id/date_time_suggestion_label"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="10dp"
+ android:layout_weight="1"
+ android:textSize="18sp"
+ android:gravity="end"
+ android:textColor="#8b8b8b"
+ android:ellipsize="end"
+ android:singleLine="true" />
+</LinearLayout>
diff --git a/ui/android/java/res/values/colors.xml b/ui/android/java/res/values/colors.xml
index a602826945..9aa152bae5 100644
--- a/ui/android/java/res/values/colors.xml
+++ b/ui/android/java/res/values/colors.xml
@@ -6,6 +6,7 @@
-->
<resources>
<color name="color_picker_border_color">#B0B0B0</color>
+ <color name="color_picker_background_color">#FFFFFF</color>
<color name="autofill_divider_color">#E5E5E5</color>
<color name="autofill_dark_divider_color">#C0C0C0</color>
</resources>
diff --git a/ui/android/java/res/values/dimens.xml b/ui/android/java/res/values/dimens.xml
index 01bc555368..8bdacc7e34 100644
--- a/ui/android/java/res/values/dimens.xml
+++ b/ui/android/java/res/values/dimens.xml
@@ -11,6 +11,7 @@
of the seek bar icon.
-->
<dimen name="color_picker_gradient_margin">14.5dp</dimen>
+ <dimen name="color_button_height">60dp</dimen>
<dimen name="autofill_text_height">44dp</dimen>
<dimen name="autofill_text_divider_height">1px</dimen>
diff --git a/ui/android/java/resource_map/OWNERS b/ui/android/java/resource_map/OWNERS
index d85278d5ee..3e31f9baef 100644
--- a/ui/android/java/resource_map/OWNERS
+++ b/ui/android/java/resource_map/OWNERS
@@ -6,8 +6,9 @@ set noparent
benm@chromium.org
boliu@chomium.org
-joth@chromium.org
+michaelbai@chromium.org
mkosiba@chromium.org
mnaganov@chromium.org
primiano@chromium.org
+sgurun@chromium.org
torne@chromium.org
diff --git a/ui/android/java/resource_map/org/chromium/ui/R.java b/ui/android/java/resource_map/org/chromium/ui/R.java
index 8f8e499631..094313092c 100644
--- a/ui/android/java/resource_map/org/chromium/ui/R.java
+++ b/ui/android/java/resource_map/org/chromium/ui/R.java
@@ -16,6 +16,7 @@ package org.chromium.ui;
*/
public final class R {
public static final class string {
+ public static int copy_to_clipboard_failure_message;
public static int low_memory_error;
public static int opening_file_error;
public static int color_picker_button_more;
@@ -25,6 +26,14 @@ public final class R {
public static int color_picker_button_set;
public static int color_picker_button_cancel;
public static int color_picker_dialog_title;
+ public static int color_picker_button_red;
+ public static int color_picker_button_cyan;
+ public static int color_picker_button_blue;
+ public static int color_picker_button_green;
+ public static int color_picker_button_magenta;
+ public static int color_picker_button_yellow;
+ public static int color_picker_button_black;
+ public static int color_picker_button_white;
}
public static final class id {
public static int autofill_label;
@@ -35,6 +44,7 @@ public final class R {
public static int more_colors_button;
public static int color_picker_advanced;
public static int color_picker_simple;
+ public static int color_button_swatch;
public static int more_colors_button_border;
public static int color_picker_simple_border;
public static int gradient;
@@ -48,6 +58,7 @@ public final class R {
public static int color_picker_advanced_component;
}
public static final class drawable {
+ public static int color_button_background;
public static int color_picker_advanced_select_handle;
}
public static final class style {
@@ -61,5 +72,6 @@ public final class R {
public static final class dimen {
public static int autofill_text_height;
public static int autofill_text_divider_height;
+ public static int color_button_height;
}
}
diff --git a/ui/android/java/src/org/chromium/ui/ColorPickerAdvanced.java b/ui/android/java/src/org/chromium/ui/ColorPickerAdvanced.java
index 91800eaa8f..29b4e1fd46 100644
--- a/ui/android/java/src/org/chromium/ui/ColorPickerAdvanced.java
+++ b/ui/android/java/src/org/chromium/ui/ColorPickerAdvanced.java
@@ -9,7 +9,6 @@ import android.graphics.Color;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.accessibility.AccessibilityEvent;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
@@ -70,7 +69,6 @@ public class ColorPickerAdvanced extends LinearLayout implements OnSeekBarChange
SATURATION_SEEK_BAR_MAX, this);
mValueDetails = createAndAddNewGradient(R.string.color_picker_value,
VALUE_SEEK_BAR_MAX, this);
-
refreshGradientComponents();
}
diff --git a/ui/android/java/src/org/chromium/ui/ColorPickerAdvancedComponent.java b/ui/android/java/src/org/chromium/ui/ColorPickerAdvancedComponent.java
index 1e679d5fe8..c868f328a3 100644
--- a/ui/android/java/src/org/chromium/ui/ColorPickerAdvancedComponent.java
+++ b/ui/android/java/src/org/chromium/ui/ColorPickerAdvancedComponent.java
@@ -12,6 +12,7 @@ import android.view.View;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
+
import org.chromium.base.ApiCompatibilityUtils;
/**
diff --git a/ui/android/java/src/org/chromium/ui/ColorPickerDialog.java b/ui/android/java/src/org/chromium/ui/ColorPickerDialog.java
index 58f1e0a302..f6d3ace5cb 100644
--- a/ui/android/java/src/org/chromium/ui/ColorPickerDialog.java
+++ b/ui/android/java/src/org/chromium/ui/ColorPickerDialog.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -35,11 +35,14 @@ public class ColorPickerDialog extends AlertDialog implements OnColorChangedList
/**
* @param context The context the dialog is to run in.
- * @param theme The theme to display the dialog in.
* @param listener The object to notify when the color is set.
* @param color The initial color to set.
+ * @param suggestions The list of suggestions.
*/
- public ColorPickerDialog(Context context, OnColorChangedListener listener, int color) {
+ public ColorPickerDialog(Context context,
+ OnColorChangedListener listener,
+ int color,
+ ColorSuggestion[] suggestions) {
super(context, 0);
mListener = listener;
@@ -110,7 +113,7 @@ public class ColorPickerDialog extends AlertDialog implements OnColorChangedList
// Initialize simple color view (default view).
mSimpleColorPicker = (ColorPickerSimple) content.findViewById(R.id.color_picker_simple);
- mSimpleColorPicker.init(this);
+ mSimpleColorPicker.init(suggestions, this);
updateCurrentColor(mInitialColor);
}
@@ -136,8 +139,8 @@ public class ColorPickerDialog extends AlertDialog implements OnColorChangedList
View buttonBorder = findViewById(R.id.more_colors_button_border);
buttonBorder.setVisibility(View.GONE);
- View simpleViewBorder = findViewById(R.id.color_picker_simple_border);
- simpleViewBorder.setVisibility(View.GONE);
+ View simpleView = findViewById(R.id.color_picker_simple);
+ simpleView.setVisibility(View.GONE);
mAdvancedColorPicker.setVisibility(View.VISIBLE);
mAdvancedColorPicker.setListener(this);
@@ -148,9 +151,7 @@ public class ColorPickerDialog extends AlertDialog implements OnColorChangedList
* Tries to notify any listeners that the color has been set.
*/
private void tryNotifyColorSet(int color) {
- if (mListener != null) {
- mListener.onColorChanged(color);
- }
+ if (mListener != null) mListener.onColorChanged(color);
}
/**
@@ -159,8 +160,6 @@ public class ColorPickerDialog extends AlertDialog implements OnColorChangedList
*/
private void updateCurrentColor(int color) {
mCurrentColor = color;
- if (mCurrentColorView != null) {
- mCurrentColorView.setBackgroundColor(color);
- }
+ if (mCurrentColorView != null) mCurrentColorView.setBackgroundColor(color);
}
}
diff --git a/ui/android/java/src/org/chromium/ui/ColorPickerMoreButton.java b/ui/android/java/src/org/chromium/ui/ColorPickerMoreButton.java
index a982afd9e5..849c4d8182 100644
--- a/ui/android/java/src/org/chromium/ui/ColorPickerMoreButton.java
+++ b/ui/android/java/src/org/chromium/ui/ColorPickerMoreButton.java
@@ -7,7 +7,6 @@ import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
-import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.widget.Button;
diff --git a/ui/android/java/src/org/chromium/ui/ColorPickerSimple.java b/ui/android/java/src/org/chromium/ui/ColorPickerSimple.java
index 979405a407..69b880ea33 100644
--- a/ui/android/java/src/org/chromium/ui/ColorPickerSimple.java
+++ b/ui/android/java/src/org/chromium/ui/ColorPickerSimple.java
@@ -1,50 +1,45 @@
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+
package org.chromium.ui;
import android.content.Context;
-import android.graphics.Canvas;
import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Rect;
import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
+import android.widget.ListView;
+import org.chromium.ui.ColorSuggestionListAdapter.OnColorSuggestionClickListener;
/**
* Draws a grid of (predefined) colors and allows the user to choose one of
* those colors.
*/
-public class ColorPickerSimple extends View {
- private static final int ROW_COUNT = 2;
-
- private static final int COLUMN_COUNT = 4;
-
- private static final int GRID_CELL_COUNT = ROW_COUNT * COLUMN_COUNT;
-
- private static final int[] COLORS = { Color.RED,
- Color.CYAN,
- Color.BLUE,
- Color.GREEN,
- Color.MAGENTA,
- Color.YELLOW,
- Color.BLACK,
- Color.WHITE
- };
-
- private Paint mBorderPaint;
-
- private Rect[] mBounds;
-
- private Paint[] mPaints;
-
- private OnColorChangedListener mOnColorTouchedListener;
-
- private int mLastTouchedXPosition;
-
- private int mLastTouchedYPosition;
+public class ColorPickerSimple extends ListView implements OnColorSuggestionClickListener {
+
+ private OnColorChangedListener mOnColorChangedListener;
+
+ private static final int[] DEFAULT_COLORS = {
+ Color.RED,
+ Color.CYAN,
+ Color.BLUE,
+ Color.GREEN,
+ Color.MAGENTA,
+ Color.YELLOW,
+ Color.BLACK,
+ Color.WHITE
+ };
+
+ private static final int[] DEFAULT_COLOR_LABEL_IDS = {
+ R.string.color_picker_button_red,
+ R.string.color_picker_button_cyan,
+ R.string.color_picker_button_blue,
+ R.string.color_picker_button_green,
+ R.string.color_picker_button_magenta,
+ R.string.color_picker_button_yellow,
+ R.string.color_picker_button_black,
+ R.string.color_picker_button_white
+ };
public ColorPickerSimple(Context context) {
super(context);
@@ -59,131 +54,33 @@ public class ColorPickerSimple extends View {
}
/**
- * Initializes the listener and precalculates the grid and color positions.
+ * Initializes the listener and sets the adapter for the given list of suggestions. If the
+ * suggestions is null a default set of colors will be used.
*
+ * @param suggestions The list of suggestions that should be displayed.
* @param onColorChangedListener The listener that gets notified when the user touches
* a color.
*/
- public void init(OnColorChangedListener onColorChangedListener) {
- mOnColorTouchedListener = onColorChangedListener;
-
- // This will get calculated when the layout size is updated.
- mBounds = null;
-
- mPaints = new Paint[GRID_CELL_COUNT];
- for (int i = 0; i < GRID_CELL_COUNT; ++i) {
- Paint newPaint = new Paint();
- newPaint.setColor(COLORS[i]);
- mPaints[i] = newPaint;
- }
-
- mBorderPaint = new Paint();
- int borderColor = getContext().getResources().getColor(R.color.color_picker_border_color);
- mBorderPaint.setColor(borderColor);
-
- // Responds to the user touching the grid and works out which color has been chosen as
- // a result, depending on the X,Y coordinate. Note that we respond to the click event
- // here, but the onClick() method doesn't provide us with the X,Y coordinates, so we
- // track them in onTouchEvent() below. This way the grid reacts properly to touch events
- // whereas if we put this onClick() code in onTouchEvent below then we get some strange
- // interactions with the ScrollView in the parent ColorPickerDialog.
- setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mOnColorTouchedListener != null && getWidth() > 0 && getHeight() > 0) {
- int column = mLastTouchedXPosition * COLUMN_COUNT / getWidth();
- int row = mLastTouchedYPosition * ROW_COUNT / getHeight();
-
- int colorIndex = (row * COLUMN_COUNT) + column;
- if (colorIndex >= 0 && colorIndex < COLORS.length) {
- mOnColorTouchedListener.onColorChanged(COLORS[colorIndex]);
- }
- }
+ public void init(ColorSuggestion[] suggestions,
+ OnColorChangedListener onColorChangedListener) {
+ mOnColorChangedListener = onColorChangedListener;
+
+ if (suggestions == null) {
+ suggestions = new ColorSuggestion[DEFAULT_COLORS.length];
+ for (int i = 0; i < suggestions.length; ++i) {
+ suggestions[i] = new ColorSuggestion(DEFAULT_COLORS[i],
+ getContext().getString(DEFAULT_COLOR_LABEL_IDS[i]));
}
- });
- }
-
- /**
- * Draws the grid of colors, based on the rectangles calculated in onSizeChanged().
- * Also draws borders in between the colored rectangles.
- *
- * @param canvas The canvas the colors are drawn onto.
- */
- @Override
- public void onDraw(Canvas canvas) {
- if (mBounds == null || mPaints == null) {
- return;
- }
-
- canvas.drawColor(Color.WHITE);
-
- // Draw the actual colored rectangles.
- for (int i = 0; i < GRID_CELL_COUNT; ++i) {
- canvas.drawRect(mBounds[i], mPaints[i]);
- }
-
- // Draw 1px borders between the rows.
- for (int i = 0; i < ROW_COUNT - 1; ++i) {
- canvas.drawLine(0,
- mBounds[i * COLUMN_COUNT].bottom + 1,
- getWidth(),
- mBounds[i * COLUMN_COUNT].bottom + 1,
- mBorderPaint);
}
- // Draw 1px borders between the columns.
- for (int j = 0; j < COLUMN_COUNT - 1; ++j) {
- canvas.drawLine(mBounds[j].right + 1,
- 0,
- mBounds[j].right + 1,
- getHeight(),
- mBorderPaint);
- }
+ ColorSuggestionListAdapter adapter = new ColorSuggestionListAdapter(
+ getContext(), suggestions);
+ adapter.setOnColorSuggestionClickListener(this);
+ setAdapter(adapter);
}
- /**
- * Stores the X,Y coordinates of the touch so that we can use them in the onClick() listener
- * above to work out where the click was on the grid.
- *
- * @param event The MotionEvent the X,Y coordinates are retrieved from.
- */
@Override
- public boolean onTouchEvent(MotionEvent event) {
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
- mLastTouchedXPosition = (int) event.getX();
- mLastTouchedYPosition = (int) event.getY();
- }
- return super.onTouchEvent(event);
- }
-
- /**
- * Recalculates the color grid with the new sizes.
- */
- @Override
- protected void onSizeChanged(int width, int height, int oldw, int oldh) {
- calculateGrid(width, height);
- }
-
- /**
- * Calculates the sizes and positions of the cells in the grid, splitting
- * them up as evenly as possible. Leaves 3 pixels between each cell so that
- * we can draw a border between them as well, and leaves a pixel around the
- * edge.
- */
- private void calculateGrid(final int width, final int height) {
- mBounds = new Rect[GRID_CELL_COUNT];
-
- for (int i = 0; i < ROW_COUNT; ++i) {
- for (int j = 0; j < COLUMN_COUNT; ++j) {
- int left = j * (width + 1) / COLUMN_COUNT + 1;
- int right = (j + 1) * (width + 1) / COLUMN_COUNT - 2;
-
- int top = i * (height + 1) / ROW_COUNT + 1;
- int bottom = (i + 1) * (height + 1) / ROW_COUNT - 2;
-
- Rect rect = new Rect(left, top, right, bottom);
- mBounds[(i * COLUMN_COUNT) + j] = rect;
- }
- }
+ public void onColorSuggestionClick(ColorSuggestion suggestion) {
+ mOnColorChangedListener.onColorChanged(suggestion.mColor);
}
}
diff --git a/ui/android/java/src/org/chromium/ui/ColorSuggestion.java b/ui/android/java/src/org/chromium/ui/ColorSuggestion.java
new file mode 100644
index 0000000000..4e964a767d
--- /dev/null
+++ b/ui/android/java/src/org/chromium/ui/ColorSuggestion.java
@@ -0,0 +1,24 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.ui;
+
+/**
+ * Color suggestion container used to store information for each color button that will be shown in
+ * the simple color picker.
+ */
+public class ColorSuggestion {
+ final int mColor;
+ final String mLabel;
+
+ /**
+ * Constructs a color suggestion container.
+ * @param color The suggested color.
+ * @param label The label for the suggestion.
+ */
+ public ColorSuggestion(int color, String label) {
+ mColor = color;
+ mLabel = label;
+ }
+}
diff --git a/ui/android/java/src/org/chromium/ui/ColorSuggestionListAdapter.java b/ui/android/java/src/org/chromium/ui/ColorSuggestionListAdapter.java
new file mode 100644
index 0000000000..b237acbb12
--- /dev/null
+++ b/ui/android/java/src/org/chromium/ui/ColorSuggestionListAdapter.java
@@ -0,0 +1,142 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.ui;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.drawable.GradientDrawable;
+import android.graphics.drawable.LayerDrawable;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AbsListView;
+import android.widget.BaseAdapter;
+import android.widget.LinearLayout;
+
+import org.chromium.base.ApiCompatibilityUtils;
+
+/**
+ * The adapter used to populate ColorPickerSimple.
+ */
+public class ColorSuggestionListAdapter extends BaseAdapter implements View.OnClickListener {
+ private Context mContext;
+ private ColorSuggestion[] mSuggestions;
+ private OnColorSuggestionClickListener mListener;
+
+ /**
+ * The callback used to indicate the user has clicked on a suggestion.
+ */
+ public interface OnColorSuggestionClickListener {
+
+ /**
+ * Called upon a click on a suggestion.
+ *
+ * @param suggestion The suggestion that was clicked.
+ */
+ void onColorSuggestionClick(ColorSuggestion suggestion);
+ }
+
+ private static final int COLORS_PER_ROW = 4;
+
+ ColorSuggestionListAdapter(Context context, ColorSuggestion[] suggestions) {
+ mContext = context;
+ mSuggestions = suggestions;
+ }
+
+ /**
+ * Sets the listener that will be notified upon a click on a suggestion.
+ */
+ public void setOnColorSuggestionClickListener(OnColorSuggestionClickListener listener) {
+ mListener = listener;
+ }
+
+ /**
+ * Sets up the color button to represent a color suggestion.
+ *
+ * @param button The button view to set up.
+ * @param index The index of the suggestion in mSuggestions.
+ */
+ private void setUpColorButton(View button, int index) {
+ if (index >= mSuggestions.length) {
+ button.setTag(null);
+ button.setContentDescription(null);
+ button.setVisibility(View.INVISIBLE);
+ return;
+ }
+ button.setTag(mSuggestions[index]);
+ button.setVisibility(View.VISIBLE);
+ ColorSuggestion suggestion = mSuggestions[index];
+ LayerDrawable layers = (LayerDrawable) button.getBackground();
+ GradientDrawable swatch =
+ (GradientDrawable) layers.findDrawableByLayerId(R.id.color_button_swatch);
+ swatch.setColor(suggestion.mColor);
+ String description = suggestion.mLabel;
+ if (TextUtils.isEmpty(description)) {
+ description = String.format("#%06X", (0xFFFFFF & suggestion.mColor));
+ }
+ button.setContentDescription(description);
+ button.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (mListener == null) {
+ return;
+ }
+ ColorSuggestion suggestion = (ColorSuggestion) v.getTag();
+ if (suggestion == null) {
+ return;
+ }
+ mListener.onColorSuggestionClick(suggestion);
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ LinearLayout layout;
+ if (convertView != null && convertView instanceof LinearLayout) {
+ layout = (LinearLayout) convertView;
+ } else {
+ layout = new LinearLayout(mContext);
+ layout.setLayoutParams(new AbsListView.LayoutParams(
+ AbsListView.LayoutParams.MATCH_PARENT,
+ AbsListView.LayoutParams.WRAP_CONTENT));
+ layout.setOrientation(LinearLayout.HORIZONTAL);
+ layout.setBackgroundColor(Color.WHITE);
+ int buttonHeight =
+ mContext.getResources().getDimensionPixelOffset(R.dimen.color_button_height);
+ for (int i = 0; i < COLORS_PER_ROW; ++i) {
+ View button = new View(mContext);
+ LinearLayout.LayoutParams layoutParams =
+ new LinearLayout.LayoutParams(0, buttonHeight, 1f);
+ ApiCompatibilityUtils.setMarginStart(layoutParams, -1);
+ if (i == COLORS_PER_ROW - 1) {
+ ApiCompatibilityUtils.setMarginEnd(layoutParams, -1);
+ }
+ button.setLayoutParams(layoutParams);
+ button.setBackgroundResource(R.drawable.color_button_background);
+ layout.addView(button);
+ }
+ }
+ for (int i = 0; i < COLORS_PER_ROW; ++i) {
+ setUpColorButton(layout.getChildAt(i), position * COLORS_PER_ROW + i);
+ }
+ return layout;
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return null;
+ }
+
+ @Override
+ public int getCount() {
+ return (mSuggestions.length + COLORS_PER_ROW - 1) / COLORS_PER_ROW;
+ }
+}
diff --git a/ui/android/java/src/org/chromium/ui/OnColorChangedListener.java b/ui/android/java/src/org/chromium/ui/OnColorChangedListener.java
index 4caa3cf05b..c4847fa7f8 100644
--- a/ui/android/java/src/org/chromium/ui/OnColorChangedListener.java
+++ b/ui/android/java/src/org/chromium/ui/OnColorChangedListener.java
@@ -1,6 +1,7 @@
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+
package org.chromium.ui;
/**
diff --git a/ui/android/java/src/org/chromium/ui/UiUtils.java b/ui/android/java/src/org/chromium/ui/UiUtils.java
index c11d9e3741..c9c7c0c80d 100644
--- a/ui/android/java/src/org/chromium/ui/UiUtils.java
+++ b/ui/android/java/src/org/chromium/ui/UiUtils.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -28,7 +28,7 @@ public class UiUtils {
}
/** The minimum size of the bottom margin below the app to detect a keyboard. */
- private static float KEYBOARD_DETECT_BOTTOM_THRESHOLD_DP = 100;
+ private static final float KEYBOARD_DETECT_BOTTOM_THRESHOLD_DP = 100;
/**
* Shows the software keyboard if necessary.
diff --git a/ui/android/java/src/org/chromium/ui/autofill/AutofillDividerDrawable.java b/ui/android/java/src/org/chromium/ui/autofill/AutofillDividerDrawable.java
index 5bf1240781..9aa88e8af8 100644
--- a/ui/android/java/src/org/chromium/ui/autofill/AutofillDividerDrawable.java
+++ b/ui/android/java/src/org/chromium/ui/autofill/AutofillDividerDrawable.java
@@ -7,12 +7,11 @@ package org.chromium.ui.autofill;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
+import android.graphics.PixelFormat;
import android.graphics.Rect;
-import android.graphics.RectF;
import android.graphics.drawable.Drawable;
-import android.graphics.PixelFormat;
-public class AutofillDividerDrawable extends Drawable {
+class AutofillDividerDrawable extends Drawable {
private Paint mPaint;
private Rect mDividerRect;
diff --git a/ui/android/java/src/org/chromium/ui/autofill/AutofillListAdapter.java b/ui/android/java/src/org/chromium/ui/autofill/AutofillListAdapter.java
index f15b91b13d..94608af980 100644
--- a/ui/android/java/src/org/chromium/ui/autofill/AutofillListAdapter.java
+++ b/ui/android/java/src/org/chromium/ui/autofill/AutofillListAdapter.java
@@ -2,13 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
package org.chromium.ui.autofill;
import android.content.Context;
-import android.content.res.Resources;
import android.graphics.Color;
-import android.graphics.drawable.LayerDrawable;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@@ -17,9 +14,8 @@ import android.widget.AbsListView.LayoutParams;
import android.widget.ArrayAdapter;
import android.widget.TextView;
-import org.chromium.ui.R;
-
import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.ui.R;
import java.util.ArrayList;
import java.util.Set;
diff --git a/ui/android/java/src/org/chromium/ui/autofill/AutofillPopup.java b/ui/android/java/src/org/chromium/ui/autofill/AutofillPopup.java
index f290c7e96d..af6951c3ee 100644
--- a/ui/android/java/src/org/chromium/ui/autofill/AutofillPopup.java
+++ b/ui/android/java/src/org/chromium/ui/autofill/AutofillPopup.java
@@ -15,14 +15,14 @@ import android.widget.AdapterView;
import android.widget.ListPopupWindow;
import android.widget.TextView;
+import org.chromium.ui.R;
+import org.chromium.ui.base.ViewAndroidDelegate;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
-import org.chromium.ui.R;
-import org.chromium.ui.base.ViewAndroidDelegate;
-
/**
* The Autofill suggestion popup that lists relevant suggestions.
*/
@@ -81,7 +81,7 @@ public class AutofillPopup extends ListPopupWindow implements AdapterView.OnItem
AutofillPopupDelegate autofillCallback) {
super(context, null, 0, R.style.AutofillPopupWindow);
mContext = context;
- mViewAndroidDelegate = viewAndroidDelegate ;
+ mViewAndroidDelegate = viewAndroidDelegate;
mAutofillCallback = autofillCallback;
setOnItemClickListener(this);
diff --git a/ui/android/java/src/org/chromium/ui/base/Clipboard.java b/ui/android/java/src/org/chromium/ui/base/Clipboard.java
index e62c84ab84..aaa500ea6d 100644
--- a/ui/android/java/src/org/chromium/ui/base/Clipboard.java
+++ b/ui/android/java/src/org/chromium/ui/base/Clipboard.java
@@ -1,17 +1,18 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.ui.base;
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
-
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
-import android.os.Build;
-import android.text.TextUtils;
+import android.widget.Toast;
+
+import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.base.CalledByNative;
+import org.chromium.base.JNINamespace;
+import org.chromium.ui.R;
/**
* Simple proxy that provides C++ code with an access pathway to the Android
@@ -30,7 +31,7 @@ public class Clipboard {
*
* @param context for accessing the clipboard
*/
- private Clipboard(final Context context) {
+ public Clipboard(final Context context) {
mContext = context;
mClipboardManager = (ClipboardManager)
context.getSystemService(Context.CLIPBOARD_SERVICE);
@@ -77,6 +78,36 @@ public class Clipboard {
}
/**
+ * Gets the HTML text of top item on the primary clip on the Android clipboard.
+ *
+ * @return a Java string with the html text if any, or null if there is no html
+ * text or no entries on the primary clip.
+ */
+ @CalledByNative
+ private String getHTMLText() {
+ if (isHTMLClipboardSupported()) {
+ final ClipData clip = mClipboardManager.getPrimaryClip();
+ if (clip != null && clip.getItemCount() > 0) {
+ return clip.getItemAt(0).getHtmlText();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Emulates the behavior of the now-deprecated
+ * {@link android.text.ClipboardManager#setText(CharSequence)}, setting the
+ * clipboard's current primary clip to a plain-text clip that consists of
+ * the specified string.
+ *
+ * @param label will become the label of the clipboard's primary clip
+ * @param text will become the content of the clipboard's primary clip
+ */
+ public void setText(final String label, final String text) {
+ setPrimaryClipNoException(ClipData.newPlainText(label, text));
+ }
+
+ /**
* Emulates the behavior of the now-deprecated
* {@link android.text.ClipboardManager#setText(CharSequence)}, setting the
* clipboard's current primary clip to a plain-text clip that consists of
@@ -84,10 +115,9 @@ public class Clipboard {
*
* @param text will become the content of the clipboard's primary clip
*/
- @SuppressWarnings("javadoc")
@CalledByNative
- private void setText(final String text) {
- mClipboardManager.setPrimaryClip(ClipData.newPlainText(null, text));
+ public void setText(final String text) {
+ setText(null, text);
}
/**
@@ -95,34 +125,41 @@ public class Clipboard {
* of that very data. This API is only available in Android JellyBean+ and
* will be a no-operation in older versions.
*
- * @param html The HTML content to be pasted to the clipboard.
- * @param text Plain-text representation of the HTML content.
+ * @param html The HTML content to be pasted to the clipboard.
+ * @param label The Plain-text label for the HTML content.
+ * @param text Plain-text representation of the HTML content.
*/
- @CalledByNative
- private void setHTMLText(final String html, final String text) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- mClipboardManager.setPrimaryClip(
- ClipData.newHtmlText(null, text, html));
+ public void setHTMLText(final String html, final String label, final String text) {
+ if (isHTMLClipboardSupported()) {
+ setPrimaryClipNoException(ClipData.newHtmlText(label, text, html));
}
}
/**
- * Approximates the behavior of the now-deprecated
- * {@link android.text.ClipboardManager#hasText()}, returning true if and
- * only if the clipboard has a primary clip and that clip contains a plain
- * non-empty text entry (without attempting coercion - URLs and intents
- * will cause this method to return false).
+ * Writes HTML to the clipboard, together with a plain-text representation
+ * of that very data. This API is only available in Android JellyBean+ and
+ * will be a no-operation in older versions.
*
- * @return as described above
+ * @param html The HTML content to be pasted to the clipboard.
+ * @param text Plain-text representation of the HTML content.
*/
- @SuppressWarnings("javadoc")
@CalledByNative
- private boolean hasPlainText() {
- final ClipData clip = mClipboardManager.getPrimaryClip();
- if (clip != null && clip.getItemCount() > 0) {
- final CharSequence text = clip.getItemAt(0).getText();
- return !TextUtils.isEmpty(text);
+ public void setHTMLText(final String html, final String text) {
+ setHTMLText(html, null, text);
+ }
+
+ @CalledByNative
+ private static boolean isHTMLClipboardSupported() {
+ return ApiCompatibilityUtils.isHTMLClipboardSupported();
+ }
+
+ private void setPrimaryClipNoException(ClipData clip) {
+ try {
+ mClipboardManager.setPrimaryClip(clip);
+ } catch (Exception ex) {
+ // Ignore any exceptions here as certain devices have bugs and will fail.
+ String text = mContext.getString(R.string.copy_to_clipboard_failure_message);
+ Toast.makeText(mContext, text, Toast.LENGTH_SHORT).show();
}
- return false;
}
}
diff --git a/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java b/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java
index 1095b649a6..839a860248 100644
--- a/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java
+++ b/ui/android/java/src/org/chromium/ui/base/LocalizationUtils.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
index 4e269b0ad0..6d85a354c2 100644
--- a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
+++ b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,7 +7,6 @@ package org.chromium.ui.base;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
-import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
@@ -16,7 +15,6 @@ import android.text.TextUtils;
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
import org.chromium.ui.R;
-import org.chromium.ui.base.WindowAndroid;
import java.io.File;
import java.util.ArrayList;
@@ -193,7 +191,7 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{
}
private boolean shouldShowImageTypes() {
- return shouldShowTypes(ALL_IMAGE_TYPES,IMAGE_TYPE);
+ return shouldShowTypes(ALL_IMAGE_TYPES, IMAGE_TYPE);
}
private boolean shouldShowVideoTypes() {
diff --git a/ui/android/java/src/org/chromium/ui/base/ViewAndroid.java b/ui/android/java/src/org/chromium/ui/base/ViewAndroid.java
index e91911cc33..c765a56da3 100644
--- a/ui/android/java/src/org/chromium/ui/base/ViewAndroid.java
+++ b/ui/android/java/src/org/chromium/ui/base/ViewAndroid.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,8 +7,6 @@ package org.chromium.ui.base;
import android.view.View;
import org.chromium.base.JNINamespace;
-import org.chromium.ui.base.ViewAndroidDelegate;
-import org.chromium.ui.base.WindowAndroid;
/**
* From the Chromium architecture point of view, ViewAndroid and its native counterpart
diff --git a/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java b/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java
index 34d280a10e..6d3694cc9b 100644
--- a/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java
+++ b/ui/android/java/src/org/chromium/ui/base/ViewAndroidDelegate.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
diff --git a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java
index fc4dfeaccc..44469e57c1 100644
--- a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java
+++ b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -12,11 +12,11 @@ import android.util.Log;
import android.util.SparseArray;
import android.widget.Toast;
-import java.util.HashMap;
-
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
+import java.util.HashMap;
+
/**
* The window base class that has the minimum functionality.
*/
@@ -35,7 +35,7 @@ public class WindowAndroid {
protected HashMap<Integer, String> mIntentErrors;
/**
- * @param context, the application context..
+ * @param context The application context.
*/
public WindowAndroid(Context context) {
assert context == context.getApplicationContext();
@@ -175,7 +175,7 @@ public class WindowAndroid {
/**
* Tests that an activity is available to handle the passed in intent.
- * @param Intent the intent to check.
+ * @param intent The intent to check.
* @return True if an activity is available to process this intent when started, meaning that
* Context.startActivity will not throw ActivityNotFoundException.
*/
diff --git a/ui/android/java/src/org/chromium/ui/gfx/BitmapHelper.java b/ui/android/java/src/org/chromium/ui/gfx/BitmapHelper.java
index 341eba0729..9138902236 100644
--- a/ui/android/java/src/org/chromium/ui/gfx/BitmapHelper.java
+++ b/ui/android/java/src/org/chromium/ui/gfx/BitmapHelper.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -7,9 +7,13 @@ package org.chromium.ui.gfx;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
+/**
+ * Helper class to decode and sample down bitmap resources.
+ */
@JNINamespace("gfx")
public class BitmapHelper {
@CalledByNative
diff --git a/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java b/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java
index 89325fb96f..188c405c7c 100644
--- a/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java
+++ b/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java
@@ -1,11 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.ui.gfx;
-import android.content.Context;
import android.content.ComponentCallbacks;
+import android.content.Context;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.os.Build;
@@ -27,152 +27,153 @@ import org.chromium.base.JNINamespace;
public class DeviceDisplayInfo {
- private final Context mAppContext;
- private final WindowManager mWinManager;
-
- private DeviceDisplayInfo(Context context) {
- mAppContext = context.getApplicationContext();
- mWinManager = (WindowManager) mAppContext.getSystemService(Context.WINDOW_SERVICE);
- }
-
- /**
- * @return Display height in physical pixels.
- */
- @CalledByNative
- public int getDisplayHeight() {
- return getMetrics().heightPixels;
- }
-
- /**
- * @return Display width in physical pixels.
- */
- @CalledByNative
- public int getDisplayWidth() {
- return getMetrics().widthPixels;
- }
-
- @SuppressWarnings("deprecation")
- private int getPixelFormat() {
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
- return getDisplay().getPixelFormat();
- }
- // JellyBean MR1 and later always uses RGBA_8888.
- return PixelFormat.RGBA_8888;
- }
-
- /**
- * @return Bits per pixel.
- */
- @CalledByNative
- public int getBitsPerPixel() {
- int format = getPixelFormat();
- PixelFormat info = new PixelFormat();
- PixelFormat.getPixelFormatInfo(format, info);
- return info.bitsPerPixel;
- }
-
- /**
- * @return Bits per component.
- */
- @SuppressWarnings("deprecation")
- @CalledByNative
- public int getBitsPerComponent() {
- int format = getPixelFormat();
- switch (format) {
- case PixelFormat.RGBA_4444:
- return 4;
-
- case PixelFormat.RGBA_5551:
- return 5;
-
- case PixelFormat.RGBA_8888:
- case PixelFormat.RGBX_8888:
- case PixelFormat.RGB_888:
- return 8;
-
- case PixelFormat.RGB_332:
- return 2;
-
- case PixelFormat.RGB_565:
- return 5;
-
- // Non-RGB formats.
- case PixelFormat.A_8:
- case PixelFormat.LA_88:
- case PixelFormat.L_8:
- return 0;
-
- // Unknown format. Use 8 as a sensible default.
- default:
- return 8;
- }
- }
-
- /**
- * @return A scaling factor for the Density Independent Pixel unit.
- * 1.0 is 160dpi, 0.75 is 120dpi, 2.0 is 320dpi.
- */
- @CalledByNative
- public double getDIPScale() {
- return getMetrics().density;
- }
-
- /**
- * @return Smallest screen size in density-independent pixels that the
- * application will see, regardless of orientation.
- */
- @CalledByNative
- private int getSmallestDIPWidth() {
- return mAppContext.getResources().getConfiguration().smallestScreenWidthDp;
- }
-
- private void registerListener() {
- mAppContext.registerComponentCallbacks(
- new ComponentCallbacks() {
- @Override
- public void onConfigurationChanged(Configuration configuration) {
- updateNativeSharedDisplayInfo();
- }
-
- @Override
- public void onLowMemory() {
- }
- });
- }
-
- private void updateNativeSharedDisplayInfo() {
- nativeUpdateSharedDeviceDisplayInfo(getDisplayHeight(),
- getDisplayWidth(), getBitsPerPixel(), getBitsPerComponent(),
- getDIPScale(), getSmallestDIPWidth());
- }
-
- private Display getDisplay() {
- return mWinManager.getDefaultDisplay();
- }
-
- private DisplayMetrics getMetrics() {
- return mAppContext.getResources().getDisplayMetrics();
- }
-
- /**
- * Creates DeviceDisplayInfo for a given Context.
- * @param context A context to use.
- * @return DeviceDisplayInfo associated with a given Context.
- */
- public static DeviceDisplayInfo create(Context context) {
- return new DeviceDisplayInfo(context);
- }
-
- @CalledByNative
- private static DeviceDisplayInfo createWithListener(Context context) {
- DeviceDisplayInfo deviceDisplayInfo = new DeviceDisplayInfo(context);
- deviceDisplayInfo.registerListener();
- return deviceDisplayInfo;
- }
-
- private native void nativeUpdateSharedDeviceDisplayInfo(int displayHeight,
- int displayWidth, int bitsPerPixel,
- int bitsPerComponent, double dipScale,
- int smallestDIPWidth);
+ private final Context mAppContext;
+ private final WindowManager mWinManager;
+
+ private DeviceDisplayInfo(Context context) {
+ mAppContext = context.getApplicationContext();
+ mWinManager = (WindowManager) mAppContext.getSystemService(Context.WINDOW_SERVICE);
+ }
+
+ /**
+ * @return Display height in physical pixels.
+ */
+ @CalledByNative
+ public int getDisplayHeight() {
+ return getMetrics().heightPixels;
+ }
+
+ /**
+ * @return Display width in physical pixels.
+ */
+ @CalledByNative
+ public int getDisplayWidth() {
+ return getMetrics().widthPixels;
+ }
+
+ @SuppressWarnings("deprecation")
+ private int getPixelFormat() {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ return getDisplay().getPixelFormat();
+ }
+ // JellyBean MR1 and later always uses RGBA_8888.
+ return PixelFormat.RGBA_8888;
+ }
+
+ /**
+ * @return Bits per pixel.
+ */
+ @CalledByNative
+ public int getBitsPerPixel() {
+ int format = getPixelFormat();
+ PixelFormat info = new PixelFormat();
+ PixelFormat.getPixelFormatInfo(format, info);
+ return info.bitsPerPixel;
+ }
+
+ /**
+ * @return Bits per component.
+ */
+ @SuppressWarnings("deprecation")
+ @CalledByNative
+ public int getBitsPerComponent() {
+ int format = getPixelFormat();
+ switch (format) {
+ case PixelFormat.RGBA_4444:
+ return 4;
+
+ case PixelFormat.RGBA_5551:
+ return 5;
+
+ case PixelFormat.RGBA_8888:
+ case PixelFormat.RGBX_8888:
+ case PixelFormat.RGB_888:
+ return 8;
+
+ case PixelFormat.RGB_332:
+ return 2;
+
+ case PixelFormat.RGB_565:
+ return 5;
+
+ // Non-RGB formats.
+ case PixelFormat.A_8:
+ case PixelFormat.LA_88:
+ case PixelFormat.L_8:
+ return 0;
+
+ // Unknown format. Use 8 as a sensible default.
+ default:
+ return 8;
+ }
+ }
+
+ /**
+ * @return A scaling factor for the Density Independent Pixel unit. 1.0 is
+ * 160dpi, 0.75 is 120dpi, 2.0 is 320dpi.
+ */
+ @CalledByNative
+ public double getDIPScale() {
+ return getMetrics().density;
+ }
+
+ /**
+ * @return Smallest screen size in density-independent pixels that the
+ * application will see, regardless of orientation.
+ */
+ @CalledByNative
+ private int getSmallestDIPWidth() {
+ return mAppContext.getResources().getConfiguration().smallestScreenWidthDp;
+ }
+
+ private void registerListener() {
+ mAppContext.registerComponentCallbacks(
+ new ComponentCallbacks() {
+ @Override
+ public void onConfigurationChanged(Configuration configuration) {
+ updateNativeSharedDisplayInfo();
+ }
+
+ @Override
+ public void onLowMemory() {
+ }
+ });
+ }
+
+ private void updateNativeSharedDisplayInfo() {
+ nativeUpdateSharedDeviceDisplayInfo(getDisplayHeight(),
+ getDisplayWidth(), getBitsPerPixel(), getBitsPerComponent(),
+ getDIPScale(), getSmallestDIPWidth());
+ }
+
+ private Display getDisplay() {
+ return mWinManager.getDefaultDisplay();
+ }
+
+ private DisplayMetrics getMetrics() {
+ return mAppContext.getResources().getDisplayMetrics();
+ }
+
+ /**
+ * Creates DeviceDisplayInfo for a given Context.
+ *
+ * @param context A context to use.
+ * @return DeviceDisplayInfo associated with a given Context.
+ */
+ public static DeviceDisplayInfo create(Context context) {
+ return new DeviceDisplayInfo(context);
+ }
+
+ @CalledByNative
+ private static DeviceDisplayInfo createWithListener(Context context) {
+ DeviceDisplayInfo deviceDisplayInfo = new DeviceDisplayInfo(context);
+ deviceDisplayInfo.registerListener();
+ return deviceDisplayInfo;
+ }
+
+ private native void nativeUpdateSharedDeviceDisplayInfo(int displayHeight,
+ int displayWidth, int bitsPerPixel,
+ int bitsPerComponent, double dipScale,
+ int smallestDIPWidth);
}
diff --git a/ui/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java b/ui/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java
index 6e2d6feb7a..bc57e1faca 100644
--- a/ui/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java
+++ b/ui/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java
@@ -1,4 +1,4 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
diff --git a/ui/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java b/ui/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java
index 227c27fb9a..53d33036ed 100644
--- a/ui/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java
+++ b/ui/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java
@@ -6,6 +6,7 @@ package org.chromium.ui.gl;
import android.graphics.SurfaceTexture;
import android.os.Build;
+import android.util.Log;
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
@@ -16,6 +17,9 @@ import org.chromium.base.JNINamespace;
*/
@JNINamespace("gfx")
class SurfaceTexturePlatformWrapper {
+
+ private static final String TAG = "SurfaceTexturePlatformWrapper";
+
@CalledByNative
private static SurfaceTexture create(int textureId) {
return new SurfaceTexture(textureId);
@@ -30,13 +34,17 @@ class SurfaceTexturePlatformWrapper {
@CalledByNative
private static void setFrameAvailableCallback(SurfaceTexture surfaceTexture,
long nativeSurfaceTextureListener) {
- surfaceTexture.setOnFrameAvailableListener(
- new SurfaceTextureListener(nativeSurfaceTextureListener));
+ surfaceTexture.setOnFrameAvailableListener(
+ new SurfaceTextureListener(nativeSurfaceTextureListener));
}
@CalledByNative
private static void updateTexImage(SurfaceTexture surfaceTexture) {
- surfaceTexture.updateTexImage();
+ try {
+ surfaceTexture.updateTexImage();
+ } catch (RuntimeException e) {
+ Log.e(TAG, "Error calling updateTexImage", e);
+ }
}
@CalledByNative
diff --git a/ui/android/java/strings/android_ui_strings.grd b/ui/android/java/strings/android_ui_strings.grd
index ee2f2d4cdf..4840aebc16 100644
--- a/ui/android/java/strings/android_ui_strings.grd
+++ b/ui/android/java/strings/android_ui_strings.grd
@@ -29,6 +29,33 @@
<message desc="Title of ColorPicker dialog. [CHAR-LIMIT=20]" name="IDS_COLOR_PICKER_DIALOG_TITLE">
Select color
</message>
+ <message desc="Accessibility label for button to select the red color." name="IDS_COLOR_PICKER_BUTTON_RED">
+ Red
+ </message>
+ <message desc="Accessibility label for button to select the cyan color." name="IDS_COLOR_PICKER_BUTTON_CYAN">
+ Cyan
+ </message>
+ <message desc="Accessibility label for button to select the blue color." name="IDS_COLOR_PICKER_BUTTON_BLUE">
+ Blue
+ </message>
+ <message desc="Accessibility label for button to select the green color." name="IDS_COLOR_PICKER_BUTTON_GREEN">
+ Green
+ </message>
+ <message desc="Accessibility label for button to select the magenta color." name="IDS_COLOR_PICKER_BUTTON_MAGENTA">
+ Magenta
+ </message>
+ <message desc="Accessibility label for button to select the yellow color." name="IDS_COLOR_PICKER_BUTTON_YELLOW">
+ Yellow
+ </message>
+ <message desc="Accessibility label for button to select the black color." name="IDS_COLOR_PICKER_BUTTON_BLACK">
+ Black
+ </message>
+ <message desc="Accessibility label for button to select the white color." name="IDS_COLOR_PICKER_BUTTON_WHITE">
+ White
+ </message>
+ <message desc="Notification for when copying to the clipboard fails. [CHAR-LIMIT=64]" name="IDS_COPY_TO_CLIPBOARD_FAILURE_MESSAGE">
+ Failed to copy to the clipboard
+ </message>
</messages>
</release>
<translations>
diff --git a/ui/android/window_open_disposition_java.target.darwin-arm.mk b/ui/android/window_open_disposition_java.target.darwin-arm.mk
index c2c8af9158..d15e2960da 100644
--- a/ui/android/window_open_disposition_java.target.darwin-arm.mk
+++ b/ui/android/window_open_disposition_java.target.darwin-arm.mk
@@ -77,6 +77,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -86,9 +87,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -156,6 +159,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -165,9 +169,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/android/window_open_disposition_java.target.darwin-mips.mk b/ui/android/window_open_disposition_java.target.darwin-mips.mk
index 27da2ae8fd..85f13daa89 100644
--- a/ui/android/window_open_disposition_java.target.darwin-mips.mk
+++ b/ui/android/window_open_disposition_java.target.darwin-mips.mk
@@ -76,6 +76,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -85,9 +86,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -154,6 +157,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -163,9 +167,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/android/window_open_disposition_java.target.darwin-x86.mk b/ui/android/window_open_disposition_java.target.darwin-x86.mk
index a959595745..b1d0c85b1a 100644
--- a/ui/android/window_open_disposition_java.target.darwin-x86.mk
+++ b/ui/android/window_open_disposition_java.target.darwin-x86.mk
@@ -79,6 +79,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -88,9 +89,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -161,6 +164,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -170,9 +174,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/android/window_open_disposition_java.target.linux-arm.mk b/ui/android/window_open_disposition_java.target.linux-arm.mk
index c2c8af9158..d15e2960da 100644
--- a/ui/android/window_open_disposition_java.target.linux-arm.mk
+++ b/ui/android/window_open_disposition_java.target.linux-arm.mk
@@ -77,6 +77,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -86,9 +87,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -156,6 +159,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -165,9 +169,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/android/window_open_disposition_java.target.linux-mips.mk b/ui/android/window_open_disposition_java.target.linux-mips.mk
index 27da2ae8fd..85f13daa89 100644
--- a/ui/android/window_open_disposition_java.target.linux-mips.mk
+++ b/ui/android/window_open_disposition_java.target.linux-mips.mk
@@ -76,6 +76,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -85,9 +86,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -154,6 +157,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -163,9 +167,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/android/window_open_disposition_java.target.linux-x86.mk b/ui/android/window_open_disposition_java.target.linux-x86.mk
index a959595745..b1d0c85b1a 100644
--- a/ui/android/window_open_disposition_java.target.linux-x86.mk
+++ b/ui/android/window_open_disposition_java.target.linux-x86.mk
@@ -79,6 +79,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -88,9 +89,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -161,6 +164,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -170,9 +174,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/app_list/app_list.gyp b/ui/app_list/app_list.gyp
index b4339f734d..e766c21808 100644
--- a/ui/app_list/app_list.gyp
+++ b/ui/app_list/app_list.gyp
@@ -80,6 +80,9 @@
'search_result.h',
'signin_delegate.cc',
'signin_delegate.h',
+ 'speech_ui_model.cc',
+ 'speech_ui_model.h',
+ 'speech_ui_model_observer.h',
'views/apps_container_view.cc',
'views/apps_container_view.h',
'views/app_list_background.cc',
@@ -95,6 +98,7 @@
'views/app_list_menu_views.h',
'views/app_list_view.cc',
'views/app_list_view.h',
+ 'views/app_list_view_observer.h',
'views/apps_grid_view.cc',
'views/apps_grid_view.h',
'views/apps_grid_view_delegate.h',
@@ -124,6 +128,8 @@
'views/search_result_view_delegate.h',
'views/signin_view.cc',
'views/signin_view.h',
+ 'views/speech_view.cc',
+ 'views/speech_view.h',
],
'conditions': [
['use_aura==1', {
@@ -209,6 +215,7 @@
'cocoa/signin_view_controller_unittest.mm',
'cocoa/test/apps_grid_controller_test_helper.h',
'cocoa/test/apps_grid_controller_test_helper.mm',
+ 'views/app_list_main_view_unittest.cc',
'views/apps_grid_view_unittest.cc',
'views/test/apps_grid_view_test_api.cc',
'views/test/apps_grid_view_test_api.h',
diff --git a/ui/app_list/app_list_model.cc b/ui/app_list/app_list_model.cc
index 535fff27c3..b37ec610e4 100644
--- a/ui/app_list/app_list_model.cc
+++ b/ui/app_list/app_list_model.cc
@@ -15,7 +15,6 @@ AppListModel::AppListModel()
: item_list_(new AppListItemList),
search_box_(new SearchBoxModel),
results_(new SearchResults),
- signed_in_(false),
status_(STATUS_NORMAL) {
}
@@ -40,14 +39,4 @@ void AppListModel::SetStatus(Status status) {
OnAppListModelStatusChanged());
}
-void AppListModel::SetSignedIn(bool signed_in) {
- if (signed_in_ == signed_in)
- return;
-
- signed_in_ = signed_in;
- FOR_EACH_OBSERVER(AppListModelObserver,
- observers_,
- OnAppListModelSigninStatusChanged());
-}
-
} // namespace app_list
diff --git a/ui/app_list/app_list_model.h b/ui/app_list/app_list_model.h
index 9b3235f1d3..a0d2a39ec6 100644
--- a/ui/app_list/app_list_model.h
+++ b/ui/app_list/app_list_model.h
@@ -40,20 +40,17 @@ class APP_LIST_EXPORT AppListModel {
void RemoveObserver(AppListModelObserver* observer);
void SetStatus(Status status);
- void SetSignedIn(bool signed_in);
AppListItemList* item_list() { return item_list_.get(); }
SearchBoxModel* search_box() { return search_box_.get(); }
SearchResults* results() { return results_.get(); }
Status status() const { return status_; }
- bool signed_in() const { return signed_in_; }
private:
scoped_ptr<AppListItemList> item_list_;
scoped_ptr<SearchBoxModel> search_box_;
scoped_ptr<SearchResults> results_;
- bool signed_in_;
Status status_;
ObserverList<AppListModelObserver> observers_;
diff --git a/ui/app_list/app_list_model_observer.h b/ui/app_list/app_list_model_observer.h
index ddd0f743d2..8810c821c5 100644
--- a/ui/app_list/app_list_model_observer.h
+++ b/ui/app_list/app_list_model_observer.h
@@ -14,9 +14,6 @@ class APP_LIST_EXPORT AppListModelObserver {
// Invoked when AppListModel's status has changed.
virtual void OnAppListModelStatusChanged() {}
- // Invoked when AppListModel's current user's signin status has changed.
- virtual void OnAppListModelSigninStatusChanged() {}
-
protected:
virtual ~AppListModelObserver() {}
};
diff --git a/ui/app_list/app_list_model_unittest.cc b/ui/app_list/app_list_model_unittest.cc
index 6fbf912726..24a7145871 100644
--- a/ui/app_list/app_list_model_unittest.cc
+++ b/ui/app_list/app_list_model_unittest.cc
@@ -24,7 +24,6 @@ class TestObserver : public AppListModelObserver,
public:
TestObserver()
: status_changed_count_(0),
- signin_changed_count_(0),
items_added_(0),
items_removed_(0),
items_moved_(0) {
@@ -37,10 +36,6 @@ class TestObserver : public AppListModelObserver,
++status_changed_count_;
}
- virtual void OnAppListModelSigninStatusChanged() OVERRIDE {
- ++signin_changed_count_;
- }
-
// AppListItemListObserver
virtual void OnListItemAdded(size_t index, AppListItemModel* item) OVERRIDE {
items_added_++;
@@ -123,19 +118,6 @@ TEST_F(AppListModelTest, SetStatus) {
EXPECT_EQ(2, observer_.status_changed_count());
}
-TEST_F(AppListModelTest, SetSignedIn) {
- EXPECT_TRUE(model_.signed_in());
- model_.SetSignedIn(false);
- EXPECT_EQ(1, observer_.signin_changed_count());
- EXPECT_FALSE(model_.signed_in());
- model_.SetSignedIn(true);
- EXPECT_EQ(2, observer_.signin_changed_count());
- EXPECT_TRUE(model_.signed_in());
- // Set the same signin state, no change is expected.
- model_.SetSignedIn(true);
- EXPECT_EQ(2, observer_.signin_changed_count());
-}
-
TEST_F(AppListModelTest, AppsObserver) {
const size_t num_apps = 2;
model_.PopulateApps(num_apps);
@@ -174,12 +156,11 @@ TEST_F(AppListModelTest, ModelAddItem) {
ASSERT_EQ(num_apps + 1, model_.item_list()->item_count());
EXPECT_EQ("Added Item 1", model_.item_list()->item_at(num_apps)->id());
// Add an item between items 0 and 1.
- app_list::AppListItemModel* item0 = model_.item_list()->item_at(0);
+ AppListItemModel* item0 = model_.item_list()->item_at(0);
ASSERT_TRUE(item0);
- app_list::AppListItemModel* item1 = model_.item_list()->item_at(1);
+ AppListItemModel* item1 = model_.item_list()->item_at(1);
ASSERT_TRUE(item1);
- app_list::AppListItemModel* item2 =
- model_.CreateItem("Added Item 2", "Added Item 2");
+ AppListItemModel* item2 = model_.CreateItem("Added Item 2", "Added Item 2");
item2->set_position(item0->position().CreateBetween(item1->position()));
model_.item_list()->AddItem(item2);
EXPECT_EQ(num_apps + 2, model_.item_list()->item_count());
diff --git a/ui/app_list/app_list_view_delegate.h b/ui/app_list/app_list_view_delegate.h
index 4da51a67ee..235e126b51 100644
--- a/ui/app_list/app_list_view_delegate.h
+++ b/ui/app_list/app_list_view_delegate.h
@@ -29,8 +29,10 @@ namespace app_list {
class AppListItemModel;
class AppListModel;
+class AppListViewDelegateObserver;
class SearchResult;
class SigninDelegate;
+class SpeechUIModel;
class APP_LIST_EXPORT AppListViewDelegate {
public:
@@ -71,6 +73,9 @@ class APP_LIST_EXPORT AppListViewDelegate {
// Gets the SigninDelegate for the app list. Owned by the AppListViewDelegate.
virtual SigninDelegate* GetSigninDelegate() = 0;
+ // Gets the SpeechUIModel for the app list. Owned by the AppListViewDelegate.
+ virtual SpeechUIModel* GetSpeechUI() = 0;
+
// Gets a path to a shortcut for the given app. Returns asynchronously as the
// shortcut may not exist yet.
virtual void GetShortcutPathForApp(
@@ -124,6 +129,10 @@ class APP_LIST_EXPORT AppListViewDelegate {
// Returns the list of users (for AppListMenu).
virtual const Users& GetUsers() const = 0;
+
+ // Adds/removes an observer for profile changes.
+ virtual void AddObserver(AppListViewDelegateObserver* observer) {}
+ virtual void RemoveObserver(AppListViewDelegateObserver* observer) {}
};
} // namespace app_list
diff --git a/ui/app_list/app_list_view_delegate_observer.h b/ui/app_list/app_list_view_delegate_observer.h
new file mode 100644
index 0000000000..a612334e69
--- /dev/null
+++ b/ui/app_list/app_list_view_delegate_observer.h
@@ -0,0 +1,24 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_APP_LIST_APP_LIST_VIEW_DELEGATE_OBSERVER_H_
+#define UI_APP_LIST_APP_LIST_VIEW_DELEGATE_OBSERVER_H_
+
+#include "ui/app_list/app_list_export.h"
+
+namespace app_list {
+
+class APP_LIST_EXPORT AppListViewDelegateObserver {
+ public:
+ // Invoked when the Profiles shown on the app list change, or the active
+ // profile changes its signin status.
+ virtual void OnProfilesChanged() = 0;
+
+ protected:
+ virtual ~AppListViewDelegateObserver() {}
+};
+
+} // namespace app_list
+
+#endif // UI_APP_LIST_APP_LIST_VIEW_DELEGATE_OBSERVER_H_
diff --git a/ui/app_list/cocoa/app_list_view_controller.h b/ui/app_list/cocoa/app_list_view_controller.h
index 3573ab1264..e4ffcbcb6d 100644
--- a/ui/app_list/cocoa/app_list_view_controller.h
+++ b/ui/app_list/cocoa/app_list_view_controller.h
@@ -51,14 +51,19 @@ APP_LIST_EXPORT
BOOL showingSearchResults_;
}
+@property(readonly, nonatomic) AppsSearchBoxController*
+ searchBoxController;
+
- (app_list::AppListViewDelegate*)delegate;
- (void)setDelegate:(scoped_ptr<app_list::AppListViewDelegate>)newDelegate;
-- (void)onSigninStatusChanged;
+- (void)onProfilesChanged;
@end
@interface AppListViewController (TestingAPI)
+@property(nonatomic, readonly) BOOL showingSearchResults;
+
- (AppsGridController*)appsGridController;
- (NSSegmentedControl*)pagerControl;
- (NSView*)backgroundView;
diff --git a/ui/app_list/cocoa/app_list_view_controller.mm b/ui/app_list/cocoa/app_list_view_controller.mm
index 51a71cfa94..ad73540f6e 100644
--- a/ui/app_list/cocoa/app_list_view_controller.mm
+++ b/ui/app_list/cocoa/app_list_view_controller.mm
@@ -10,8 +10,8 @@
#include "skia/ext/skia_utils_mac.h"
#include "ui/app_list/app_list_constants.h"
#include "ui/app_list/app_list_model.h"
-#include "ui/app_list/app_list_model_observer.h"
#include "ui/app_list/app_list_view_delegate.h"
+#include "ui/app_list/app_list_view_delegate_observer.h"
#include "ui/app_list/signin_delegate.h"
#import "ui/app_list/cocoa/app_list_pager_view.h"
#import "ui/app_list/cocoa/apps_grid_controller.h"
@@ -81,14 +81,14 @@ const NSTimeInterval kResultsAnimationDuration = 0.2;
namespace app_list {
-class AppListModelObserverBridge : public AppListModelObserver {
+class AppListModelObserverBridge : public AppListViewDelegateObserver {
public:
AppListModelObserverBridge(AppListViewController* parent);
virtual ~AppListModelObserverBridge();
private:
- // Overridden from app_list::AppListModelObserver:
- virtual void OnAppListModelSigninStatusChanged() OVERRIDE;
+ // Overridden from app_list::AppListViewDelegateObserver:
+ virtual void OnProfilesChanged() OVERRIDE;
AppListViewController* parent_; // Weak. Owns us.
@@ -98,15 +98,15 @@ class AppListModelObserverBridge : public AppListModelObserver {
AppListModelObserverBridge::AppListModelObserverBridge(
AppListViewController* parent)
: parent_(parent) {
- [[parent_ appsGridController] model]->AddObserver(this);
+ [parent_ delegate]->AddObserver(this);
}
AppListModelObserverBridge::~AppListModelObserverBridge() {
- [[parent_ appsGridController] model]->RemoveObserver(this);
+ [parent_ delegate]->RemoveObserver(this);
}
-void AppListModelObserverBridge::OnAppListModelSigninStatusChanged() {
- [parent_ onSigninStatusChanged];
+void AppListModelObserverBridge::OnProfilesChanged() {
+ [parent_ onProfilesChanged];
}
} // namespace app_list
@@ -134,6 +134,14 @@ void AppListModelObserverBridge::OnAppListModelSigninStatusChanged() {
[super dealloc];
}
+- (AppsSearchBoxController*)searchBoxController {
+ return appsSearchBoxController_;
+}
+
+- (BOOL)showingSearchResults {
+ return showingSearchResults_;
+}
+
- (AppsGridController*)appsGridController {
return appsGridController_;
}
@@ -166,7 +174,7 @@ void AppListModelObserverBridge::OnAppListModelSigninStatusChanged() {
[appsSearchResultsController_ setDelegate:self];
app_list_model_observer_bridge_.reset(
new app_list::AppListModelObserverBridge(self));
- [self onSigninStatusChanged];
+ [self onProfilesChanged];
}
-(void)loadAndSetView {
@@ -315,25 +323,22 @@ void AppListModelObserverBridge::OnAppListModelSigninStatusChanged() {
- (void)openResult:(app_list::SearchResult*)result {
if (delegate_)
delegate_->OpenSearchResult(result, 0 /* event flags */);
-
- [appsSearchBoxController_ clearSearch];
}
- (void)redoSearch {
[self modelTextDidChange];
}
-- (void)onSigninStatusChanged {
+- (void)onProfilesChanged {
[appsSearchBoxController_ rebuildMenu];
app_list::SigninDelegate* signinDelegate =
delegate_ ? delegate_->GetSigninDelegate() : NULL;
- BOOL show_signin_view =
- signinDelegate && ![appsGridController_ model]->signed_in();
+ BOOL showSigninView = signinDelegate && signinDelegate->NeedSignin();
[[signinViewController_ view] removeFromSuperview];
signinViewController_.reset();
- if (!show_signin_view) {
+ if (!showSigninView) {
[backgroundView_ setHidden:NO];
return;
}
diff --git a/ui/app_list/cocoa/app_list_view_controller_unittest.mm b/ui/app_list/cocoa/app_list_view_controller_unittest.mm
index 2f1ea39e59..0a7d82b1fa 100644
--- a/ui/app_list/cocoa/app_list_view_controller_unittest.mm
+++ b/ui/app_list/cocoa/app_list_view_controller_unittest.mm
@@ -7,22 +7,20 @@
#import "ui/app_list/cocoa/app_list_view_controller.h"
#import "ui/app_list/cocoa/apps_grid_controller.h"
#import "ui/app_list/cocoa/test/apps_grid_controller_test_helper.h"
-#include "ui/app_list/signin_delegate.h"
#include "ui/app_list/test/app_list_test_model.h"
#include "ui/app_list/test/app_list_test_view_delegate.h"
namespace app_list {
namespace test {
-class AppListViewControllerTest : public AppsGridControllerTestHelper,
- public SigninDelegate {
+class AppListViewControllerTest : public AppsGridControllerTestHelper {
public:
AppListViewControllerTest() {}
virtual void SetUp() OVERRIDE {
app_list_view_controller_.reset([[AppListViewController alloc] init]);
scoped_ptr<AppListTestViewDelegate> delegate(new AppListTestViewDelegate);
- delegate->set_test_signin_delegate(this);
+ delegate->SetSignedIn(true);
[app_list_view_controller_
setDelegate:delegate.PassAs<app_list::AppListViewDelegate>()];
SetUpWithGridController([app_list_view_controller_ appsGridController]);
@@ -45,26 +43,6 @@ class AppListViewControllerTest : public AppsGridControllerTestHelper,
setDelegate:delegate.PassAs<app_list::AppListViewDelegate>()];
}
- // SigninDelegate overrides:
- virtual bool NeedSignin() OVERRIDE { return false; }
- virtual void ShowSignin() OVERRIDE {}
- virtual void OpenLearnMore() OVERRIDE {}
- virtual void OpenSettings() OVERRIDE {}
-
- virtual base::string16 GetSigninHeading() OVERRIDE {
- return base::string16();
- }
- virtual base::string16 GetSigninText() OVERRIDE { return base::string16(); }
- virtual base::string16 GetSigninButtonText() OVERRIDE {
- return base::string16();
- }
- virtual base::string16 GetLearnMoreLinkText() OVERRIDE {
- return base::string16();
- }
- virtual base::string16 GetSettingsLinkText() OVERRIDE {
- return base::string16();
- }
-
AppListTestViewDelegate* delegate() {
return static_cast<AppListTestViewDelegate*>(
[app_list_view_controller_ delegate]);
@@ -136,12 +114,12 @@ TEST_F(AppListViewControllerTest, SignedIn) {
// Test the view when signin is required.
TEST_F(AppListViewControllerTest, NeedsSignin) {
// Begin the test with a signed out app list.
- model()->SetSignedIn(false);
+ delegate()->SetSignedIn(false);
EXPECT_EQ(2u, [[[app_list_view_controller_ view] subviews] count]);
EXPECT_TRUE([[app_list_view_controller_ backgroundView] isHidden]);
// Simulate signing in, should enter the SignedIn state.
- model()->SetSignedIn(true);
+ delegate()->SetSignedIn(true);
EXPECT_EQ(1u, [[[app_list_view_controller_ view] subviews] count]);
EXPECT_FALSE([[app_list_view_controller_ backgroundView] isHidden]);
}
diff --git a/ui/app_list/cocoa/app_list_window_controller.mm b/ui/app_list/cocoa/app_list_window_controller.mm
index 47edab0507..9d35902946 100644
--- a/ui/app_list/cocoa/app_list_window_controller.mm
+++ b/ui/app_list/cocoa/app_list_window_controller.mm
@@ -7,6 +7,7 @@
#include "ui/app_list/app_list_view_delegate.h"
#import "ui/app_list/cocoa/app_list_view_controller.h"
#import "ui/app_list/cocoa/apps_grid_controller.h"
+#import "ui/app_list/cocoa/apps_search_box_controller.h"
#include "ui/base/cocoa/window_size_constants.h"
@interface AppListWindow : NSWindow;
@@ -39,6 +40,8 @@
[controlledWindow setOpaque:NO];
[controlledWindow setHasShadow:YES];
[controlledWindow setLevel:NSDockWindowLevel];
+ [controlledWindow
+ setCollectionBehavior:NSWindowCollectionBehaviorMoveToActiveSpace];
if ((self = [super initWithWindow:controlledWindow])) {
appListViewController_.reset([[AppListViewController alloc] init]);
@@ -59,4 +62,8 @@
[appListViewController_ delegate]->Dismiss();
}
+- (void)windowWillClose:(NSNotification*)notification {
+ [[appListViewController_ searchBoxController] clearSearch];
+}
+
@end
diff --git a/ui/app_list/cocoa/app_list_window_controller_unittest.mm b/ui/app_list/cocoa/app_list_window_controller_unittest.mm
index 68b273d71a..0f76691775 100644
--- a/ui/app_list/cocoa/app_list_window_controller_unittest.mm
+++ b/ui/app_list/cocoa/app_list_window_controller_unittest.mm
@@ -3,10 +3,12 @@
// found in the LICENSE file.
#import "base/mac/scoped_nsobject.h"
+#include "base/strings/utf_string_conversions.h"
#import "testing/gtest_mac.h"
#include "ui/app_list/app_list_view_delegate.h"
#import "ui/app_list/cocoa/app_list_view_controller.h"
#import "ui/app_list/cocoa/app_list_window_controller.h"
+#include "ui/app_list/search_box_model.h"
#include "ui/app_list/test/app_list_test_view_delegate.h"
#import "ui/base/test/ui_cocoa_test_helper.h"
@@ -68,3 +70,26 @@ TEST_F(AppListWindowControllerTest, DismissWithEscape) {
[[controller_ window] cancelOperation:controller_];
EXPECT_EQ(1, delegate()->dismiss_count());
}
+
+// Test that search results are cleared when the window closes, not when a
+// search result is selected. If cleared upon selection, the animation showing
+// the results sliding away is seen as the window closes, which looks weird.
+TEST_F(AppListWindowControllerTest, CloseClearsSearch) {
+ [[controller_ window] makeKeyAndOrderFront:nil];
+ app_list::SearchBoxModel* model = delegate()->GetModel()->search_box();
+ AppListViewController* view_controller = [controller_ appListViewController];
+
+ EXPECT_FALSE([view_controller showingSearchResults]);
+
+ const base::string16 search_text(ASCIIToUTF16("test"));
+ model->SetText(search_text);
+ EXPECT_TRUE([view_controller showingSearchResults]);
+
+ EXPECT_EQ(0, delegate()->open_search_result_count());
+ [view_controller openResult:nil];
+ EXPECT_EQ(1, delegate()->open_search_result_count());
+
+ EXPECT_TRUE([view_controller showingSearchResults]);
+ [[controller_ window] close]; // Hide.
+ EXPECT_FALSE([view_controller showingSearchResults]);
+}
diff --git a/ui/app_list/cocoa/apps_grid_view_item.mm b/ui/app_list/cocoa/apps_grid_view_item.mm
index ccd6b80db8..08304da155 100644
--- a/ui/app_list/cocoa/apps_grid_view_item.mm
+++ b/ui/app_list/cocoa/apps_grid_view_item.mm
@@ -458,4 +458,11 @@ void ItemModelObserverBridge::ItemPercentDownloadedChanged() {
inView:controlView];
}
+// Workaround for http://crbug.com/324365: AppKit in Mavericks tries to call
+// - [NSButtonCell item] when inspecting accessibility. Without this, an
+// unrecognized selector exception is thrown inside AppKit, crashing Chrome.
+- (id)item {
+ return nil;
+}
+
@end
diff --git a/ui/app_list/cocoa/apps_search_box_controller.mm b/ui/app_list/cocoa/apps_search_box_controller.mm
index 1ef31e308a..b937c4c4c1 100644
--- a/ui/app_list/cocoa/apps_search_box_controller.mm
+++ b/ui/app_list/cocoa/apps_search_box_controller.mm
@@ -54,7 +54,6 @@ class SearchBoxModelObserverBridge : public SearchBoxModelObserver {
virtual void IconChanged() OVERRIDE;
virtual void SpeechRecognitionButtonPropChanged() OVERRIDE;
- virtual void SetSpeechRecognitionButtonState(bool toggled) OVERRIDE;
virtual void HintTextChanged() OVERRIDE;
virtual void SelectionModelChanged() OVERRIDE;
virtual void TextChanged() OVERRIDE;
@@ -103,12 +102,6 @@ void SearchBoxModelObserverBridge::SpeechRecognitionButtonPropChanged() {
NOTIMPLEMENTED();
}
-void SearchBoxModelObserverBridge::SetSpeechRecognitionButtonState(
- bool toggled) {
- // TODO(mukai): implement.
- NOTIMPLEMENTED();
-}
-
void SearchBoxModelObserverBridge::HintTextChanged() {
[[[parent_ searchTextField] cell] setPlaceholderString:
base::SysUTF16ToNSString(GetModel()->hint_text())];
diff --git a/ui/app_list/cocoa/apps_search_results_controller_unittest.mm b/ui/app_list/cocoa/apps_search_results_controller_unittest.mm
index 63c1f26a04..27e04e9311 100644
--- a/ui/app_list/cocoa/apps_search_results_controller_unittest.mm
+++ b/ui/app_list/cocoa/apps_search_results_controller_unittest.mm
@@ -27,6 +27,8 @@
@property(readonly, nonatomic) app_list::SearchResult* lastOpenedResult;
@property(readonly, nonatomic) int redoSearchCount;
+- (void)quitMessageLoop;
+
@end
@implementation TestAppsSearchResultsDelegate
@@ -46,6 +48,10 @@
++redoSearchCount_;
}
+- (void)quitMessageLoop {
+ base::MessageLoop::current()->QuitNow();
+}
+
@end
namespace app_list {
@@ -295,12 +301,13 @@ TEST_F(AppsSearchResultsControllerTest, ContextMenus) {
}
// Test that observing a search result item uninstall performs the search again.
-// Disabled due to failure on 10.6 http://crbug.com/308828 - 10.7 is OK.
-TEST_F(AppsSearchResultsControllerTest, DISABLED_UninstallRedperformsSearch) {
+TEST_F(AppsSearchResultsControllerTest, UninstallReperformsSearch) {
base::MessageLoopForUI message_loop;
EXPECT_EQ(0, [delegate_ redoSearchCount]);
ModelResultAt(0)->NotifyItemUninstalled();
- message_loop.PostTask(FROM_HERE, base::MessageLoop::QuitClosure());
+ [delegate_ performSelector:@selector(quitMessageLoop)
+ withObject:nil
+ afterDelay:0];
message_loop.Run();
EXPECT_EQ(1, [delegate_ redoSearchCount]);
}
diff --git a/ui/app_list/search_box_model.cc b/ui/app_list/search_box_model.cc
index d84b33c708..cd884a7d20 100644
--- a/ui/app_list/search_box_model.cc
+++ b/ui/app_list/search_box_model.cc
@@ -9,18 +9,14 @@
namespace app_list {
-SearchBoxModel::ToggleButtonProperty::ToggleButtonProperty(
+SearchBoxModel::ButtonProperty::ButtonProperty(
const gfx::ImageSkia& icon,
- const gfx::ImageSkia& toggled_icon,
- const base::string16& tooltip,
- const base::string16& toggled_tooltip)
+ const base::string16& tooltip)
: icon(icon),
- toggled_icon(toggled_icon),
- tooltip(tooltip),
- toggled_tooltip(toggled_tooltip) {
+ tooltip(tooltip) {
}
-SearchBoxModel::ToggleButtonProperty::~ToggleButtonProperty() {
+SearchBoxModel::ButtonProperty::~ButtonProperty() {
}
SearchBoxModel::SearchBoxModel() {
@@ -35,19 +31,13 @@ void SearchBoxModel::SetIcon(const gfx::ImageSkia& icon) {
}
void SearchBoxModel::SetSpeechRecognitionButton(
- scoped_ptr<SearchBoxModel::ToggleButtonProperty> speech_button) {
+ scoped_ptr<SearchBoxModel::ButtonProperty> speech_button) {
speech_button_ = speech_button.Pass();
FOR_EACH_OBSERVER(SearchBoxModelObserver,
observers_,
SpeechRecognitionButtonPropChanged());
}
-void SearchBoxModel::SetSpeechRecognitionButtonState(bool toggled) {
- FOR_EACH_OBSERVER(SearchBoxModelObserver,
- observers_,
- SetSpeechRecognitionButtonState(toggled));
-}
-
void SearchBoxModel::SetHintText(const base::string16& hint_text) {
if (hint_text_ == hint_text)
return;
diff --git a/ui/app_list/search_box_model.h b/ui/app_list/search_box_model.h
index 4cb0b41f6a..1c174819bf 100644
--- a/ui/app_list/search_box_model.h
+++ b/ui/app_list/search_box_model.h
@@ -23,18 +23,13 @@ class SearchBoxModelObserver;
// text, cursor position and selected text in edit control.
class APP_LIST_EXPORT SearchBoxModel {
public:
- // The properties of the button with toggled status.
- struct APP_LIST_EXPORT ToggleButtonProperty {
- ToggleButtonProperty(const gfx::ImageSkia& icon,
- const gfx::ImageSkia& toggled_icon,
- const base::string16& tooltip,
- const base::string16& toggled_tooltip);
- ~ToggleButtonProperty();
+ // The properties of the button.
+ struct APP_LIST_EXPORT ButtonProperty {
+ ButtonProperty(const gfx::ImageSkia& icon, const base::string16& tooltip);
+ ~ButtonProperty();
gfx::ImageSkia icon;
- gfx::ImageSkia toggled_icon;
base::string16 tooltip;
- base::string16 toggled_tooltip;
};
SearchBoxModel();
@@ -45,14 +40,8 @@ class APP_LIST_EXPORT SearchBoxModel {
const gfx::ImageSkia& icon() const { return icon_; }
// Sets/gets the properties for the button of speech recognition.
- void SetSpeechRecognitionButton(
- scoped_ptr<ToggleButtonProperty> speech_button);
- const ToggleButtonProperty* speech_button() const {
- return speech_button_.get();
- }
-
- // Sets the speech recognition button state.
- void SetSpeechRecognitionButtonState(bool toggled);
+ void SetSpeechRecognitionButton(scoped_ptr<ButtonProperty> speech_button);
+ const ButtonProperty* speech_button() const { return speech_button_.get(); }
// Sets/gets the hint text to display when there is in input.
void SetHintText(const base::string16& hint_text);
@@ -73,7 +62,7 @@ class APP_LIST_EXPORT SearchBoxModel {
private:
gfx::ImageSkia icon_;
- scoped_ptr<ToggleButtonProperty> speech_button_;
+ scoped_ptr<ButtonProperty> speech_button_;
base::string16 hint_text_;
gfx::SelectionModel selection_model_;
base::string16 text_;
diff --git a/ui/app_list/search_box_model_observer.h b/ui/app_list/search_box_model_observer.h
index 189d4521b9..a903dbc03c 100644
--- a/ui/app_list/search_box_model_observer.h
+++ b/ui/app_list/search_box_model_observer.h
@@ -18,9 +18,6 @@ class APP_LIST_EXPORT SearchBoxModelObserver {
// changed.
virtual void SpeechRecognitionButtonPropChanged() = 0;
- // Invoked when the speech recognition button state is changed.
- virtual void SetSpeechRecognitionButtonState(bool toggled) = 0;
-
// Invoked when hint text is changed.
virtual void HintTextChanged() = 0;
diff --git a/ui/app_list/speech_ui_model.cc b/ui/app_list/speech_ui_model.cc
new file mode 100644
index 0000000000..8695551193
--- /dev/null
+++ b/ui/app_list/speech_ui_model.cc
@@ -0,0 +1,54 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/app_list/speech_ui_model.h"
+
+namespace app_list {
+
+SpeechUIModel::SpeechUIModel() {}
+
+SpeechUIModel::~SpeechUIModel() {}
+
+void SpeechUIModel::SetSpeechResult(const base::string16& result,
+ bool is_final) {
+ if (result_ == result && is_final_ == is_final)
+ return;
+
+ result_ = result;
+ is_final_ = is_final;
+ FOR_EACH_OBSERVER(SpeechUIModelObserver,
+ observers_,
+ OnSpeechResult(result, is_final));
+}
+
+void SpeechUIModel::UpdateSoundLevel(int16 level) {
+ if (sound_level_ == level)
+ return;
+
+ sound_level_ = level;
+ FOR_EACH_OBSERVER(SpeechUIModelObserver,
+ observers_,
+ OnSpeechSoundLevelChanged(level));
+}
+
+void SpeechUIModel::SetSpeechRecognitionState(
+ SpeechRecognitionState new_state) {
+ if (state_ == new_state)
+ return;
+
+ state_ = new_state;
+ FOR_EACH_OBSERVER(SpeechUIModelObserver,
+ observers_,
+ OnSpeechRecognitionStateChanged(new_state));
+}
+
+void SpeechUIModel::AddObserver(SpeechUIModelObserver* observer) {
+ observers_.AddObserver(observer);
+}
+
+void SpeechUIModel::RemoveObserver(SpeechUIModelObserver* observer) {
+ observers_.RemoveObserver(observer);
+}
+
+} // namespace app_list
diff --git a/ui/app_list/speech_ui_model.h b/ui/app_list/speech_ui_model.h
new file mode 100644
index 0000000000..1d3f7502cf
--- /dev/null
+++ b/ui/app_list/speech_ui_model.h
@@ -0,0 +1,47 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_APP_LIST_SPEECH_UI_MODEL_H_
+#define UI_APP_LIST_SPEECH_UI_MODEL_H_
+
+#include "base/basictypes.h"
+#include "base/observer_list.h"
+#include "base/strings/string16.h"
+#include "ui/app_list/app_list_export.h"
+#include "ui/app_list/speech_ui_model_observer.h"
+
+namespace app_list {
+
+// SpeechUIModel provides the interface to update the UI for speech recognition.
+class APP_LIST_EXPORT SpeechUIModel {
+ public:
+ SpeechUIModel();
+ virtual ~SpeechUIModel();
+
+ void SetSpeechResult(const base::string16& result, bool is_final);
+ void UpdateSoundLevel(int16 level);
+ void SetSpeechRecognitionState(SpeechRecognitionState new_state);
+
+ void AddObserver(SpeechUIModelObserver* observer);
+ void RemoveObserver(SpeechUIModelObserver* observer);
+
+ const base::string16& result() const { return result_; }
+ bool is_final() const { return is_final_; }
+ int16 sound_level() const { return sound_level_; }
+ SpeechRecognitionState state() const { return state_; }
+
+ private:
+ base::string16 result_;
+ bool is_final_;
+ int16 sound_level_;
+ SpeechRecognitionState state_;
+
+ ObserverList<SpeechUIModelObserver> observers_;
+
+ DISALLOW_COPY_AND_ASSIGN(SpeechUIModel);
+};
+
+} // namespace app_list
+
+#endif // UI_APP_LIST_SPEECH_UI_MODEL_H_
diff --git a/ui/app_list/speech_ui_model_observer.h b/ui/app_list/speech_ui_model_observer.h
new file mode 100644
index 0000000000..39fdd26920
--- /dev/null
+++ b/ui/app_list/speech_ui_model_observer.h
@@ -0,0 +1,39 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_APP_LIST_SPEECH_UI_MODEL_OBSERVER_H_
+#define UI_APP_LIST_SPEECH_UI_MODEL_OBSERVER_H_
+
+#include "base/basictypes.h"
+#include "base/strings/string16.h"
+#include "ui/app_list/app_list_export.h"
+
+namespace app_list {
+
+enum SpeechRecognitionState {
+ SPEECH_RECOGNITION_NOT_STARTED = 0,
+ SPEECH_RECOGNITION_ON,
+ SPEECH_RECOGNITION_IN_SPEECH,
+};
+
+class APP_LIST_EXPORT SpeechUIModelObserver {
+ public:
+ // Invoked when sound level for the speech recognition has changed.
+ virtual void OnSpeechSoundLevelChanged(int16 level) {}
+
+ // Invoked when a speech result arrives. |is_final| is true only when the
+ // speech result is final.
+ virtual void OnSpeechResult(const base::string16& result, bool is_final) {}
+
+ // Invoked when the state of speech recognition is changed.
+ virtual void OnSpeechRecognitionStateChanged(
+ SpeechRecognitionState new_state) {}
+
+ protected:
+ virtual ~SpeechUIModelObserver() {}
+};
+
+} // namespace app_list
+
+#endif // UI_APP_LIST_SPEECH_UI_MODEL_OBSERVER_H_
diff --git a/ui/app_list/test/app_list_test_model.cc b/ui/app_list/test/app_list_test_model.cc
index c9ca1c1c2f..0649168fe8 100644
--- a/ui/app_list/test/app_list_test_model.cc
+++ b/ui/app_list/test/app_list_test_model.cc
@@ -37,7 +37,6 @@ class AppListTestModel::AppListTestItemModel : public AppListItemModel {
AppListTestModel::AppListTestModel()
: activate_count_(0),
last_activated_(NULL) {
- SetSignedIn(true);
}
std::string AppListTestModel::GetItemName(int id) {
diff --git a/ui/app_list/test/app_list_test_view_delegate.cc b/ui/app_list/test/app_list_test_view_delegate.cc
index ba3e79e03e..518c389a1b 100644
--- a/ui/app_list/test/app_list_test_view_delegate.cc
+++ b/ui/app_list/test/app_list_test_view_delegate.cc
@@ -9,20 +9,62 @@
#include "base/callback.h"
#include "base/files/file_path.h"
#include "ui/app_list/app_list_model.h"
+#include "ui/app_list/app_list_view_delegate_observer.h"
+#include "ui/app_list/signin_delegate.h"
#include "ui/app_list/test/app_list_test_model.h"
#include "ui/gfx/image/image_skia.h"
namespace app_list {
namespace test {
+class TestSigninDelegate : public SigninDelegate {
+ public:
+ TestSigninDelegate() : signed_in_(true) {}
+
+ void set_signed_in(bool signed_in) { signed_in_ = signed_in; }
+
+ // SigninDelegate overrides:
+ virtual bool NeedSignin() OVERRIDE { return !signed_in_; }
+ virtual void ShowSignin() OVERRIDE {}
+ virtual void OpenLearnMore() OVERRIDE {}
+ virtual void OpenSettings() OVERRIDE {}
+
+ virtual base::string16 GetSigninHeading() OVERRIDE {
+ return base::string16();
+ }
+ virtual base::string16 GetSigninText() OVERRIDE { return base::string16(); }
+ virtual base::string16 GetSigninButtonText() OVERRIDE {
+ return base::string16();
+ }
+ virtual base::string16 GetLearnMoreLinkText() OVERRIDE {
+ return base::string16();
+ }
+ virtual base::string16 GetSettingsLinkText() OVERRIDE {
+ return base::string16();
+ }
+
+ private:
+ bool signed_in_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestSigninDelegate);
+};
+
AppListTestViewDelegate::AppListTestViewDelegate()
: dismiss_count_(0),
- test_signin_delegate_(NULL),
+ open_search_result_count_(0),
+ test_signin_delegate_(new TestSigninDelegate),
model_(new AppListTestModel) {
}
AppListTestViewDelegate::~AppListTestViewDelegate() {}
+void AppListTestViewDelegate::SetSignedIn(bool signed_in) {
+ test_signin_delegate_->set_signed_in(signed_in);
+ FOR_EACH_OBSERVER(AppListViewDelegateObserver,
+ observers_,
+ OnProfilesChanged());
+}
+
bool AppListTestViewDelegate::ForceNativeDesktop() const {
return false;
}
@@ -32,7 +74,11 @@ AppListModel* AppListTestViewDelegate::GetModel() {
}
SigninDelegate* AppListTestViewDelegate::GetSigninDelegate() {
- return test_signin_delegate_;
+ return test_signin_delegate_.get();
+}
+
+SpeechUIModel* AppListTestViewDelegate::GetSpeechUI() {
+ return &speech_ui_;
}
void AppListTestViewDelegate::GetShortcutPathForApp(
@@ -41,6 +87,11 @@ void AppListTestViewDelegate::GetShortcutPathForApp(
callback.Run(base::FilePath());
}
+void AppListTestViewDelegate::OpenSearchResult(SearchResult* result,
+ int event_flags) {
+ ++open_search_result_count_;
+}
+
void AppListTestViewDelegate::Dismiss() {
++dismiss_count_;
}
@@ -62,5 +113,15 @@ void AppListTestViewDelegate::ReplaceTestModel(int item_count) {
model_->PopulateApps(item_count);
}
+void AppListTestViewDelegate::AddObserver(
+ AppListViewDelegateObserver* observer) {
+ observers_.AddObserver(observer);
+}
+
+void AppListTestViewDelegate::RemoveObserver(
+ AppListViewDelegateObserver* observer) {
+ observers_.RemoveObserver(observer);
+}
+
} // namespace test
} // namespace app_list
diff --git a/ui/app_list/test/app_list_test_view_delegate.h b/ui/app_list/test/app_list_test_view_delegate.h
index 49f5ab2bf1..0142398419 100644
--- a/ui/app_list/test/app_list_test_view_delegate.h
+++ b/ui/app_list/test/app_list_test_view_delegate.h
@@ -10,12 +10,15 @@
#include "base/callback_forward.h"
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
+#include "base/observer_list.h"
#include "ui/app_list/app_list_view_delegate.h"
+#include "ui/app_list/speech_ui_model.h"
namespace app_list {
namespace test {
class AppListTestModel;
+class TestSigninDelegate;
// A concrete AppListViewDelegate for unit tests.
class AppListTestViewDelegate : public AppListViewDelegate {
@@ -24,26 +27,28 @@ class AppListTestViewDelegate : public AppListViewDelegate {
virtual ~AppListTestViewDelegate();
int dismiss_count() { return dismiss_count_; }
- void set_test_signin_delegate(SigninDelegate* signin_delegate) {
- test_signin_delegate_ = signin_delegate;
- }
-
+ int open_search_result_count() { return open_search_result_count_; }
void SetUsers(const Users& users) {
users_ = users;
}
+ // Sets the signin status of the signin delegate, creating one if there isn't
+ // one already.
+ void SetSignedIn(bool signed_in);
+
// AppListViewDelegate overrides:
virtual bool ForceNativeDesktop() const OVERRIDE;
virtual void SetProfileByPath(const base::FilePath& profile_path) OVERRIDE {}
virtual AppListModel* GetModel() OVERRIDE;
virtual SigninDelegate* GetSigninDelegate() OVERRIDE;
+ virtual SpeechUIModel* GetSpeechUI() OVERRIDE;
virtual void GetShortcutPathForApp(
const std::string& app_id,
const base::Callback<void(const base::FilePath&)>& callback) OVERRIDE;
virtual void StartSearch() OVERRIDE {}
virtual void StopSearch() OVERRIDE {}
virtual void OpenSearchResult(SearchResult* result,
- int event_flags) OVERRIDE {}
+ int event_flags) OVERRIDE;
virtual void InvokeSearchResultAction(SearchResult* result,
int action_index,
int event_flags) OVERRIDE {}
@@ -58,17 +63,25 @@ class AppListTestViewDelegate : public AppListViewDelegate {
const base::FilePath& profile_path) OVERRIDE {}
virtual content::WebContents* GetStartPageContents() OVERRIDE;
virtual const Users& GetUsers() const OVERRIDE;
+ virtual void AddObserver(AppListViewDelegateObserver* observer) OVERRIDE;
+ virtual void RemoveObserver(AppListViewDelegateObserver* observer) OVERRIDE;
// Do a bulk replacement of the items in the model.
void ReplaceTestModel(int item_count);
+ AppListTestModel* ReleaseTestModel() { return model_.release(); }
AppListTestModel* GetTestModel() { return model_.get(); }
private:
int dismiss_count_;
+ int open_search_result_count_;
Users users_;
- SigninDelegate* test_signin_delegate_; // Weak. Owned by test.
+ scoped_ptr<TestSigninDelegate> test_signin_delegate_;
scoped_ptr<AppListTestModel> model_;
+ ObserverList<AppListViewDelegateObserver> observers_;
+ SpeechUIModel speech_ui_;
+
+ DISALLOW_COPY_AND_ASSIGN(AppListTestViewDelegate);
};
} // namespace test
diff --git a/ui/app_list/views/app_list_item_view.cc b/ui/app_list/views/app_list_item_view.cc
index ccbde55ae3..789687725b 100644
--- a/ui/app_list/views/app_list_item_view.cc
+++ b/ui/app_list/views/app_list_item_view.cc
@@ -22,6 +22,7 @@
#include "ui/gfx/canvas.h"
#include "ui/gfx/font.h"
#include "ui/gfx/image/image_skia_operations.h"
+#include "ui/gfx/point.h"
#include "ui/gfx/transform_util.h"
#include "ui/views/controls/image_view.h"
#include "ui/views/controls/label.h"
@@ -143,16 +144,25 @@ void AppListItemView::SetUIState(UIState state) {
ui_state_ = state;
#if defined(USE_AURA)
- ui::ScopedLayerAnimationSettings settings(layer()->GetAnimator());
switch (ui_state_) {
case UI_STATE_NORMAL:
title_->SetVisible(!model_->is_installing());
progress_bar_->SetVisible(model_->is_installing());
- layer()->SetTransform(gfx::Transform());
break;
- case UI_STATE_DRAGGING: {
+ case UI_STATE_DRAGGING:
title_->SetVisible(false);
progress_bar_->SetVisible(false);
+ break;
+ case UI_STATE_DROPPING_IN_FOLDER:
+ break;
+ }
+#if !defined(OS_WIN)
+ ui::ScopedLayerAnimationSettings settings(layer()->GetAnimator());
+ switch (ui_state_) {
+ case UI_STATE_NORMAL:
+ layer()->SetTransform(gfx::Transform());
+ break;
+ case UI_STATE_DRAGGING: {
const gfx::Rect bounds(layer()->bounds().size());
layer()->SetTransform(gfx::GetScaleTransform(
bounds.CenterPoint(),
@@ -164,7 +174,8 @@ void AppListItemView::SetUIState(UIState state) {
}
SchedulePaint();
-#endif
+#endif // !OS_WIN
+#endif // USE_AURA
}
void AppListItemView::SetTouchDragging(bool touch_dragging) {
@@ -198,6 +209,11 @@ void AppListItemView::OnDragEnded() {
SetUIState(UI_STATE_NORMAL);
}
+gfx::Point AppListItemView::GetDragImageOffset() {
+ gfx::Point image = icon_->GetImageBounds().origin();
+ return gfx::Point(icon_->x() + image.x(), icon_->y() + image.y());
+}
+
void AppListItemView::SetAsAttemptedFolderTarget(bool is_target_folder) {
if (is_target_folder)
SetUIState(UI_STATE_DROPPING_IN_FOLDER);
@@ -442,4 +458,8 @@ void AppListItemView::OnGestureEvent(ui::GestureEvent* event) {
CustomButton::OnGestureEvent(event);
}
+void AppListItemView::OnSyncDragEnd() {
+ SetUIState(UI_STATE_NORMAL);
+}
+
} // namespace app_list
diff --git a/ui/app_list/views/app_list_item_view.h b/ui/app_list/views/app_list_item_view.h
index 4ed02e6011..2d41461578 100644
--- a/ui/app_list/views/app_list_item_view.h
+++ b/ui/app_list/views/app_list_item_view.h
@@ -49,6 +49,7 @@ class APP_LIST_EXPORT AppListItemView : public views::CustomButton,
gfx::ImageSkia GetDragImage();
void OnDragEnded();
+ gfx::Point GetDragImageOffset();
void SetAsAttemptedFolderTarget(bool is_target_folder);
@@ -56,6 +57,10 @@ class APP_LIST_EXPORT AppListItemView : public views::CustomButton,
const views::Label* title() const { return title_; }
+ // In a synchronous drag the item view isn't informed directly of the drag
+ // ending, so the runner of the drag should call this.
+ void OnSyncDragEnd();
+
private:
enum UIState {
UI_STATE_NORMAL, // Normal UI (icon + label)
diff --git a/ui/app_list/views/app_list_main_view.cc b/ui/app_list/views/app_list_main_view.cc
index a4cd7a9be2..e6f7a7c8a5 100644
--- a/ui/app_list/views/app_list_main_view.cc
+++ b/ui/app_list/views/app_list_main_view.cc
@@ -81,26 +81,30 @@ AppListMainView::AppListMainView(AppListViewDelegate* delegate,
PaginationModel* pagination_model,
gfx::NativeView parent)
: delegate_(delegate),
+ pagination_model_(pagination_model),
model_(delegate->GetModel()),
search_box_view_(NULL),
contents_view_(NULL),
weak_ptr_factory_(this) {
// Starts icon loading early.
- PreloadIcons(pagination_model, parent);
+ PreloadIcons(parent);
SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical,
kInnerPadding,
kInnerPadding,
kInnerPadding));
- search_box_view_ = new SearchBoxView(this, delegate, model_);
+ search_box_view_ = new SearchBoxView(this, delegate);
AddChildView(search_box_view_);
+ AddContentsView();
+}
+void AppListMainView::AddContentsView() {
contents_view_ =
new ContentsView(this,
- pagination_model,
+ pagination_model_,
model_,
- delegate ? delegate->GetStartPageContents() : NULL);
+ delegate_ ? delegate_->GetStartPageContents() : NULL);
AddChildView(contents_view_);
search_box_view_->set_contents_view(contents_view_);
@@ -141,13 +145,23 @@ void AppListMainView::Prerender() {
contents_view_->Prerender();
}
+void AppListMainView::ModelChanged() {
+ pending_icon_loaders_.clear();
+ model_ = delegate_->GetModel();
+ search_box_view_->ModelChanged();
+ delete contents_view_;
+ contents_view_ = NULL;
+ pagination_model_->SelectPage(0, false /* animate */);
+ AddContentsView();
+ Layout();
+}
+
void AppListMainView::SetDragAndDropHostOfCurrentAppList(
ApplicationDragAndDropHost* drag_and_drop_host) {
contents_view_->SetDragAndDropHostOfCurrentAppList(drag_and_drop_host);
}
-void AppListMainView::PreloadIcons(PaginationModel* pagination_model,
- gfx::NativeView parent) {
+void AppListMainView::PreloadIcons(gfx::NativeView parent) {
ui::ScaleFactor scale_factor = ui::SCALE_FACTOR_100P;
if (parent)
scale_factor = ui::GetScaleFactorForNativeView(parent);
@@ -155,7 +169,7 @@ void AppListMainView::PreloadIcons(PaginationModel* pagination_model,
float scale = ui::GetImageScale(scale_factor);
// |pagination_model| could have -1 as the initial selected page and
// assumes first page (i.e. index 0) will be used in this case.
- const int selected_page = std::max(0, pagination_model->selected_page());
+ const int selected_page = std::max(0, pagination_model_->selected_page());
const int tiles_per_page = kPreferredCols * kPreferredRows;
const int start_model_index = selected_page * tiles_per_page;
diff --git a/ui/app_list/views/app_list_main_view.h b/ui/app_list/views/app_list_main_view.h
index c0de4a0d11..1e119aa0b8 100644
--- a/ui/app_list/views/app_list_main_view.h
+++ b/ui/app_list/views/app_list_main_view.h
@@ -10,6 +10,7 @@
#include "base/memory/scoped_vector.h"
#include "base/memory/weak_ptr.h"
#include "base/timer/timer.h"
+#include "ui/app_list/app_list_export.h"
#include "ui/app_list/views/apps_grid_view_delegate.h"
#include "ui/app_list/views/search_box_view_delegate.h"
#include "ui/app_list/views/search_result_list_view_delegate.h"
@@ -31,10 +32,10 @@ class SearchBoxView;
// AppListMainView contains the normal view of the app list, which is shown
// when the user is signed in.
-class AppListMainView : public views::View,
- public AppsGridViewDelegate,
- public SearchBoxViewDelegate,
- public SearchResultListViewDelegate {
+class APP_LIST_EXPORT AppListMainView : public views::View,
+ public AppsGridViewDelegate,
+ public SearchBoxViewDelegate,
+ public SearchResultListViewDelegate {
public:
// Takes ownership of |delegate|.
explicit AppListMainView(AppListViewDelegate* delegate,
@@ -48,6 +49,8 @@ class AppListMainView : public views::View,
void Prerender();
+ void ModelChanged();
+
SearchBoxView* search_box_view() const { return search_box_view_; }
// If |drag_and_drop_host| is not NULL it will be called upon drag and drop
@@ -60,10 +63,11 @@ class AppListMainView : public views::View,
private:
class IconLoader;
- // Loads icon image for the apps in the selected page of |pagination_model|.
+ void AddContentsView();
+
+ // Loads icon image for the apps in the selected page of |pagination_model_|.
// |parent| is used to determine the image scale factor to use.
- void PreloadIcons(PaginationModel* pagination_model,
- gfx::NativeView parent);
+ void PreloadIcons(gfx::NativeView parent);
// Invoked when |icon_loading_wait_timer_| fires.
void OnIconLoadingWaitTimer();
@@ -89,7 +93,8 @@ class AppListMainView : public views::View,
virtual void OnResultInstalled(SearchResult* result) OVERRIDE;
virtual void OnResultUninstalled(SearchResult* result) OVERRIDE;
- AppListViewDelegate* delegate_; // Owned by parent (AppListView)
+ AppListViewDelegate* delegate_; // Owned by parent view (AppListView).
+ PaginationModel* pagination_model_; // Owned by AppListController.
AppListModel* model_; // Unowned; ownership is handled by |delegate_|.
SearchBoxView* search_box_view_; // Owned by views hierarchy.
diff --git a/ui/app_list/views/app_list_main_view_unittest.cc b/ui/app_list/views/app_list_main_view_unittest.cc
new file mode 100644
index 0000000000..6ca1820ef4
--- /dev/null
+++ b/ui/app_list/views/app_list_main_view_unittest.cc
@@ -0,0 +1,90 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/app_list/views/app_list_main_view.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/app_list/pagination_model.h"
+#include "ui/app_list/test/app_list_test_model.h"
+#include "ui/app_list/test/app_list_test_view_delegate.h"
+#include "ui/app_list/views/apps_container_view.h"
+#include "ui/app_list/views/apps_grid_view.h"
+#include "ui/app_list/views/contents_view.h"
+#include "ui/views/test/views_test_base.h"
+#include "ui/views/view_model.h"
+#include "ui/views/widget/widget.h"
+
+namespace app_list {
+namespace test {
+
+namespace {
+
+const int kInitialItems = 2;
+
+class AppListMainViewTest : public views::ViewsTestBase {
+ public:
+ AppListMainViewTest()
+ : widget_(NULL),
+ main_view_(NULL) {}
+
+ virtual ~AppListMainViewTest() {}
+
+ // testing::Test overrides:
+ virtual void SetUp() OVERRIDE {
+ views::ViewsTestBase::SetUp();
+ delegate_.reset(new AppListTestViewDelegate);
+ delegate_->GetTestModel()->PopulateApps(kInitialItems);
+
+ main_view_ =
+ new AppListMainView(delegate_.get(), &pagination_model_, GetContext());
+ main_view_->SetPaintToLayer(true);
+
+ widget_ = new views::Widget;
+ views::Widget::InitParams params =
+ CreateParams(views::Widget::InitParams::TYPE_POPUP);
+ params.bounds.set_size(main_view_->GetPreferredSize());
+ widget_->Init(params);
+
+ widget_->SetContentsView(main_view_);
+ }
+
+ virtual void TearDown() OVERRIDE {
+ widget_->Close();
+ views::ViewsTestBase::TearDown();
+ delegate_.reset();
+ }
+
+ const views::ViewModel* ViewModel() {
+ return main_view_->contents_view()->apps_container_view()->apps_grid_view()
+ ->view_model_for_test();
+ }
+
+ protected:
+ views::Widget* widget_; // Owned by native window.
+ AppListMainView* main_view_; // Owned by |widget_|.
+ PaginationModel pagination_model_;
+ scoped_ptr<AppListTestViewDelegate> delegate_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(AppListMainViewTest);
+};
+
+} // namespace
+
+// Tests changing the AppListModel when switching profiles.
+TEST_F(AppListMainViewTest, ModelChanged) {
+ EXPECT_EQ(kInitialItems, ViewModel()->view_size());
+
+ // The model is owned by a profile keyed service, which is never destroyed
+ // until after profile switching.
+ scoped_ptr<AppListModel> old_model(delegate_->ReleaseTestModel());
+
+ const int kReplacementItems = 5;
+ delegate_->ReplaceTestModel(kReplacementItems);
+ main_view_->ModelChanged();
+ EXPECT_EQ(kReplacementItems, ViewModel()->view_size());
+}
+
+} // namespace test
+} // namespace app_list
diff --git a/ui/app_list/views/app_list_view.cc b/ui/app_list/views/app_list_view.cc
index d4c9ac1969..fc15fc58d2 100644
--- a/ui/app_list/views/app_list_view.cc
+++ b/ui/app_list/views/app_list_view.cc
@@ -11,11 +11,16 @@
#include "ui/app_list/app_list_view_delegate.h"
#include "ui/app_list/pagination_model.h"
#include "ui/app_list/signin_delegate.h"
+#include "ui/app_list/speech_ui_model.h"
#include "ui/app_list/views/app_list_background.h"
#include "ui/app_list/views/app_list_main_view.h"
+#include "ui/app_list/views/app_list_view_observer.h"
#include "ui/app_list/views/search_box_view.h"
#include "ui/app_list/views/signin_view.h"
+#include "ui/app_list/views/speech_view.h"
#include "ui/base/ui_base_switches.h"
+#include "ui/compositor/layer.h"
+#include "ui/compositor/scoped_layer_animation_settings.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/insets.h"
#include "ui/gfx/path.h"
@@ -42,6 +47,12 @@ namespace {
void (*g_next_paint_callback)();
+// The margin from the edge to the speech UI.
+const int kSpeechUIMargin = 12;
+
+// The vertical position for the appearing animation of the speech UI.
+const float kSpeechUIApearingPosition =12;
+
// The distance between the arrow tip and edge of the anchor view.
const int kArrowOffset = 10;
@@ -68,19 +79,56 @@ bool SupportsShadow() {
} // namespace
+// An animation observer to hide the view at the end of the animation.
+class HideViewAnimationObserver : public ui::ImplicitAnimationObserver {
+ public:
+ HideViewAnimationObserver() : target_(NULL) {
+ }
+
+ virtual ~HideViewAnimationObserver() {
+ if (target_)
+ StopObservingImplicitAnimations();
+ }
+
+ void SetTarget(views::View* target) {
+ if (!target_)
+ StopObservingImplicitAnimations();
+ target_ = target;
+ }
+
+ private:
+ // Overridden from ui::ImplicitAnimationObserver:
+ virtual void OnImplicitAnimationsCompleted() OVERRIDE {
+ if (target_) {
+ target_->SetVisible(false);
+ target_ = NULL;
+ }
+ }
+
+ views::View* target_;
+
+ DISALLOW_COPY_AND_ASSIGN(HideViewAnimationObserver);
+};
+
////////////////////////////////////////////////////////////////////////////////
// AppListView:
AppListView::AppListView(AppListViewDelegate* delegate)
: delegate_(delegate),
app_list_main_view_(NULL),
- signin_view_(NULL) {
+ signin_view_(NULL),
+ speech_view_(NULL),
+ animation_observer_(new HideViewAnimationObserver()) {
CHECK(delegate);
- delegate_->GetModel()->AddObserver(this);
+
+ delegate_->AddObserver(this);
+ delegate_->GetSpeechUI()->AddObserver(this);
}
AppListView::~AppListView() {
- delegate_->GetModel()->RemoveObserver(this);
+ delegate_->GetSpeechUI()->RemoveObserver(this);
+ delegate_->RemoveObserver(this);
+ animation_observer_.reset();
// Remove child views first to ensure no remaining dependencies on delegate_.
RemoveAllChildViews(true);
}
@@ -157,22 +205,26 @@ void AppListView::Prerender() {
app_list_main_view_->Prerender();
}
-void AppListView::OnSigninStatusChanged() {
- AppListModel* model = delegate_->GetModel();
- signin_view_->SetVisible(!model->signed_in());
- app_list_main_view_->SetVisible(model->signed_in());
+void AppListView::OnProfilesChanged() {
+ SigninDelegate* signin_delegate =
+ delegate_ ? delegate_->GetSigninDelegate() : NULL;
+ bool show_signin_view = signin_delegate && signin_delegate->NeedSignin();
+
+ signin_view_->SetVisible(show_signin_view);
+ app_list_main_view_->SetVisible(!show_signin_view);
app_list_main_view_->search_box_view()->InvalidateMenu();
}
void AppListView::SetProfileByPath(const base::FilePath& profile_path) {
delegate_->SetProfileByPath(profile_path);
+ app_list_main_view_->ModelChanged();
}
-void AppListView::AddObserver(Observer* observer) {
+void AppListView::AddObserver(AppListViewObserver* observer) {
observers_.AddObserver(observer);
}
-void AppListView::RemoveObserver(Observer* observer) {
+void AppListView::RemoveObserver(AppListViewObserver* observer) {
observers_.RemoveObserver(observer);
}
@@ -213,7 +265,19 @@ void AppListView::InitAsBubbleInternal(gfx::NativeView parent,
app_list_main_view_->GetPreferredSize().width());
AddChildView(signin_view_);
- OnSigninStatusChanged();
+ // Speech recognition is available only when the start page exists.
+ if (delegate_ && delegate_->GetStartPageContents()) {
+ speech_view_ = new SpeechView(delegate_.get());
+ speech_view_->SetVisible(false);
+#if defined(USE_AURA)
+ speech_view_->SetPaintToLayer(true);
+ speech_view_->SetFillsBoundsOpaquely(false);
+ speech_view_->layer()->SetOpacity(0.0f);
+#endif
+ AddChildView(speech_view_);
+ }
+
+ OnProfilesChanged();
set_color(kContentsBackgroundColor);
set_margins(gfx::Insets());
set_move_with_anchor(true);
@@ -304,6 +368,16 @@ void AppListView::Layout() {
const gfx::Rect contents_bounds = GetContentsBounds();
app_list_main_view_->SetBoundsRect(contents_bounds);
signin_view_->SetBoundsRect(contents_bounds);
+
+ if (speech_view_) {
+ gfx::Rect speech_bounds = contents_bounds;
+ int preferred_height = speech_view_->GetPreferredSize().height();
+ speech_bounds.Inset(kSpeechUIMargin, kSpeechUIMargin);
+ speech_bounds.set_height(std::min(speech_bounds.height(),
+ preferred_height));
+ speech_bounds.Inset(-speech_view_->GetInsets());
+ speech_view_->SetBoundsRect(speech_bounds);
+ }
}
void AppListView::OnWidgetDestroying(views::Widget* widget) {
@@ -317,7 +391,7 @@ void AppListView::OnWidgetActivationChanged(views::Widget* widget,
// Do not called inherited function as the bubble delegate auto close
// functionality is not used.
if (widget == GetWidget())
- FOR_EACH_OBSERVER(Observer, observers_,
+ FOR_EACH_OBSERVER(AppListViewObserver, observers_,
OnActivationChanged(widget, active));
}
@@ -338,8 +412,61 @@ void AppListView::OnWidgetVisibilityChanged(views::Widget* widget,
Layout();
}
-void AppListView::OnAppListModelSigninStatusChanged() {
- OnSigninStatusChanged();
+void AppListView::OnSpeechRecognitionStateChanged(
+ SpeechRecognitionState new_state) {
+ DCHECK(!signin_view_->visible());
+
+ bool recognizing = new_state != SPEECH_RECOGNITION_NOT_STARTED;
+ // No change for this class.
+ if (speech_view_->visible() == recognizing)
+ return;
+
+ if (recognizing)
+ speech_view_->Reset();
+
+#if defined(USE_AURA)
+ gfx::Transform speech_transform;
+ speech_transform.Translate(
+ 0, SkFloatToMScalar(kSpeechUIApearingPosition));
+ if (recognizing)
+ speech_view_->layer()->SetTransform(speech_transform);
+
+ {
+ ui::ScopedLayerAnimationSettings main_settings(
+ app_list_main_view_->layer()->GetAnimator());
+ if (recognizing) {
+ animation_observer_->SetTarget(app_list_main_view_);
+ main_settings.AddObserver(animation_observer_.get());
+ }
+ app_list_main_view_->layer()->SetOpacity(recognizing ? 0.0f : 1.0f);
+ }
+
+ {
+ ui::ScopedLayerAnimationSettings speech_settings(
+ speech_view_->layer()->GetAnimator());
+ if (!recognizing) {
+ animation_observer_->SetTarget(speech_view_);
+ speech_settings.AddObserver(animation_observer_.get());
+ }
+
+ speech_view_->layer()->SetOpacity(recognizing ? 1.0f : 0.0f);
+ if (recognizing)
+ speech_view_->layer()->SetTransform(gfx::Transform());
+ else
+ speech_view_->layer()->SetTransform(speech_transform);
+ }
+
+ if (recognizing)
+ speech_view_->SetVisible(true);
+ else
+ app_list_main_view_->SetVisible(true);
+#else
+ speech_view_->SetVisible(recognizing);
+ app_list_main_view_->SetVisible(!recognizing);
+#endif
+
+ // Needs to schedule paint of AppListView itself, to repaint the background.
+ SchedulePaint();
}
} // namespace app_list
diff --git a/ui/app_list/views/app_list_view.h b/ui/app_list/views/app_list_view.h
index 2d273ceeee..fb03c2dd84 100644
--- a/ui/app_list/views/app_list_view.h
+++ b/ui/app_list/views/app_list_view.h
@@ -8,35 +8,33 @@
#include "base/memory/scoped_ptr.h"
#include "base/observer_list.h"
#include "ui/app_list/app_list_export.h"
-#include "ui/app_list/app_list_model_observer.h"
+#include "ui/app_list/app_list_view_delegate_observer.h"
+#include "ui/app_list/speech_ui_model_observer.h"
#include "ui/views/bubble/bubble_delegate.h"
+#include "ui/views/widget/widget.h"
namespace base {
class FilePath;
}
-namespace views {
-class Widget;
-}
-
namespace app_list {
class ApplicationDragAndDropHost;
class AppListMainView;
class AppListModel;
class AppListViewDelegate;
+class AppListViewObserver;
+class HideViewAnimationObserver;
class PaginationModel;
class SigninDelegate;
class SigninView;
+class SpeechView;
// AppListView is the top-level view and controller of app list UI. It creates
// and hosts a AppsGridView and passes AppListModel to it for display.
class APP_LIST_EXPORT AppListView : public views::BubbleDelegateView,
- public AppListModelObserver {
+ public AppListViewDelegateObserver,
+ public SpeechUIModelObserver {
public:
- class Observer {
- public:
- virtual void OnActivationChanged(views::Widget* widget, bool active) = 0;
- };
// Takes ownership of |delegate|.
explicit AppListView(AppListViewDelegate* delegate);
@@ -85,15 +83,15 @@ class APP_LIST_EXPORT AppListView : public views::BubbleDelegateView,
// WidgetDelegate overrides:
virtual bool ShouldHandleSystemCommands() const OVERRIDE;
- void Prerender();
+ // Overridden from AppListViewDelegateObserver:
+ virtual void OnProfilesChanged() OVERRIDE;
- // Invoked when the sign-in status is changed to switch on/off sign-in view.
- void OnSigninStatusChanged();
+ void Prerender();
void SetProfileByPath(const base::FilePath& profile_path);
- void AddObserver(Observer* observer);
- void RemoveObserver(Observer* observer);
+ void AddObserver(AppListViewObserver* observer);
+ void RemoveObserver(AppListViewObserver* observer);
// Set a callback to be called the next time any app list paints.
static void SetNextPaintCallback(void (*callback)());
@@ -133,8 +131,9 @@ class APP_LIST_EXPORT AppListView : public views::BubbleDelegateView,
virtual void OnWidgetActivationChanged(
views::Widget* widget, bool active) OVERRIDE;
- // Overridden from AppListModelObserver:
- virtual void OnAppListModelSigninStatusChanged() OVERRIDE;
+ // Overridden from SpeechUIModelObserver:
+ virtual void OnSpeechRecognitionStateChanged(
+ SpeechRecognitionState new_state) OVERRIDE;
SigninDelegate* GetSigninDelegate();
@@ -142,8 +141,10 @@ class APP_LIST_EXPORT AppListView : public views::BubbleDelegateView,
AppListMainView* app_list_main_view_;
SigninView* signin_view_;
+ SpeechView* speech_view_;
- ObserverList<Observer> observers_;
+ ObserverList<AppListViewObserver> observers_;
+ scoped_ptr<HideViewAnimationObserver> animation_observer_;
DISALLOW_COPY_AND_ASSIGN(AppListView);
};
diff --git a/ui/app_list/views/app_list_view_observer.h b/ui/app_list/views/app_list_view_observer.h
new file mode 100644
index 0000000000..f9fb61c819
--- /dev/null
+++ b/ui/app_list/views/app_list_view_observer.h
@@ -0,0 +1,24 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_APP_LIST_VIEWS_APP_LIST_VIEW_OBSERVER_H_
+#define UI_APP_LIST_VIEWS_APP_LIST_VIEW_OBSERVER_H_
+
+namespace views {
+class Widget;
+}
+
+namespace app_list {
+
+class AppListViewObserver {
+ public:
+ virtual void OnActivationChanged(views::Widget* widget, bool active) = 0;
+
+ protected:
+ virtual ~AppListViewObserver() {}
+};
+
+} // namespace app_list
+
+#endif // UI_APP_LIST_VIEWS_APP_LIST_VIEW_OBSERVER_H_
diff --git a/ui/app_list/views/apps_grid_view.cc b/ui/app_list/views/apps_grid_view.cc
index a2cba7d836..3c486ca154 100644
--- a/ui/app_list/views/apps_grid_view.cc
+++ b/ui/app_list/views/apps_grid_view.cc
@@ -31,9 +31,12 @@
#if defined(USE_AURA)
#include "ui/aura/root_window.h"
#include "ui/aura/window.h"
-#endif
+#if defined(OS_WIN)
+#include "ui/views/win/hwnd_util.h"
+#endif // defined(OS_WIN)
+#endif // defined(USE_AURA)
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/win/shortcut.h"
@@ -213,7 +216,7 @@ size_t MergeItems(AppListItemList* item_list,
} // namespace
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
// Interprets drag events sent from Windows via the drag/drop API and forwards
// them to AppsGridView.
// On Windows, in order to have the OS perform the drag properly we need to
@@ -263,6 +266,7 @@ class SynchronousDrag : public ui::DragSourceWin {
// Restore the dragged view to its original size.
drag_view_->SetSize(drag_view_size);
+ drag_view_->OnSyncDragEnd();
grid_view_->EndDrag(canceled_ || !IsCursorWithinGridView());
}
@@ -287,12 +291,12 @@ class SynchronousDrag : public ui::DragSourceWin {
drag_utils::SetDragImageOnDataObject(
image,
image.size(),
- gfx::Vector2d(drag_view_offset_.x(), drag_view_offset_.y()),
+ drag_view_offset_ - drag_view_->GetDragImageOffset(),
data);
}
HWND GetGridViewHWND() {
- return grid_view_->GetWidget()->GetTopLevelWidget()->GetNativeView();
+ return views::HWNDForView(grid_view_);
}
bool IsCursorWithinGridView() {
@@ -320,7 +324,7 @@ class SynchronousDrag : public ui::DragSourceWin {
DISALLOW_COPY_AND_ASSIGN(SynchronousDrag);
};
-#endif // defined(OS_WIN) && !defined(USE_AURA)
+#endif // defined(OS_WIN)
AppsGridView::AppsGridView(AppsGridViewDelegate* delegate,
PaginationModel* pagination_model,
@@ -460,7 +464,7 @@ void AppsGridView::InitiateDrag(AppListItemView* view,
}
void AppsGridView::OnGotShortcutPath(const base::FilePath& path) {
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
// Drag may have ended before we get the shortcut path.
if (!synchronous_drag_)
return;
@@ -474,10 +478,15 @@ void AppsGridView::OnGotShortcutPath(const base::FilePath& path) {
}
void AppsGridView::StartSettingUpSynchronousDrag() {
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
if (!delegate_)
return;
+ // Favor the drag and drop host over native win32 drag. For the Win8/ash
+ // launcher we want to have ashes drag and drop over win32's.
+ if (drag_and_drop_host_)
+ return;
+
delegate_->GetShortcutPathForApp(
drag_view_->model()->id(),
base::Bind(&AppsGridView::OnGotShortcutPath, base::Unretained(this)));
@@ -486,7 +495,7 @@ void AppsGridView::StartSettingUpSynchronousDrag() {
}
bool AppsGridView::RunSynchronousDrag() {
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
if (synchronous_drag_ && synchronous_drag_->CanRun()) {
synchronous_drag_->Run();
synchronous_drag_ = NULL;
@@ -497,13 +506,16 @@ bool AppsGridView::RunSynchronousDrag() {
}
void AppsGridView::CleanUpSynchronousDrag() {
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
synchronous_drag_ = NULL;
#endif
}
void AppsGridView::UpdateDragFromItem(Pointer pointer,
const ui::LocatedEvent& event) {
+ // EndDrag was called before if |drag_view_| is NULL.
+ if (!drag_view_)
+ return;
gfx::Point drag_point_in_grid_view;
ExtractDragLocation(event, &drag_point_in_grid_view);
UpdateDrag(pointer, drag_point_in_grid_view);
@@ -1097,7 +1109,7 @@ void AppsGridView::AnimationBetweenRows(views::View* view,
void AppsGridView::ExtractDragLocation(const ui::LocatedEvent& event,
gfx::Point* drag_point) {
-#if defined(USE_AURA)
+#if defined(USE_AURA) && !defined(OS_WIN)
// Use root location of |event| instead of location in |drag_view_|'s
// coordinates because |drag_view_| has a scale transform and location
// could have integer round error and causes jitter.
diff --git a/ui/app_list/views/apps_grid_view.h b/ui/app_list/views/apps_grid_view.h
index 2ff51fad8e..043f6facb3 100644
--- a/ui/app_list/views/apps_grid_view.h
+++ b/ui/app_list/views/apps_grid_view.h
@@ -20,7 +20,7 @@
#include "ui/views/view.h"
#include "ui/views/view_model.h"
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
#include "ui/base/dragdrop/drag_source_win.h"
#endif
@@ -36,7 +36,7 @@ class WebView;
namespace app_list {
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
class SynchronousDrag;
#endif
@@ -371,7 +371,7 @@ class APP_LIST_EXPORT AppsGridView : public views::View,
// Page the drag started on.
int drag_start_page_;
-#if defined(OS_WIN) && !defined(USE_AURA)
+#if defined(OS_WIN)
// Created when a drag is started (ie: drag exceeds the drag threshold), but
// not Run() until supplied with a shortcut path.
scoped_refptr<SynchronousDrag> synchronous_drag_;
diff --git a/ui/app_list/views/folder_header_view.cc b/ui/app_list/views/folder_header_view.cc
index 3c21813700..9699e8febf 100644
--- a/ui/app_list/views/folder_header_view.cc
+++ b/ui/app_list/views/folder_header_view.cc
@@ -12,8 +12,10 @@
#include "ui/app_list/views/app_list_folder_view.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/canvas.h"
+#include "ui/views/border.h"
#include "ui/views/controls/button/image_button.h"
#include "ui/views/controls/textfield/textfield.h"
+#include "ui/views/painter.h"
namespace app_list {
@@ -36,6 +38,10 @@ class FolderHeaderView::FolderNameView : public views::Textfield {
public:
FolderNameView() {
set_border(views::Border::CreateEmptyBorder(1, 1, 1, 1));
+ const SkColor kFocusBorderColor = SkColorSetRGB(64, 128, 250);
+ SetFocusPainter(views::Painter::CreateSolidFocusPainter(
+ kFocusBorderColor,
+ gfx::Insets(0, 0, 1, 1)));
}
virtual ~FolderNameView() {
@@ -46,15 +52,6 @@ class FolderHeaderView::FolderNameView : public views::Textfield {
return gfx::Size(kFolderNameWidth, kFolderNameHeight);
}
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE {
- const SkColor kFocusBorderColor = SkColorSetRGB(64, 128, 250);
- if (HasFocus()) {
- gfx::Rect rect = GetLocalBounds();
- rect.Inset(0, 0, 1, 1);
- canvas->DrawRect(rect, kFocusBorderColor);
- }
- }
-
private:
DISALLOW_COPY_AND_ASSIGN(FolderNameView);
};
diff --git a/ui/app_list/views/page_switcher.h b/ui/app_list/views/page_switcher.h
index 7e1ab9dc60..b05da99ee0 100644
--- a/ui/app_list/views/page_switcher.h
+++ b/ui/app_list/views/page_switcher.h
@@ -50,7 +50,7 @@ class PageSwitcher : public views::View,
virtual void TransitionStarted() OVERRIDE;
virtual void TransitionChanged() OVERRIDE;
- PaginationModel* model_; // Owned by parent AppListView.
+ PaginationModel* model_; // Owned by AppListController.
views::View* buttons_; // Owned by views hierarchy.
DISALLOW_COPY_AND_ASSIGN(PageSwitcher);
diff --git a/ui/app_list/views/search_box_view.cc b/ui/app_list/views/search_box_view.cc
index ba40bf3b5f..c975177777 100644
--- a/ui/app_list/views/search_box_view.cc
+++ b/ui/app_list/views/search_box_view.cc
@@ -41,16 +41,14 @@ const int kMenuXOffsetFromButton = -7;
} // namespace
SearchBoxView::SearchBoxView(SearchBoxViewDelegate* delegate,
- AppListViewDelegate* view_delegate,
- AppListModel* model)
+ AppListViewDelegate* view_delegate)
: delegate_(delegate),
view_delegate_(view_delegate),
- model_(model),
+ model_(NULL),
icon_view_(new views::ImageView),
speech_button_(NULL),
search_box_(new views::Textfield),
contents_view_(NULL) {
- DCHECK(model_);
AddChildView(icon_view_);
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
@@ -71,16 +69,25 @@ SearchBoxView::SearchBoxView(SearchBoxViewDelegate* delegate,
search_box_->SetController(this);
AddChildView(search_box_);
- model_->search_box()->AddObserver(this);
- IconChanged();
- SpeechRecognitionButtonPropChanged();
- HintTextChanged();
+ ModelChanged();
}
SearchBoxView::~SearchBoxView() {
model_->search_box()->RemoveObserver(this);
}
+void SearchBoxView::ModelChanged() {
+ if (model_)
+ model_->search_box()->RemoveObserver(this);
+
+ model_ = view_delegate_->GetModel();
+ DCHECK(model_);
+ model_->search_box()->AddObserver(this);
+ IconChanged();
+ SpeechRecognitionButtonPropChanged();
+ HintTextChanged();
+}
+
bool SearchBoxView::HasSearch() const {
return !search_box_->text().empty();
}
@@ -201,19 +208,16 @@ void SearchBoxView::IconChanged() {
}
void SearchBoxView::SpeechRecognitionButtonPropChanged() {
- const SearchBoxModel::ToggleButtonProperty* speech_button_prop =
+ const SearchBoxModel::ButtonProperty* speech_button_prop =
model_->search_box()->speech_button();
if (speech_button_prop) {
if (!speech_button_) {
- speech_button_ = new views::ToggleImageButton(this);
+ speech_button_ = new views::ImageButton(this);
AddChildView(speech_button_);
}
speech_button_->SetImage(views::Button::STATE_NORMAL,
&speech_button_prop->icon);
- speech_button_->SetToggledImage(views::Button::STATE_NORMAL,
- &speech_button_prop->toggled_icon);
speech_button_->SetTooltipText(speech_button_prop->tooltip);
- speech_button_->SetToggledTooltipText(speech_button_prop->toggled_tooltip);
} else {
if (speech_button_) {
// Deleting a view will detach it from its parent.
@@ -223,11 +227,6 @@ void SearchBoxView::SpeechRecognitionButtonPropChanged() {
}
}
-void SearchBoxView::SetSpeechRecognitionButtonState(bool toggled) {
- if (speech_button_)
- speech_button_->SetToggled(toggled);
-}
-
void SearchBoxView::HintTextChanged() {
search_box_->set_placeholder_text(model_->search_box()->hint_text());
}
diff --git a/ui/app_list/views/search_box_view.h b/ui/app_list/views/search_box_view.h
index ad12ede57b..440ffba742 100644
--- a/ui/app_list/views/search_box_view.h
+++ b/ui/app_list/views/search_box_view.h
@@ -38,10 +38,10 @@ class SearchBoxView : public views::View,
public SearchBoxModelObserver {
public:
SearchBoxView(SearchBoxViewDelegate* delegate,
- AppListViewDelegate* view_delegate,
- AppListModel* model);
+ AppListViewDelegate* view_delegate);
virtual ~SearchBoxView();
+ void ModelChanged();
bool HasSearch() const;
void ClearSearch();
void InvalidateMenu();
@@ -81,19 +81,18 @@ class SearchBoxView : public views::View,
// Overridden from SearchBoxModelObserver:
virtual void IconChanged() OVERRIDE;
virtual void SpeechRecognitionButtonPropChanged() OVERRIDE;
- virtual void SetSpeechRecognitionButtonState(bool toggled) OVERRIDE;
virtual void HintTextChanged() OVERRIDE;
virtual void SelectionModelChanged() OVERRIDE;
virtual void TextChanged() OVERRIDE;
SearchBoxViewDelegate* delegate_; // Not owned.
AppListViewDelegate* view_delegate_; // Not owned.
- AppListModel* model_; // Owned by AppListView.
+ AppListModel* model_; // Owned by the profile-keyed service.
scoped_ptr<AppListMenuViews> menu_;
views::ImageView* icon_view_; // Owned by views hierarchy.
- views::ToggleImageButton* speech_button_; // Owned by views hierarchy.
+ views::ImageButton* speech_button_; // Owned by views hierarchy.
views::MenuButton* menu_button_; // Owned by views hierarchy.
views::Textfield* search_box_; // Owned by views hierarchy.
views::View* contents_view_; // Owned by views hierarchy.
diff --git a/ui/app_list/views/speech_view.cc b/ui/app_list/views/speech_view.cc
new file mode 100644
index 0000000000..d3c64be9b3
--- /dev/null
+++ b/ui/app_list/views/speech_view.cc
@@ -0,0 +1,227 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/app_list/views/speech_view.h"
+
+#include "base/strings/utf_string_conversions.h"
+#include "grit/ui_resources.h"
+#include "grit/ui_strings.h"
+#include "ui/app_list/app_list_model.h"
+#include "ui/app_list/app_list_view_delegate.h"
+#include "ui/app_list/speech_ui_model.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/canvas.h"
+#include "ui/views/animation/bounds_animator.h"
+#include "ui/views/background.h"
+#include "ui/views/controls/button/image_button.h"
+#include "ui/views/controls/label.h"
+#include "ui/views/layout/fill_layout.h"
+#include "ui/views/shadow_border.h"
+
+namespace app_list {
+
+namespace {
+
+const int kShadowOffset = 1;
+const int kShadowBlur = 4;
+const int kSpeechViewMaxHeight = 300;
+const int kTextSize = 20;
+const int kMicButtonMargin = 12;
+const int kTextMargin = 32;
+const int kIndicatorRadiusMax = 100;
+const int kIndicatorAnimationDuration = 100;
+const SkColor kShadowColor = SkColorSetARGB(0.3 * 255, 0, 0, 0);
+const SkColor kHintTextColor = SkColorSetRGB(119, 119, 119);
+const SkColor kResultTextColor = SkColorSetRGB(178, 178, 178);
+const SkColor kSoundLevelIndicatorColor = SkColorSetRGB(219, 219, 219);
+
+// TODO(mukai): check with multiple devices to make sure these limits.
+const int16 kSoundLevelMin = 50;
+const int16 kSoundLevelMax = 210;
+
+class SoundLevelIndicator : public views::View {
+ public:
+ SoundLevelIndicator();
+ virtual ~SoundLevelIndicator();
+
+ private:
+ // Overridden from views::View:
+ virtual void Paint(gfx::Canvas* canvas) OVERRIDE;
+
+ DISALLOW_COPY_AND_ASSIGN(SoundLevelIndicator);
+};
+
+SoundLevelIndicator::SoundLevelIndicator() {}
+
+SoundLevelIndicator::~SoundLevelIndicator() {}
+
+void SoundLevelIndicator::Paint(gfx::Canvas* canvas) {
+ SkPaint paint;
+ paint.setStyle(SkPaint::kFill_Style);
+ paint.setColor(kSoundLevelIndicatorColor);
+ canvas->DrawCircle(bounds().CenterPoint(), width() / 2, paint);
+}
+
+// MicButton is an image button with circular hit area.
+class MicButton : public views::ImageButton {
+ public:
+ explicit MicButton(views::ButtonListener* listener);
+ virtual ~MicButton();
+
+ private:
+ // Overridden from views::View:
+ virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE;
+
+ DISALLOW_COPY_AND_ASSIGN(MicButton);
+};
+
+MicButton::MicButton(views::ButtonListener* listener)
+ : views::ImageButton(listener) {}
+
+MicButton::~MicButton() {}
+
+bool MicButton::HitTestRect(const gfx::Rect& rect) const {
+ if (!views::ImageButton::HitTestRect(rect))
+ return false;
+
+ gfx::Rect local_bounds = GetLocalBounds();
+ int radius = local_bounds.width() / 2;
+ return (rect.origin() - local_bounds.CenterPoint()).LengthSquared() <
+ radius * radius;
+}
+
+} // namespace
+
+// static
+
+SpeechView::SpeechView(AppListViewDelegate* delegate)
+ : delegate_(delegate) {
+ set_border(new views::ShadowBorder(
+ kShadowBlur,
+ kShadowColor,
+ kShadowOffset, // Vertical offset.
+ 0));
+
+ // To keep the painting order of the border and the background, this class
+ // actually has a single child of 'container' which has white background and
+ // contains all components.
+ views::View* container = new views::View();
+ container->set_background(
+ views::Background::CreateSolidBackground(SK_ColorWHITE));
+
+ // TODO(mukai): add Google logo.
+ indicator_ = new SoundLevelIndicator();
+ indicator_->SetVisible(false);
+ container->AddChildView(indicator_);
+
+ mic_button_ = new MicButton(this);
+ container->AddChildView(mic_button_);
+
+ // TODO(mukai): use BoundedLabel to cap 2 lines.
+ speech_result_ = new views::Label();
+ speech_result_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+ const gfx::FontList& font_list = speech_result_->font_list();
+ speech_result_->SetFontList(font_list.DeriveFontListWithSize(kTextSize));
+ speech_result_->SetMultiLine(true);
+ container->AddChildView(speech_result_);
+
+ AddChildView(container);
+
+ delegate_->GetSpeechUI()->AddObserver(this);
+ indicator_animator_.reset(new views::BoundsAnimator(container));
+ indicator_animator_->SetAnimationDuration(kIndicatorAnimationDuration);
+ indicator_animator_->set_tween_type(gfx::Tween::LINEAR);
+
+ Reset();
+}
+
+SpeechView::~SpeechView() {
+ delegate_->GetSpeechUI()->RemoveObserver(this);
+}
+
+void SpeechView::Reset() {
+ ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
+ speech_result_->SetText(l10n_util::GetStringUTF16(
+ IDS_APP_LIST_SPEECH_HINT_TEXT));
+ speech_result_->SetEnabledColor(kHintTextColor);
+ mic_button_->SetImage(views::Button::STATE_NORMAL, bundle.GetImageSkiaNamed(
+ IDR_APP_LIST_SPEECH_MIC_ON));
+}
+
+int SpeechView::GetIndicatorRadius(int16 level) {
+ level = std::min(std::max(level, kSoundLevelMin), kSoundLevelMax);
+ int radius_min = mic_button_->width() / 2;
+ return (level - kSoundLevelMin) * (kIndicatorRadiusMax - radius_min) /
+ (kSoundLevelMax - kSoundLevelMin) + radius_min;
+}
+
+void SpeechView::Layout() {
+ views::View* container = child_at(0);
+ container->SetBoundsRect(GetContentsBounds());
+
+ // Because container is a pure View, this class should layout its children.
+ // TODO(mukai): arrange Google logo.
+ const gfx::Rect contents_bounds = container->GetContentsBounds();
+ gfx::Size mic_size = mic_button_->GetPreferredSize();
+ gfx::Point mic_origin(
+ contents_bounds.right() - kMicButtonMargin - mic_size.width(),
+ contents_bounds.y() + kMicButtonMargin);
+ mic_button_->SetBoundsRect(gfx::Rect(mic_origin, mic_size));
+
+ int speech_width = contents_bounds.width() - kTextMargin * 2;
+ speech_result_->SizeToFit(speech_width);
+ int speech_height = speech_result_->GetHeightForWidth(speech_width);
+ speech_result_->SetBounds(
+ contents_bounds.x() + kTextMargin,
+ contents_bounds.bottom() - kTextMargin - speech_height,
+ speech_width,
+ speech_height);
+}
+
+gfx::Size SpeechView::GetPreferredSize() {
+ return gfx::Size(0, kSpeechViewMaxHeight);
+}
+
+void SpeechView::ButtonPressed(views::Button* sender, const ui::Event& event) {
+ delegate_->ToggleSpeechRecognition();
+}
+
+void SpeechView::OnSpeechSoundLevelChanged(int16 level) {
+ if (!visible())
+ return;
+
+ gfx::Point origin = mic_button_->bounds().CenterPoint();
+ int radius = GetIndicatorRadius(level);
+ origin.Offset(-radius, -radius);
+ gfx::Rect indicator_bounds =
+ gfx::Rect(origin, gfx::Size(radius * 2, radius * 2));
+ if (indicator_->visible()) {
+ indicator_animator_->AnimateViewTo(indicator_, indicator_bounds);
+ } else {
+ indicator_->SetVisible(true);
+ indicator_->SetBoundsRect(indicator_bounds);
+ }
+}
+
+void SpeechView::OnSpeechResult(const base::string16& result,
+ bool is_final) {
+ speech_result_->SetText(result);
+ speech_result_->SetEnabledColor(kResultTextColor);
+}
+
+void SpeechView::OnSpeechRecognitionStateChanged(
+ SpeechRecognitionState new_state) {
+ int resource_id = IDR_APP_LIST_SPEECH_MIC_OFF;
+ if (new_state == SPEECH_RECOGNITION_ON)
+ resource_id = IDR_APP_LIST_SPEECH_MIC_ON;
+ else if (new_state == SPEECH_RECOGNITION_IN_SPEECH)
+ resource_id = IDR_APP_LIST_SPEECH_MIC_RECORDING;
+
+ ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
+ mic_button_->SetImage(views::Button::STATE_NORMAL, bundle.GetImageSkiaNamed(
+ resource_id));
+}
+
+} // namespace app_list
diff --git a/ui/app_list/views/speech_view.h b/ui/app_list/views/speech_view.h
new file mode 100644
index 0000000000..18644daa82
--- /dev/null
+++ b/ui/app_list/views/speech_view.h
@@ -0,0 +1,64 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_APP_LIST_VIEWS_SPEECH_VIEW_H_
+#define UI_APP_LIST_VIEWS_SPEECH_VIEW_H_
+
+#include "ui/app_list/speech_ui_model_observer.h"
+#include "ui/views/controls/button/button.h"
+#include "ui/views/view.h"
+
+namespace views {
+class BoundsAnimator;
+class ImageButton;
+class Label;
+}
+
+namespace app_list {
+
+class AppListViewDelegate;
+class SpeechCardView;
+
+// SpeechView provides the card-like UI for the search-by-speech.
+class SpeechView : public views::View,
+ public views::ButtonListener,
+ public SpeechUIModelObserver {
+ public:
+ explicit SpeechView(AppListViewDelegate* delegate);
+ virtual ~SpeechView();
+
+ // Reset to the original state.
+ void Reset();
+
+ // Overridden from views::View:
+ virtual void Layout() OVERRIDE;
+ virtual gfx::Size GetPreferredSize() OVERRIDE;
+
+ private:
+ int GetIndicatorRadius(int16 level);
+
+ // Overridden from views::ButtonListener:
+ virtual void ButtonPressed(views::Button* sender,
+ const ui::Event& event) OVERRIDE;
+
+ // Overridden from SpeechUIModelObserver:
+ virtual void OnSpeechSoundLevelChanged(int16 level) OVERRIDE;
+ virtual void OnSpeechResult(const base::string16& result,
+ bool is_final) OVERRIDE;
+ virtual void OnSpeechRecognitionStateChanged(
+ SpeechRecognitionState new_state) OVERRIDE;
+
+ AppListViewDelegate* delegate_;
+
+ views::View* indicator_;
+ views::ImageButton* mic_button_;
+ views::Label* speech_result_;
+ scoped_ptr<views::BoundsAnimator> indicator_animator_;
+
+ DISALLOW_COPY_AND_ASSIGN(SpeechView);
+};
+
+} // namespace app_list
+
+#endif // UI_APP_LIST_VIEWS_SPEECH_VIEW_H_
diff --git a/ui/aura/aura.gyp b/ui/aura/aura.gyp
index 36c4908ce3..5cd992228b 100644
--- a/ui/aura/aura.gyp
+++ b/ui/aura/aura.gyp
@@ -99,7 +99,10 @@
'root_window.h',
'window.cc',
'window.h',
+ 'window_targeter.cc',
+ 'window_targeter.h',
'window_delegate.h',
+ 'window_layer_type.h',
'window_observer.h',
'window_tracker.cc',
'window_tracker.h',
@@ -148,7 +151,6 @@
'../ui.gyp:ui',
'../ui_unittests.gyp:ui_test_support',
'aura',
- 'aura_test_support_pak',
],
'include_dirs': [
'..',
@@ -161,8 +163,6 @@
'test/env_test_helper.h',
'test/event_generator.cc',
'test/event_generator.h',
- 'test/test_aura_initializer.cc',
- 'test/test_aura_initializer.h',
'test/test_cursor_client.cc',
'test/test_cursor_client.h',
'test/test_event_handler.cc',
@@ -187,38 +187,6 @@
'msvs_disabled_warnings': [ 4267, ],
},
{
- # We build a minimal set of resources required for aura_test_support.
- 'target_name': 'aura_test_support_pak',
- 'type': 'none',
- 'dependencies': [
- '<(DEPTH)/ui/base/strings/ui_strings.gyp:ui_strings',
- '<(DEPTH)/ui/resources/ui_resources.gyp:ui_resources',
- ],
- 'variables': {
- 'repack_path': '<(DEPTH)/tools/grit/grit/format/repack.py',
- },
- 'actions': [
- {
- 'action_name': 'repack_aura_test_support_pack',
- 'variables': {
- 'pak_inputs': [
- '<(SHARED_INTERMEDIATE_DIR)/ui/app_locale_settings/app_locale_settings_en-US.pak',
- '<(SHARED_INTERMEDIATE_DIR)/ui/ui_resources/ui_resources_100_percent.pak',
- ],
- },
- 'inputs': [
- '<(repack_path)',
- '<@(pak_inputs)',
- ],
- 'outputs': [
- '<(PRODUCT_DIR)/aura_test_support_resources.pak',
- ],
- 'action': ['python', '<(repack_path)', '<@(_outputs)',
- '<@(pak_inputs)'],
- },
- ],
- },
- {
'target_name': 'aura_demo',
'type': 'executable',
'dependencies': [
@@ -298,6 +266,7 @@
'test/run_all_unittests.cc',
'test/test_suite.cc',
'test/test_suite.h',
+ 'window_targeter_unittest.cc',
'window_unittest.cc',
],
'conditions': [
diff --git a/ui/aura/client/default_activation_client.cc b/ui/aura/client/default_activation_client.cc
index 629f12ad2d..ccb660b81f 100644
--- a/ui/aura/client/default_activation_client.cc
+++ b/ui/aura/client/default_activation_client.cc
@@ -102,7 +102,6 @@ void DefaultActivationClient::OnWindowDestroyed(Window* window) {
last_active_ = NULL;
if (window == GetActiveWindow()) {
- window->RemoveObserver(this);
active_windows_.pop_back();
Window* next_active = GetActiveWindow();
if (next_active && aura::client::GetActivationChangeObserver(next_active)) {
diff --git a/ui/aura/env.cc b/ui/aura/env.cc
index 0314480c23..0982d91ad2 100644
--- a/ui/aura/env.cc
+++ b/ui/aura/env.cc
@@ -10,6 +10,7 @@
#include "ui/aura/window.h"
#include "ui/compositor/compositor.h"
#include "ui/compositor/compositor_switches.h"
+#include "ui/events/event_target_iterator.h"
#if defined(USE_X11)
#include "base/message_loop/message_pump_x11.h"
@@ -128,4 +129,13 @@ ui::EventTarget* Env::GetParentTarget() {
return NULL;
}
+scoped_ptr<ui::EventTargetIterator> Env::GetChildIterator() const {
+ return scoped_ptr<ui::EventTargetIterator>();
+}
+
+ui::EventTargeter* Env::GetEventTargeter() {
+ NOTREACHED();
+ return NULL;
+}
+
} // namespace aura
diff --git a/ui/aura/env.h b/ui/aura/env.h
index 4968d3990e..e326781264 100644
--- a/ui/aura/env.h
+++ b/ui/aura/env.h
@@ -92,6 +92,8 @@ class AURA_EXPORT Env : public ui::EventTarget {
// Overridden from ui::EventTarget:
virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE;
virtual ui::EventTarget* GetParentTarget() OVERRIDE;
+ virtual scoped_ptr<ui::EventTargetIterator> GetChildIterator() const OVERRIDE;
+ virtual ui::EventTargeter* GetEventTargeter() OVERRIDE;
ObserverList<EnvObserver> observers_;
#if !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(USE_X11)
diff --git a/ui/aura/gestures/gesture_recognizer_unittest.cc b/ui/aura/gestures/gesture_recognizer_unittest.cc
index 5ae9426eb1..3a18d1fffc 100644
--- a/ui/aura/gestures/gesture_recognizer_unittest.cc
+++ b/ui/aura/gestures/gesture_recognizer_unittest.cc
@@ -2893,9 +2893,9 @@ TEST_F(GestureRecognizerTest, FlushAllOnHide) {
dispatcher()->AsRootWindowHostDelegate()->OnHostTouchEvent(&press2);
window->Hide();
EXPECT_EQ(NULL,
- ui::GestureRecognizer::Get()->GetTouchLockedTarget(&press1));
+ ui::GestureRecognizer::Get()->GetTouchLockedTarget(press1));
EXPECT_EQ(NULL,
- ui::GestureRecognizer::Get()->GetTouchLockedTarget(&press2));
+ ui::GestureRecognizer::Get()->GetTouchLockedTarget(press2));
}
TEST_F(GestureRecognizerTest, LongPressTimerStopsOnPreventDefaultedTouchMoves) {
@@ -3564,10 +3564,10 @@ TEST_F(GestureRecognizerTest,
ui::GestureRecognizer* gesture_recognizer = ui::GestureRecognizer::Get();
EXPECT_EQ(window.get(),
- gesture_recognizer->GetTouchLockedTarget(&press));
+ gesture_recognizer->GetTouchLockedTarget(press));
gesture_recognizer->TransferEventsTo(window.get(), NULL);
EXPECT_EQ(NULL,
- gesture_recognizer->GetTouchLockedTarget(&press));
+ gesture_recognizer->GetTouchLockedTarget(press));
// The event-handler removes |window| from its parent on the first
// touch-cancel event, so it won't receive the second touch-cancel event.
EXPECT_EQ(1, handler->touch_cancelled_count());
diff --git a/ui/aura/remote_root_window_host_win.cc b/ui/aura/remote_root_window_host_win.cc
index 6084885e1d..f6de429e2d 100644
--- a/ui/aura/remote_root_window_host_win.cc
+++ b/ui/aura/remote_root_window_host_win.cc
@@ -11,9 +11,15 @@
#include "base/message_loop/message_loop.h"
#include "ipc/ipc_message.h"
#include "ipc/ipc_sender.h"
+#include "ui/aura/client/aura_constants.h"
#include "ui/aura/client/cursor_client.h"
#include "ui/aura/root_window.h"
+#include "ui/aura/window_property.h"
#include "ui/base/cursor/cursor_loader_win.h"
+#include "ui/base/ime/composition_text.h"
+#include "ui/base/ime/input_method.h"
+#include "ui/base/ime/remote_input_method_win.h"
+#include "ui/base/ime/text_input_client.h"
#include "ui/events/event_utils.h"
#include "ui/events/keycodes/keyboard_code_conversion_win.h"
#include "ui/base/view_prop.h"
@@ -54,6 +60,25 @@ void SetVirtualKeyStates(uint32 flags) {
::SetKeyboardState(keyboard_state);
}
+void FillCompositionText(
+ const string16& text,
+ int32 selection_start,
+ int32 selection_end,
+ const std::vector<metro_viewer::UnderlineInfo>& underlines,
+ ui::CompositionText* composition_text) {
+ composition_text->Clear();
+ composition_text->text = text;
+ composition_text->selection.set_start(selection_start);
+ composition_text->selection.set_end(selection_end);
+ composition_text->underlines.resize(underlines.size());
+ for (size_t i = 0; i < underlines.size(); ++i) {
+ composition_text->underlines[i].start_offset = underlines[i].start_offset;
+ composition_text->underlines[i].end_offset = underlines[i].end_offset;
+ composition_text->underlines[i].color = SK_ColorBLACK;
+ composition_text->underlines[i].thick = underlines[i].thick;
+ }
+}
+
} // namespace
void HandleOpenFile(const base::string16& title,
@@ -110,9 +135,11 @@ void HandleSelectFolder(const base::string16& title,
}
void HandleActivateDesktop(const base::FilePath& shortcut,
+ bool ash_exit,
const ActivateDesktopCompleted& on_success) {
DCHECK(aura::RemoteRootWindowHostWin::Instance());
aura::RemoteRootWindowHostWin::Instance()->HandleActivateDesktop(shortcut,
+ ash_exit,
on_success);
}
@@ -134,7 +161,8 @@ RemoteRootWindowHostWin::RemoteRootWindowHostWin(const gfx::Rect& bounds)
: remote_window_(NULL),
host_(NULL),
ignore_mouse_moves_until_set_cursor_ack_(false),
- event_flags_(0) {
+ event_flags_(0),
+ window_size_(aura::RootWindowHost::GetNativeScreenSize()) {
prop_.reset(new ui::ViewProp(NULL, kRootWindowHostWinKey, this));
}
@@ -151,6 +179,12 @@ void RemoteRootWindowHostWin::Connected(IPC::Sender* host, HWND remote_window) {
void RemoteRootWindowHostWin::Disconnected() {
// Don't CHECK here, Disconnected is called on a channel error which can
// happen before we're successfully Connected.
+ if (!host_)
+ return;
+ ui::RemoteInputMethodPrivateWin* remote_input_method_private =
+ GetRemoteInputMethodPrivate();
+ if (remote_input_method_private)
+ remote_input_method_private->SetRemoteDelegate(NULL);
host_ = NULL;
remote_window_ = NULL;
}
@@ -181,10 +215,14 @@ bool RemoteRootWindowHostWin::OnMessageReceived(const IPC::Message& message) {
OnSelectFolderDone)
IPC_MESSAGE_HANDLER(MetroViewerHostMsg_SetCursorPosAck,
OnSetCursorPosAck)
- IPC_MESSAGE_HANDLER(MetroViewerHostMsg_WindowSizeChanged,
- OnWindowSizeChanged)
IPC_MESSAGE_HANDLER(MetroViewerHostMsg_ActivateDesktopDone,
OnDesktopActivated)
+ IPC_MESSAGE_HANDLER(MetroViewerHostMsg_ImeCompositionChanged,
+ OnImeCompositionChanged)
+ IPC_MESSAGE_HANDLER(MetroViewerHostMsg_ImeTextCommitted,
+ OnImeTextCommitted)
+ IPC_MESSAGE_HANDLER(MetroViewerHostMsg_ImeInputSourceChanged,
+ OnImeInputSourceChanged)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@@ -200,12 +238,13 @@ void RemoteRootWindowHostWin::HandleOpenURLOnDesktop(
void RemoteRootWindowHostWin::HandleActivateDesktop(
const base::FilePath& shortcut,
+ bool ash_exit,
const ActivateDesktopCompleted& on_success) {
if (!host_)
return;
DCHECK(activate_completed_callback_.is_null());
activate_completed_callback_ = on_success;
- host_->Send(new MetroViewerHostMsg_ActivateDesktop(shortcut));
+ host_->Send(new MetroViewerHostMsg_ActivateDesktop(shortcut, ash_exit));
}
void RemoteRootWindowHostWin::HandleOpenFile(
@@ -294,6 +333,11 @@ void RemoteRootWindowHostWin::HandleSelectFolder(
host_->Send(new MetroViewerHostMsg_DisplaySelectFolder(title));
}
+void RemoteRootWindowHostWin::HandleWindowSizeChanged(uint32 width,
+ uint32 height) {
+ SetBounds(gfx::Rect(0, 0, width, height));
+}
+
bool RemoteRootWindowHostWin::IsForegroundWindow() {
return ::GetForegroundWindow() == remote_window_;
}
@@ -314,6 +358,10 @@ gfx::AcceleratedWidget RemoteRootWindowHostWin::GetAcceleratedWidget() {
}
void RemoteRootWindowHostWin::Show() {
+ ui::RemoteInputMethodPrivateWin* remote_input_method_private =
+ GetRemoteInputMethodPrivate();
+ if (remote_input_method_private)
+ remote_input_method_private->SetRemoteDelegate(this);
}
void RemoteRootWindowHostWin::Hide() {
@@ -324,11 +372,11 @@ void RemoteRootWindowHostWin::ToggleFullScreen() {
}
gfx::Rect RemoteRootWindowHostWin::GetBounds() const {
- gfx::Rect r(gfx::Point(0, 0), aura::RootWindowHost::GetNativeScreenSize());
- return r;
+ return gfx::Rect(window_size_);
}
void RemoteRootWindowHostWin::SetBounds(const gfx::Rect& bounds) {
+ window_size_ = bounds.size();
delegate_->OnHostResized(bounds.size());
}
@@ -418,6 +466,27 @@ void RemoteRootWindowHostWin::OnDeviceScaleFactorChanged(
void RemoteRootWindowHostWin::PrepareForShutdown() {
}
+void RemoteRootWindowHostWin::CancelComposition() {
+ host_->Send(new MetroViewerHostMsg_ImeCancelComposition);
+}
+
+void RemoteRootWindowHostWin::OnTextInputClientUpdated(
+ const std::vector<int32>& input_scopes,
+ const std::vector<gfx::Rect>& composition_character_bounds) {
+ std::vector<metro_viewer::CharacterBounds> character_bounds;
+ for (size_t i = 0; i < composition_character_bounds.size(); ++i) {
+ const gfx::Rect& rect = composition_character_bounds[i];
+ metro_viewer::CharacterBounds bounds;
+ bounds.left = rect.x();
+ bounds.top = rect.y();
+ bounds.right = rect.right();
+ bounds.bottom = rect.bottom();
+ character_bounds.push_back(bounds);
+ }
+ host_->Send(new MetroViewerHostMsg_ImeTextInputClientUpdated(
+ input_scopes, character_bounds));
+}
+
void RemoteRootWindowHostWin::OnMouseMoved(int32 x, int32 y, int32 flags) {
if (ignore_mouse_moves_until_set_cursor_ack_)
return;
@@ -571,16 +640,51 @@ void RemoteRootWindowHostWin::OnSetCursorPosAck() {
ignore_mouse_moves_until_set_cursor_ack_ = false;
}
-void RemoteRootWindowHostWin::OnWindowSizeChanged(uint32 width, uint32 height) {
- SetBounds(gfx::Rect(0, 0, width, height));
-}
-
void RemoteRootWindowHostWin::OnDesktopActivated() {
ActivateDesktopCompleted temp = activate_completed_callback_;
activate_completed_callback_.Reset();
temp.Run();
}
+ui::RemoteInputMethodPrivateWin*
+RemoteRootWindowHostWin::GetRemoteInputMethodPrivate() {
+ ui::InputMethod* input_method = GetAshWindow()->GetProperty(
+ aura::client::kRootWindowInputMethodKey);
+ return ui::RemoteInputMethodPrivateWin::Get(input_method);
+}
+
+void RemoteRootWindowHostWin::OnImeCompositionChanged(
+ const string16& text,
+ int32 selection_start,
+ int32 selection_end,
+ const std::vector<metro_viewer::UnderlineInfo>& underlines) {
+ ui::RemoteInputMethodPrivateWin* remote_input_method_private =
+ GetRemoteInputMethodPrivate();
+ if (!remote_input_method_private)
+ return;
+ ui::CompositionText composition_text;
+ FillCompositionText(
+ text, selection_start, selection_end, underlines, &composition_text);
+ remote_input_method_private->OnCompositionChanged(composition_text);
+}
+
+void RemoteRootWindowHostWin::OnImeTextCommitted(const string16& text) {
+ ui::RemoteInputMethodPrivateWin* remote_input_method_private =
+ GetRemoteInputMethodPrivate();
+ if (!remote_input_method_private)
+ return;
+ remote_input_method_private->OnTextCommitted(text);
+}
+
+void RemoteRootWindowHostWin::OnImeInputSourceChanged(uint16 language_id,
+ bool is_ime) {
+ ui::RemoteInputMethodPrivateWin* remote_input_method_private =
+ GetRemoteInputMethodPrivate();
+ if (!remote_input_method_private)
+ return;
+ remote_input_method_private->OnInputSourceChanged(language_id, is_ime);
+}
+
void RemoteRootWindowHostWin::DispatchKeyboardMessage(ui::EventType type,
uint32 vkey,
uint32 repeat_count,
@@ -589,8 +693,14 @@ void RemoteRootWindowHostWin::DispatchKeyboardMessage(ui::EventType type,
bool is_character) {
SetEventFlags(flags | mouse_event_flags());
if (base::MessageLoop::current()->IsNested()) {
- uint32 message = is_character ? WM_CHAR :
- (type == ui::ET_KEY_PRESSED ? WM_KEYDOWN : WM_KEYUP);
+ int index = (flags & ui::EF_ALT_DOWN) ? 1 : 0;
+ const int char_message[] = {WM_CHAR, WM_SYSCHAR};
+ const int keydown_message[] = {WM_KEYDOWN, WM_SYSKEYDOWN};
+ const int keyup_message[] = {WM_KEYUP, WM_SYSKEYUP};
+ uint32 message = is_character
+ ? char_message[index]
+ : (type == ui::ET_KEY_PRESSED ? keydown_message[index]
+ : keyup_message[index]);
::PostThreadMessage(::GetCurrentThreadId(),
message,
vkey,
diff --git a/ui/aura/remote_root_window_host_win.h b/ui/aura/remote_root_window_host_win.h
index ed974d398c..a319d274ac 100644
--- a/ui/aura/remote_root_window_host_win.h
+++ b/ui/aura/remote_root_window_host_win.h
@@ -11,15 +11,18 @@
#include "base/compiler_specific.h"
#include "base/strings/string16.h"
#include "ui/aura/window_tree_host.h"
+#include "ui/base/ime/remote_input_method_delegate_win.h"
#include "ui/events/event.h"
#include "ui/events/event_constants.h"
#include "ui/gfx/native_widget_types.h"
+#include "ui/metro_viewer/ime_types.h"
namespace base {
class FilePath;
}
namespace ui {
+class RemoteInputMethodPrivateWin;
class ViewProp;
}
@@ -85,14 +88,19 @@ AURA_EXPORT void HandleSelectFolder(const base::string16& title,
// Handles the activate desktop command for Metro Chrome Ash. The on_success
// callback passed in is invoked when activation is completed.
+// The |ash_exit| parameter indicates whether the Ash process would be shutdown
+// after activating the desktop.
AURA_EXPORT void HandleActivateDesktop(
const base::FilePath& shortcut,
+ bool ash_exit,
const ActivateDesktopCompleted& on_success);
// RootWindowHost implementaton that receives events from a different
// process. In the case of Windows this is the Windows 8 (aka Metro)
// frontend process, which forwards input events to this class.
-class AURA_EXPORT RemoteRootWindowHostWin : public RootWindowHost {
+class AURA_EXPORT RemoteRootWindowHostWin
+ : public RootWindowHost,
+ public ui::internal::RemoteInputMethodDelegateWin {
public:
// Returns the only RemoteRootWindowHostWin, if this is the first time
// this function is called, it will call Create() wiht empty bounds.
@@ -112,7 +120,11 @@ class AURA_EXPORT RemoteRootWindowHostWin : public RootWindowHost {
void HandleOpenURLOnDesktop(const base::FilePath& shortcut,
const base::string16& url);
- void HandleActivateDesktop(const base::FilePath& shortcut,
+ // The |ash_exit| parameter indicates whether the Ash process would be
+ // shutdown after activating the desktop.
+ void HandleActivateDesktop(
+ const base::FilePath& shortcut,
+ bool ash_exit,
const ActivateDesktopCompleted& on_success);
void HandleOpenFile(const base::string16& title,
@@ -139,6 +151,8 @@ class AURA_EXPORT RemoteRootWindowHostWin : public RootWindowHost {
const SelectFolderCompletion& on_success,
const FileSelectionCanceled& on_failure);
+ void HandleWindowSizeChanged(uint32 width, uint32 height);
+
// Returns the active ASH root window.
Window* GetAshWindow();
@@ -181,9 +195,18 @@ class AURA_EXPORT RemoteRootWindowHostWin : public RootWindowHost {
const std::vector<base::FilePath>& files);
void OnSelectFolderDone(bool success, const base::FilePath& folder);
void OnSetCursorPosAck();
- void OnWindowSizeChanged(uint32 width, uint32 height);
void OnDesktopActivated();
+ // For Input Method support:
+ ui::RemoteInputMethodPrivateWin* GetRemoteInputMethodPrivate();
+ void OnImeCompositionChanged(
+ const string16& text,
+ int32 selection_start,
+ int32 selection_end,
+ const std::vector<metro_viewer::UnderlineInfo>& underlines);
+ void OnImeTextCommitted(const string16& text);
+ void OnImeInputSourceChanged(uint16 language_id, bool is_ime);
+
// RootWindowHost overrides:
virtual RootWindow* GetRootWindow() OVERRIDE;
virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE;
@@ -207,6 +230,12 @@ class AURA_EXPORT RemoteRootWindowHostWin : public RootWindowHost {
virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE;
virtual void PrepareForShutdown() OVERRIDE;
+ // ui::internal::RemoteInputMethodDelegateWin overrides:
+ virtual void CancelComposition() OVERRIDE;
+ virtual void OnTextInputClientUpdated(
+ const std::vector<int32>& input_scopes,
+ const std::vector<gfx::Rect>& composition_character_bounds) OVERRIDE;
+
// Helper function to dispatch a keyboard message to the desired target.
// The default target is the RootWindowHostDelegate. For nested message loop
// invocations we post a synthetic keyboard message directly into the message
@@ -262,6 +291,9 @@ class AURA_EXPORT RemoteRootWindowHostWin : public RootWindowHost {
// description of SetEventFlags().
uint32 event_flags_;
+ // Current size of this root window.
+ gfx::Size window_size_;
+
DISALLOW_COPY_AND_ASSIGN(RemoteRootWindowHostWin);
};
diff --git a/ui/aura/root_window.cc b/ui/aura/root_window.cc
index 81bd6bc2b1..84c2e2260b 100644
--- a/ui/aura/root_window.cc
+++ b/ui/aura/root_window.cc
@@ -21,6 +21,7 @@
#include "ui/aura/root_window_transformer.h"
#include "ui/aura/window.h"
#include "ui/aura/window_delegate.h"
+#include "ui/aura/window_targeter.h"
#include "ui/aura/window_tracker.h"
#include "ui/aura/window_tree_host.h"
#include "ui/base/hit_test.h"
@@ -148,12 +149,15 @@ RootWindow::RootWindow(const CreateParams& params)
mouse_pressed_handler_(NULL),
mouse_moved_handler_(NULL),
event_dispatch_target_(NULL),
+ old_dispatch_target_(NULL),
synthesize_mouse_move_(false),
move_hold_count_(0),
repost_event_factory_(this),
held_event_factory_(this) {
window()->set_dispatcher(this);
window()->SetName("RootWindow");
+ window()->set_event_targeter(
+ scoped_ptr<ui::EventTargeter>(new WindowTargeter()));
compositor_.reset(new ui::Compositor(host_->GetAcceleratedWidget()));
DCHECK(compositor_.get());
@@ -310,10 +314,15 @@ void RootWindow::ScheduleRedrawRect(const gfx::Rect& damage_rect) {
}
Window* RootWindow::GetGestureTarget(ui::GestureEvent* event) {
- Window* target = client::GetCaptureWindow(window());
+ Window* target = NULL;
+ if (!event->IsEndingEvent()) {
+ // The window that received the start event (e.g. scroll begin) needs to
+ // receive the end event (e.g. scroll end).
+ target = client::GetCaptureWindow(window());
+ }
if (!target) {
target = ConsumerToWindow(
- ui::GestureRecognizer::Get()->GetTargetForGestureEvent(event));
+ ui::GestureRecognizer::Get()->GetTargetForGestureEvent(*event));
}
return target;
@@ -327,7 +336,7 @@ void RootWindow::DispatchGestureEvent(ui::GestureEvent* event) {
Window* target = GetGestureTarget(event);
if (target) {
event->ConvertLocationToTarget(window(), target);
- DispatchDetails details = ProcessEvent(target, event);
+ DispatchDetails details = DispatchEvent(target, event);
if (details.dispatcher_destroyed)
return;
}
@@ -517,20 +526,7 @@ ui::EventDispatchDetails RootWindow::DispatchMouseEnterOrExit(
mouse_moved_handler_,
type,
event.flags() | ui::EF_IS_SYNTHESIZED);
- return ProcessEvent(mouse_moved_handler_, &translated_event);
-}
-
-ui::EventDispatchDetails RootWindow::ProcessEvent(Window* target,
- ui::Event* event) {
- Window* old_target = event_dispatch_target_;
- event_dispatch_target_ = target;
- DispatchDetails details = DispatchEvent(target, event);
- if (!details.dispatcher_destroyed) {
- if (event_dispatch_target_ != target)
- details.target_destroyed = true;
- event_dispatch_target_ = old_target;
- }
- return details;
+ return DispatchEvent(mouse_moved_handler_, &translated_event);
}
ui::EventDispatchDetails RootWindow::ProcessGestures(
@@ -543,7 +539,7 @@ ui::EventDispatchDetails RootWindow::ProcessGestures(
for (size_t i = 0; i < gestures->size(); ++i) {
ui::GestureEvent* event = gestures->get().at(i);
event->ConvertLocationToTarget(window(), target);
- details = ProcessEvent(target, event);
+ details = DispatchEvent(target, event);
if (details.dispatcher_destroyed || details.target_destroyed)
break;
}
@@ -629,7 +625,7 @@ void RootWindow::UpdateCapture(Window* old_capture,
ui::MouseEvent event(ui::ET_MOUSE_CAPTURE_CHANGED, gfx::Point(),
gfx::Point(), 0);
- DispatchDetails details = ProcessEvent(old_capture, &event);
+ DispatchDetails details = DispatchEvent(old_capture, &event);
if (details.dispatcher_destroyed)
return;
@@ -664,12 +660,38 @@ void RootWindow::ReleaseNativeCapture() {
}
////////////////////////////////////////////////////////////////////////////////
+// RootWindow, ui::EventProcessor implementation:
+ui::EventTarget* RootWindow::GetRootTarget() {
+ return window();
+}
+
+////////////////////////////////////////////////////////////////////////////////
// RootWindow, ui::EventDispatcherDelegate implementation:
bool RootWindow::CanDispatchToTarget(ui::EventTarget* target) {
return event_dispatch_target_ == target;
}
+ui::EventDispatchDetails RootWindow::PreDispatchEvent(ui::EventTarget* target,
+ ui::Event* event) {
+ old_dispatch_target_ = event_dispatch_target_;
+ event_dispatch_target_ = static_cast<Window*>(target);
+ return DispatchDetails();
+}
+
+ui::EventDispatchDetails RootWindow::PostDispatchEvent(ui::EventTarget* target,
+ const ui::Event& event) {
+ DispatchDetails details;
+ if (target != event_dispatch_target_)
+ details.target_destroyed = true;
+ event_dispatch_target_ = old_dispatch_target_;
+ old_dispatch_target_ = NULL;
+#ifndef NDEBUG
+ DCHECK(!event_dispatch_target_ || window()->Contains(event_dispatch_target_));
+#endif
+ return details;
+}
+
////////////////////////////////////////////////////////////////////////////////
// RootWindow, ui::GestureEventHelper implementation:
@@ -717,7 +739,7 @@ bool RootWindow::OnHostKeyEvent(ui::KeyEvent* event) {
client::GetFocusClient(window())->FocusWindow(NULL);
return false;
}
- details = ProcessEvent(focused_window ? focused_window : window(), event);
+ details = DispatchEvent(focused_window ? focused_window : window(), event);
if (details.dispatcher_destroyed)
return true;
return event->handled();
@@ -752,7 +774,7 @@ bool RootWindow::OnHostScrollEvent(ui::ScrollEvent* event) {
flags |= ui::EF_IS_NON_CLIENT;
event->set_flags(flags);
- details = ProcessEvent(target, event);
+ details = DispatchEvent(target, event);
if (details.dispatcher_destroyed)
return true;
return event->handled();
@@ -785,7 +807,7 @@ void RootWindow::OnHostCancelMode() {
ui::CancelModeEvent event;
Window* focused_window = client::GetFocusClient(window())->GetFocusedWindow();
DispatchDetails details =
- ProcessEvent(focused_window ? focused_window : window(), &event);
+ DispatchEvent(focused_window ? focused_window : window(), &event);
if (details.dispatcher_destroyed)
return;
}
@@ -830,7 +852,7 @@ void RootWindow::OnHostResized(const gfx::Size& size) {
// The layer, and the observers should be notified of the
// transformed size of the root window.
- UpdateRootWindowSize(size);
+ UpdateRootWindowSize(host_->GetBounds().size());
FOR_EACH_OBSERVER(RootWindowObserver, observers_,
OnRootWindowHostResized(this));
}
@@ -847,6 +869,10 @@ const RootWindow* RootWindow::AsRootWindow() const {
return this;
}
+ui::EventProcessor* RootWindow::GetEventProcessor() {
+ return this;
+}
+
////////////////////////////////////////////////////////////////////////////////
// RootWindow, private:
@@ -978,7 +1004,7 @@ ui::EventDispatchDetails RootWindow::DispatchMouseEventToTarget(
event->ConvertLocationToTarget(window(), target);
if (IsNonClientLocation(target, event->location()))
event->set_flags(event->flags() | ui::EF_IS_NON_CLIENT);
- return ProcessEvent(target, event);
+ return DispatchEvent(target, event);
}
return DispatchDetails();
}
@@ -1009,7 +1035,7 @@ ui::EventDispatchDetails RootWindow::DispatchTouchEventImpl(
Window* target = client::GetCaptureWindow(window());
if (!target) {
target = ConsumerToWindow(
- ui::GestureRecognizer::Get()->GetTouchLockedTarget(event));
+ ui::GestureRecognizer::Get()->GetTouchLockedTarget(*event));
if (!target) {
target = ConsumerToWindow(ui::GestureRecognizer::Get()->
GetTargetForLocation(event->location()));
@@ -1025,7 +1051,7 @@ ui::EventDispatchDetails RootWindow::DispatchTouchEventImpl(
if (!target && !window()->bounds().Contains(event->location())) {
// If the initial touch is outside the root window, target the root.
target = window();
- DispatchDetails details = ProcessEvent(target ? target : NULL, event);
+ DispatchDetails details = DispatchEvent(target ? target : NULL, event);
if (details.dispatcher_destroyed)
return details;
result = event->result();
@@ -1038,7 +1064,7 @@ ui::EventDispatchDetails RootWindow::DispatchTouchEventImpl(
}
event->ConvertLocationToTarget(window(), target);
- DispatchDetails details = ProcessEvent(target, event);
+ DispatchDetails details = DispatchEvent(target, event);
if (details.dispatcher_destroyed)
return details;
result = event->result();
diff --git a/ui/aura/root_window.h b/ui/aura/root_window.h
index 26274d45a6..d85e1d845e 100644
--- a/ui/aura/root_window.h
+++ b/ui/aura/root_window.h
@@ -21,7 +21,8 @@
#include "ui/compositor/compositor.h"
#include "ui/compositor/layer_animation_observer.h"
#include "ui/events/event_constants.h"
-#include "ui/events/event_dispatcher.h"
+#include "ui/events/event_processor.h"
+#include "ui/events/event_targeter.h"
#include "ui/events/gestures/gesture_recognizer.h"
#include "ui/events/gestures/gesture_types.h"
#include "ui/gfx/native_widget_types.h"
@@ -50,9 +51,10 @@ class RootWindowHost;
class RootWindowObserver;
class RootWindowTransformer;
class TestScreen;
+class WindowTargeter;
// RootWindow is responsible for hosting a set of windows.
-class AURA_EXPORT RootWindow : public ui::EventDispatcherDelegate,
+class AURA_EXPORT RootWindow : public ui::EventProcessor,
public ui::GestureEventHelper,
public ui::LayerAnimationObserver,
public aura::client::CaptureDelegate,
@@ -243,8 +245,6 @@ class AURA_EXPORT RootWindow : public ui::EventDispatcherDelegate,
ui::EventDispatchDetails DispatchMouseEnterOrExit(
const ui::MouseEvent& event,
ui::EventType type) WARN_UNUSED_RESULT;
- ui::EventDispatchDetails ProcessEvent(Window* target,
- ui::Event* event) WARN_UNUSED_RESULT;
ui::EventDispatchDetails ProcessGestures(
ui::GestureRecognizer::Gestures* gestures) WARN_UNUSED_RESULT;
@@ -271,8 +271,15 @@ class AURA_EXPORT RootWindow : public ui::EventDispatcherDelegate,
virtual void SetNativeCapture() OVERRIDE;
virtual void ReleaseNativeCapture() OVERRIDE;
+ // Overridden from ui::EventProcessor:
+ virtual ui::EventTarget* GetRootTarget() OVERRIDE;
+
// Overridden from ui::EventDispatcherDelegate.
virtual bool CanDispatchToTarget(ui::EventTarget* target) OVERRIDE;
+ virtual ui::EventDispatchDetails PreDispatchEvent(ui::EventTarget* target,
+ ui::Event* event) OVERRIDE;
+ virtual ui::EventDispatchDetails PostDispatchEvent(
+ ui::EventTarget* target, const ui::Event& event) OVERRIDE;
// Overridden from ui::GestureEventHelper.
virtual bool CanDispatchToConsumer(ui::GestureConsumer* consumer) OVERRIDE;
@@ -302,6 +309,7 @@ class AURA_EXPORT RootWindow : public ui::EventDispatcherDelegate,
virtual float GetDeviceScaleFactor() OVERRIDE;
virtual RootWindow* AsRootWindow() OVERRIDE;
virtual const RootWindow* AsRootWindow() const OVERRIDE;
+ virtual ui::EventProcessor* GetEventProcessor() OVERRIDE;
ui::EventDispatchDetails OnHostMouseEventImpl(ui::MouseEvent* event)
WARN_UNUSED_RESULT;
@@ -354,6 +362,7 @@ class AURA_EXPORT RootWindow : public ui::EventDispatcherDelegate,
Window* mouse_pressed_handler_;
Window* mouse_moved_handler_;
Window* event_dispatch_target_;
+ Window* old_dispatch_target_;
bool synthesize_mouse_move_;
bool waiting_on_compositing_end_;
diff --git a/ui/aura/root_window_host_win.h b/ui/aura/root_window_host_win.h
index 64215a7915..3d99821400 100644
--- a/ui/aura/root_window_host_win.h
+++ b/ui/aura/root_window_host_win.h
@@ -6,8 +6,8 @@
#define UI_AURA_ROOT_WINDOW_HOST_WIN_H_
#include "base/compiler_specific.h"
+#include "ui/aura/aura_export.h"
#include "ui/aura/window_tree_host.h"
-#include "ui/base/ui_export.h"
#include "ui/gfx/win/window_impl.h"
namespace aura {
diff --git a/ui/aura/root_window_host_x11.cc b/ui/aura/root_window_host_x11.cc
index 663edcf91d..4fb0047133 100644
--- a/ui/aura/root_window_host_x11.cc
+++ b/ui/aura/root_window_host_x11.cc
@@ -84,10 +84,8 @@ bool IsSideBezelsEnabled() {
}
#endif
-void SelectEventsForRootWindow(XDisplay* display, ::Window root_window) {
- if (!ui::IsXInput2Available())
- return;
-
+void SelectXInput2EventsForRootWindow(XDisplay* display, ::Window root_window) {
+ CHECK(ui::IsXInput2Available());
unsigned char mask[XIMaskLen(XI_LASTEVENT)] = {};
memset(mask, 0, sizeof(mask));
@@ -101,16 +99,20 @@ void SelectEventsForRootWindow(XDisplay* display, ::Window root_window) {
evmask.mask = mask;
XISelectEvents(display, root_window, &evmask, 1);
- // Selecting for touch events seems to fail on some cases (e.g. when logging
- // in incognito). So select for non-touch events first, and then select for
- // touch-events (but keep the other events in the mask, i.e. do not memset
- // |mask| back to 0).
- // TODO(sad): Figure out why this happens. http://crbug.com/153976
-#if defined(USE_XI2_MT)
- XISetMask(mask, XI_TouchBegin);
- XISetMask(mask, XI_TouchUpdate);
- XISetMask(mask, XI_TouchEnd);
- XISelectEvents(display, root_window, &evmask, 1);
+#if defined(OS_CHROMEOS)
+ if (base::SysInfo::IsRunningOnChromeOS()) {
+ // It is necessary to listen for touch events on the root window for proper
+ // touch event calibration on Chrome OS, but this is not currently necessary
+ // on the desktop. This seems to fail in some cases (e.g. when logging
+ // in incognito). So select for non-touch events first, and then select for
+ // touch-events (but keep the other events in the mask, i.e. do not memset
+ // |mask| back to 0).
+ // TODO(sad): Figure out why this happens. http://crbug.com/153976
+ XISetMask(mask, XI_TouchBegin);
+ XISetMask(mask, XI_TouchUpdate);
+ XISetMask(mask, XI_TouchEnd);
+ XISelectEvents(display, root_window, &evmask, 1);
+ }
#endif
}
@@ -344,10 +346,10 @@ RootWindowHostX11::RootWindowHostX11(const gfx::Rect& bounds)
XSelectInput(xdisplay_, xwindow_, event_mask);
XFlush(xdisplay_);
- if (ui::IsXInput2Available())
+ if (ui::IsXInput2Available()) {
ui::TouchFactory::GetInstance()->SetupXI2ForXWindow(xwindow_);
-
- SelectEventsForRootWindow(xdisplay_, x_root_window_);
+ SelectXInput2EventsForRootWindow(xdisplay_, x_root_window_);
+ }
// TODO(erg): We currently only request window deletion events. We also
// should listen for activation events and anything else that GTK+ listens
@@ -820,6 +822,10 @@ void RootWindowHostX11::OnRootWindowInitialized(RootWindow* root_window) {
SetCrOSTapPaused(false);
}
+ui::EventProcessor* RootWindowHostX11::GetEventProcessor() {
+ return delegate_->GetEventProcessor();
+}
+
bool RootWindowHostX11::DispatchEventForRootWindow(
const base::NativeEvent& event) {
switch (event->type) {
diff --git a/ui/aura/root_window_host_x11.h b/ui/aura/root_window_host_x11.h
index 53bf46e443..d4b35186a8 100644
--- a/ui/aura/root_window_host_x11.h
+++ b/ui/aura/root_window_host_x11.h
@@ -18,6 +18,7 @@
#include "ui/aura/env_observer.h"
#include "ui/aura/window_tree_host.h"
#include "ui/base/x/x11_util.h"
+#include "ui/events/event_source.h"
#include "ui/gfx/insets.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/x/x11_atom_cache.h"
@@ -34,6 +35,7 @@ class TouchEventCalibrate;
class AURA_EXPORT RootWindowHostX11 : public RootWindowHost,
public base::MessageLoop::Dispatcher,
+ public ui::EventSource,
public EnvObserver {
public:
explicit RootWindowHostX11(const gfx::Rect& bounds);
@@ -68,6 +70,10 @@ class AURA_EXPORT RootWindowHostX11 : public RootWindowHost,
// EnvObserver overrides.
virtual void OnWindowInitialized(Window* window) OVERRIDE;
virtual void OnRootWindowInitialized(RootWindow* root_window) OVERRIDE;
+
+ // ui::EventSource overrides.
+ virtual ui::EventProcessor* GetEventProcessor() OVERRIDE;
+
private:
class MouseMoveFilter;
diff --git a/ui/aura/root_window_host_x11_unittest.cc b/ui/aura/root_window_host_x11_unittest.cc
index 871ca68824..576707a09c 100644
--- a/ui/aura/root_window_host_x11_unittest.cc
+++ b/ui/aura/root_window_host_x11_unittest.cc
@@ -9,10 +9,15 @@
#include "ui/aura/root_window_host_x11.h"
#include "ui/aura/test/aura_test_base.h"
#include "ui/aura/window_tree_host_delegate.h"
+#include "ui/events/event_processor.h"
+#include "ui/events/event_target.h"
+#include "ui/events/event_target_iterator.h"
#include "ui/events/test/events_test_utils_x11.h"
namespace {
-class TestRootWindowHostDelegate : public aura::RootWindowHostDelegate {
+class TestRootWindowHostDelegate : public aura::RootWindowHostDelegate,
+ public ui::EventProcessor,
+ public ui::EventTarget {
public:
TestRootWindowHostDelegate() : last_touch_type_(ui::ET_UNKNOWN),
last_touch_id_(-1),
@@ -20,17 +25,16 @@ class TestRootWindowHostDelegate : public aura::RootWindowHostDelegate {
}
virtual ~TestRootWindowHostDelegate() {}
+ // aura::RootWindowHostDelegate:
virtual bool OnHostKeyEvent(ui::KeyEvent* event) OVERRIDE {
return true;
}
-
virtual bool OnHostMouseEvent(ui::MouseEvent* event) OVERRIDE {
return true;
}
virtual bool OnHostScrollEvent(ui::ScrollEvent* event) OVERRIDE {
return true;
}
-
virtual bool OnHostTouchEvent(ui::TouchEvent* event) OVERRIDE {
last_touch_id_ = event->touch_id();
last_touch_type_ = event->type();
@@ -39,32 +43,42 @@ class TestRootWindowHostDelegate : public aura::RootWindowHostDelegate {
}
virtual void OnHostCancelMode() OVERRIDE {}
-
- // Called when the windowing system activates the window.
virtual void OnHostActivated() OVERRIDE {}
-
- // Called when system focus is changed to another window.
virtual void OnHostLostWindowCapture() OVERRIDE {}
-
- // Called when the windowing system has mouse grab because it's performing a
- // window move on our behalf, but we should still paint as if we're active.
virtual void OnHostLostMouseGrab() OVERRIDE {}
-
virtual void OnHostPaint(const gfx::Rect& damage_rect) OVERRIDE {}
-
virtual void OnHostMoved(const gfx::Point& origin) OVERRIDE {}
virtual void OnHostResized(const gfx::Size& size) OVERRIDE {}
+ virtual float GetDeviceScaleFactor() OVERRIDE { return 1.0f; }
+ virtual aura::RootWindow* AsRootWindow() OVERRIDE { return NULL; }
+ virtual const aura::RootWindow* AsRootWindow() const OVERRIDE { return NULL; }
+ virtual ui::EventProcessor* GetEventProcessor() OVERRIDE {
+ return this;
+ }
- virtual float GetDeviceScaleFactor() OVERRIDE {
- return 1.0f;
+ // ui::EventProcessor:
+ virtual ui::EventTarget* GetRootTarget() OVERRIDE { return this; }
+ virtual bool CanDispatchToTarget(ui::EventTarget* target) OVERRIDE {
+ return true;
}
- virtual aura::RootWindow* AsRootWindow() OVERRIDE {
- return NULL;
+ // ui::EventHandler:
+ virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE {
+ last_touch_id_ = event->touch_id();
+ last_touch_type_ = event->type();
+ last_touch_location_ = event->location();
+ }
+
+ // ui::EventTarget:
+ virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE {
+ return true;
}
- virtual const aura::RootWindow* AsRootWindow() const OVERRIDE {
- return NULL;
+ virtual ui::EventTarget* GetParentTarget() OVERRIDE { return NULL; }
+ virtual scoped_ptr<ui::EventTargetIterator>
+ GetChildIterator() const OVERRIDE {
+ return scoped_ptr<ui::EventTargetIterator>();
}
+ virtual ui::EventTargeter* GetEventTargeter() OVERRIDE { return &targeter_; }
ui::EventType last_touch_type() {
return last_touch_type_;
@@ -82,6 +96,7 @@ class TestRootWindowHostDelegate : public aura::RootWindowHostDelegate {
ui::EventType last_touch_type_;
int last_touch_id_;
gfx::Point last_touch_location_;
+ ui::EventTargeter targeter_;
DISALLOW_COPY_AND_ASSIGN(TestRootWindowHostDelegate);
};
@@ -110,7 +125,7 @@ TEST_F(RootWindowHostX11Test, DispatchTouchEventToOneRootWindow) {
std::vector<unsigned int> devices;
devices.push_back(0);
- ui::SetupTouchDevicesForTest(devices);
+ ui::SetUpTouchDevicesForTest(devices);
std::vector<ui::Valuator> valuators;
EXPECT_EQ(ui::ET_UNKNOWN, delegate->last_touch_type());
@@ -182,7 +197,7 @@ TEST_F(RootWindowHostX11Test, DispatchTouchEventToTwoRootWindow) {
std::vector<unsigned int> devices;
devices.push_back(0);
- ui::SetupTouchDevicesForTest(devices);
+ ui::SetUpTouchDevicesForTest(devices);
std::vector<ui::Valuator> valuators;
EXPECT_EQ(ui::ET_UNKNOWN, delegate1->last_touch_type());
diff --git a/ui/aura/root_window_unittest.cc b/ui/aura/root_window_unittest.cc
index 9942b5dd21..f5d13b9363 100644
--- a/ui/aura/root_window_unittest.cc
+++ b/ui/aura/root_window_unittest.cc
@@ -1417,4 +1417,37 @@ TEST_F(RootWindowTest, WindowHideCancelsActiveGestures) {
EventTypesToString(filter->events()));
}
+// Places two windows side by side. Presses down on one window, and starts a
+// scroll. Sets capture on the other window and ensures that the "ending" events
+// aren't sent to the window which gained capture.
+TEST_F(RootWindowTest, EndingEventDoesntRetarget) {
+ scoped_ptr<Window> window1(CreateNormalWindow(1, root_window(), NULL));
+ window1->SetBounds(gfx::Rect(0, 0, 40, 40));
+
+ scoped_ptr<Window> window2(CreateNormalWindow(2, root_window(), NULL));
+ window2->SetBounds(gfx::Rect(40, 0, 40, 40));
+
+ EventFilterRecorder* filter1 = new EventFilterRecorder();
+ window1->SetEventFilter(filter1); // passes ownership
+ EventFilterRecorder* filter2 = new EventFilterRecorder();
+ window2->SetEventFilter(filter2); // passes ownership
+
+ gfx::Point position = window1->bounds().origin();
+ ui::TouchEvent press(ui::ET_TOUCH_PRESSED, position, 0, base::TimeDelta());
+ dispatcher()->AsRootWindowHostDelegate()->OnHostTouchEvent(&press);
+
+ gfx::Point position2 = window1->bounds().CenterPoint();
+ ui::TouchEvent move(ui::ET_TOUCH_MOVED, position2, 0, base::TimeDelta());
+ dispatcher()->AsRootWindowHostDelegate()->OnHostTouchEvent(&move);
+
+ window2->SetCapture();
+
+ EXPECT_EQ("TOUCH_PRESSED GESTURE_BEGIN GESTURE_TAP_DOWN TOUCH_MOVED "
+ "GESTURE_TAP_CANCEL GESTURE_SCROLL_BEGIN GESTURE_SCROLL_UPDATE "
+ "TOUCH_CANCELLED GESTURE_SCROLL_END GESTURE_END",
+ EventTypesToString(filter1->events()));
+
+ EXPECT_TRUE(filter2->events().empty());
+}
+
} // namespace aura
diff --git a/ui/aura/test/test_aura_initializer.cc b/ui/aura/test/test_aura_initializer.cc
deleted file mode 100644
index c336eb44d2..0000000000
--- a/ui/aura/test/test_aura_initializer.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/aura/test/test_aura_initializer.h"
-
-#include "base/base_paths.h"
-#include "base/path_service.h"
-#include "ui/base/resource/resource_bundle.h"
-
-namespace aura {
-namespace test {
-
-TestAuraInitializer::TestAuraInitializer() {
- base::FilePath pak_file;
- PathService::Get(base::DIR_MODULE, &pak_file);
- pak_file = pak_file.Append(FILE_PATH_LITERAL(
- "aura_test_support_resources.pak"));
- ui::ResourceBundle::InitSharedInstanceWithPakPath(pak_file);
-}
-
-TestAuraInitializer::~TestAuraInitializer() {
- ui::ResourceBundle::CleanupSharedInstance();
-}
-
-} // namespace test
-} // namespace aura
diff --git a/ui/aura/test/test_aura_initializer.h b/ui/aura/test/test_aura_initializer.h
deleted file mode 100644
index bfbfe2f320..0000000000
--- a/ui/aura/test/test_aura_initializer.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_AURA_TEST_TEST_AURA_INITIALIZER_H_
-#define UI_AURA_TEST_TEST_AURA_INITIALIZER_H_
-
-#include "base/basictypes.h"
-
-namespace aura {
-namespace test {
-
-// Initializes various objects needed to run unit tests that use aura::*
-// objects.
-class TestAuraInitializer {
- public:
- TestAuraInitializer();
- virtual ~TestAuraInitializer();
-
- private:
- DISALLOW_COPY_AND_ASSIGN(TestAuraInitializer);
-};
-
-} // namespace test
-} // namespace aura
-
-#endif // UI_AURA_TEST_TEST_AURA_INITIALIZER_H_
diff --git a/ui/aura/window.cc b/ui/aura/window.cc
index 1cd6a3e15f..a13a3b34e2 100644
--- a/ui/aura/window.cc
+++ b/ui/aura/window.cc
@@ -28,13 +28,47 @@
#include "ui/aura/window_tree_host.h"
#include "ui/compositor/compositor.h"
#include "ui/compositor/layer.h"
+#include "ui/events/event_target_iterator.h"
#include "ui/gfx/animation/multi_animation.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/path.h"
+#include "ui/gfx/scoped_canvas.h"
#include "ui/gfx/screen.h"
namespace aura {
+namespace {
+
+WindowLayerType UILayerTypeToWindowLayerType(ui::LayerType layer_type) {
+ switch (layer_type) {
+ case ui::LAYER_NOT_DRAWN:
+ return WINDOW_LAYER_NOT_DRAWN;
+ case ui::LAYER_TEXTURED:
+ return WINDOW_LAYER_TEXTURED;
+ case ui::LAYER_SOLID_COLOR:
+ return WINDOW_LAYER_SOLID_COLOR;
+ }
+ NOTREACHED();
+ return WINDOW_LAYER_NOT_DRAWN;
+}
+
+ui::LayerType WindowLayerTypeToUILayerType(WindowLayerType window_layer_type) {
+ switch (window_layer_type) {
+ case WINDOW_LAYER_NONE:
+ break;
+ case WINDOW_LAYER_NOT_DRAWN:
+ return ui::LAYER_NOT_DRAWN;
+ case WINDOW_LAYER_TEXTURED:
+ return ui::LAYER_TEXTURED;
+ case WINDOW_LAYER_SOLID_COLOR:
+ return ui::LAYER_SOLID_COLOR;
+ }
+ NOTREACHED();
+ return ui::LAYER_NOT_DRAWN;
+}
+
+} // namespace
+
class ScopedCursorHider {
public:
explicit ScopedCursorHider(Window* window)
@@ -96,8 +130,7 @@ Window::Window(WindowDelegate* delegate)
}
Window::~Window() {
- // layer_ can be NULL if Init() wasn't invoked, which can happen
- // only in tests.
+ // |layer_| can be NULL during tests, or if this Window is layerless.
if (layer_)
layer_->SuppressPaint();
@@ -134,7 +167,12 @@ Window::~Window() {
// Delegate and observers need to be notified after transients are deleted.
if (delegate_)
delegate_->OnWindowDestroyed();
- FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowDestroyed(this));
+ ObserverListBase<WindowObserver>::Iterator iter(observers_);
+ WindowObserver* observer;
+ while ((observer = iter.GetNext())) {
+ RemoveObserver(observer);
+ observer->OnWindowDestroyed(this);
+ }
// Clear properties.
for (std::map<const void*, Value>::const_iterator iter = prop_map_.begin();
@@ -145,21 +183,28 @@ Window::~Window() {
}
prop_map_.clear();
- // If we have layer it will either be destroyed by layer_owner_'s dtor, or by
- // whoever acquired it. We don't have a layer if Init() wasn't invoked, which
- // can happen in tests.
- if (layer_)
+ // If we have layer it will either be destroyed by |layer_owner_|'s dtor, or
+ // by whoever acquired it. We don't have a layer if Init() wasn't invoked or
+ // we are layerless.
+ if (layer_) {
layer_->set_delegate(NULL);
- layer_ = NULL;
+ layer_ = NULL;
+ }
}
void Window::Init(ui::LayerType layer_type) {
- layer_ = new ui::Layer(layer_type);
- layer_owner_.reset(layer_);
- layer_->SetVisible(false);
- layer_->set_delegate(this);
- UpdateLayerName(name_);
- layer_->SetFillsBoundsOpaquely(!transparent_);
+ InitWithWindowLayerType(UILayerTypeToWindowLayerType(layer_type));
+}
+
+void Window::InitWithWindowLayerType(WindowLayerType window_layer_type) {
+ if (window_layer_type != WINDOW_LAYER_NONE) {
+ layer_ = new ui::Layer(WindowLayerTypeToUILayerType(window_layer_type));
+ layer_owner_.reset(layer_);
+ layer_->SetVisible(false);
+ layer_->set_delegate(this);
+ UpdateLayerName(name_);
+ layer_->SetFillsBoundsOpaquely(!transparent_);
+ }
Env::GetInstance()->NotifyWindowInitialized(this);
}
@@ -203,20 +248,20 @@ ui::Layer* Window::RecreateLayer() {
void Window::SetType(client::WindowType type) {
// Cannot change type after the window is initialized.
- DCHECK(!layer());
+ DCHECK(!layer_);
type_ = type;
}
void Window::SetName(const std::string& name) {
name_ = name;
- if (layer())
+ if (layer_)
UpdateLayerName(name_);
}
void Window::SetTransparent(bool transparent) {
transparent_ = transparent;
- if (layer())
+ if (layer_)
layer_->SetFillsBoundsOpaquely(!transparent_);
}
@@ -257,7 +302,13 @@ bool Window::IsVisible() const {
// when a Window is hidden, we want this function to return false immediately
// after, even though the client may decide to animate the hide effect (and
// so the layer will be visible for some time after Hide() is called).
- return visible_ && layer_ && layer_->IsDrawn();
+ for (const Window* window = this; window; window = window->parent()) {
+ if (!window->visible_)
+ return false;
+ if (window->layer_)
+ return window->layer_->IsDrawn();
+ }
+ return false;
}
gfx::Rect Window::GetBoundsInRootWindow() const {
@@ -287,10 +338,15 @@ gfx::Rect Window::GetBoundsInScreen() const {
}
void Window::SetTransform(const gfx::Transform& transform) {
+ if (!layer_) {
+ // Transforms aren't supported on layerless windows.
+ NOTREACHED();
+ return;
+ }
WindowEventDispatcher* dispatcher = GetDispatcher();
bool contained_mouse = IsVisible() && dispatcher &&
ContainsPointInRoot(dispatcher->GetLastMouseLocationInRoot());
- layer()->SetTransform(transform);
+ layer_->SetTransform(transform);
if (dispatcher)
dispatcher->OnWindowTransformed(this, contained_mouse);
}
@@ -330,15 +386,36 @@ void Window::SetBoundsInScreen(const gfx::Rect& new_bounds_in_screen,
}
gfx::Rect Window::GetTargetBounds() const {
- return layer_->GetTargetBounds();
-}
+ if (!layer_)
+ return bounds();
+
+ if (!parent_ || parent_->layer_)
+ return layer_->GetTargetBounds();
-const gfx::Rect& Window::bounds() const {
- return layer_->bounds();
+ // We have a layer but our parent (who is valid) doesn't. This means the
+ // coordinates of the layer are relative to the first ancestor with a layer;
+ // convert to be relative to parent.
+ gfx::Vector2d offset;
+ const aura::Window* ancestor_with_layer =
+ parent_->GetAncestorWithLayer(&offset);
+ if (!ancestor_with_layer)
+ return layer_->GetTargetBounds();
+
+ gfx::Rect layer_target_bounds = layer_->GetTargetBounds();
+ layer_target_bounds -= offset;
+ return layer_target_bounds;
}
void Window::SchedulePaintInRect(const gfx::Rect& rect) {
- if (layer_->SchedulePaint(rect)) {
+ if (!layer_ && parent_) {
+ // Notification of paint scheduled happens for the window with a layer.
+ gfx::Rect parent_rect(bounds().size());
+ parent_rect.Intersect(rect);
+ if (!parent_rect.IsEmpty()) {
+ parent_rect.Offset(bounds().origin().OffsetFromOrigin());
+ parent_->SchedulePaintInRect(parent_rect);
+ }
+ } else if (layer_ && layer_->SchedulePaint(rect)) {
FOR_EACH_OBSERVER(
WindowObserver, observers_, OnWindowPaintScheduled(this, rect));
}
@@ -378,9 +455,15 @@ void Window::AddChild(Window* child) {
children_.end());
if (child->parent())
child->parent()->RemoveChildImpl(child, this);
- child->parent_ = this;
- layer_->Add(child->layer_);
+ gfx::Vector2d offset;
+ aura::Window* ancestor_with_layer = GetAncestorWithLayer(&offset);
+ if (ancestor_with_layer) {
+ offset += child->bounds().OffsetFromOrigin();
+ child->ReparentLayers(ancestor_with_layer->layer(), offset);
+ }
+
+ child->parent_ = this;
children_.push_back(child);
if (layout_manager_)
@@ -472,8 +555,20 @@ void Window::ConvertPointToTarget(const Window* source,
client::ScreenPositionClient* target_client =
client::GetScreenPositionClient(target->GetRootWindow());
target_client->ConvertPointFromScreen(target, point);
+ } else if ((source != target) && (!source->layer_ || !target->layer_)) {
+ if (!source->layer_) {
+ gfx::Vector2d offset_to_layer;
+ source = source->GetAncestorWithLayer(&offset_to_layer);
+ *point += offset_to_layer;
+ }
+ if (!target->layer_) {
+ gfx::Vector2d offset_to_layer;
+ target = target->GetAncestorWithLayer(&offset_to_layer);
+ *point -= offset_to_layer;
+ }
+ ui::Layer::ConvertPointToLayer(source->layer_, target->layer_, point);
} else {
- ui::Layer::ConvertPointToLayer(source->layer(), target->layer(), point);
+ ui::Layer::ConvertPointToLayer(source->layer_, target->layer_, point);
}
}
@@ -744,17 +839,32 @@ void Window::SetBoundsInternal(const gfx::Rect& new_bounds) {
// Always need to set the layer's bounds -- even if it is to the same thing.
// This may cause important side effects such as stopping animation.
- layer_->SetBounds(actual_new_bounds);
+ if (!layer_) {
+ const gfx::Vector2d origin_delta = new_bounds.OffsetFromOrigin() -
+ bounds_.OffsetFromOrigin();
+ bounds_ = new_bounds;
+ OffsetLayerBounds(origin_delta);
+ } else {
+ if (parent_ && !parent_->layer_) {
+ gfx::Vector2d offset;
+ const aura::Window* ancestor_with_layer =
+ parent_->GetAncestorWithLayer(&offset);
+ if (ancestor_with_layer)
+ actual_new_bounds.Offset(offset);
+ }
+ layer_->SetBounds(actual_new_bounds);
+ }
// If we are currently not the layer's delegate, we will not get bounds
// changed notification from the layer (this typically happens after animating
// hidden). We must notify ourselves.
- if (layer_->delegate() != this)
- OnLayerBoundsChanged(old_bounds, ContainsMouse());
+ if (!layer_ || layer_->delegate() != this)
+ OnWindowBoundsChanged(old_bounds, ContainsMouse());
}
void Window::SetVisible(bool visible) {
- if (visible == layer_->GetTargetVisibility())
+ if ((layer_ && visible == layer_->GetTargetVisibility()) ||
+ (!layer_ && visible == visible_))
return; // No change.
FOR_EACH_OBSERVER(WindowObserver, observers_,
@@ -768,7 +878,7 @@ void Window::SetVisible(bool visible) {
client::GetVisibilityClient(this);
if (visibility_client)
visibility_client->UpdateLayerVisibility(this, visible);
- else
+ else if (layer_)
layer_->SetVisible(visible);
visible_ = visible;
SchedulePaint();
@@ -788,6 +898,25 @@ void Window::SchedulePaint() {
SchedulePaintInRect(gfx::Rect(0, 0, bounds().width(), bounds().height()));
}
+void Window::Paint(gfx::Canvas* canvas) {
+ if (delegate_)
+ delegate_->OnPaint(canvas);
+ PaintLayerlessChildren(canvas);
+}
+
+void Window::PaintLayerlessChildren(gfx::Canvas* canvas) {
+ for (size_t i = 0, count = children_.size(); i < count; ++i) {
+ Window* child = children_[i];
+ if (!child->layer_ && child->visible_) {
+ gfx::ScopedCanvas scoped_canvas(canvas);
+ if (canvas->ClipRect(child->bounds())) {
+ canvas->Translate(child->bounds().OffsetFromOrigin());
+ child->Paint(canvas);
+ }
+ }
+ }
+}
+
Window* Window::GetWindowForPoint(const gfx::Point& local_point,
bool return_tightest,
bool for_event_handling) {
@@ -827,9 +956,8 @@ Window* Window::GetWindowForPoint(const gfx::Point& local_point,
if (client && !client->CanProcessEventsWithinSubtree(child))
continue;
if (delegate_ && !delegate_->ShouldDescendIntoChildForEventHandling(
- child, local_point)) {
+ child, local_point))
continue;
- }
}
gfx::Point point_in_child_coords(local_point);
@@ -855,12 +983,11 @@ void Window::RemoveChildImpl(Window* child, Window* new_parent) {
child, new_root_window);
child->NotifyRemovingFromRootWindow();
}
+
+ gfx::Vector2d offset;
+ GetAncestorWithLayer(&offset);
+ child->UnparentLayers(!layer_, offset);
child->parent_ = NULL;
- // We should only remove the child's layer if the child still owns that layer.
- // Someone else may have acquired ownership of it via AcquireLayer() and may
- // expect the hierarchy to go unchanged as the Window is destroyed.
- if (child->layer_owner_)
- layer_->Remove(child->layer_);
Windows::iterator i = std::find(children_.begin(), children_.end(), child);
DCHECK(i != children_.end());
children_.erase(i);
@@ -869,6 +996,60 @@ void Window::RemoveChildImpl(Window* child, Window* new_parent) {
layout_manager_->OnWindowRemovedFromLayout(child);
}
+void Window::UnparentLayers(bool has_layerless_ancestor,
+ const gfx::Vector2d& offset) {
+ if (!layer_) {
+ const gfx::Vector2d new_offset = offset + bounds().OffsetFromOrigin();
+ for (size_t i = 0; i < children_.size(); ++i) {
+ children_[i]->UnparentLayers(true, new_offset);
+ }
+ } else {
+ // Only remove the layer if we still own it. Someone else may have acquired
+ // ownership of it via AcquireLayer() and may expect the hierarchy to go
+ // unchanged as the Window is destroyed.
+ if (layer_owner_) {
+ if (layer_->parent())
+ layer_->parent()->Remove(layer_);
+ if (has_layerless_ancestor) {
+ const gfx::Rect real_bounds(bounds_);
+ gfx::Rect layer_bounds(layer_->bounds());
+ layer_bounds.Offset(-offset);
+ layer_->SetBounds(layer_bounds);
+ bounds_ = real_bounds;
+ }
+ }
+ }
+}
+
+void Window::ReparentLayers(ui::Layer* parent_layer,
+ const gfx::Vector2d& offset) {
+ if (!layer_) {
+ for (size_t i = 0; i < children_.size(); ++i) {
+ children_[i]->ReparentLayers(
+ parent_layer,
+ offset + children_[i]->bounds().OffsetFromOrigin());
+ }
+ } else {
+ const gfx::Rect real_bounds(bounds());
+ parent_layer->Add(layer_);
+ gfx::Rect layer_bounds(layer_->bounds().size());
+ layer_bounds += offset;
+ layer_->SetBounds(layer_bounds);
+ bounds_ = real_bounds;
+ }
+}
+
+void Window::OffsetLayerBounds(const gfx::Vector2d& offset) {
+ if (!layer_) {
+ for (size_t i = 0; i < children_.size(); ++i)
+ children_[i]->OffsetLayerBounds(offset);
+ } else {
+ gfx::Rect layer_bounds(layer_->bounds());
+ layer_bounds += offset;
+ layer_->SetBounds(layer_bounds);
+ }
+}
+
void Window::OnParentChanged() {
FOR_EACH_OBSERVER(
WindowObserver, observers_, OnWindowParentChanged(this, parent_));
@@ -947,7 +1128,7 @@ void Window::StackChildRelativeTo(Window* child,
// for an explanation of this.
while (final_target_i > 0 &&
children_[direction == STACK_ABOVE ? final_target_i :
- final_target_i - 1]->layer()
+ final_target_i - 1]->layer_
->delegate() == NULL) {
--final_target_i;
}
@@ -955,7 +1136,7 @@ void Window::StackChildRelativeTo(Window* child,
Window* final_target = children_[final_target_i];
// If we couldn't find a valid target position, don't move anything.
- if (direction == STACK_ABOVE && final_target->layer()->delegate() == NULL)
+ if (direction == STACK_ABOVE && final_target->layer_->delegate() == NULL)
return;
// Don't try to stack a child above itself.
@@ -1007,9 +1188,9 @@ void Window::StackChildRelativeToImpl(Window* child,
children_.insert(children_.begin() + dest_i, child);
if (direction == STACK_ABOVE)
- layer()->StackAbove(child->layer(), target->layer());
+ layer_->StackAbove(child->layer_, target->layer_);
else
- layer()->StackBelow(child->layer(), target->layer());
+ layer_->StackBelow(child->layer_, target->layer_);
child->OnStackingChanged();
}
@@ -1140,8 +1321,19 @@ void Window::NotifyWindowVisibilityChangedUp(aura::Window* target,
}
}
-void Window::OnLayerBoundsChanged(const gfx::Rect& old_bounds,
- bool contained_mouse) {
+void Window::OnWindowBoundsChanged(const gfx::Rect& old_bounds,
+ bool contained_mouse) {
+ if (layer_) {
+ bounds_ = layer_->bounds();
+ if (parent_ && !parent_->layer_) {
+ gfx::Vector2d offset;
+ aura::Window* ancestor_with_layer =
+ parent_->GetAncestorWithLayer(&offset);
+ if (ancestor_with_layer)
+ bounds_.Offset(-offset);
+ }
+ }
+
if (layout_manager_)
layout_manager_->OnWindowResized();
if (delegate_)
@@ -1155,12 +1347,11 @@ void Window::OnLayerBoundsChanged(const gfx::Rect& old_bounds,
}
void Window::OnPaintLayer(gfx::Canvas* canvas) {
- if (delegate_)
- delegate_->OnPaint(canvas);
+ Paint(canvas);
}
base::Closure Window::PrepareForLayerBoundsChange() {
- return base::Bind(&Window::OnLayerBoundsChanged, base::Unretained(this),
+ return base::Bind(&Window::OnWindowBoundsChanged, base::Unretained(this),
bounds(), ContainsMouse());
}
@@ -1199,9 +1390,24 @@ ui::EventTarget* Window::GetParentTarget() {
return parent_;
}
+scoped_ptr<ui::EventTargetIterator> Window::GetChildIterator() const {
+ return scoped_ptr<ui::EventTargetIterator>(
+ new ui::EventTargetIteratorImpl<Window>(children()));
+}
+
+ui::EventTargeter* Window::GetEventTargeter() {
+ return targeter_.get();
+}
+
+void Window::ConvertEventToTarget(ui::EventTarget* target,
+ ui::LocatedEvent* event) {
+ event->ConvertLocationToTarget(this,
+ static_cast<Window*>(target));
+}
+
void Window::UpdateLayerName(const std::string& name) {
#if !defined(NDEBUG)
- DCHECK(layer());
+ DCHECK(layer_);
std::string layer_name(name_);
if (layer_name.empty())
@@ -1212,7 +1418,7 @@ void Window::UpdateLayerName(const std::string& name) {
base::snprintf(id_buf, sizeof(id_buf), " %d", id_);
layer_name.append(id_buf);
}
- layer()->set_name(layer_name);
+ layer_->set_name(layer_name);
#endif
}
@@ -1226,4 +1432,14 @@ bool Window::ContainsMouse() {
return contains_mouse;
}
+const Window* Window::GetAncestorWithLayer(gfx::Vector2d* offset) const {
+ for (const aura::Window* window = this; window; window = window->parent()) {
+ if (window->layer_)
+ return window;
+ *offset += window->bounds().OffsetFromOrigin();
+ }
+ *offset = gfx::Vector2d();
+ return NULL;
+}
+
} // namespace aura
diff --git a/ui/aura/window.h b/ui/aura/window.h
index ea3846109e..c104ae5544 100644
--- a/ui/aura/window.h
+++ b/ui/aura/window.h
@@ -16,6 +16,7 @@
#include "base/strings/string16.h"
#include "ui/aura/aura_export.h"
#include "ui/aura/client/window_types.h"
+#include "ui/aura/window_layer_type.h"
#include "ui/aura/window_observer.h"
#include "ui/compositor/layer_animator.h"
#include "ui/compositor/layer_delegate.h"
@@ -23,6 +24,7 @@
#include "ui/compositor/layer_type.h"
#include "ui/events/event_constants.h"
#include "ui/events/event_target.h"
+#include "ui/events/event_targeter.h"
#include "ui/events/gestures/gesture_types.h"
#include "ui/gfx/insets.h"
#include "ui/gfx/native_widget_types.h"
@@ -31,6 +33,7 @@
namespace gfx {
class Display;
class Transform;
+class Vector2d;
}
namespace ui {
@@ -73,6 +76,9 @@ class AURA_EXPORT Window : public ui::LayerDelegate,
// Initializes the window. This creates the window's layer.
void Init(ui::LayerType layer_type);
+ // TODO(sky): replace other Init() with this once m32 is more baked.
+ void InitWithWindowLayerType(WindowLayerType layer_type);
+
// Creates a new layer for the window. Erases the layer-owned bounds, so the
// caller may wish to set new bounds and other state on the window/layer.
// Returns the old layer, which can be used for animations. Caller owns the
@@ -106,7 +112,7 @@ class AURA_EXPORT Window : public ui::LayerDelegate,
WindowDelegate* delegate() { return delegate_; }
const WindowDelegate* delegate() const { return delegate_; }
- const gfx::Rect& bounds() const;
+ const gfx::Rect& bounds() const { return bounds_; }
Window* parent() { return parent_; }
const Window* parent() const { return parent_; }
@@ -155,6 +161,10 @@ class AURA_EXPORT Window : public ui::LayerDelegate,
void SetLayoutManager(LayoutManager* layout_manager);
LayoutManager* layout_manager() { return layout_manager_.get(); }
+ void set_event_targeter(scoped_ptr<ui::EventTargeter> targeter) {
+ targeter_ = targeter.Pass();
+ }
+
// Changes the bounds of the window. If present, the window's parent's
// LayoutManager may adjust the bounds.
void SetBounds(const gfx::Rect& new_bounds);
@@ -241,6 +251,7 @@ class AURA_EXPORT Window : public ui::LayerDelegate,
bool HasObserver(WindowObserver* observer);
void set_ignore_events(bool ignore_events) { ignore_events_ = ignore_events; }
+ bool ignore_events() const { return ignore_events_; }
// Sets the window to grab hits for mouse and touch to an area extending
// -|mouse_insets| and -|touch_insets| pixels outside its bounds. This can be
@@ -366,6 +377,7 @@ class AURA_EXPORT Window : public ui::LayerDelegate,
private:
friend class test::WindowTestApi;
friend class LayoutManager;
+ friend class WindowTargeter;
friend class RootWindow;
// Used when stacking windows.
@@ -392,6 +404,13 @@ class AURA_EXPORT Window : public ui::LayerDelegate,
// Schedules a paint for the Window's entire bounds.
void SchedulePaint();
+ // Asks the delegate to paint the window and invokes PaintLayerlessChildren()
+ // to paint any children with no layers.
+ void Paint(gfx::Canvas* canvas);
+
+ // Paints any layerless children to |canvas|.
+ void PaintLayerlessChildren(gfx::Canvas* canvas);
+
// Gets a Window (either this one or a subwindow) containing |local_point|.
// If |return_tightest| is true, returns the tightest-containing (i.e.
// furthest down the hierarchy) Window containing the point; otherwise,
@@ -406,6 +425,22 @@ class AURA_EXPORT Window : public ui::LayerDelegate,
// to.
void RemoveChildImpl(Window* child, Window* new_parent);
+ // If this Window has a layer the layer's parent is set to NULL, otherwise
+ // UnparentLayers() is invoked on all the children. |offset| is the offset
+ // relative to the nearest ancestor with a layer.
+ void UnparentLayers(bool has_layerless_ancestor,
+ const gfx::Vector2d& offset);
+
+ // If this Window has a layer it is added to |parent| and the origin set to
+ // |offset|. Otherwise this recurses through the children invoking
+ // ReparentLayers(). The net effect is both setting the parent of layers to
+ // |parent| as well as updating bounds of windows with a layerless ancestor.
+ void ReparentLayers(ui::Layer* parent, const gfx::Vector2d& offset);
+
+ // Offsets the first encountered Windows with layers by |offset|. This
+ // recurses through all layerless Windows, stopping at windows with layers.
+ void OffsetLayerBounds(const gfx::Vector2d& offset);
+
// Called when this window's parent has changed.
void OnParentChanged();
@@ -468,11 +503,12 @@ class AURA_EXPORT Window : public ui::LayerDelegate,
// Notifies this window and its parent hierarchy.
void NotifyWindowVisibilityChangedUp(aura::Window* target, bool visible);
- // Invoked from the closure returned by PrepareForLayerBoundsChange() after
- // the bounds of the layer has changed. |old_bounds| is the previous bounds of
- // the layer, and |contained_mouse| is true if the mouse was previously within
- // the window's bounds.
- void OnLayerBoundsChanged(const gfx::Rect& old_bounds, bool contained_mouse);
+ // Invoked when the bounds of the window changes. This may be invoked directly
+ // by us, or from the closure returned by PrepareForLayerBoundsChange() after
+ // the bounds of the layer has changed. |old_bounds| is the previous bounds,
+ // and |contained_mouse| is true if the mouse was previously within the
+ // window's bounds.
+ void OnWindowBoundsChanged(const gfx::Rect& old_bounds, bool contained_mouse);
// Overridden from ui::LayerDelegate:
virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE;
@@ -481,6 +517,10 @@ class AURA_EXPORT Window : public ui::LayerDelegate,
// Overridden from ui::EventTarget:
virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE;
virtual EventTarget* GetParentTarget() OVERRIDE;
+ virtual scoped_ptr<ui::EventTargetIterator> GetChildIterator() const OVERRIDE;
+ virtual ui::EventTargeter* GetEventTargeter() OVERRIDE;
+ virtual void ConvertEventToTarget(ui::EventTarget* target,
+ ui::LocatedEvent* event) OVERRIDE;
// Updates the layer name with a name based on the window's name and id.
void UpdateLayerName(const std::string& name);
@@ -488,6 +528,20 @@ class AURA_EXPORT Window : public ui::LayerDelegate,
// Returns true if the mouse is currently within our bounds.
bool ContainsMouse();
+ // Returns the first ancestor (starting at |this|) with a layer. |offset| is
+ // set to the offset from |this| to the first ancestor with a layer.
+ Window* GetAncestorWithLayer(gfx::Vector2d* offset) {
+ return const_cast<Window*>(
+ const_cast<const Window*>(this)->GetAncestorWithLayer(offset));
+ }
+ const Window* GetAncestorWithLayer(gfx::Vector2d* offset) const;
+
+ // Bounds of this window relative to the parent. This is cached as the bounds
+ // of the Layer and Window are not necessarily the same. In particular bounds
+ // of the Layer are relative to the first ancestor with a Layer, where as this
+ // is relative to the parent Window.
+ gfx::Rect bounds_;
+
WindowEventDispatcher* dispatcher_;
client::WindowType type_;
@@ -524,6 +578,7 @@ class AURA_EXPORT Window : public ui::LayerDelegate,
scoped_ptr<ui::EventHandler> event_filter_;
scoped_ptr<LayoutManager> layout_manager_;
+ scoped_ptr<ui::EventTargeter> targeter_;
void* user_data_;
@@ -535,7 +590,7 @@ class AURA_EXPORT Window : public ui::LayerDelegate,
gfx::Insets hit_test_bounds_override_outer_touch_;
gfx::Insets hit_test_bounds_override_inner_;
- ObserverList<WindowObserver> observers_;
+ ObserverList<WindowObserver, true> observers_;
// Value struct to keep the name and deallocator for this property.
// Key cannot be used for this purpose because it can be char* or
diff --git a/ui/aura/window_layer_type.h b/ui/aura/window_layer_type.h
new file mode 100644
index 0000000000..97e312a3ee
--- /dev/null
+++ b/ui/aura/window_layer_type.h
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_AURA_WINDOW_LAYER_TYPE_H_
+#define UI_AURA_WINDOW_LAYER_TYPE_H_
+
+namespace aura {
+
+// These constants mirror that of ui::LayerType with the addition of
+// WINDOW_LAYER_NONE. See ui::LayerType for description of ones in common.
+enum WindowLayerType {
+ // Note that Windows with WINDOW_LAYER_NONE impose limitations on the
+ // Window: transforms and animations aren't supported.
+ WINDOW_LAYER_NONE,
+
+ WINDOW_LAYER_NOT_DRAWN,
+ WINDOW_LAYER_TEXTURED,
+ WINDOW_LAYER_SOLID_COLOR,
+};
+
+} // namespace aura
+
+#endif // UI_AURA_WINDOW_LAYER_TYPE_H_
diff --git a/ui/aura/window_observer.h b/ui/aura/window_observer.h
index 5008ac514d..9408ee831d 100644
--- a/ui/aura/window_observer.h
+++ b/ui/aura/window_observer.h
@@ -87,8 +87,14 @@ class AURA_EXPORT WindowObserver {
// destructor). This is called before the window is removed from its parent.
virtual void OnWindowDestroying(Window* window) {}
- // Invoked when the Window has been destroyed (i.e. at the end of its
- // destructor). This is called after the window is removed from its parent.
+ // Invoked when the Window has been destroyed (i.e. at the end of
+ // its destructor). This is called after the window is removed from
+ // its parent. Window automatically removes its WindowObservers
+ // before calling this method, so the following code is no op.
+ //
+ // void MyWindowObserver::OnWindowDestroyed(aura::Window* window) {
+ // window->RemoveObserver(this);
+ // }
virtual void OnWindowDestroyed(Window* window) {}
// Called when a Window has been added to a RootWindow.
diff --git a/ui/aura/window_targeter.cc b/ui/aura/window_targeter.cc
new file mode 100644
index 0000000000..767a79dbbd
--- /dev/null
+++ b/ui/aura/window_targeter.cc
@@ -0,0 +1,59 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/aura/window_targeter.h"
+
+#include "ui/aura/client/event_client.h"
+#include "ui/aura/client/focus_client.h"
+#include "ui/aura/window.h"
+#include "ui/aura/window_delegate.h"
+#include "ui/events/event_target.h"
+
+namespace aura {
+
+WindowTargeter::WindowTargeter() {}
+WindowTargeter::~WindowTargeter() {}
+
+ui::EventTarget* WindowTargeter::FindTargetForEvent(ui::EventTarget* root,
+ ui::Event* event) {
+ if (event->IsKeyEvent()) {
+ Window* window = static_cast<Window*>(root);
+ Window* root_window = window->GetRootWindow();
+ const ui::KeyEvent& key = static_cast<const ui::KeyEvent&>(*event);
+ if (key.key_code() == ui::VKEY_UNKNOWN)
+ return NULL;
+ client::EventClient* event_client = client::GetEventClient(root_window);
+ client::FocusClient* focus_client = client::GetFocusClient(root_window);
+ Window* focused_window = focus_client->GetFocusedWindow();
+ if (event_client &&
+ !event_client->CanProcessEventsWithinSubtree(focused_window)) {
+ focus_client->FocusWindow(NULL);
+ return NULL;
+ }
+ return focused_window ? focused_window : window;
+ }
+ return EventTargeter::FindTargetForEvent(root, event);
+}
+
+bool WindowTargeter::SubtreeShouldBeExploredForEvent(
+ ui::EventTarget* root,
+ const ui::LocatedEvent& event) {
+ Window* window = static_cast<Window*>(root);
+ if (!window->IsVisible())
+ return false;
+ if (window->ignore_events())
+ return false;
+ client::EventClient* client = client::GetEventClient(window->GetRootWindow());
+ if (client && !client->CanProcessEventsWithinSubtree(window))
+ return false;
+
+ Window* parent = window->parent();
+ if (parent && parent->delegate_ && !parent->delegate_->
+ ShouldDescendIntoChildForEventHandling(window, event.location())) {
+ return false;
+ }
+ return window->bounds().Contains(event.location());
+}
+
+} // namespace aura
diff --git a/ui/aura/window_targeter.h b/ui/aura/window_targeter.h
new file mode 100644
index 0000000000..ba69ed8881
--- /dev/null
+++ b/ui/aura/window_targeter.h
@@ -0,0 +1,25 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/events/event_targeter.h"
+
+namespace aura {
+
+class WindowTargeter : public ui::EventTargeter {
+ public:
+ WindowTargeter();
+ virtual ~WindowTargeter();
+
+ protected:
+ // ui::EventTargeter:
+ virtual ui::EventTarget* FindTargetForEvent(ui::EventTarget* root,
+ ui::Event* event) OVERRIDE;
+ virtual bool SubtreeShouldBeExploredForEvent(
+ ui::EventTarget* target,
+ const ui::LocatedEvent& event) OVERRIDE;
+
+ DISALLOW_COPY_AND_ASSIGN(WindowTargeter);
+};
+
+} // namespace aura
diff --git a/ui/aura/window_targeter_unittest.cc b/ui/aura/window_targeter_unittest.cc
new file mode 100644
index 0000000000..396c805353
--- /dev/null
+++ b/ui/aura/window_targeter_unittest.cc
@@ -0,0 +1,54 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/aura/window_targeter.h"
+
+#include "ui/aura/test/aura_test_base.h"
+#include "ui/aura/test/test_event_handler.h"
+#include "ui/aura/test/test_window_delegate.h"
+#include "ui/aura/window.h"
+
+namespace aura {
+
+class WindowTargeterTest : public test::AuraTestBase {
+ public:
+ WindowTargeterTest() {}
+ virtual ~WindowTargeterTest() {}
+
+ Window* root_window() { return AuraTestBase::root_window(); }
+};
+
+TEST_F(WindowTargeterTest, Basic) {
+ test::TestWindowDelegate delegate;
+ scoped_ptr<Window> window(CreateNormalWindow(1, root_window(), &delegate));
+ Window* one = CreateNormalWindow(2, window.get(), &delegate);
+ Window* two = CreateNormalWindow(3, window.get(), &delegate);
+
+ window->SetBounds(gfx::Rect(0, 0, 100, 100));
+ one->SetBounds(gfx::Rect(0, 0, 500, 100));
+ two->SetBounds(gfx::Rect(501, 0, 500, 1000));
+
+ root_window()->Show();
+
+ test::TestEventHandler handler;
+ one->AddPreTargetHandler(&handler);
+
+ ui::MouseEvent press(ui::ET_MOUSE_PRESSED,
+ gfx::Point(20, 20),
+ gfx::Point(20, 20),
+ ui::EF_NONE);
+ root_window()->GetDispatcher()->AsRootWindowHostDelegate()->
+ OnHostMouseEvent(&press);
+ EXPECT_EQ(1, handler.num_mouse_events());
+
+ handler.Reset();
+ ui::EventDispatchDetails details =
+ root_window()->GetDispatcher()->OnEventFromSource(&press);
+ EXPECT_FALSE(details.dispatcher_destroyed);
+ EXPECT_EQ(1, handler.num_mouse_events());
+
+ one->RemovePreTargetHandler(&handler);
+}
+
+} // namespace aura
diff --git a/ui/aura/window_tree_host_delegate.h b/ui/aura/window_tree_host_delegate.h
index fc40a1fae5..ad08039d62 100644
--- a/ui/aura/window_tree_host_delegate.h
+++ b/ui/aura/window_tree_host_delegate.h
@@ -15,6 +15,7 @@ class Size;
namespace ui {
class Event;
+class EventProcessor;
class KeyEvent;
class MouseEvent;
class ScrollEvent;
@@ -55,6 +56,8 @@ class AURA_EXPORT RootWindowHostDelegate {
virtual RootWindow* AsRootWindow() = 0;
virtual const RootWindow* AsRootWindow() const = 0;
+ virtual ui::EventProcessor* GetEventProcessor() = 0;
+
protected:
virtual ~RootWindowHostDelegate() {}
};
diff --git a/ui/aura/window_unittest.cc b/ui/aura/window_unittest.cc
index 4ab711099d..c8b89cf778 100644
--- a/ui/aura/window_unittest.cc
+++ b/ui/aura/window_unittest.cc
@@ -40,6 +40,8 @@
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/screen.h"
+#include "ui/gfx/skia_util.h"
+#include "ui/gfx/vector2d.h"
DECLARE_WINDOW_PROPERTY_TYPE(const char*)
DECLARE_WINDOW_PROPERTY_TYPE(int)
@@ -2879,7 +2881,7 @@ TEST_F(WindowTest, DelegateNotifiedAsBoundsChangeInHiddenLayer) {
// No bounds changed notification at the end of animation since layer
// delegate is NULL.
EXPECT_FALSE(delegate.bounds_changed());
- EXPECT_NE("0,0 100x100", window->bounds().ToString());
+ EXPECT_NE("0,0 100x100", window->layer()->bounds().ToString());
}
namespace {
@@ -3185,5 +3187,370 @@ TEST_F(WindowTest, NotifyDelegateAfterDeletingTransients) {
EXPECT_EQ("parent", destruction_order[1]);
}
+// Verifies SchedulePaint() on a layerless window results in damaging the right
+// thing.
+TEST_F(WindowTest, LayerlessWindowSchedulePaint) {
+ Window root(NULL);
+ root.Init(ui::LAYER_NOT_DRAWN);
+ root.SetBounds(gfx::Rect(0, 0, 100, 100));
+
+ Window* layerless_window = new Window(NULL); // Owned by |root|.
+ layerless_window->InitWithWindowLayerType(WINDOW_LAYER_NONE);
+ layerless_window->SetBounds(gfx::Rect(10, 11, 12, 13));
+ root.AddChild(layerless_window);
+
+ root.layer()->SendDamagedRects();
+ layerless_window->SchedulePaintInRect(gfx::Rect(1, 2, 100, 4));
+ // Note the the region is clipped by the parent hence 100 going to 11.
+ EXPECT_EQ("11,13 11x4",
+ gfx::SkIRectToRect(root.layer()->damaged_region().getBounds()).
+ ToString());
+
+ Window* layerless_window2 = new Window(NULL); // Owned by |layerless_window|.
+ layerless_window2->InitWithWindowLayerType(WINDOW_LAYER_NONE);
+ layerless_window2->SetBounds(gfx::Rect(1, 2, 3, 4));
+ layerless_window->AddChild(layerless_window2);
+
+ root.layer()->SendDamagedRects();
+ layerless_window2->SchedulePaintInRect(gfx::Rect(1, 2, 100, 4));
+ // Note the the region is clipped by the |layerless_window| hence 100 going to
+ // 2.
+ EXPECT_EQ("12,15 2x2",
+ gfx::SkIRectToRect(root.layer()->damaged_region().getBounds()).
+ ToString());
+}
+
+// Verifies bounds of layerless windows are correctly updated when adding
+// removing.
+TEST_F(WindowTest, NestedLayerlessWindowsBoundsOnAddRemove) {
+ // Creates the following structure (all children owned by root):
+ // root
+ // w1ll 1,2
+ // w11ll 3,4
+ // w111 5,6
+ // w12 7,8
+ // w121 9,10
+ //
+ // ll: layer less, eg no layer
+ Window root(NULL);
+ root.InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ root.SetBounds(gfx::Rect(0, 0, 100, 100));
+
+ Window* w1ll = new Window(NULL);
+ w1ll->InitWithWindowLayerType(WINDOW_LAYER_NONE);
+ w1ll->SetBounds(gfx::Rect(1, 2, 100, 100));
+
+ Window* w11ll = new Window(NULL);
+ w11ll->InitWithWindowLayerType(WINDOW_LAYER_NONE);
+ w11ll->SetBounds(gfx::Rect(3, 4, 100, 100));
+ w1ll->AddChild(w11ll);
+
+ Window* w111 = new Window(NULL);
+ w111->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ w111->SetBounds(gfx::Rect(5, 6, 100, 100));
+ w11ll->AddChild(w111);
+
+ Window* w12 = new Window(NULL);
+ w12->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ w12->SetBounds(gfx::Rect(7, 8, 100, 100));
+ w1ll->AddChild(w12);
+
+ Window* w121 = new Window(NULL);
+ w121->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ w121->SetBounds(gfx::Rect(9, 10, 100, 100));
+ w12->AddChild(w121);
+
+ root.AddChild(w1ll);
+
+ // All layers should be parented to the root.
+ EXPECT_EQ(root.layer(), w111->layer()->parent());
+ EXPECT_EQ(root.layer(), w12->layer()->parent());
+ EXPECT_EQ(w12->layer(), w121->layer()->parent());
+
+ // Ensure bounds are what we expect.
+ EXPECT_EQ("1,2 100x100", w1ll->bounds().ToString());
+ EXPECT_EQ("3,4 100x100", w11ll->bounds().ToString());
+ EXPECT_EQ("5,6 100x100", w111->bounds().ToString());
+ EXPECT_EQ("7,8 100x100", w12->bounds().ToString());
+ EXPECT_EQ("9,10 100x100", w121->bounds().ToString());
+
+ // Bounds of layers are relative to the nearest ancestor with a layer.
+ EXPECT_EQ("8,10 100x100", w12->layer()->bounds().ToString());
+ EXPECT_EQ("9,12 100x100", w111->layer()->bounds().ToString());
+ EXPECT_EQ("9,10 100x100", w121->layer()->bounds().ToString());
+
+ // Remove and repeat.
+ root.RemoveChild(w1ll);
+
+ EXPECT_TRUE(w111->layer()->parent() == NULL);
+ EXPECT_TRUE(w12->layer()->parent() == NULL);
+
+ // Verify bounds haven't changed again.
+ EXPECT_EQ("1,2 100x100", w1ll->bounds().ToString());
+ EXPECT_EQ("3,4 100x100", w11ll->bounds().ToString());
+ EXPECT_EQ("5,6 100x100", w111->bounds().ToString());
+ EXPECT_EQ("7,8 100x100", w12->bounds().ToString());
+ EXPECT_EQ("9,10 100x100", w121->bounds().ToString());
+
+ // Bounds of layers should now match that of windows.
+ EXPECT_EQ("7,8 100x100", w12->layer()->bounds().ToString());
+ EXPECT_EQ("5,6 100x100", w111->layer()->bounds().ToString());
+ EXPECT_EQ("9,10 100x100", w121->layer()->bounds().ToString());
+
+ delete w1ll;
+}
+
+// Verifies bounds of layerless windows are correctly updated when bounds
+// of ancestor changes.
+TEST_F(WindowTest, NestedLayerlessWindowsBoundsOnSetBounds) {
+ // Creates the following structure (all children owned by root):
+ // root
+ // w1ll 1,2
+ // w11ll 3,4
+ // w111 5,6
+ // w12 7,8
+ // w121 9,10
+ //
+ // ll: layer less, eg no layer
+ Window root(NULL);
+ root.InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ root.SetBounds(gfx::Rect(0, 0, 100, 100));
+
+ Window* w1ll = new Window(NULL);
+ w1ll->InitWithWindowLayerType(WINDOW_LAYER_NONE);
+ w1ll->SetBounds(gfx::Rect(1, 2, 100, 100));
+
+ Window* w11ll = new Window(NULL);
+ w11ll->InitWithWindowLayerType(WINDOW_LAYER_NONE);
+ w11ll->SetBounds(gfx::Rect(3, 4, 100, 100));
+ w1ll->AddChild(w11ll);
+
+ Window* w111 = new Window(NULL);
+ w111->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ w111->SetBounds(gfx::Rect(5, 6, 100, 100));
+ w11ll->AddChild(w111);
+
+ Window* w12 = new Window(NULL);
+ w12->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ w12->SetBounds(gfx::Rect(7, 8, 100, 100));
+ w1ll->AddChild(w12);
+
+ Window* w121 = new Window(NULL);
+ w121->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ w121->SetBounds(gfx::Rect(9, 10, 100, 100));
+ w12->AddChild(w121);
+
+ root.AddChild(w1ll);
+
+ w111->SetBounds(gfx::Rect(7, 8, 11, 12));
+ EXPECT_EQ("7,8 11x12", w111->bounds().ToString());
+ EXPECT_EQ("7,8 11x12", w111->GetTargetBounds().ToString());
+ EXPECT_EQ("11,14 11x12", w111->layer()->bounds().ToString());
+
+ // Set back.
+ w111->SetBounds(gfx::Rect(5, 6, 100, 100));
+ EXPECT_EQ("5,6 100x100", w111->bounds().ToString());
+ EXPECT_EQ("5,6 100x100", w111->GetTargetBounds().ToString());
+ EXPECT_EQ("9,12 100x100", w111->layer()->bounds().ToString());
+
+ // Setting the bounds of a layerless window needs to adjust the bounds of
+ // layered children.
+ w11ll->SetBounds(gfx::Rect(5, 6, 100, 100));
+ EXPECT_EQ("5,6 100x100", w11ll->bounds().ToString());
+ EXPECT_EQ("5,6 100x100", w11ll->GetTargetBounds().ToString());
+ EXPECT_EQ("5,6 100x100", w111->bounds().ToString());
+ EXPECT_EQ("5,6 100x100", w111->GetTargetBounds().ToString());
+ EXPECT_EQ("11,14 100x100", w111->layer()->bounds().ToString());
+
+ root.RemoveChild(w1ll);
+
+ w111->SetBounds(gfx::Rect(7, 8, 11, 12));
+ EXPECT_EQ("7,8 11x12", w111->bounds().ToString());
+ EXPECT_EQ("7,8 11x12", w111->GetTargetBounds().ToString());
+ EXPECT_EQ("7,8 11x12", w111->layer()->bounds().ToString());
+
+ delete w1ll;
+}
+
+namespace {
+
+// Tracks the number of times paint is invoked along with what the clip and
+// translate was.
+class PaintWindowDelegate : public TestWindowDelegate {
+ public:
+ PaintWindowDelegate() : paint_count_(0) {}
+ virtual ~PaintWindowDelegate() {}
+
+ const gfx::Rect& most_recent_paint_clip_bounds() const {
+ return most_recent_paint_clip_bounds_;
+ }
+
+ const gfx::Vector2d& most_recent_paint_matrix_offset() const {
+ return most_recent_paint_matrix_offset_;
+ }
+
+ void clear_paint_count() { paint_count_ = 0; }
+ int paint_count() const { return paint_count_; }
+
+ // TestWindowDelegate::
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
+ paint_count_++;
+ canvas->GetClipBounds(&most_recent_paint_clip_bounds_);
+ const SkMatrix& matrix = canvas->sk_canvas()->getTotalMatrix();
+ most_recent_paint_matrix_offset_ = gfx::Vector2d(
+ SkScalarFloorToInt(matrix.getTranslateX()),
+ SkScalarFloorToInt(matrix.getTranslateY()));
+ }
+
+ private:
+ int paint_count_;
+ gfx::Rect most_recent_paint_clip_bounds_;
+ gfx::Vector2d most_recent_paint_matrix_offset_;
+
+ DISALLOW_COPY_AND_ASSIGN(PaintWindowDelegate);
+};
+
+} // namespace
+
+// Assertions around layerless children being painted when non-layerless window
+// is painted.
+TEST_F(WindowTest, PaintLayerless) {
+ // Creates the following structure (all children owned by root):
+ // root
+ // w1ll 1,2 40x50
+ // w11ll 3,4 11x12
+ // w111 5,6
+ //
+ // ll: layer less, eg no layer
+ PaintWindowDelegate w1ll_delegate;
+ PaintWindowDelegate w11ll_delegate;
+ PaintWindowDelegate w111_delegate;
+
+ Window root(NULL);
+ root.InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ root.SetBounds(gfx::Rect(0, 0, 100, 100));
+
+ Window* w1ll = new Window(&w1ll_delegate);
+ w1ll->InitWithWindowLayerType(WINDOW_LAYER_NONE);
+ w1ll->SetBounds(gfx::Rect(1, 2, 40, 50));
+ w1ll->Show();
+ root.AddChild(w1ll);
+
+ Window* w11ll = new Window(&w11ll_delegate);
+ w11ll->InitWithWindowLayerType(WINDOW_LAYER_NONE);
+ w11ll->SetBounds(gfx::Rect(3, 4, 11, 12));
+ w11ll->Show();
+ w1ll->AddChild(w11ll);
+
+ Window* w111 = new Window(&w111_delegate);
+ w111->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ w111->SetBounds(gfx::Rect(5, 6, 100, 100));
+ w111->Show();
+ w11ll->AddChild(w111);
+
+ EXPECT_EQ(0, w1ll_delegate.paint_count());
+ EXPECT_EQ(0, w11ll_delegate.paint_count());
+ EXPECT_EQ(0, w111_delegate.paint_count());
+
+ // Paint the root, this should trigger painting of the two layerless
+ // descendants but not the layered descendant.
+ gfx::Canvas canvas(gfx::Size(200, 200), 1.0f, true);
+ static_cast<ui::LayerDelegate&>(root).OnPaintLayer(&canvas);
+
+ // NOTE: SkCanvas::getClipBounds() extends the clip 1 pixel to the left and up
+ // and 2 pixels down and to the right.
+ EXPECT_EQ(1, w1ll_delegate.paint_count());
+ EXPECT_EQ("-1,-1 42x52",
+ w1ll_delegate.most_recent_paint_clip_bounds().ToString());
+ EXPECT_EQ("[1 2]",
+ w1ll_delegate.most_recent_paint_matrix_offset().ToString());
+ EXPECT_EQ(1, w11ll_delegate.paint_count());
+ EXPECT_EQ("-1,-1 13x14",
+ w11ll_delegate.most_recent_paint_clip_bounds().ToString());
+ EXPECT_EQ("[4 6]",
+ w11ll_delegate.most_recent_paint_matrix_offset().ToString());
+ EXPECT_EQ(0, w111_delegate.paint_count());
+}
+
+namespace {
+
+std::string ConvertPointToTargetString(const Window* source,
+ const Window* target) {
+ gfx::Point location;
+ Window::ConvertPointToTarget(source, target, &location);
+ return location.ToString();
+}
+
+} // namespace
+
+// Assertions around Window::ConvertPointToTarget() with layerless windows.
+TEST_F(WindowTest, ConvertPointToTargetLayerless) {
+ // Creates the following structure (all children owned by root):
+ // root
+ // w1ll 1,2
+ // w11ll 3,4
+ // w111 5,6
+ // w12 7,8
+ // w121 9,10
+ //
+ // ll: layer less, eg no layer
+ Window root(NULL);
+ root.InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ root.SetBounds(gfx::Rect(0, 0, 100, 100));
+
+ Window* w1ll = new Window(NULL);
+ w1ll->InitWithWindowLayerType(WINDOW_LAYER_NONE);
+ w1ll->SetBounds(gfx::Rect(1, 2, 100, 100));
+
+ Window* w11ll = new Window(NULL);
+ w11ll->InitWithWindowLayerType(WINDOW_LAYER_NONE);
+ w11ll->SetBounds(gfx::Rect(3, 4, 100, 100));
+ w1ll->AddChild(w11ll);
+
+ Window* w111 = new Window(NULL);
+ w111->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ w111->SetBounds(gfx::Rect(5, 6, 100, 100));
+ w11ll->AddChild(w111);
+
+ Window* w12 = new Window(NULL);
+ w12->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ w12->SetBounds(gfx::Rect(7, 8, 100, 100));
+ w1ll->AddChild(w12);
+
+ Window* w121 = new Window(NULL);
+ w121->InitWithWindowLayerType(WINDOW_LAYER_NOT_DRAWN);
+ w121->SetBounds(gfx::Rect(9, 10, 100, 100));
+ w12->AddChild(w121);
+
+ root.AddChild(w1ll);
+
+ // w111->w11ll
+ EXPECT_EQ("5,6", ConvertPointToTargetString(w111, w11ll));
+
+ // w111->w1ll
+ EXPECT_EQ("8,10", ConvertPointToTargetString(w111, w1ll));
+
+ // w111->root
+ EXPECT_EQ("9,12", ConvertPointToTargetString(w111, &root));
+
+ // w111->w12
+ EXPECT_EQ("1,2", ConvertPointToTargetString(w111, w12));
+
+ // w111->w121
+ EXPECT_EQ("-8,-8", ConvertPointToTargetString(w111, w121));
+
+ // w11ll->w111
+ EXPECT_EQ("-5,-6", ConvertPointToTargetString(w11ll, w111));
+
+ // w11ll->w11ll
+ EXPECT_EQ("3,4", ConvertPointToTargetString(w11ll, w1ll));
+
+ // w11ll->root
+ EXPECT_EQ("4,6", ConvertPointToTargetString(w11ll, &root));
+
+ // w11ll->w12
+ EXPECT_EQ("-4,-4", ConvertPointToTargetString(w11ll, w12));
+}
+
} // namespace test
} // namespace aura
diff --git a/ui/base/accelerators/menu_label_accelerator_util_linux.cc b/ui/base/accelerators/menu_label_accelerator_util_linux.cc
index 21697ea1d6..0a00f82e09 100644
--- a/ui/base/accelerators/menu_label_accelerator_util_linux.cc
+++ b/ui/base/accelerators/menu_label_accelerator_util_linux.cc
@@ -55,7 +55,7 @@ std::string RemoveWindowsStyleAccelerators(const std::string& label) {
// underscores doubled, making the string that appears to the user just |x|.
std::string EscapeWindowsStyleAccelerators(const std::string& label) {
std::string ret;
- ReplaceChars(label, "&", "&&", &ret);
+ base::ReplaceChars(label, "&", "&&", &ret);
return ret;
}
diff --git a/ui/base/accessibility/accessible_text_utils.cc b/ui/base/accessibility/accessible_text_utils.cc
index 5fab22e120..a878b23d47 100644
--- a/ui/base/accessibility/accessible_text_utils.cc
+++ b/ui/base/accessibility/accessible_text_utils.cc
@@ -69,11 +69,13 @@ size_t FindAccessibleTextBoundary(const base::string16& text,
case PARAGRAPH_BOUNDARY:
if (text[pos] == '\n')
return result;
+ break;
case SENTENCE_BOUNDARY:
if ((text[pos] == '.' || text[pos] == '!' || text[pos] == '?') &&
(pos == text_size - 1 || IsWhitespace(text[pos + 1]))) {
return result;
}
+ break;
case ALL_BOUNDARY:
default:
break;
diff --git a/ui/base/clipboard/clipboard.cc b/ui/base/clipboard/clipboard.cc
index 0e25342d20..a77efd661e 100644
--- a/ui/base/clipboard/clipboard.cc
+++ b/ui/base/clipboard/clipboard.cc
@@ -18,61 +18,12 @@ namespace ui {
namespace {
-// Extracts the bitmap size from the passed in params. Since the renderer could
-// send us bad data, explicitly copy the parameters to make sure we go through
-// gfx::Size's sanity checks.
-bool GetBitmapSizeFromParams(const Clipboard::ObjectMapParams& params,
- gfx::Size* size) {
- DCHECK(params.size() == 2);
- if (params[1].size() != sizeof(gfx::Size))
- return false;
- const gfx::Size* size_from_renderer =
- reinterpret_cast<const gfx::Size*>(&(params[1].front()));
- size->set_width(size_from_renderer->width());
- size->set_height(size_from_renderer->height());
- return true;
-}
-
-// A compromised renderer could send us bad size data, so validate it to verify
-// that calculating the number of bytes in the bitmap won't overflow a uint32.
-//
-// |size| - Clipboard bitmap size to validate.
-// |bitmap_bytes| - On return contains the number of bytes needed to store
-// the bitmap data or -1 if the data is invalid.
-// returns: true if the bitmap size is valid, false otherwise.
-bool IsBitmapSizeSane(const gfx::Size& size, uint32* bitmap_bytes) {
- DCHECK_GE(size.width(), 0);
- DCHECK_GE(size.height(), 0);
-
- *bitmap_bytes = -1;
- uint32 total_size = size.width();
- // Limit size to max int so SkBitmap::getSize() calculation won't overflow.
- // TODO(dcheng): Instead of all this custom validation, we should just use a
- // combination of SkBitmap's setConfig() and getSize64() to detect this, e.g.:
- // SkBitmap bitmap;
- // if (!bitmap.setConfig(...))
- // return false;
- // if (bitmap.getSize64().is64())
- // return false;
- if (std::numeric_limits<int>::max() / size.width() <= size.height())
- return false;
- total_size *= size.height();
- if (std::numeric_limits<int>::max() / total_size <= 4)
- return false;
- total_size *= 4;
- *bitmap_bytes = total_size;
- return true;
-}
-
// Valides a shared bitmap on the clipboard.
// Returns true if the clipboard data makes sense and it's safe to access the
// bitmap.
-bool ValidateAndMapSharedBitmap(const gfx::Size& size,
+bool ValidateAndMapSharedBitmap(size_t bitmap_bytes,
base::SharedMemory* bitmap_data) {
using base::SharedMemory;
- uint32 bitmap_bytes = -1;
- if (!IsBitmapSizeSane(size, &bitmap_bytes))
- return false;
if (!bitmap_data || !SharedMemory::IsHandleValid(bitmap_data->handle()))
return false;
@@ -84,19 +35,6 @@ bool ValidateAndMapSharedBitmap(const gfx::Size& size,
return true;
}
-// Adopts a blob of bytes (assumed to be ARGB pixels) into a SkBitmap. Since the
-// pixel data is not copied, the caller must ensure that |data| is valid as long
-// as the SkBitmap is in use. Note that on little endian machines, each pixel is
-// actually BGRA in memory.
-SkBitmap AdoptBytesIntoSkBitmap(const void* data, const gfx::Size& size) {
- SkBitmap bitmap;
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height());
- // Guaranteed not to overflow since it's been validated by IsBitmapSizeSane().
- DCHECK_EQ(4U * size.width(), bitmap.rowBytes());
- bitmap.setPixels(const_cast<void*>(data));
- return bitmap;
-}
-
// A list of allowed threads. By default, this is empty and no thread checking
// is done (in the unit test case), but a user (like content) can set which
// threads are allowed to call this method.
@@ -208,26 +146,38 @@ void Clipboard::DispatchObject(ObjectType type, const ObjectMapParams& params) {
using base::SharedMemory;
using base::SharedMemoryHandle;
- if (params[0].size() != sizeof(SharedMemory*))
+ if (params[0].size() != sizeof(SharedMemory*) ||
+ params[1].size() != sizeof(gfx::Size)) {
+ return;
+ }
+
+ SkBitmap bitmap;
+ const gfx::Size* unvalidated_size =
+ reinterpret_cast<const gfx::Size*>(&params[1].front());
+ // Let Skia do some sanity checking for us (no negative widths/heights, no
+ // overflows while calculating bytes per row, etc).
+ if (!bitmap.setConfig(SkBitmap::kARGB_8888_Config,
+ unvalidated_size->width(),
+ unvalidated_size->height())) {
+ return;
+ }
+ // Make sure the size is representable as a signed 32-bit int, so
+ // SkBitmap::getSize() won't be truncated.
+ if (bitmap.getSize64().is64())
return;
// It's OK to cast away constness here since we map the handle as
// read-only.
const char* raw_bitmap_data_const =
- reinterpret_cast<const char*>(&(params[0].front()));
+ reinterpret_cast<const char*>(&params[0].front());
char* raw_bitmap_data = const_cast<char*>(raw_bitmap_data_const);
scoped_ptr<SharedMemory> bitmap_data(
*reinterpret_cast<SharedMemory**>(raw_bitmap_data));
- gfx::Size size;
- if (!GetBitmapSizeFromParams(params, &size))
- return;
-
- if (!ValidateAndMapSharedBitmap(size, bitmap_data.get()))
+ if (!ValidateAndMapSharedBitmap(bitmap.getSize(), bitmap_data.get()))
return;
+ bitmap.setPixels(bitmap_data->memory());
- const SkBitmap& bitmap = AdoptBytesIntoSkBitmap(
- bitmap_data->memory(), size);
WriteBitmap(bitmap);
break;
}
diff --git a/ui/base/clipboard/clipboard.h b/ui/base/clipboard/clipboard.h
index 27d005a9ee..d3fbbaa63a 100644
--- a/ui/base/clipboard/clipboard.h
+++ b/ui/base/clipboard/clipboard.h
@@ -213,9 +213,9 @@ class UI_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) {
static void DestroyClipboardForCurrentThread();
// Write a bunch of objects to the system clipboard. Copies are made of the
- // contents of |objects|. On Windows they are copied to the system clipboard.
- // On linux they are copied into a structure owned by the Clipboard object and
- // kept until the system clipboard is set again.
+ // contents of |objects|.
+ // Note: If you're thinking about calling this, you should probably be using
+ // ScopedClipboardWriter instead.
void WriteObjects(ClipboardType type, const ObjectMap& objects);
// Returns a sequence number which uniquely identifies clipboard state.
@@ -230,11 +230,11 @@ class UI_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) {
void Clear(ClipboardType type);
void ReadAvailableTypes(ClipboardType type,
- std::vector<string16>* types,
+ std::vector<base::string16>* types,
bool* contains_filenames) const;
// Reads UNICODE text from the clipboard, if available.
- void ReadText(ClipboardType type, string16* result) const;
+ void ReadText(ClipboardType type, base::string16* result) const;
// Reads ASCII text from the clipboard, if available.
void ReadAsciiText(ClipboardType type, std::string* result) const;
@@ -244,7 +244,7 @@ class UI_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) {
// markup indicating the beginning and end of the actual fragment. Otherwise,
// they will contain 0 and markup->size().
void ReadHTML(ClipboardType type,
- string16* markup,
+ base::string16* markup,
std::string* src_url,
uint32* fragment_start,
uint32* fragment_end) const;
@@ -257,11 +257,11 @@ class UI_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) {
SkBitmap ReadImage(ClipboardType type) const;
void ReadCustomData(ClipboardType clipboard_type,
- const string16& type,
- string16* result) const;
+ const base::string16& type,
+ base::string16* result) const;
// Reads a bookmark from the clipboard, if available.
- void ReadBookmark(string16* title, std::string* url) const;
+ void ReadBookmark(base::string16* title, std::string* url) const;
// Reads raw data from the clipboard with the given format type. Stores result
// as a byte vector.
@@ -346,8 +346,8 @@ class UI_EXPORT Clipboard : NON_EXPORTED_BASE(public base::ThreadChecker) {
// Safely write to system clipboard. Free |handle| on failure.
void WriteToClipboard(unsigned int format, HANDLE handle);
- static void ParseBookmarkClipboardFormat(const string16& bookmark,
- string16* title,
+ static void ParseBookmarkClipboardFormat(const base::string16& bookmark,
+ base::string16* title,
std::string* url);
// Free a handle depending on its type (as intuited from format)
diff --git a/ui/base/clipboard/clipboard_android.cc b/ui/base/clipboard/clipboard_android.cc
index fc9ba00bbb..f0971c448a 100644
--- a/ui/base/clipboard/clipboard_android.cc
+++ b/ui/base/clipboard/clipboard_android.cc
@@ -129,39 +129,50 @@ void ClipboardMap::Clear() {
// If the internal map contains a plain-text entry and it does not match that
// in the Android clipboard, clear the map and insert the Android text into it.
+// If there is an HTML entry in the Android clipboard it gets inserted in the
+// map.
void ClipboardMap::SyncWithAndroidClipboard() {
lock_.AssertAcquired();
JNIEnv* env = AttachCurrentThread();
+ // Update the plain text clipboard entry
std::map<std::string, std::string>::const_iterator it =
map_.find(kPlainTextFormat);
-
- if (!Java_Clipboard_hasPlainText(env, clipboard_manager_.obj())) {
- if (it != map_.end())
+ ScopedJavaLocalRef<jstring> java_string_text =
+ Java_Clipboard_getCoercedText(env, clipboard_manager_.obj());
+ if (java_string_text.obj()) {
+ std::string android_string = ConvertJavaStringToUTF8(java_string_text);
+ if (!android_string.empty() &&
+ (it == map_.end() || it->second != android_string)) {
+ // There is a different string in the Android clipboard than we have.
+ // Clear the map on our side.
+ map_.clear();
+ map_[kPlainTextFormat] = android_string;
+ }
+ } else {
+ if (it != map_.end()) {
// We have plain text on this side, but Android doesn't. Nuke ours.
map_.clear();
- return;
+ }
}
- ScopedJavaLocalRef<jstring> java_string =
- Java_Clipboard_getCoercedText(env, clipboard_manager_.obj());
-
- if (!java_string.obj()) {
- // Tolerate a null value from the Java side, even though that should not
- // happen since hasPlainText has already returned true.
- // Should only happen if someone is using the clipboard on multiple
- // threads and clears it out after hasPlainText but before we get here...
- if (it != map_.end())
- // We have plain text on this side, but Android doesn't. Nuke ours.
- map_.clear();
+ if (!Java_Clipboard_isHTMLClipboardSupported(env)) {
return;
}
- // If Android text differs from ours (or we have none), then copy Android's.
- std::string android_string = ConvertJavaStringToUTF8(java_string);
- if (it == map_.end() || it->second != android_string) {
- map_.clear();
- map_[kPlainTextFormat] = android_string;
+ // Update the html clipboard entry
+ ScopedJavaLocalRef<jstring> java_string_html =
+ Java_Clipboard_getHTMLText(env, clipboard_manager_.obj());
+ if (java_string_html.obj()) {
+ std::string android_string = ConvertJavaStringToUTF8(java_string_html);
+ if (!android_string.empty()) {
+ map_[kHTMLFormat] = android_string;
+ return;
+ }
+ }
+ it = map_.find(kHTMLFormat);
+ if (it != map_.end()) {
+ map_.erase(kHTMLFormat);
}
}
diff --git a/ui/base/clipboard/clipboard_aura.cc b/ui/base/clipboard/clipboard_aura.cc
index 20744660fb..638604b502 100644
--- a/ui/base/clipboard/clipboard_aura.cc
+++ b/ui/base/clipboard/clipboard_aura.cc
@@ -337,8 +337,7 @@ void DeleteClipboard() {
class ClipboardDataBuilder {
public:
static void CommitToClipboard() {
- DCHECK(current_data_);
- GetClipboard()->WriteData(current_data_);
+ GetClipboard()->WriteData(GetCurrentData());
current_data_ = NULL;
}
diff --git a/ui/base/clipboard/clipboard_gtk.cc b/ui/base/clipboard/clipboard_gtk.cc
index 59e2bc4054..eebcc5e39c 100644
--- a/ui/base/clipboard/clipboard_gtk.cc
+++ b/ui/base/clipboard/clipboard_gtk.cc
@@ -317,8 +317,8 @@ void Clipboard::WriteBitmap(const SkBitmap& bitmap) {
void Clipboard::WriteBookmark(const char* title_data, size_t title_len,
const char* url_data, size_t url_len) {
// Write as a mozilla url (UTF16: URL, newline, title).
- string16 url = UTF8ToUTF16(std::string(url_data, url_len) + "\n");
- string16 title = UTF8ToUTF16(std::string(title_data, title_len));
+ base::string16 url = UTF8ToUTF16(std::string(url_data, url_len) + "\n");
+ base::string16 title = UTF8ToUTF16(std::string(title_data, title_len));
if (title.length() >= std::numeric_limits<size_t>::max() / 4 ||
url.length() >= std::numeric_limits<size_t>::max() / 4)
return;
@@ -407,7 +407,7 @@ void Clipboard::Clear(ClipboardType type) {
}
void Clipboard::ReadAvailableTypes(ClipboardType type,
- std::vector<string16>* types,
+ std::vector<base::string16>* types,
bool* contains_filenames) const {
DCHECK(CalledOnValidThread());
if (!types || !contains_filenames) {
@@ -441,7 +441,7 @@ void Clipboard::ReadAvailableTypes(ClipboardType type,
}
-void Clipboard::ReadText(ClipboardType type, string16* result) const {
+void Clipboard::ReadText(ClipboardType type, base::string16* result) const {
DCHECK(CalledOnValidThread());
GtkClipboard* clipboard = LookupBackingClipboard(type);
if (clipboard == NULL)
@@ -478,7 +478,7 @@ void Clipboard::ReadAsciiText(ClipboardType type,
// TODO(estade): handle different charsets.
// TODO(port): set *src_url.
void Clipboard::ReadHTML(ClipboardType type,
- string16* markup,
+ base::string16* markup,
std::string* src_url,
uint32* fragment_start,
uint32* fragment_end) const {
@@ -547,8 +547,8 @@ SkBitmap Clipboard::ReadImage(ClipboardType type) const {
}
void Clipboard::ReadCustomData(ClipboardType clipboard_type,
- const string16& type,
- string16* result) const {
+ const base::string16& type,
+ base::string16* result) const {
DCHECK(CalledOnValidThread());
GtkClipboard* clipboard = LookupBackingClipboard(clipboard_type);
if (!clipboard)
@@ -564,7 +564,7 @@ void Clipboard::ReadCustomData(ClipboardType clipboard_type,
gtk_selection_data_free(data);
}
-void Clipboard::ReadBookmark(string16* title, std::string* url) const {
+void Clipboard::ReadBookmark(base::string16* title, std::string* url) const {
// TODO(estade): implement this.
NOTIMPLEMENTED();
}
diff --git a/ui/base/clipboard/clipboard_unittest.cc b/ui/base/clipboard/clipboard_unittest.cc
index c423e418c8..324663aec1 100644
--- a/ui/base/clipboard/clipboard_unittest.cc
+++ b/ui/base/clipboard/clipboard_unittest.cc
@@ -89,11 +89,13 @@ TEST_F(ClipboardTest, TextTest) {
TEST_F(ClipboardTest, HTMLTest) {
string16 markup(ASCIIToUTF16("<string>Hi!</string>")), markup_result;
+ string16 plain(ASCIIToUTF16("Hi!")), plain_result;
std::string url("http://www.example.com/"), url_result;
{
ScopedClipboardWriter clipboard_writer(&clipboard(),
CLIPBOARD_TYPE_COPY_PASTE);
+ clipboard_writer.WriteText(plain);
clipboard_writer.WriteHTML(markup, url);
}
@@ -175,10 +177,12 @@ TEST_F(ClipboardTest, TrickyHTMLTest) {
string16 markup(ASCIIToUTF16("<em>Bye!<!--EndFragment --></em>")),
markup_result;
std::string url, url_result;
+ string16 plain(ASCIIToUTF16("Bye!")), plain_result;
{
ScopedClipboardWriter clipboard_writer(&clipboard(),
CLIPBOARD_TYPE_COPY_PASTE);
+ clipboard_writer.WriteText(plain);
clipboard_writer.WriteHTML(markup, url);
}
@@ -423,6 +427,111 @@ TEST_F(ClipboardTest, SharedBitmapTest) {
}
}
+namespace {
+// A size class that just happens to have the same layout as gfx::Size!
+struct UnsafeSize {
+ int width;
+ int height;
+};
+COMPILE_ASSERT(sizeof(UnsafeSize) == sizeof(gfx::Size),
+ UnsafeSize_must_be_same_size_as_gfx_Size);
+} // namespace
+
+TEST_F(ClipboardTest, SharedBitmapWithTwoNegativeSizes) {
+ Clipboard::ObjectMapParam placeholder_param;
+ void* crash_me = reinterpret_cast<void*>(57);
+ placeholder_param.resize(sizeof(crash_me));
+ memcpy(&placeholder_param.front(), &crash_me, sizeof(crash_me));
+
+ Clipboard::ObjectMapParam size_param;
+ UnsafeSize size = {-100, -100};
+ size_param.resize(sizeof(size));
+ memcpy(&size_param.front(), &size, sizeof(size));
+
+ Clipboard::ObjectMapParams params;
+ params.push_back(placeholder_param);
+ params.push_back(size_param);
+
+ Clipboard::ObjectMap objects;
+ objects[Clipboard::CBF_SMBITMAP] = params;
+
+ clipboard().WriteObjects(CLIPBOARD_TYPE_COPY_PASTE, objects);
+ EXPECT_FALSE(clipboard().IsFormatAvailable(Clipboard::GetBitmapFormatType(),
+ CLIPBOARD_TYPE_COPY_PASTE));
+}
+
+TEST_F(ClipboardTest, SharedBitmapWithOneNegativeSize) {
+ Clipboard::ObjectMapParam placeholder_param;
+ void* crash_me = reinterpret_cast<void*>(57);
+ placeholder_param.resize(sizeof(crash_me));
+ memcpy(&placeholder_param.front(), &crash_me, sizeof(crash_me));
+
+ Clipboard::ObjectMapParam size_param;
+ UnsafeSize size = {-100, 100};
+ size_param.resize(sizeof(size));
+ memcpy(&size_param.front(), &size, sizeof(size));
+
+ Clipboard::ObjectMapParams params;
+ params.push_back(placeholder_param);
+ params.push_back(size_param);
+
+ Clipboard::ObjectMap objects;
+ objects[Clipboard::CBF_SMBITMAP] = params;
+
+ clipboard().WriteObjects(CLIPBOARD_TYPE_COPY_PASTE, objects);
+ EXPECT_FALSE(clipboard().IsFormatAvailable(Clipboard::GetBitmapFormatType(),
+ CLIPBOARD_TYPE_COPY_PASTE));
+}
+
+TEST_F(ClipboardTest, BitmapWithSuperSize) {
+ Clipboard::ObjectMapParam placeholder_param;
+ void* crash_me = reinterpret_cast<void*>(57);
+ placeholder_param.resize(sizeof(crash_me));
+ memcpy(&placeholder_param.front(), &crash_me, sizeof(crash_me));
+
+ Clipboard::ObjectMapParam size_param;
+ // Width just big enough that bytes per row won't fit in a 32-bit
+ // representation.
+ gfx::Size size(0x20000000, 1);
+ size_param.resize(sizeof(size));
+ memcpy(&size_param.front(), &size, sizeof(size));
+
+ Clipboard::ObjectMapParams params;
+ params.push_back(placeholder_param);
+ params.push_back(size_param);
+
+ Clipboard::ObjectMap objects;
+ objects[Clipboard::CBF_SMBITMAP] = params;
+
+ clipboard().WriteObjects(CLIPBOARD_TYPE_COPY_PASTE, objects);
+ EXPECT_FALSE(clipboard().IsFormatAvailable(Clipboard::GetBitmapFormatType(),
+ CLIPBOARD_TYPE_COPY_PASTE));
+}
+
+TEST_F(ClipboardTest, BitmapWithSuperSize2) {
+ Clipboard::ObjectMapParam placeholder_param;
+ void* crash_me = reinterpret_cast<void*>(57);
+ placeholder_param.resize(sizeof(crash_me));
+ memcpy(&placeholder_param.front(), &crash_me, sizeof(crash_me));
+
+ Clipboard::ObjectMapParam size_param;
+ // Width and height large enough that SkBitmap::getSize() will be truncated.
+ gfx::Size size(0x0fffffff, 0x0fffffff);
+ size_param.resize(sizeof(size));
+ memcpy(&size_param.front(), &size, sizeof(size));
+
+ Clipboard::ObjectMapParams params;
+ params.push_back(placeholder_param);
+ params.push_back(size_param);
+
+ Clipboard::ObjectMap objects;
+ objects[Clipboard::CBF_SMBITMAP] = params;
+
+ clipboard().WriteObjects(CLIPBOARD_TYPE_COPY_PASTE, objects);
+ EXPECT_FALSE(clipboard().IsFormatAvailable(Clipboard::GetBitmapFormatType(),
+ CLIPBOARD_TYPE_COPY_PASTE));
+}
+
TEST_F(ClipboardTest, DataTest) {
const ui::Clipboard::FormatType kFormat =
ui::Clipboard::GetFormatType("chromium/x-test-format");
diff --git a/ui/base/clipboard/custom_data_helper.cc b/ui/base/clipboard/custom_data_helper.cc
index 09073611a7..f0b3aa3084 100644
--- a/ui/base/clipboard/custom_data_helper.cc
+++ b/ui/base/clipboard/custom_data_helper.cc
@@ -32,14 +32,14 @@ bool SkippablePickle::SkipString16(PickleIterator* iter) {
int len;
if (!ReadLength(iter, &len))
return false;
- return iter->SkipBytes(len * sizeof(char16));
+ return iter->SkipBytes(len * sizeof(base::char16));
}
} // namespace
void ReadCustomDataTypes(const void* data,
size_t data_length,
- std::vector<string16>* types) {
+ std::vector<base::string16>* types) {
SkippablePickle pickle(data, data_length);
PickleIterator iter(pickle);
@@ -53,7 +53,7 @@ void ReadCustomDataTypes(const void* data,
uint64 original_size = types->size();
for (uint64 i = 0; i < size; ++i) {
- types->push_back(string16());
+ types->push_back(base::string16());
if (!pickle.ReadString16(&iter, &types->back()) ||
!pickle.SkipString16(&iter)) {
types->resize(original_size);
@@ -64,8 +64,8 @@ void ReadCustomDataTypes(const void* data,
void ReadCustomDataForType(const void* data,
size_t data_length,
- const string16& type,
- string16* result) {
+ const base::string16& type,
+ base::string16* result) {
SkippablePickle pickle(data, data_length);
PickleIterator iter(pickle);
@@ -74,7 +74,7 @@ void ReadCustomDataForType(const void* data,
return;
for (uint64 i = 0; i < size; ++i) {
- string16 deserialized_type;
+ base::string16 deserialized_type;
if (!pickle.ReadString16(&iter, &deserialized_type))
return;
if (deserialized_type == type) {
@@ -88,7 +88,7 @@ void ReadCustomDataForType(const void* data,
void ReadCustomDataIntoMap(const void* data,
size_t data_length,
- std::map<string16, string16>* result) {
+ std::map<base::string16, base::string16>* result) {
Pickle pickle(reinterpret_cast<const char*>(data), data_length);
PickleIterator iter(pickle);
@@ -97,14 +97,14 @@ void ReadCustomDataIntoMap(const void* data,
return;
for (uint64 i = 0; i < size; ++i) {
- string16 type;
+ base::string16 type;
if (!pickle.ReadString16(&iter, &type)) {
// Data is corrupt, return an empty map.
result->clear();
return;
}
- std::pair<std::map<string16, string16>::iterator, bool> insert_result =
- result->insert(std::make_pair(type, string16()));
+ std::pair<std::map<base::string16, base::string16>::iterator, bool>
+ insert_result = result->insert(std::make_pair(type, base::string16()));
if (!pickle.ReadString16(&iter, &insert_result.first->second)) {
// Data is corrupt, return an empty map.
result->clear();
@@ -113,10 +113,12 @@ void ReadCustomDataIntoMap(const void* data,
}
}
-void WriteCustomDataToPickle(const std::map<string16, string16>& data,
- Pickle* pickle) {
+void WriteCustomDataToPickle(
+ const std::map<base::string16, base::string16>& data,
+ Pickle* pickle) {
pickle->WriteUInt64(data.size());
- for (std::map<string16, string16>::const_iterator it = data.begin();
+ for (std::map<base::string16, base::string16>::const_iterator it =
+ data.begin();
it != data.end();
++it) {
pickle->WriteString16(it->first);
diff --git a/ui/base/clipboard/custom_data_helper.h b/ui/base/clipboard/custom_data_helper.h
index 57e1772146..55e7dce382 100644
--- a/ui/base/clipboard/custom_data_helper.h
+++ b/ui/base/clipboard/custom_data_helper.h
@@ -36,17 +36,19 @@ UI_EXPORT extern const char kMimeTypeWebCustomData[];
UI_EXPORT void ReadCustomDataTypes(const void* data,
size_t data_length,
- std::vector<string16>* types);
+ std::vector<base::string16>* types);
UI_EXPORT void ReadCustomDataForType(const void* data,
size_t data_length,
- const string16& type,
- string16* result);
-UI_EXPORT void ReadCustomDataIntoMap(const void* data,
- size_t data_length,
- std::map<string16, string16>* result);
-
-UI_EXPORT void WriteCustomDataToPickle(const std::map<string16, string16>& data,
- Pickle* pickle);
+ const base::string16& type,
+ base::string16* result);
+UI_EXPORT void ReadCustomDataIntoMap(
+ const void* data,
+ size_t data_length,
+ std::map<base::string16, base::string16>* result);
+
+UI_EXPORT void WriteCustomDataToPickle(
+ const std::map<base::string16, base::string16>& data,
+ Pickle* pickle);
} // namespace ui
diff --git a/ui/base/clipboard/scoped_clipboard_writer.cc b/ui/base/clipboard/scoped_clipboard_writer.cc
index 8e46955972..120832f4a4 100644
--- a/ui/base/clipboard/scoped_clipboard_writer.cc
+++ b/ui/base/clipboard/scoped_clipboard_writer.cc
@@ -26,15 +26,15 @@ ScopedClipboardWriter::~ScopedClipboardWriter() {
clipboard_->WriteObjects(type_, objects_);
}
-void ScopedClipboardWriter::WriteText(const string16& text) {
+void ScopedClipboardWriter::WriteText(const base::string16& text) {
WriteTextOrURL(text, false);
}
-void ScopedClipboardWriter::WriteURL(const string16& text) {
+void ScopedClipboardWriter::WriteURL(const base::string16& text) {
WriteTextOrURL(text, true);
}
-void ScopedClipboardWriter::WriteHTML(const string16& markup,
+void ScopedClipboardWriter::WriteHTML(const base::string16& markup,
const std::string& source_url) {
std::string utf8_markup = UTF16ToUTF8(markup);
@@ -57,7 +57,7 @@ void ScopedClipboardWriter::WriteRTF(const std::string& rtf_data) {
objects_[Clipboard::CBF_RTF] = parameters;
}
-void ScopedClipboardWriter::WriteBookmark(const string16& bookmark_title,
+void ScopedClipboardWriter::WriteBookmark(const base::string16& bookmark_title,
const std::string& url) {
if (bookmark_title.empty() || url.empty())
return;
@@ -71,7 +71,7 @@ void ScopedClipboardWriter::WriteBookmark(const string16& bookmark_title,
objects_[Clipboard::CBF_BOOKMARK] = parameters;
}
-void ScopedClipboardWriter::WriteHyperlink(const string16& anchor_text,
+void ScopedClipboardWriter::WriteHyperlink(const base::string16& anchor_text,
const std::string& url) {
if (anchor_text.empty() || url.empty())
return;
@@ -111,7 +111,8 @@ void ScopedClipboardWriter::Reset() {
objects_.clear();
}
-void ScopedClipboardWriter::WriteTextOrURL(const string16& text, bool is_url) {
+void ScopedClipboardWriter::WriteTextOrURL(const base::string16& text,
+ bool is_url) {
std::string utf8_text = UTF16ToUTF8(text);
Clipboard::ObjectMapParams parameters;
diff --git a/ui/base/clipboard/scoped_clipboard_writer.h b/ui/base/clipboard/scoped_clipboard_writer.h
index 73ff53ba66..8c7bb1a668 100644
--- a/ui/base/clipboard/scoped_clipboard_writer.h
+++ b/ui/base/clipboard/scoped_clipboard_writer.h
@@ -33,26 +33,27 @@ class UI_EXPORT ScopedClipboardWriter {
~ScopedClipboardWriter();
// Converts |text| to UTF-8 and adds it to the clipboard.
- void WriteText(const string16& text);
+ void WriteText(const base::string16& text);
// Converts the text of the URL to UTF-8 and adds it to the clipboard, then
// notifies the Clipboard that we just wrote a URL.
- void WriteURL(const string16& text);
+ void WriteURL(const base::string16& text);
// Adds HTML to the clipboard. The url parameter is optional, but especially
// useful if the HTML fragment contains relative links.
- void WriteHTML(const string16& markup, const std::string& source_url);
+ void WriteHTML(const base::string16& markup, const std::string& source_url);
// Adds RTF to the clipboard.
void WriteRTF(const std::string& rtf_data);
// Adds a bookmark to the clipboard.
- void WriteBookmark(const string16& bookmark_title,
+ void WriteBookmark(const base::string16& bookmark_title,
const std::string& url);
// Adds an html hyperlink (<a href>) to the clipboard. |anchor_text| and
// |url| will be escaped as needed.
- void WriteHyperlink(const string16& anchor_text, const std::string& url);
+ void WriteHyperlink(const base::string16& anchor_text,
+ const std::string& url);
// Used by WebKit to determine whether WebKit wrote the clipboard last
void WriteWebSmartPaste();
@@ -67,7 +68,7 @@ class UI_EXPORT ScopedClipboardWriter {
protected:
// Converts |text| to UTF-8 and adds it to the clipboard. If it's a URL, we
// also notify the clipboard of that fact.
- void WriteTextOrURL(const string16& text, bool is_url);
+ void WriteTextOrURL(const base::string16& text, bool is_url);
// We accumulate the data passed to the various targets in the |objects_|
// vector, and pass it to Clipboard::WriteObjects() during object destruction.
diff --git a/ui/base/cursor/cursors_aura.cc b/ui/base/cursor/cursors_aura.cc
index cdf4ab3685..7b382375fc 100644
--- a/ui/base/cursor/cursors_aura.cc
+++ b/ui/base/cursor/cursors_aura.cc
@@ -75,49 +75,54 @@ const CursorData kNormalCursors[] = {
};
const CursorData kLargeCursors[] = {
- {ui::kCursorNull, IDR_AURA_CURSOR_BIG_PTR, {10, 10}, {10, 10}},
- {ui::kCursorPointer, IDR_AURA_CURSOR_BIG_PTR, {10, 10}, {10, 10}},
- {ui::kCursorNoDrop, IDR_AURA_CURSOR_BIG_NO_DROP, {23, 23}, {23, 23}},
- {ui::kCursorNotAllowed, IDR_AURA_CURSOR_BIG_NO_DROP, {23, 23}, {23, 23}},
- {ui::kCursorCopy, IDR_AURA_CURSOR_BIG_COPY, {23, 23}, {23, 23}},
- {ui::kCursorHand, IDR_AURA_CURSOR_BIG_HAND, {23, 10}, {23, 10}},
- {ui::kCursorMove, IDR_AURA_CURSOR_BIG_MOVE, {28, 28}, {28, 28}},
+ // The 2x hotspots should be double of the 1x, even though the cursors are
+ // shown as same size as 1x (64x64). Since, in 2x dpi screen, the 1x large
+ // cursor assets (64x64) are internally enlarged to the double size (128x128)
+ // by ResourceBundleImageSource.
+ {ui::kCursorNull, IDR_AURA_CURSOR_BIG_PTR, {10, 10}, {20, 20}},
+ {ui::kCursorPointer, IDR_AURA_CURSOR_BIG_PTR, {10, 10}, {20, 20}},
+ {ui::kCursorNoDrop, IDR_AURA_CURSOR_BIG_NO_DROP, {10, 10}, {20, 20}},
+ {ui::kCursorNotAllowed, IDR_AURA_CURSOR_BIG_NO_DROP, {23, 23}, {46, 46}},
+ {ui::kCursorCopy, IDR_AURA_CURSOR_BIG_COPY, {10, 10}, {20, 20}},
+ {ui::kCursorHand, IDR_AURA_CURSOR_BIG_HAND, {25, 7}, {50, 14}},
+ {ui::kCursorMove, IDR_AURA_CURSOR_BIG_MOVE, {32, 31}, {64, 62}},
{ui::kCursorNorthEastResize, IDR_AURA_CURSOR_BIG_NORTH_EAST_RESIZE,
- {31, 28}, {31, 28}},
+ {31, 28}, {62, 56}},
{ui::kCursorSouthWestResize, IDR_AURA_CURSOR_BIG_SOUTH_WEST_RESIZE,
- {31, 28}, {31, 28}},
+ {31, 28}, {62, 56}},
{ui::kCursorSouthEastResize, IDR_AURA_CURSOR_BIG_SOUTH_EAST_RESIZE,
- {28, 28}, {28, 28}},
+ {28, 28}, {56, 56}},
{ui::kCursorNorthWestResize, IDR_AURA_CURSOR_BIG_NORTH_WEST_RESIZE,
- {28, 28}, {28, 28}},
+ {28, 28}, {56, 56}},
{ui::kCursorNorthResize, IDR_AURA_CURSOR_BIG_NORTH_RESIZE,
- {28, 31}, {28, 31}},
+ {29, 32}, {58, 64}},
{ui::kCursorSouthResize, IDR_AURA_CURSOR_BIG_SOUTH_RESIZE,
- {28, 31}, {28, 31}},
- {ui::kCursorEastResize, IDR_AURA_CURSOR_BIG_EAST_RESIZE, {31, 28}, {31, 28}},
- {ui::kCursorWestResize, IDR_AURA_CURSOR_BIG_WEST_RESIZE, {31, 28}, {31, 28}},
- {ui::kCursorIBeam, IDR_AURA_CURSOR_BIG_IBEAM, {31, 31}, {31, 31}},
- {ui::kCursorAlias, IDR_AURA_CURSOR_BIG_ALIAS, {51, 15}, {51, 11}},
- {ui::kCursorCell, IDR_AURA_CURSOR_BIG_CELL, {28, 28}, {24, 23}},
- {ui::kCursorContextMenu, IDR_AURA_CURSOR_BIG_CONTEXT_MENU, {4, 4}, {8, 9}},
- {ui::kCursorCross, IDR_AURA_CURSOR_BIG_CROSSHAIR, {31, 31}, {31, 31}},
- {ui::kCursorHelp, IDR_AURA_CURSOR_BIG_HELP, {10, 10}, {8, 9}},
+ {29, 32}, {58, 64}},
+ {ui::kCursorEastResize, IDR_AURA_CURSOR_BIG_EAST_RESIZE, {35, 29}, {70, 58}},
+ {ui::kCursorWestResize, IDR_AURA_CURSOR_BIG_WEST_RESIZE, {35, 29}, {70, 58}},
+ {ui::kCursorIBeam, IDR_AURA_CURSOR_BIG_IBEAM, {30, 32}, {30, 64}},
+ {ui::kCursorAlias, IDR_AURA_CURSOR_BIG_ALIAS, {19, 11}, {38, 22}},
+ {ui::kCursorCell, IDR_AURA_CURSOR_BIG_CELL, {30, 30}, {60, 60}},
+ {ui::kCursorContextMenu, IDR_AURA_CURSOR_BIG_CONTEXT_MENU,
+ {11, 11}, {22, 22}},
+ {ui::kCursorCross, IDR_AURA_CURSOR_BIG_CROSSHAIR, {31, 30}, {62, 60}},
+ {ui::kCursorHelp, IDR_AURA_CURSOR_BIG_HELP, {10, 11}, {20, 22}},
{ui::kCursorVerticalText, IDR_AURA_CURSOR_BIG_XTERM_HORIZ,
- {31, 28}, {31, 28}},
- {ui::kCursorZoomIn, IDR_AURA_CURSOR_BIG_ZOOM_IN, {26, 26}, {26, 26}},
- {ui::kCursorZoomOut, IDR_AURA_CURSOR_BIG_ZOOM_OUT, {26, 26}, {26, 26}},
- {ui::kCursorRowResize, IDR_AURA_CURSOR_BIG_ROW_RESIZE, {28, 31}, {28, 31}},
- {ui::kCursorColumnResize, IDR_AURA_CURSOR_BIG_COL_RESIZE, {31, 28}, {31, 28}},
+ {32, 30}, {64, 60}},
+ {ui::kCursorZoomIn, IDR_AURA_CURSOR_BIG_ZOOM_IN, {25, 26}, {50, 52}},
+ {ui::kCursorZoomOut, IDR_AURA_CURSOR_BIG_ZOOM_OUT, {26, 26}, {52, 52}},
+ {ui::kCursorRowResize, IDR_AURA_CURSOR_BIG_ROW_RESIZE, {29, 32}, {58, 64}},
+ {ui::kCursorColumnResize, IDR_AURA_CURSOR_BIG_COL_RESIZE, {35, 29}, {70, 58}},
{ui::kCursorEastWestResize, IDR_AURA_CURSOR_BIG_EAST_WEST_RESIZE,
- {31, 28}, {31, 28}},
+ {35, 29}, {70, 58}},
{ui::kCursorNorthSouthResize, IDR_AURA_CURSOR_BIG_NORTH_SOUTH_RESIZE,
- {28, 31}, {28, 31}},
+ {29, 32}, {58, 64}},
{ui::kCursorNorthEastSouthWestResize,
- IDR_AURA_CURSOR_BIG_NORTH_EAST_SOUTH_WEST_RESIZE, {31, 28}, {31, 28}},
+ IDR_AURA_CURSOR_BIG_NORTH_EAST_SOUTH_WEST_RESIZE, {32, 30}, {64, 60}},
{ui::kCursorNorthWestSouthEastResize,
- IDR_AURA_CURSOR_BIG_NORTH_WEST_SOUTH_EAST_RESIZE, {28, 28}, {28, 28}},
- {ui::kCursorGrab, IDR_AURA_CURSOR_BIG_GRAB, {20, 13}, {20, 13}},
- {ui::kCursorGrabbing, IDR_AURA_CURSOR_BIG_GRABBING, {23, 23}, {23, 23}},
+ IDR_AURA_CURSOR_BIG_NORTH_WEST_SOUTH_EAST_RESIZE, {32, 31}, {64, 62}},
+ {ui::kCursorGrab, IDR_AURA_CURSOR_BIG_GRAB, {21, 11}, {42, 22}},
+ {ui::kCursorGrabbing, IDR_AURA_CURSOR_BIG_GRABBING, {20, 12}, {40, 24}},
};
const CursorData kAnimatedCursors[] = {
diff --git a/ui/base/gtk/gtk_hig_constants.h b/ui/base/gtk/gtk_hig_constants.h
index 147c5189e9..a03db506d1 100644
--- a/ui/base/gtk/gtk_hig_constants.h
+++ b/ui/base/gtk/gtk_hig_constants.h
@@ -10,8 +10,6 @@
#ifndef UI_BASE_GTK_GTK_HIG_CONSTANTS_H_
#define UI_BASE_GTK_GTK_HIG_CONSTANTS_H_
-#include "ui/base/ui_export.h"
-
typedef struct _GdkColor GdkColor;
// Define a macro for creating GdkColors from RGB values. This is a macro to
diff --git a/ui/base/ime/character_composer.cc b/ui/base/ime/chromeos/character_composer.cc
index 6fff429a2a..b9fb51f084 100644
--- a/ui/base/ime/character_composer.cc
+++ b/ui/base/ime/chromeos/character_composer.cc
@@ -1,10 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "ui/base/ime/character_composer.h"
+#include "ui/base/ime/chromeos/character_composer.h"
#include <X11/Xlib.h>
+#include <X11/Xutil.h>
#include <algorithm>
#include <iterator>
@@ -15,6 +16,7 @@
// '#define GDK_KeyName 0xNNNN' macros and does not #include any Gtk headers.
#include "third_party/gtk+/gdk/gdkkeysyms.h"
#include "ui/base/glib/glib_integers.h"
+#include "ui/events/event.h"
#include "ui/events/event_constants.h"
#include "ui/gfx/x/x11_types.h"
@@ -409,9 +411,23 @@ void CharacterComposer::Reset() {
composition_mode_ = KEY_SEQUENCE_MODE;
}
-bool CharacterComposer::FilterKeyPress(unsigned int keyval,
- unsigned int keycode,
- int flags) {
+bool CharacterComposer::FilterKeyPress(const ui::KeyEvent& event) {
+ if (!event.HasNativeEvent() ||
+ (event.type() != ET_KEY_PRESSED && event.type() != ET_KEY_RELEASED))
+ return false;
+
+ XEvent* xevent = event.native_event();
+ DCHECK(xevent);
+ KeySym keysym = NoSymbol;
+ ::XLookupString(&xevent->xkey, NULL, 0, &keysym, NULL);
+
+ return FilterKeyPressInternal(keysym, xevent->xkey.keycode, event.flags());
+}
+
+
+bool CharacterComposer::FilterKeyPressInternal(unsigned int keyval,
+ unsigned int keycode,
+ int flags) {
composed_character_.clear();
preedit_string_.clear();
@@ -435,7 +451,7 @@ bool CharacterComposer::FilterKeyPress(unsigned int keyval,
// Filter key press in an appropriate manner.
switch (composition_mode_) {
case KEY_SEQUENCE_MODE:
- return FilterKeyPressSequenceMode(keyval, keycode, flags);
+ return FilterKeyPressSequenceMode(keyval, flags);
case HEX_MODE:
return FilterKeyPressHexMode(keyval, keycode, flags);
default:
@@ -445,7 +461,6 @@ bool CharacterComposer::FilterKeyPress(unsigned int keyval,
}
bool CharacterComposer::FilterKeyPressSequenceMode(unsigned int keyval,
- unsigned int keycode,
int flags) {
DCHECK(composition_mode_ == KEY_SEQUENCE_MODE);
compose_buffer_.push_back(keyval);
diff --git a/ui/base/ime/character_composer.h b/ui/base/ime/chromeos/character_composer.h
index ed584eddef..0624eb55c6 100644
--- a/ui/base/ime/character_composer.h
+++ b/ui/base/ime/chromeos/character_composer.h
@@ -1,9 +1,9 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef UI_BASE_IME_CHARACTER_COMPOSER_H_
-#define UI_BASE_IME_CHARACTER_COMPOSER_H_
+#ifndef UI_BASE_IME_CHROMEOS_CHARACTER_COMPOSER_H_
+#define UI_BASE_IME_CHROMEOS_CHARACTER_COMPOSER_H_
#include <vector>
@@ -11,6 +11,7 @@
#include "ui/base/ui_export.h"
namespace ui {
+class KeyEvent;
// A class to recognize compose and dead key sequence.
// Outputs composed character.
@@ -24,22 +25,8 @@ class UI_EXPORT CharacterComposer {
// Filters keypress.
// Returns true if the keypress is recognized as a part of composition
// sequence.
- // |keyval| must be a GDK_KEY_* constant.
- // |keycode| must be a X key code.
- // |flags| must be a combination of ui::EF_* flags.
- //
- // composed_character() returns non empty string when there is a character
- // composed after this method returns true.
- // preedit_string() returns non empty string when there is a preedit string
- // after this method returns true.
- // Return values of preedit_string() is empty after this method returns false.
- // composed_character() may have some characters which are consumed in this
- // composing session.
- //
- //
- // TODO(nona): Actually a X KeySym is passed to |keyval|, so we should use
- // XK_* rather than GDK_KEY_*.
- bool FilterKeyPress(unsigned int keyval, unsigned int keycode, int flags);
+ // Fabricated events which don't have the native event, are not supported.
+ bool FilterKeyPress(const ui::KeyEvent& event);
// Returns a string consisting of composed character.
// Empty string is returned when there is no composition result.
@@ -49,6 +36,8 @@ class UI_EXPORT CharacterComposer {
const string16& preedit_string() const { return preedit_string_; }
private:
+ friend class CharacterComposerTest;
+
// An enum to describe composition mode.
enum CompositionMode {
// This is the initial state.
@@ -58,9 +47,29 @@ class UI_EXPORT CharacterComposer {
HEX_MODE,
};
+ // Filters keypress using IBus defined value.
+ // Returns true if the keypress is recognized as a part of composition
+ // sequence.
+ // |keyval| must be a GDK_KEY_* constant.
+ // |keycode| must be a X key code.
+ // |flags| must be a combination of ui::EF_* flags.
+ //
+ // composed_character() returns non empty string when there is a character
+ // composed after this method returns true.
+ // preedit_string() returns non empty string when there is a preedit string
+ // after this method returns true.
+ // Return values of preedit_string() is empty after this method returns false.
+ // composed_character() may have some characters which are consumed in this
+ // composing session.
+ //
+ //
+ // TODO(nona): Actually a X KeySym is passed to |keyval|, so we should use
+ // XK_* rather than GDK_KEY_*.
+ bool FilterKeyPressInternal(unsigned int keyval, unsigned int keycode,
+ int flags);
+
// Filters keypress in key sequence mode.
- bool FilterKeyPressSequenceMode(unsigned int keyval, unsigned int keycode,
- int flags);
+ bool FilterKeyPressSequenceMode(unsigned int keyval, int flags);
// Filters keypress in hexadecimal mode.
bool FilterKeyPressHexMode(unsigned int keyval, unsigned int keycode,
@@ -89,4 +98,4 @@ class UI_EXPORT CharacterComposer {
} // namespace ui
-#endif // UI_BASE_IME_CHARACTER_COMPOSER_H_
+#endif // UI_BASE_IME_CHROMEOS_CHARACTER_COMPOSER_H_
diff --git a/ui/base/ime/character_composer_unittest.cc b/ui/base/ime/chromeos/character_composer_unittest.cc
index 0710204997..4e5d7f8838 100644
--- a/ui/base/ime/character_composer_unittest.cc
+++ b/ui/base/ime/chromeos/character_composer_unittest.cc
@@ -1,8 +1,8 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "ui/base/ime/character_composer.h"
+#include "ui/base/ime/chromeos/character_composer.h"
#include "base/strings/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -12,118 +12,134 @@
namespace ui {
-namespace {
+class CharacterComposerTest : public testing::Test {
+ protected:
+ bool FilterKeyPress(CharacterComposer* character_composer,
+ uint key,
+ uint keycode,
+ int flags) {
+ return character_composer->FilterKeyPressInternal(key, keycode, flags);
+ }
-// Expects key is not filtered and no character is composed.
-void ExpectKeyNotFiltered(CharacterComposer* character_composer,
- uint key,
- int flags) {
- EXPECT_FALSE(character_composer->FilterKeyPress(key, 0, flags));
- EXPECT_TRUE(character_composer->composed_character().empty());
-}
+ // Expects key is not filtered and no character is composed.
+ void ExpectKeyNotFilteredWithKeyCode(CharacterComposer* character_composer,
+ uint key,
+ uint keycode,
+ int flags) {
+ EXPECT_FALSE(character_composer->FilterKeyPressInternal(key, keycode,
+ flags));
+ EXPECT_TRUE(character_composer->composed_character().empty());
+ }
-// Expects key is filtered and no character is composed.
-void ExpectKeyFiltered(CharacterComposer* character_composer,
- uint key,
- int flags) {
- EXPECT_TRUE(character_composer->FilterKeyPress(key, 0, flags));
- EXPECT_TRUE(character_composer->composed_character().empty());
-}
+ // Expects key is filtered and no character is composed.
+ void ExpectKeyFilteredWithKeycode(CharacterComposer* character_composer,
+ uint key,
+ uint keycode,
+ int flags) {
+ EXPECT_TRUE(character_composer->FilterKeyPressInternal(key, keycode,
+ flags));
+ EXPECT_TRUE(character_composer->composed_character().empty());
+ }
-// Expects key is filtered and no character is composed.
-void ExpectKeyFilteredWithKeycode(CharacterComposer* character_composer,
- uint key,
- uint keycode,
- int flags) {
- EXPECT_TRUE(character_composer->FilterKeyPress(key, keycode, flags));
- EXPECT_TRUE(character_composer->composed_character().empty());
-}
+ // Expects key is not filtered and no character is composed.
+ void ExpectKeyNotFiltered(CharacterComposer* character_composer,
+ uint key,
+ int flags) {
+ ExpectKeyNotFilteredWithKeyCode(character_composer, key, 0, flags);
+ }
-// Expects |expected_character| is composed after sequence [key1, key2].
-void ExpectCharacterComposed(CharacterComposer* character_composer,
- uint key1,
- uint key2,
- int flags,
- const string16& expected_character) {
- ExpectKeyFiltered(character_composer, key1, flags);
- EXPECT_TRUE(character_composer->FilterKeyPress(key2, 0, flags));
- EXPECT_EQ(expected_character, character_composer->composed_character());
-}
+ // Expects key is filtered and no character is composed.
+ void ExpectKeyFiltered(CharacterComposer* character_composer,
+ uint key,
+ int flags) {
+ ExpectKeyFilteredWithKeycode(character_composer, key, 0, flags);
+ }
-// Expects |expected_character| is composed after sequence [key1, key2, key3].
-void ExpectCharacterComposed(CharacterComposer* character_composer,
- uint key1,
+ // Expects |expected_character| is composed after sequence [key1, key2].
+ void ExpectCharacterComposed(CharacterComposer* character_composer,
+ uint key1,
uint key2,
- uint key3,
- int flags,
- const string16& expected_character) {
- ExpectKeyFiltered(character_composer, key1, flags);
- ExpectCharacterComposed(character_composer, key2, key3, flags,
- expected_character);
-}
+ int flags,
+ const string16& expected_character) {
+ ExpectKeyFiltered(character_composer, key1, flags);
+ EXPECT_TRUE(character_composer->FilterKeyPressInternal(key2, 0, flags));
+ EXPECT_EQ(expected_character, character_composer->composed_character());
+ }
-// Expects |expected_character| is composed after sequence [key1, key2, key3,
-// key 4].
-void ExpectCharacterComposed(CharacterComposer* character_composer,
- uint key1,
- uint key2,
- uint key3,
- uint key4,
- int flags,
- const string16& expected_character) {
- ExpectKeyFiltered(character_composer, key1, flags);
- ExpectCharacterComposed(character_composer, key2, key3, key4, flags,
- expected_character);
-}
+ // Expects |expected_character| is composed after sequence [key1, key2, key3].
+ void ExpectCharacterComposed(CharacterComposer* character_composer,
+ uint key1,
+ uint key2,
+ uint key3,
+ int flags,
+ const string16& expected_character) {
+ ExpectKeyFiltered(character_composer, key1, flags);
+ ExpectCharacterComposed(character_composer, key2, key3, flags,
+ expected_character);
+ }
-// Expects |expected_character| is composed after sequence [key1, key2, key3,
-// key 4, key5].
-void ExpectCharacterComposed(CharacterComposer* character_composer,
- uint key1,
- uint key2,
- uint key3,
- uint key4,
- uint key5,
- int flags,
- const string16& expected_character) {
- ExpectKeyFiltered(character_composer, key1, flags);
- ExpectCharacterComposed(character_composer, key2, key3, key4, key5, flags,
- expected_character);
-}
+ // Expects |expected_character| is composed after sequence [key1, key2, key3,
+ // key 4].
+ void ExpectCharacterComposed(CharacterComposer* character_composer,
+ uint key1,
+ uint key2,
+ uint key3,
+ uint key4,
+ int flags,
+ const string16& expected_character) {
+ ExpectKeyFiltered(character_composer, key1, flags);
+ ExpectCharacterComposed(character_composer, key2, key3, key4, flags,
+ expected_character);
+ }
-// Expects |expected_character| is composed after sequence [key1, key2, key3,
-// key 4, key5, key6].
-void ExpectCharacterComposed(CharacterComposer* character_composer,
- uint key1,
- uint key2,
- uint key3,
- uint key4,
- uint key5,
- uint key6,
- int flags,
- const string16& expected_character) {
- ExpectKeyFiltered(character_composer, key1, flags);
- ExpectCharacterComposed(character_composer, key2, key3, key4, key5, key6,
- flags, expected_character);
-}
+ // Expects |expected_character| is composed after sequence [key1, key2, key3,
+ // key 4, key5].
+ void ExpectCharacterComposed(CharacterComposer* character_composer,
+ uint key1,
+ uint key2,
+ uint key3,
+ uint key4,
+ uint key5,
+ int flags,
+ const string16& expected_character) {
+ ExpectKeyFiltered(character_composer, key1, flags);
+ ExpectCharacterComposed(character_composer, key2, key3, key4, key5, flags,
+ expected_character);
+ }
-// Expects |expected_character| is composed after sequence [{key1, keycode1}].
-void ExpectCharacterComposedWithKeyCode(CharacterComposer* character_composer,
- uint key1, uint keycode1,
- int flags,
- const string16& expected_character) {
- EXPECT_TRUE(character_composer->FilterKeyPress(key1, keycode1, flags));
- EXPECT_EQ(expected_character, character_composer->composed_character());
-}
+ // Expects |expected_character| is composed after sequence [key1, key2, key3,
+ // key 4, key5, key6].
+ void ExpectCharacterComposed(CharacterComposer* character_composer,
+ uint key1,
+ uint key2,
+ uint key3,
+ uint key4,
+ uint key5,
+ uint key6,
+ int flags,
+ const string16& expected_character) {
+ ExpectKeyFiltered(character_composer, key1, flags);
+ ExpectCharacterComposed(character_composer, key2, key3, key4, key5, key6,
+ flags, expected_character);
+ }
-} // namespace
+ // Expects |expected_character| is composed after sequence [{key1, keycode1}].
+ void ExpectCharacterComposedWithKeyCode(CharacterComposer* character_composer,
+ uint key1, uint keycode1,
+ int flags,
+ const string16& expected_character) {
+ EXPECT_TRUE(character_composer->FilterKeyPressInternal(key1, keycode1,
+ flags));
+ EXPECT_EQ(expected_character, character_composer->composed_character());
+ }
+};
-TEST(CharacterComposerTest, InitialState) {
+TEST_F(CharacterComposerTest, InitialState) {
CharacterComposer character_composer;
EXPECT_TRUE(character_composer.composed_character().empty());
}
-TEST(CharacterComposerTest, NormalKeyIsNotFiltered) {
+TEST_F(CharacterComposerTest, NormalKeyIsNotFiltered) {
CharacterComposer character_composer;
ExpectKeyNotFiltered(&character_composer, GDK_KEY_B, 0);
ExpectKeyNotFiltered(&character_composer, GDK_KEY_Z, 0);
@@ -134,22 +150,20 @@ TEST(CharacterComposerTest, NormalKeyIsNotFiltered) {
ExpectKeyNotFiltered(&character_composer, GDK_KEY_8, 0);
}
-TEST(CharacterComposerTest, PartiallyMatchingSequence) {
+TEST_F(CharacterComposerTest, PartiallyMatchingSequence) {
CharacterComposer character_composer;
// Composition with sequence ['dead acute', '1'] will fail.
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0, 0));
- EXPECT_TRUE(character_composer.composed_character().empty());
+ ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0);
// Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail.
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0, 0));
- EXPECT_TRUE(character_composer.composed_character().empty());
+ ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0);
}
-TEST(CharacterComposerTest, FullyMatchingSequences) {
+TEST_F(CharacterComposerTest, FullyMatchingSequences) {
CharacterComposer character_composer;
// LATIN SMALL LETTER A WITH ACUTE
ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0,
@@ -175,20 +189,19 @@ TEST(CharacterComposerTest, FullyMatchingSequences) {
string16(1, 0x00E7));
}
-TEST(CharacterComposerTest, FullyMatchingSequencesAfterMatchingFailure) {
+TEST_F(CharacterComposerTest, FullyMatchingSequencesAfterMatchingFailure) {
CharacterComposer character_composer;
// Composition with sequence ['dead acute', 'dead circumflex', '1'] will fail.
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_circumflex, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_1, 0, 0));
- EXPECT_TRUE(character_composer.composed_character().empty());
+ ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0);
// LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute,
GDK_KEY_dead_circumflex, GDK_KEY_a, 0,
string16(1, 0x1EA5));
}
-TEST(CharacterComposerTest, ComposedCharacterIsClearedAfterReset) {
+TEST_F(CharacterComposerTest, ComposedCharacterIsClearedAfterReset) {
CharacterComposer character_composer;
ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0,
string16(1, 0x00E1));
@@ -196,30 +209,29 @@ TEST(CharacterComposerTest, ComposedCharacterIsClearedAfterReset) {
EXPECT_TRUE(character_composer.composed_character().empty());
}
-TEST(CharacterComposerTest, CompositionStateIsClearedAfterReset) {
+TEST_F(CharacterComposerTest, CompositionStateIsClearedAfterReset) {
CharacterComposer character_composer;
// Even though sequence ['dead acute', 'a'] will compose 'a with acute',
// no character is composed here because of reset.
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
character_composer.Reset();
- EXPECT_FALSE(character_composer.FilterKeyPress(GDK_KEY_a, 0, 0));
- EXPECT_TRUE(character_composer.composed_character().empty());
+ ExpectKeyNotFiltered(&character_composer, GDK_KEY_a, 0);
}
-TEST(CharacterComposerTest, KeySequenceCompositionPreedit) {
+TEST_F(CharacterComposerTest, KeySequenceCompositionPreedit) {
CharacterComposer character_composer;
// LATIN SMALL LETTER A WITH ACUTE
// preedit_string() is always empty in key sequence composition mode.
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
EXPECT_TRUE(character_composer.preedit_string().empty());
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_a, 0, 0));
+ EXPECT_TRUE(FilterKeyPress(&character_composer, GDK_KEY_a, 0, 0));
EXPECT_EQ(string16(1, 0x00E1), character_composer.composed_character());
EXPECT_TRUE(character_composer.preedit_string().empty());
}
// ComposeCheckerWithCompactTable in character_composer.cc is depending on the
// assumption that the data in gtkimcontextsimpleseqs.h is correctly ordered.
-TEST(CharacterComposerTest, MainTableIsCorrectlyOrdered) {
+TEST_F(CharacterComposerTest, MainTableIsCorrectlyOrdered) {
// This file is included here intentionally, instead of the top of the file,
// because including this file at the top of the file will define a
// global constant and contaminate the global namespace.
@@ -263,7 +275,7 @@ TEST(CharacterComposerTest, MainTableIsCorrectlyOrdered) {
}
}
-TEST(CharacterComposerTest, HexadecimalComposition) {
+TEST_F(CharacterComposerTest, HexadecimalComposition) {
CharacterComposer character_composer;
// HIRAGANA LETTER A (U+3042)
ExpectKeyFiltered(&character_composer, GDK_KEY_U,
@@ -281,7 +293,7 @@ TEST(CharacterComposerTest, HexadecimalComposition) {
arraysize(kMusicalKeyboard)));
}
-TEST(CharacterComposerTest, HexadecimalCompositionPreedit) {
+TEST_F(CharacterComposerTest, HexadecimalCompositionPreedit) {
CharacterComposer character_composer;
// HIRAGANA LETTER A (U+3042)
ExpectKeyFiltered(&character_composer, GDK_KEY_U,
@@ -319,7 +331,7 @@ TEST(CharacterComposerTest, HexadecimalCompositionPreedit) {
EXPECT_EQ(ASCIIToUTF16(""), character_composer.preedit_string());
}
-TEST(CharacterComposerTest, HexadecimalCompositionWithNonHexKey) {
+TEST_F(CharacterComposerTest, HexadecimalCompositionWithNonHexKey) {
CharacterComposer character_composer;
// Sequence [Ctrl+Shift+U, x, space] does not compose a character.
@@ -337,7 +349,7 @@ TEST(CharacterComposerTest, HexadecimalCompositionWithNonHexKey) {
string16(1, 0x3042));
}
-TEST(CharacterComposerTest, HexadecimalCompositionWithAdditionalModifiers) {
+TEST_F(CharacterComposerTest, HexadecimalCompositionWithAdditionalModifiers) {
CharacterComposer character_composer;
// Ctrl+Shift+Alt+U
@@ -352,7 +364,7 @@ TEST(CharacterComposerTest, HexadecimalCompositionWithAdditionalModifiers) {
EF_SHIFT_DOWN | EF_CONTROL_DOWN | EF_CAPS_LOCK_DOWN);
}
-TEST(CharacterComposerTest, CancelHexadecimalComposition) {
+TEST_F(CharacterComposerTest, CancelHexadecimalComposition) {
CharacterComposer character_composer;
// Cancel composition with ESC.
ExpectKeyFiltered(&character_composer, GDK_KEY_U,
@@ -369,7 +381,7 @@ TEST(CharacterComposerTest, CancelHexadecimalComposition) {
GDK_KEY_2, GDK_KEY_space, 0, string16(1, 0x3042));
}
-TEST(CharacterComposerTest, HexadecimalCompositionWithBackspace) {
+TEST_F(CharacterComposerTest, HexadecimalCompositionWithBackspace) {
CharacterComposer character_composer;
// HIRAGANA LETTER A (U+3042)
ExpectKeyFiltered(&character_composer, GDK_KEY_U,
@@ -382,7 +394,7 @@ TEST(CharacterComposerTest, HexadecimalCompositionWithBackspace) {
GDK_KEY_space, 0, string16(1, 0x3042));
}
-TEST(CharacterComposerTest, CancelHexadecimalCompositionWithBackspace) {
+TEST_F(CharacterComposerTest, CancelHexadecimalCompositionWithBackspace) {
CharacterComposer character_composer;
// Backspace just after Ctrl+Shift+U.
@@ -400,7 +412,8 @@ TEST(CharacterComposerTest, CancelHexadecimalCompositionWithBackspace) {
ExpectKeyNotFiltered(&character_composer, GDK_KEY_3, 0);
}
-TEST(CharacterComposerTest, HexadecimalCompositionPreeditWithModifierPressed) {
+TEST_F(CharacterComposerTest, HexadecimalCompositionPreeditWithModifierPressed)
+{
// This test case supposes X Window System uses 101 keyboard layout.
CharacterComposer character_composer;
const int control_shift = EF_CONTROL_DOWN | EF_SHIFT_DOWN;
@@ -456,15 +469,14 @@ TEST(CharacterComposerTest, HexadecimalCompositionPreeditWithModifierPressed) {
EXPECT_EQ(ASCIIToUTF16(""), character_composer.preedit_string());
}
-TEST(CharacterComposerTest, InvalidHexadecimalSequence) {
+TEST_F(CharacterComposerTest, InvalidHexadecimalSequence) {
CharacterComposer character_composer;
// U+FFFFFFFF
ExpectKeyFiltered(&character_composer, GDK_KEY_U,
EF_SHIFT_DOWN | EF_CONTROL_DOWN);
for (int i = 0; i < 8; ++i)
ExpectKeyFiltered(&character_composer, GDK_KEY_f, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0));
- EXPECT_TRUE(character_composer.composed_character().empty());
+ ExpectKeyFiltered(&character_composer, GDK_KEY_space, 0);
// U+0000 (Actually, this is a valid unicode character, but we don't
// compose a string with a character '\0')
@@ -472,8 +484,7 @@ TEST(CharacterComposerTest, InvalidHexadecimalSequence) {
EF_SHIFT_DOWN | EF_CONTROL_DOWN);
for (int i = 0; i < 4; ++i)
ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0));
- EXPECT_TRUE(character_composer.composed_character().empty());
+ ExpectKeyFiltered(&character_composer, GDK_KEY_space, 0);
// U+10FFFF
ExpectKeyFiltered(&character_composer, GDK_KEY_U,
@@ -482,8 +493,7 @@ TEST(CharacterComposerTest, InvalidHexadecimalSequence) {
ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0);
for (int i = 0; i < 4; ++i)
ExpectKeyFiltered(&character_composer, GDK_KEY_f, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0));
- EXPECT_TRUE(character_composer.composed_character().empty());
+ ExpectKeyFiltered(&character_composer, GDK_KEY_space, 0);
// U+110000
ExpectKeyFiltered(&character_composer, GDK_KEY_U,
@@ -492,11 +502,10 @@ TEST(CharacterComposerTest, InvalidHexadecimalSequence) {
ExpectKeyFiltered(&character_composer, GDK_KEY_1, 0);
for (int i = 0; i < 4; ++i)
ExpectKeyFiltered(&character_composer, GDK_KEY_0, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_space, 0, 0));
- EXPECT_TRUE(character_composer.composed_character().empty());
+ ExpectKeyFiltered(&character_composer, GDK_KEY_space, 0);
}
-TEST(CharacterComposerTest, HexadecimalSequenceAndDeadKey) {
+TEST_F(CharacterComposerTest, HexadecimalSequenceAndDeadKey) {
CharacterComposer character_composer;
// LATIN SMALL LETTER A WITH ACUTE
ExpectCharacterComposed(&character_composer, GDK_KEY_dead_acute, GDK_KEY_a, 0,
@@ -509,15 +518,15 @@ TEST(CharacterComposerTest, HexadecimalSequenceAndDeadKey) {
GDK_KEY_space, 0, string16(1, 0x3042));
// LATIN CAPITAL LETTER U WITH ACUTE while 'U' is pressed with Ctrl+Shift.
ExpectKeyFiltered(&character_composer, GDK_KEY_dead_acute, 0);
- EXPECT_TRUE(character_composer.FilterKeyPress(
- GDK_KEY_U, 0, EF_SHIFT_DOWN | EF_CONTROL_DOWN));
+ EXPECT_TRUE(FilterKeyPress(&character_composer, GDK_KEY_U, 0,
+ EF_SHIFT_DOWN | EF_CONTROL_DOWN));
EXPECT_EQ(string16(1, 0x00DA), character_composer.composed_character());
}
-TEST(CharacterComposerTest, BlacklistedKeyeventsTest) {
+TEST_F(CharacterComposerTest, BlacklistedKeyeventsTest) {
CharacterComposer character_composer;
- EXPECT_TRUE(character_composer.FilterKeyPress(GDK_KEY_dead_acute, 0, 0));
- EXPECT_FALSE(character_composer.FilterKeyPress(GDK_KEY_s, 0, 0));
+ EXPECT_TRUE(FilterKeyPress(&character_composer, GDK_KEY_dead_acute, 0, 0));
+ EXPECT_FALSE(FilterKeyPress(&character_composer, GDK_KEY_s, 0, 0));
ASSERT_EQ(1U, character_composer.composed_character().size());
EXPECT_EQ(GDK_KEY_apostrophe, character_composer.composed_character().at(0));
}
diff --git a/ui/base/ime/chromeos/ibus_bridge.cc b/ui/base/ime/chromeos/ibus_bridge.cc
index f4ed90fa93..26ec4dbfb2 100644
--- a/ui/base/ime/chromeos/ibus_bridge.cc
+++ b/ui/base/ime/chromeos/ibus_bridge.cc
@@ -37,6 +37,15 @@ class IBusBridgeImpl : public IBusBridge {
}
// IBusBridge override.
+ virtual void InitEngineHandler(
+ const std::string& engine_id,
+ IBusEngineHandlerInterface* handler) OVERRIDE {
+ DCHECK(!engine_id.empty());
+ DCHECK(handler);
+ engine_handler_map_[engine_id] = handler;
+ }
+
+ // IBusBridge override.
virtual IBusEngineHandlerInterface* GetEngineHandler() const OVERRIDE {
return engine_handler_;
}
@@ -47,6 +56,19 @@ class IBusBridgeImpl : public IBusBridge {
}
// IBusBridge override.
+ virtual IBusEngineHandlerInterface* SetEngineHandlerById(
+ const std::string& engine_id) OVERRIDE {
+ if (engine_id.empty()) {
+ engine_handler_ = NULL;
+ return NULL;
+ }
+
+ DCHECK(engine_handler_map_.find(engine_id) != engine_handler_map_.end());
+ engine_handler_ = engine_handler_map_[engine_id];
+ return engine_handler_;
+ }
+
+ // IBusBridge override.
virtual IBusPanelCandidateWindowHandlerInterface*
GetCandidateWindowHandler() const OVERRIDE {
return candidate_window_handler_;
@@ -58,31 +80,11 @@ class IBusBridgeImpl : public IBusBridge {
candidate_window_handler_ = handler;
}
- virtual void SetCreateEngineHandler(
- const std::string& engine_id,
- const CreateEngineHandler& handler) OVERRIDE {
- create_engine_handler_map_[engine_id] = handler;
- }
-
- // IBusBridge override.
- virtual void UnsetCreateEngineHandler(const std::string& engine_id) OVERRIDE {
- create_engine_handler_map_.erase(engine_id);
- }
-
- // IBusBridge override.
- virtual void CreateEngine(const std::string& engine_id) OVERRIDE {
- // TODO(nona): Change following condition to DCHECK once all legacy IME is
- // migrated to extension IME.
- if (create_engine_handler_map_[engine_id].is_null())
- return;
- create_engine_handler_map_[engine_id].Run();
- }
-
private:
IBusInputContextHandlerInterface* input_context_handler_;
IBusEngineHandlerInterface* engine_handler_;
IBusPanelCandidateWindowHandlerInterface* candidate_window_handler_;
- std::map<std::string, CreateEngineHandler> create_engine_handler_map_;
+ std::map<std::string, IBusEngineHandlerInterface*> engine_handler_map_;
DISALLOW_COPY_AND_ASSIGN(IBusBridgeImpl);
};
diff --git a/ui/base/ime/chromeos/ibus_bridge.h b/ui/base/ime/chromeos/ibus_bridge.h
index 7a53253d11..e023ee40b9 100644
--- a/ui/base/ime/chromeos/ibus_bridge.h
+++ b/ui/base/ime/chromeos/ibus_bridge.h
@@ -17,17 +17,11 @@ namespace gfx {
class Rect;
} // namespace gfx
-namespace chromeos {
-namespace ibus {
-// Following button indicator value is introduced from
-// http://developer.gnome.org/gdk/stable/gdk-Event-Structures.html#GdkEventButton
-enum IBusMouseButton {
- IBUS_MOUSE_BUTTON_LEFT = 1U,
- IBUS_MOUSE_BUTTON_MIDDLE = 2U,
- IBUS_MOUSE_BUTTON_RIGHT = 3U,
-};
-} // namespace ibus
+namespace ui {
+class KeyEvent;
+} // namespace ui
+namespace chromeos {
namespace input_method {
class CandidateWindow;
} // namespace input_method
@@ -91,23 +85,14 @@ class UI_EXPORT IBusEngineHandlerInterface {
// Called when the IME is reset.
virtual void Reset() = 0;
- // Called when the key event is received. The |keycode| is raw layout
- // independent keycode. The |keysym| is result of XLookupString function
- // which translate |keycode| to keyboard layout dependent symbol value.
+ // Called when the key event is received.
// Actual implementation must call |callback| after key event handling.
- // For example: key press event for 'd' key on us layout and dvorak layout.
- // keyval keycode state
- // us layout : 0x64 0x20 0x00
- // dvorak layout : 0x65 0x20 0x00
- virtual void ProcessKeyEvent(uint32 keysym, uint32 keycode, uint32 state,
+ virtual void ProcessKeyEvent(const ui::KeyEvent& key_event,
const KeyEventDoneCallback& callback) = 0;
// Called when the candidate in lookup table is clicked. The |index| is 0
- // based candidate index in lookup table. The |state| is same value as
- // GdkModifierType in
- // http://developer.gnome.org/gdk/stable/gdk-Windows.html#GdkModifierType
- virtual void CandidateClicked(uint32 index, ibus::IBusMouseButton button,
- uint32 state) = 0;
+ // based candidate index in lookup table.
+ virtual void CandidateClicked(uint32 index) = 0;
// Called when a new surrounding text is set. The |text| is surrounding text
// and |cursor_pos| is 0 based index of cursor position in |text|. If there is
@@ -159,8 +144,6 @@ class UI_EXPORT IBusPanelCandidateWindowHandlerInterface {
// or EngineService) directly by using this class.
class UI_EXPORT IBusBridge {
public:
- typedef base::Callback<void()> CreateEngineHandler;
-
virtual ~IBusBridge();
// Allocates the global instance. Must be called before any calls to Get().
@@ -181,6 +164,12 @@ class UI_EXPORT IBusBridge {
virtual void SetInputContextHandler(
IBusInputContextHandlerInterface* handler) = 0;
+ // Initializes the mapping from |engine_id| to |handler|.
+ // |engine_id| must not be empty and |handler| must not be null.
+ virtual void InitEngineHandler(
+ const std::string& engine_id,
+ IBusEngineHandlerInterface* handler) = 0;
+
// Returns current EngineHandler. This function returns NULL if current engine
// is not ready to use.
virtual IBusEngineHandlerInterface* GetEngineHandler() const = 0;
@@ -189,6 +178,12 @@ class UI_EXPORT IBusBridge {
// NULL for |handler|. Caller must release |handler|.
virtual void SetEngineHandler(IBusEngineHandlerInterface* handler) = 0;
+ // Updates current EngineHandler by Engine ID. If there is no active
+ // engine service, pass an empty string for |engine_id|. The set
+ // IBusEngineHandlerInterface is returned.
+ virtual IBusEngineHandlerInterface* SetEngineHandlerById(
+ const std::string& engine_id) = 0;
+
// Returns current CandidateWindowHandler. This function returns NULL if
// current candidate window is not ready to use.
virtual IBusPanelCandidateWindowHandlerInterface*
@@ -199,20 +194,6 @@ class UI_EXPORT IBusBridge {
virtual void SetCandidateWindowHandler(
IBusPanelCandidateWindowHandlerInterface* handler) = 0;
- // Sets create engine handler for |engine_id|. |engine_id| must not be empty
- // and |handler| must not be null.
- virtual void SetCreateEngineHandler(
- const std::string& engine_id,
- const CreateEngineHandler& handler) = 0;
-
- // Unsets create engine handler for |engine_id|. |engine_id| must not be
- // empty.
- virtual void UnsetCreateEngineHandler(const std::string& engine_id) = 0;
-
- // Creates engine. Do not call this function before SetCreateEngineHandler
- // call with |engine_id|.
- virtual void CreateEngine(const std::string& engine_id) = 0;
-
protected:
IBusBridge();
diff --git a/ui/base/ime/chromeos/mock_ime_engine_handler.cc b/ui/base/ime/chromeos/mock_ime_engine_handler.cc
index d7e664ffe4..f5e17238ee 100644
--- a/ui/base/ime/chromeos/mock_ime_engine_handler.cc
+++ b/ui/base/ime/chromeos/mock_ime_engine_handler.cc
@@ -15,10 +15,7 @@ MockIMEEngineHandler::MockIMEEngineHandler()
last_text_input_context_(ui::TEXT_INPUT_TYPE_NONE,
ui::TEXT_INPUT_MODE_DEFAULT),
last_set_surrounding_cursor_pos_(0),
- last_set_surrounding_anchor_pos_(0),
- last_processed_keysym_(0),
- last_processed_keycode_(0),
- last_processed_state_(0) {
+ last_set_surrounding_anchor_pos_(0) {
}
MockIMEEngineHandler::~MockIMEEngineHandler() {
@@ -48,20 +45,14 @@ void MockIMEEngineHandler::Reset() {
}
void MockIMEEngineHandler::ProcessKeyEvent(
- uint32 keysym,
- uint32 keycode,
- uint32 state,
+ const ui::KeyEvent& key_event,
const KeyEventDoneCallback& callback) {
++process_key_event_call_count_;
- last_processed_keysym_ = keysym;
- last_processed_keycode_ = keycode;
- last_processed_state_ = state;
+ last_processed_key_event_.reset(new ui::KeyEvent(key_event));
last_passed_callback_ = callback;
}
-void MockIMEEngineHandler::CandidateClicked(uint32 index,
- ibus::IBusMouseButton button,
- uint32 state) {
+void MockIMEEngineHandler::CandidateClicked(uint32 index) {
}
void MockIMEEngineHandler::SetSurroundingText(const std::string& text,
diff --git a/ui/base/ime/chromeos/mock_ime_engine_handler.h b/ui/base/ime/chromeos/mock_ime_engine_handler.h
index 56fc259643..3626ca5e91 100644
--- a/ui/base/ime/chromeos/mock_ime_engine_handler.h
+++ b/ui/base/ime/chromeos/mock_ime_engine_handler.h
@@ -7,6 +7,7 @@
#include "ui/base/ime/chromeos/ibus_bridge.h"
#include "ui/base/ui_export.h"
+#include "ui/events/event.h"
namespace chromeos {
@@ -21,10 +22,9 @@ class UI_EXPORT MockIMEEngineHandler : public IBusEngineHandlerInterface {
virtual void Disable() OVERRIDE;
virtual void PropertyActivate(const std::string& property_name) OVERRIDE;
virtual void Reset() OVERRIDE;
- virtual void ProcessKeyEvent(uint32 keysym, uint32 keycode, uint32 state,
+ virtual void ProcessKeyEvent(const ui::KeyEvent& key_event,
const KeyEventDoneCallback& callback) OVERRIDE;
- virtual void CandidateClicked(uint32 index, ibus::IBusMouseButton button,
- uint32 state) OVERRIDE;
+ virtual void CandidateClicked(uint32 index) OVERRIDE;
virtual void SetSurroundingText(const std::string& text, uint32 cursor_pos,
uint32 anchor_pos) OVERRIDE;
@@ -58,16 +58,8 @@ class UI_EXPORT MockIMEEngineHandler : public IBusEngineHandlerInterface {
return last_set_surrounding_anchor_pos_;
}
- uint32 last_processed_keysym() const {
- return last_processed_keysym_;
- }
-
- uint32 last_processed_keycode() const {
- return last_processed_keycode_;
- }
-
- uint32 last_processed_state() const {
- return last_processed_state_;
+ const ui::KeyEvent* last_processed_key_event() const {
+ return last_processed_key_event_.get();
}
const KeyEventDoneCallback& last_passed_callback() const {
@@ -85,9 +77,7 @@ class UI_EXPORT MockIMEEngineHandler : public IBusEngineHandlerInterface {
std::string last_set_surrounding_text_;
uint32 last_set_surrounding_cursor_pos_;
uint32 last_set_surrounding_anchor_pos_;
- uint32 last_processed_keysym_;
- uint32 last_processed_keycode_;
- uint32 last_processed_state_;
+ scoped_ptr<ui::KeyEvent> last_processed_key_event_;
KeyEventDoneCallback last_passed_callback_;
};
diff --git a/ui/base/ime/composition_text.h b/ui/base/ime/composition_text.h
index 5beaffc0eb..7d728635e3 100644
--- a/ui/base/ime/composition_text.h
+++ b/ui/base/ime/composition_text.h
@@ -36,7 +36,7 @@ struct UI_EXPORT CompositionText {
void Clear();
// Content of the composition text.
- string16 text;
+ base::string16 text;
// Underline information of the composition text.
// They must be sorted in ascending order by their start_offset and cannot be
diff --git a/ui/base/ime/fake_input_method.cc b/ui/base/ime/fake_input_method.cc
deleted file mode 100644
index 93eb38d552..0000000000
--- a/ui/base/ime/fake_input_method.cc
+++ /dev/null
@@ -1,197 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/base/ime/fake_input_method.h"
-
-#include "base/logging.h"
-#include "base/strings/string16.h"
-#include "ui/base/glib/glib_integers.h"
-#include "ui/base/ime/input_method_delegate.h"
-#include "ui/base/ime/text_input_client.h"
-#include "ui/events/event.h"
-#include "ui/events/event_constants.h"
-#include "ui/events/event_utils.h"
-#include "ui/events/keycodes/keyboard_code_conversion.h"
-
-#if defined(USE_X11)
-#include <X11/X.h>
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include "ui/events/keycodes/keyboard_code_conversion_x.h"
-#endif
-
-namespace {
-
-#if defined(USE_X11)
-uint32 EventFlagsFromXFlags(unsigned int flags) {
- return (flags & LockMask ? ui::EF_CAPS_LOCK_DOWN : 0U) |
- (flags & ControlMask ? ui::EF_CONTROL_DOWN : 0U) |
- (flags & ShiftMask ? ui::EF_SHIFT_DOWN : 0U) |
- (flags & Mod1Mask ? ui::EF_ALT_DOWN : 0U);
-}
-#endif
-
-} // namespace
-
-namespace ui {
-
-FakeInputMethod::FakeInputMethod(internal::InputMethodDelegate* delegate)
- : delegate_(NULL),
- text_input_client_(NULL) {
- SetDelegate(delegate);
-}
-
-FakeInputMethod::~FakeInputMethod() {
-}
-
-void FakeInputMethod::SetDelegate(internal::InputMethodDelegate* delegate) {
- delegate_ = delegate;
-}
-
-void FakeInputMethod::SetFocusedTextInputClient(TextInputClient* client) {
- text_input_client_ = client;
- FOR_EACH_OBSERVER(InputMethodObserver, observers_,
- OnTextInputStateChanged(client));
-}
-
-void FakeInputMethod::DetachTextInputClient(TextInputClient* client) {
- if (text_input_client_ == client) {
- text_input_client_ = NULL;
- FOR_EACH_OBSERVER(InputMethodObserver, observers_,
- OnTextInputStateChanged(client));
- }
-}
-
-TextInputClient* FakeInputMethod::GetTextInputClient() const {
- return text_input_client_;
-}
-
-bool FakeInputMethod::DispatchKeyEvent(const ui::KeyEvent& event) {
- if (!event.HasNativeEvent())
- return DispatchFabricatedKeyEvent(event);
-
- const base::NativeEvent& native_event = event.native_event();
- bool handled = false;
-#if defined(OS_WIN)
- if (native_event.message == WM_CHAR) {
- if (text_input_client_) {
- text_input_client_->InsertChar(ui::KeyboardCodeFromNative(native_event),
- ui::EventFlagsFromNative(native_event));
- handled = true;
- }
- } else {
- handled = delegate_->DispatchKeyEventPostIME(native_event);
- }
-#elif defined(USE_X11)
- DCHECK(native_event);
- if (native_event->type == KeyRelease) {
- // On key release, just dispatch it.
- handled = delegate_->DispatchKeyEventPostIME(native_event);
- } else {
- const uint32 state = EventFlagsFromXFlags(native_event->xkey.state);
- // Send a RawKeyDown event first,
- handled = delegate_->DispatchKeyEventPostIME(native_event);
- if (text_input_client_) {
- // then send a Char event via ui::TextInputClient.
- const KeyboardCode key_code = ui::KeyboardCodeFromNative(native_event);
- uint16 ch = 0;
- if (!(state & ui::EF_CONTROL_DOWN))
- ch = ui::GetCharacterFromXEvent(native_event);
- if (!ch)
- ch = ui::GetCharacterFromKeyCode(key_code, state);
- if (ch)
- text_input_client_->InsertChar(ch, state);
- }
- }
-#elif defined(USE_OZONE)
- DCHECK(native_event);
- if (EventTypeFromNative(native_event) == ET_KEY_RELEASED) {
- // On key release, just dispatch it.
- handled = delegate_->DispatchKeyEventPostIME(native_event);
- } else {
- const uint32 state = EventFlagsFromNative(native_event);
- // Send a RawKeyDown event first,
- handled = delegate_->DispatchKeyEventPostIME(native_event);
- if (text_input_client_) {
- // then send a Char event via ui::TextInputClient.
- const KeyboardCode key_code = ui::KeyboardCodeFromNative(native_event);
- uint16 ch = 0;
-
- // TODO(vignatti): Support EF_CONTROL_DOWN state
-
- ch = ui::GetCharacterFromKeyCode(key_code, state);
- if (ch)
- text_input_client_->InsertChar(ch, state);
- }
- }
-#else
- // TODO(yusukes): Support other platforms. Call InsertChar() when necessary.
- handled = delegate_->DispatchKeyEventPostIME(native_event);
-#endif
- return handled;
-}
-
-bool FakeInputMethod::DispatchFabricatedKeyEvent(const ui::KeyEvent& event) {
- bool handled = delegate_->DispatchFabricatedKeyEventPostIME(
- event.type(), event.key_code(), event.flags());
- if (event.type() == ET_KEY_PRESSED && text_input_client_) {
- uint16 ch = event.GetCharacter();
- if (ch)
- text_input_client_->InsertChar(ch, event.flags());
- }
- return handled;
-}
-
-void FakeInputMethod::Init(bool focused) {}
-void FakeInputMethod::OnFocus() {}
-void FakeInputMethod::OnBlur() {}
-bool FakeInputMethod::OnUntranslatedIMEMessage(const base::NativeEvent& event,
- NativeEventResult* result) {
- return false;
-}
-void FakeInputMethod::OnTextInputTypeChanged(const TextInputClient* client) {
- FOR_EACH_OBSERVER(InputMethodObserver, observers_,
- OnTextInputStateChanged(client));
-}
-void FakeInputMethod::OnCaretBoundsChanged(const TextInputClient* client) {}
-void FakeInputMethod::CancelComposition(const TextInputClient* client) {}
-void FakeInputMethod::OnInputLocaleChanged() {}
-
-std::string FakeInputMethod::GetInputLocale() {
- return "";
-}
-
-base::i18n::TextDirection FakeInputMethod::GetInputTextDirection() {
- return base::i18n::UNKNOWN_DIRECTION;
-}
-
-bool FakeInputMethod::IsActive() {
- return true;
-}
-
-bool FakeInputMethod::IsCandidatePopupOpen() const {
- return false;
-}
-
-TextInputType FakeInputMethod::GetTextInputType() const {
- return TEXT_INPUT_TYPE_NONE;
-}
-
-TextInputMode FakeInputMethod::GetTextInputMode() const {
- return TEXT_INPUT_MODE_DEFAULT;
-}
-
-bool FakeInputMethod::CanComposeInline() const {
- return true;
-}
-
-void FakeInputMethod::AddObserver(InputMethodObserver* observer) {
- observers_.AddObserver(observer);
-}
-
-void FakeInputMethod::RemoveObserver(InputMethodObserver* observer) {
- observers_.RemoveObserver(observer);
-}
-
-} // namespace ui
diff --git a/ui/base/ime/fake_input_method.h b/ui/base/ime/fake_input_method.h
deleted file mode 100644
index 7bc44ee781..0000000000
--- a/ui/base/ime/fake_input_method.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_BASE_IME_FAKE_INPUT_METHOD_H_
-#define UI_BASE_IME_FAKE_INPUT_METHOD_H_
-
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "base/observer_list.h"
-#include "ui/base/ime/input_method.h"
-#include "ui/base/ime/input_method_observer.h"
-#include "ui/base/ui_export.h"
-
-namespace ui {
-
-class InputMethodObserver;
-class KeyEvent;
-class TextInputClient;
-
-// A fake ui::InputMethod implementation for minimum input support.
-class UI_EXPORT FakeInputMethod : NON_EXPORTED_BASE(public InputMethod) {
- public:
- explicit FakeInputMethod(internal::InputMethodDelegate* delegate);
- virtual ~FakeInputMethod();
-
- // Overriden from InputMethod.
- virtual void SetDelegate(internal::InputMethodDelegate* delegate) OVERRIDE;
- virtual void Init(bool focused) OVERRIDE;
- virtual void OnFocus() OVERRIDE;
- virtual void OnBlur() OVERRIDE;
- virtual bool OnUntranslatedIMEMessage(const base::NativeEvent& event,
- NativeEventResult* result) OVERRIDE;
- virtual void SetFocusedTextInputClient(TextInputClient* client) OVERRIDE;
- virtual void DetachTextInputClient(TextInputClient* client) OVERRIDE;
- virtual TextInputClient* GetTextInputClient() const OVERRIDE;
- virtual bool DispatchKeyEvent(const ui::KeyEvent& event) OVERRIDE;
- virtual void OnTextInputTypeChanged(const TextInputClient* client) OVERRIDE;
- virtual void OnCaretBoundsChanged(const TextInputClient* client) OVERRIDE;
- virtual void CancelComposition(const TextInputClient* client) OVERRIDE;
- virtual void OnInputLocaleChanged() OVERRIDE;
- virtual std::string GetInputLocale() OVERRIDE;
- virtual base::i18n::TextDirection GetInputTextDirection() OVERRIDE;
- virtual bool IsActive() OVERRIDE;
- virtual TextInputType GetTextInputType() const OVERRIDE;
- virtual TextInputMode GetTextInputMode() const OVERRIDE;
- virtual bool CanComposeInline() const OVERRIDE;
- virtual bool IsCandidatePopupOpen() const OVERRIDE;
- virtual void AddObserver(InputMethodObserver* observer) OVERRIDE;
- virtual void RemoveObserver(InputMethodObserver* observer) OVERRIDE;
-
- private:
- bool DispatchFabricatedKeyEvent(const ui::KeyEvent& event);
-
- internal::InputMethodDelegate* delegate_;
- TextInputClient* text_input_client_;
- ObserverList<InputMethodObserver> observers_;
-
- DISALLOW_COPY_AND_ASSIGN(FakeInputMethod);
-};
-
-} // namespace ui
-
-#endif // UI_BASE_IME_FAKE_INPUT_METHOD_H_
diff --git a/ui/base/ime/ime.gypi b/ui/base/ime/ime.gypi
index 8d34f2f3e6..7d52d9d783 100644
--- a/ui/base/ime/ime.gypi
+++ b/ui/base/ime/ime.gypi
@@ -3,9 +3,12 @@
# found in the LICENSE file.
{
+ 'dependencies' : [
+ '<(DEPTH)/ui/events/events.gyp:events',
+ ],
'sources': [
- 'character_composer.cc',
- 'character_composer.h',
+ 'chromeos/character_composer.cc',
+ 'chromeos/character_composer.h',
'chromeos/ibus_bridge.cc',
'chromeos/ibus_bridge.h',
'chromeos/mock_ime_candidate_window_handler.cc',
@@ -21,8 +24,6 @@
'composition_underline.h',
'dummy_input_method_delegate.cc',
'dummy_input_method_delegate.h',
- 'fake_input_method.cc',
- 'fake_input_method.h',
'input_method.h',
'input_method_base.cc',
'input_method_base.h',
@@ -35,8 +36,10 @@
'input_method_imm32.h',
'input_method_initializer.cc',
'input_method_initializer.h',
- 'input_method_linux_x11.cc',
- 'input_method_linux_x11.h',
+ 'input_method_auralinux.cc',
+ 'input_method_auralinux.h',
+ 'input_method_minimal.cc',
+ 'input_method_minimal.h',
'input_method_observer.h',
'input_method_tsf.cc',
'input_method_tsf.h',
@@ -71,24 +74,14 @@
'conditions': [
['toolkit_views==0 and use_aura==0', {
'sources!': [
- 'fake_input_method.cc',
- 'fake_input_method.h',
'input_method_factory.cc',
'input_method_factory.h',
+ 'input_method_minimal.cc',
+ 'input_method_minimal.h',
],
}],
['chromeos==0 or use_x11==0', {
'sources!': [
- 'character_composer.cc',
- 'character_composer.h',
- 'chromeos/ibus_bridge.cc',
- 'chromeos/ibus_bridge.h',
- 'chromeos/mock_ime_candidate_window_handler.cc',
- 'chromeos/mock_ime_candidate_window_handler.h',
- 'chromeos/mock_ime_engine_handler.cc',
- 'chromeos/mock_ime_engine_handler.h',
- 'chromeos/mock_ime_input_context_handler.cc',
- 'chromeos/mock_ime_input_context_handler.h',
'input_method_ibus.cc',
'input_method_ibus.h',
],
@@ -106,10 +99,10 @@
'input_method_tsf.h',
],
}],
- ['use_aura==0 or use_x11==0 or desktop_linux==0', {
+ ['use_aura==0 or desktop_linux==0', {
'sources!': [
- 'input_method_linux_x11.cc',
- 'input_method_linux_x11.h',
+ 'input_method_auralinux.cc',
+ 'input_method_auralinux.h',
],
}],
['use_aura==0 or desktop_linux==0', {
diff --git a/ui/base/ime/ime_unittests.gypi b/ui/base/ime/ime_unittests.gypi
index 9a881bab4d..779764800d 100644
--- a/ui/base/ime/ime_unittests.gypi
+++ b/ui/base/ime/ime_unittests.gypi
@@ -4,7 +4,7 @@
{
'sources': [
- 'character_composer_unittest.cc',
+ 'chromeos/character_composer_unittest.cc',
'composition_text_util_pango_unittest.cc',
'input_method_base_unittest.cc',
'input_method_ibus_unittest.cc',
@@ -16,7 +16,7 @@
'conditions': [
['chromeos==0 or use_x11==0', {
'sources!': [
- 'character_composer_unittest.cc',
+ 'chromeos/character_composer_unittest.cc',
'input_method_ibus_unittest.cc',
],
}],
diff --git a/ui/base/ime/input_method.h b/ui/base/ime/input_method.h
index 53c3c37b71..33c7beaed5 100644
--- a/ui/base/ime/input_method.h
+++ b/ui/base/ime/input_method.h
@@ -12,8 +12,6 @@
#include "base/i18n/rtl.h"
#include "ui/base/ime/text_input_mode.h"
#include "ui/base/ime/text_input_type.h"
-#include "ui/base/ui_export.h"
-#include "ui/events/keycodes/keyboard_codes.h"
namespace ui {
diff --git a/ui/base/ime/input_method_linux_x11.cc b/ui/base/ime/input_method_auralinux.cc
index 2059e6e9b5..4b996fb089 100644
--- a/ui/base/ime/input_method_linux_x11.cc
+++ b/ui/base/ime/input_method_auralinux.cc
@@ -2,27 +2,25 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "ui/base/ime/input_method_linux_x11.h"
+#include "ui/base/ime/input_method_auralinux.h"
#include "base/environment.h"
#include "ui/base/ime/linux/linux_input_method_context_factory.h"
#include "ui/base/ime/text_input_client.h"
#include "ui/events/event.h"
-#include "ui/events/event_utils.h"
-#include "ui/events/keycodes/keyboard_code_conversion.h"
-#include "ui/events/keycodes/keyboard_code_conversion_x.h"
namespace ui {
-InputMethodLinuxX11::InputMethodLinuxX11(
+InputMethodAuraLinux::InputMethodAuraLinux(
internal::InputMethodDelegate* delegate) {
SetDelegate(delegate);
}
-InputMethodLinuxX11::~InputMethodLinuxX11() {}
+InputMethodAuraLinux::~InputMethodAuraLinux() {}
// static
-void InputMethodLinuxX11::Initialize() {
+void InputMethodAuraLinux::Initialize() {
+#if (USE_X11)
// Force a IBus IM context to run in synchronous mode.
//
// Background: IBus IM context runs by default in asynchronous mode. In
@@ -47,11 +45,12 @@ void InputMethodLinuxX11::Initialize() {
// ui::InitializeInputMethod().
scoped_ptr<base::Environment> env(base::Environment::Create());
env->SetVar("IBUS_ENABLE_SYNC_MODE", "1");
+#endif
}
// Overriden from InputMethod.
-void InputMethodLinuxX11::Init(bool focused) {
+void InputMethodAuraLinux::Init(bool focused) {
CHECK(LinuxInputMethodContextFactory::instance());
input_method_context_ =
LinuxInputMethodContextFactory::instance()->CreateInputMethodContext(
@@ -68,34 +67,34 @@ void InputMethodLinuxX11::Init(bool focused) {
}
}
-bool InputMethodLinuxX11::OnUntranslatedIMEMessage(
+bool InputMethodAuraLinux::OnUntranslatedIMEMessage(
const base::NativeEvent& event,
NativeEventResult* result) {
return false;
}
-bool InputMethodLinuxX11::DispatchKeyEvent(const ui::KeyEvent& event) {
+bool InputMethodAuraLinux::DispatchKeyEvent(const ui::KeyEvent& event) {
DCHECK(event.type() == ET_KEY_PRESSED || event.type() == ET_KEY_RELEASED);
DCHECK(system_toplevel_window_focused());
- if (!event.HasNativeEvent())
- return DispatchFabricatedKeyEvent(event);
-
// If no text input client, do nothing.
- const base::NativeEvent& native_key_event = event.native_event();
if (!GetTextInputClient())
- return DispatchKeyEventPostIME(native_key_event);
+ return DispatchKeyEventPostIME(event);
// Let an IME handle the key event first.
- if (input_method_context_->DispatchKeyEvent(native_key_event)) {
- if (event.type() == ET_KEY_PRESSED)
- DispatchFabricatedKeyEventPostIME(ET_KEY_PRESSED, VKEY_PROCESSKEY,
- event.flags());
+ if (input_method_context_->DispatchKeyEvent(event)) {
+ if (event.type() == ET_KEY_PRESSED) {
+ const ui::KeyEvent fabricated_event(ET_KEY_PRESSED,
+ VKEY_PROCESSKEY,
+ event.flags(),
+ false); // is_char
+ DispatchKeyEventPostIME(fabricated_event);
+ }
return true;
}
// Otherwise, insert the character.
- const bool handled = DispatchKeyEventPostIME(native_key_event);
+ const bool handled = DispatchKeyEventPostIME(event);
if (event.type() == ET_KEY_PRESSED && GetTextInputClient()) {
const uint16 ch = event.GetCharacter();
if (ch) {
@@ -106,7 +105,7 @@ bool InputMethodLinuxX11::DispatchKeyEvent(const ui::KeyEvent& event) {
return handled;
}
-void InputMethodLinuxX11::OnTextInputTypeChanged(
+void InputMethodAuraLinux::OnTextInputTypeChanged(
const TextInputClient* client) {
if (!IsTextInputClientFocused(client))
return;
@@ -115,67 +114,67 @@ void InputMethodLinuxX11::OnTextInputTypeChanged(
input_method_context_->OnTextInputTypeChanged(client->GetTextInputType());
}
-void InputMethodLinuxX11::OnCaretBoundsChanged(const TextInputClient* client) {
+void InputMethodAuraLinux::OnCaretBoundsChanged(const TextInputClient* client) {
if (!IsTextInputClientFocused(client))
return;
input_method_context_->OnCaretBoundsChanged(
GetTextInputClient()->GetCaretBounds());
}
-void InputMethodLinuxX11::CancelComposition(const TextInputClient* client) {
+void InputMethodAuraLinux::CancelComposition(const TextInputClient* client) {
if (!IsTextInputClientFocused(client))
return;
input_method_context_->Reset();
input_method_context_->OnTextInputTypeChanged(client->GetTextInputType());
}
-void InputMethodLinuxX11::OnInputLocaleChanged() {
+void InputMethodAuraLinux::OnInputLocaleChanged() {
}
-std::string InputMethodLinuxX11::GetInputLocale() {
+std::string InputMethodAuraLinux::GetInputLocale() {
return "";
}
-base::i18n::TextDirection InputMethodLinuxX11::GetInputTextDirection() {
+base::i18n::TextDirection InputMethodAuraLinux::GetInputTextDirection() {
return input_method_context_->GetInputTextDirection();
}
-bool InputMethodLinuxX11::IsActive() {
- // InputMethodLinuxX11 is always ready and up.
+bool InputMethodAuraLinux::IsActive() {
+ // InputMethodAuraLinux is always ready and up.
return true;
}
-bool InputMethodLinuxX11::IsCandidatePopupOpen() const {
+bool InputMethodAuraLinux::IsCandidatePopupOpen() const {
// There seems no way to detect candidate windows or any popups.
return false;
}
// Overriden from ui::LinuxInputMethodContextDelegate
-void InputMethodLinuxX11::OnCommit(const base::string16& text) {
+void InputMethodAuraLinux::OnCommit(const base::string16& text) {
TextInputClient* text_input_client = GetTextInputClient();
if (text_input_client)
text_input_client->InsertText(text);
}
-void InputMethodLinuxX11::OnPreeditChanged(
+void InputMethodAuraLinux::OnPreeditChanged(
const CompositionText& composition_text) {
TextInputClient* text_input_client = GetTextInputClient();
if (text_input_client)
text_input_client->SetCompositionText(composition_text);
}
-void InputMethodLinuxX11::OnPreeditEnd() {
+void InputMethodAuraLinux::OnPreeditEnd() {
TextInputClient* text_input_client = GetTextInputClient();
if (text_input_client && text_input_client->HasCompositionText())
text_input_client->ClearCompositionText();
}
-void InputMethodLinuxX11::OnPreeditStart() {}
+void InputMethodAuraLinux::OnPreeditStart() {}
// Overridden from InputMethodBase.
-void InputMethodLinuxX11::OnDidChangeFocusedClient(
+void InputMethodAuraLinux::OnDidChangeFocusedClient(
TextInputClient* focused_before,
TextInputClient* focused) {
input_method_context_->Reset();
@@ -185,25 +184,4 @@ void InputMethodLinuxX11::OnDidChangeFocusedClient(
InputMethodBase::OnDidChangeFocusedClient(focused_before, focused);
}
-// private
-
-bool InputMethodLinuxX11::DispatchFabricatedKeyEvent(
- const ui::KeyEvent& event) {
- // Let a post IME handler handle the key event.
- if (DispatchFabricatedKeyEventPostIME(event.type(), event.key_code(),
- event.flags()))
- return true;
-
- // Otherwise, insert the character.
- if (event.type() == ET_KEY_PRESSED && GetTextInputClient()) {
- const uint16 ch = event.GetCharacter();
- if (ch) {
- GetTextInputClient()->InsertChar(ch, event.flags());
- return true;
- }
- }
-
- return false;
-}
-
} // namespace ui
diff --git a/ui/base/ime/input_method_linux_x11.h b/ui/base/ime/input_method_auralinux.h
index 34ca3833f0..87222a7bd0 100644
--- a/ui/base/ime/input_method_linux_x11.h
+++ b/ui/base/ime/input_method_auralinux.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef UI_BASE_IME_INPUT_METHOD_LINUX_X11_H_
-#define UI_BASE_IME_INPUT_METHOD_LINUX_X11_H_
+#ifndef UI_BASE_IME_INPUT_METHOD_AURALINUX_H_
+#define UI_BASE_IME_INPUT_METHOD_AURALINUX_H_
#include "base/memory/scoped_ptr.h"
#include "ui/base/ime/input_method_base.h"
@@ -11,14 +11,14 @@
namespace ui {
-// A ui::InputMethod implementation for a X11 event loop on GNU/Linux.
-// This class is not designed for supporting CrOS. The implementation details
-// are separated to ui::LinuxInputMethodContext interface.
-class InputMethodLinuxX11 : public InputMethodBase,
- public LinuxInputMethodContextDelegate {
+// A ui::InputMethod implementation for Aura on Linux platforms. The
+// implementation details are separated to ui::LinuxInputMethodContext
+// interface.
+class InputMethodAuraLinux : public InputMethodBase,
+ public LinuxInputMethodContextDelegate {
public:
- explicit InputMethodLinuxX11(internal::InputMethodDelegate* delegate);
- virtual ~InputMethodLinuxX11();
+ explicit InputMethodAuraLinux(internal::InputMethodDelegate* delegate);
+ virtual ~InputMethodAuraLinux();
// Initializes input methods. This function must be called once prior to
// any use of this instance. This function is supposed to be called from
@@ -51,14 +51,11 @@ class InputMethodLinuxX11 : public InputMethodBase,
virtual void OnDidChangeFocusedClient(TextInputClient* focused_before,
TextInputClient* focused) OVERRIDE;
- private:
- bool DispatchFabricatedKeyEvent(const ui::KeyEvent& event);
-
scoped_ptr<LinuxInputMethodContext> input_method_context_;
- DISALLOW_COPY_AND_ASSIGN(InputMethodLinuxX11);
+ DISALLOW_COPY_AND_ASSIGN(InputMethodAuraLinux);
};
} // namespace ui
-#endif // UI_BASE_IME_INPUT_METHOD_LINUX_X11_H_
+#endif // UI_BASE_IME_INPUT_METHOD_AURALINUX_H_
diff --git a/ui/base/ime/input_method_base.cc b/ui/base/ime/input_method_base.cc
index 0a9552289d..d88fccfc6f 100644
--- a/ui/base/ime/input_method_base.cc
+++ b/ui/base/ime/input_method_base.cc
@@ -4,10 +4,13 @@
#include "ui/base/ime/input_method_base.h"
+#include "base/bind.h"
#include "base/logging.h"
+#include "base/message_loop/message_loop.h"
#include "ui/base/ime/input_method_delegate.h"
#include "ui/base/ime/input_method_observer.h"
#include "ui/base/ime/text_input_client.h"
+#include "ui/events/event.h"
namespace ui {
@@ -100,15 +103,15 @@ void InputMethodBase::OnInputMethodChanged() const {
}
bool InputMethodBase::DispatchKeyEventPostIME(
- const base::NativeEvent& native_event) const {
- return delegate_ ? delegate_->DispatchKeyEventPostIME(native_event) : false;
-}
+ const ui::KeyEvent& event) const {
+ if (!delegate_)
+ return false;
+
+ if (!event.HasNativeEvent())
+ return delegate_->DispatchFabricatedKeyEventPostIME(
+ event.type(), event.key_code(), event.flags());
-bool InputMethodBase::DispatchFabricatedKeyEventPostIME(EventType type,
- KeyboardCode key_code,
- int flags) const {
- return delegate_ ? delegate_->DispatchFabricatedKeyEventPostIME
- (type, key_code, flags) : false;
+ return delegate_->DispatchKeyEventPostIME(event.native_event());
}
void InputMethodBase::NotifyTextInputStateChanged(
@@ -129,4 +132,38 @@ void InputMethodBase::SetFocusedTextInputClientInternal(
NotifyTextInputStateChanged(text_input_client_);
}
+void InputMethodBase::OnCandidateWindowShown() {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&InputMethodBase::CandidateWindowShownCallback, AsWeakPtr()));
+}
+
+void InputMethodBase::OnCandidateWindowUpdated() {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&InputMethodBase::CandidateWindowUpdatedCallback,
+ AsWeakPtr()));
+}
+
+void InputMethodBase::OnCandidateWindowHidden() {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&InputMethodBase::CandidateWindowHiddenCallback, AsWeakPtr()));
+}
+
+void InputMethodBase::CandidateWindowShownCallback() {
+ if (text_input_client_)
+ text_input_client_->OnCandidateWindowShown();
+}
+
+void InputMethodBase::CandidateWindowUpdatedCallback() {
+ if (text_input_client_)
+ text_input_client_->OnCandidateWindowUpdated();
+}
+
+void InputMethodBase::CandidateWindowHiddenCallback() {
+ if (text_input_client_)
+ text_input_client_->OnCandidateWindowHidden();
+}
+
} // namespace ui
diff --git a/ui/base/ime/input_method_base.h b/ui/base/ime/input_method_base.h
index 3e180a37fa..10ac88dcef 100644
--- a/ui/base/ime/input_method_base.h
+++ b/ui/base/ime/input_method_base.h
@@ -7,10 +7,10 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
+#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
#include "ui/base/ime/input_method.h"
#include "ui/base/ui_export.h"
-#include "ui/events/event_constants.h"
namespace gfx {
class Rect;
@@ -19,11 +19,14 @@ class Rect;
namespace ui {
class InputMethodObserver;
+class KeyEvent;
class TextInputClient;
// A helper class providing functionalities shared among ui::InputMethod
// implementations.
-class UI_EXPORT InputMethodBase : NON_EXPORTED_BASE(public InputMethod) {
+class UI_EXPORT InputMethodBase
+ : NON_EXPORTED_BASE(public InputMethod),
+ public base::SupportsWeakPtr<InputMethodBase> {
public:
InputMethodBase();
virtual ~InputMethodBase();
@@ -72,18 +75,19 @@ class UI_EXPORT InputMethodBase : NON_EXPORTED_BASE(public InputMethod) {
// Convenience method to call delegate_->DispatchKeyEventPostIME().
// Returns true if the event was processed
- bool DispatchKeyEventPostIME(const base::NativeEvent& native_event) const;
-
- // Convenience method to call delegate_->DispatchFabricatedKeyEventPostIME().
- // Returns true if the event was processed
- // TODO(komatsu): Unify this function to DispatchKeyEventPostIME.
- bool DispatchFabricatedKeyEventPostIME(EventType type,
- KeyboardCode key_code,
- int flags) const;
+ bool DispatchKeyEventPostIME(const ui::KeyEvent& event) const;
// Convenience method to notify all observers of TextInputClient changes.
void NotifyTextInputStateChanged(const TextInputClient* client);
+ // Interface for for signalling candidate window events.
+ // See also *Callback functions below. To avoid reentrancy issue that
+ // TextInputClient manipulates IME state during even handling, these methods
+ // defer sending actual signals to renderer.
+ void OnCandidateWindowShown();
+ void OnCandidateWindowUpdated();
+ void OnCandidateWindowHidden();
+
bool system_toplevel_window_focused() const {
return system_toplevel_window_focused_;
}
@@ -91,6 +95,12 @@ class UI_EXPORT InputMethodBase : NON_EXPORTED_BASE(public InputMethod) {
private:
void SetFocusedTextInputClientInternal(TextInputClient* client);
+ // Deferred callbacks for signalling TextInputClient about candidate window
+ // appearance changes.
+ void CandidateWindowShownCallback();
+ void CandidateWindowUpdatedCallback();
+ void CandidateWindowHiddenCallback();
+
internal::InputMethodDelegate* delegate_;
TextInputClient* text_input_client_;
diff --git a/ui/base/ime/input_method_base_unittest.cc b/ui/base/ime/input_method_base_unittest.cc
index e065306f23..ac80b1406f 100644
--- a/ui/base/ime/input_method_base_unittest.cc
+++ b/ui/base/ime/input_method_base_unittest.cc
@@ -4,6 +4,10 @@
#include "ui/base/ime/input_method_base.h"
+#include "base/gtest_prod_util.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
#include "base/scoped_observer.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/ime/dummy_text_input_client.h"
@@ -110,11 +114,30 @@ class ClientChangeVerifier {
DISALLOW_COPY_AND_ASSIGN(ClientChangeVerifier);
};
+class InputMethodBaseTest : public testing::Test {
+ protected:
+ InputMethodBaseTest() {
+ }
+ virtual ~InputMethodBaseTest() {
+ }
+
+ virtual void SetUp() {
+ message_loop_.reset(new base::MessageLoopForUI);
+ }
+
+ virtual void TearDown() {
+ message_loop_.reset();
+ }
+
+ private:
+ scoped_ptr<base::MessageLoop> message_loop_;
+ DISALLOW_COPY_AND_ASSIGN(InputMethodBaseTest);
+};
+
class MockInputMethodBase : public InputMethodBase {
public:
// Note: this class does not take the ownership of |verifier|.
- MockInputMethodBase(ClientChangeVerifier* verifier)
- : verifier_(verifier) {
+ MockInputMethodBase(ClientChangeVerifier* verifier) : verifier_(verifier) {
}
virtual ~MockInputMethodBase() {
}
@@ -159,6 +182,8 @@ class MockInputMethodBase : public InputMethodBase {
}
ClientChangeVerifier* verifier_;
+
+ FRIEND_TEST_ALL_PREFIXES(InputMethodBaseTest, CandidateWindowEvents);
DISALLOW_COPY_AND_ASSIGN(MockInputMethodBase);
};
@@ -190,10 +215,38 @@ class MockInputMethodObserver : public InputMethodObserver {
DISALLOW_COPY_AND_ASSIGN(MockInputMethodObserver);
};
+class MockTextInputClient : public DummyTextInputClient {
+ public:
+ MockTextInputClient()
+ : shown_event_count_(0), updated_event_count_(0), hidden_event_count_(0) {
+ }
+ virtual ~MockTextInputClient() {
+ }
+
+ virtual void OnCandidateWindowShown() OVERRIDE {
+ ++shown_event_count_;
+ }
+ virtual void OnCandidateWindowUpdated() OVERRIDE {
+ ++updated_event_count_;
+ }
+ virtual void OnCandidateWindowHidden() OVERRIDE {
+ ++hidden_event_count_;
+ }
+
+ int shown_event_count() const { return shown_event_count_; }
+ int updated_event_count() const { return updated_event_count_; }
+ int hidden_event_count() const { return hidden_event_count_; }
+
+ private:
+ int shown_event_count_;
+ int updated_event_count_;
+ int hidden_event_count_;
+};
+
typedef ScopedObserver<InputMethod, InputMethodObserver>
InputMethodScopedObserver;
-TEST(InputMethodBaseTest, SetFocusedTextInputClient) {
+TEST_F(InputMethodBaseTest, SetFocusedTextInputClient) {
DummyTextInputClient text_input_client_1st;
DummyTextInputClient text_input_client_2nd;
@@ -252,7 +305,7 @@ TEST(InputMethodBaseTest, SetFocusedTextInputClient) {
}
}
-TEST(InputMethodBaseTest, DetachTextInputClient) {
+TEST_F(InputMethodBaseTest, DetachTextInputClient) {
DummyTextInputClient text_input_client;
DummyTextInputClient text_input_client_the_other;
@@ -295,5 +348,52 @@ TEST(InputMethodBaseTest, DetachTextInputClient) {
}
}
+TEST_F(InputMethodBaseTest, CandidateWindowEvents) {
+ MockTextInputClient text_input_client;
+
+ {
+ ClientChangeVerifier verifier;
+ MockInputMethodBase input_method_base(&verifier);
+ input_method_base.OnFocus();
+
+ verifier.ExpectClientChange(NULL, &text_input_client);
+ input_method_base.SetFocusedTextInputClient(&text_input_client);
+
+ EXPECT_EQ(0, text_input_client.shown_event_count());
+ EXPECT_EQ(0, text_input_client.updated_event_count());
+ EXPECT_EQ(0, text_input_client.hidden_event_count());
+
+ input_method_base.OnCandidateWindowShown();
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_EQ(1, text_input_client.shown_event_count());
+ EXPECT_EQ(0, text_input_client.updated_event_count());
+ EXPECT_EQ(0, text_input_client.hidden_event_count());
+
+ input_method_base.OnCandidateWindowUpdated();
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_EQ(1, text_input_client.shown_event_count());
+ EXPECT_EQ(1, text_input_client.updated_event_count());
+ EXPECT_EQ(0, text_input_client.hidden_event_count());
+
+ input_method_base.OnCandidateWindowHidden();
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_EQ(1, text_input_client.shown_event_count());
+ EXPECT_EQ(1, text_input_client.updated_event_count());
+ EXPECT_EQ(1, text_input_client.hidden_event_count());
+
+ input_method_base.OnCandidateWindowShown();
+ }
+
+ // If InputMethod is deleted immediately after an event happens, but before
+ // its callback is invoked, the callback will be cancelled.
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(1, text_input_client.shown_event_count());
+ EXPECT_EQ(1, text_input_client.updated_event_count());
+ EXPECT_EQ(1, text_input_client.hidden_event_count());
+}
+
} // namespace
} // namespace ui
diff --git a/ui/base/ime/input_method_factory.cc b/ui/base/ime/input_method_factory.cc
index e44c8d99e9..616dd22bd2 100644
--- a/ui/base/ime/input_method_factory.cc
+++ b/ui/base/ime/input_method_factory.cc
@@ -4,7 +4,7 @@
#include "ui/base/ime/input_method_factory.h"
-#include "ui/base/ime/input_method_delegate.h"
+#include "base/memory/singleton.h"
#include "ui/base/ime/mock_input_method.h"
#if defined(OS_CHROMEOS) && defined(USE_X11)
@@ -15,59 +15,99 @@
#include "ui/base/ime/input_method_tsf.h"
#include "ui/base/ime/remote_input_method_win.h"
#elif defined(USE_AURA) && defined(USE_X11)
-#include "ui/base/ime/input_method_linux_x11.h"
+#include "ui/base/ime/input_method_auralinux.h"
#else
-#include "ui/base/ime/fake_input_method.h"
+#include "ui/base/ime/input_method_minimal.h"
#endif
-namespace ui {
namespace {
-bool g_input_method_set_for_testing = false;
-InputMethod* g_shared_input_method = NULL;
+ui::InputMethodFactory* g_input_method_factory = NULL;
#if defined(OS_WIN)
-// Returns a new instance of input method object for Windows.
-scoped_ptr<InputMethod> CreateInputMethodWinInternal(
+ui::InputMethod* g_shared_input_method = NULL;
+#endif
+
+} // namespace
+
+namespace ui {
+
+// static
+InputMethodFactory* InputMethodFactory::GetInstance() {
+ if (!g_input_method_factory)
+ SetInstance(DefaultInputMethodFactory::GetInstance());
+
+ return g_input_method_factory;
+}
+
+// static
+void InputMethodFactory::SetInstance(InputMethodFactory* instance) {
+ CHECK(!g_input_method_factory);
+ CHECK(instance);
+
+ g_input_method_factory = instance;
+}
+
+// static
+void InputMethodFactory::ClearInstance() {
+ // It's a client's duty to delete the object.
+ g_input_method_factory = NULL;
+}
+
+// DefaultInputMethodFactory
+
+// static
+DefaultInputMethodFactory* DefaultInputMethodFactory::GetInstance() {
+ return Singleton<DefaultInputMethodFactory>::get();
+}
+
+scoped_ptr<InputMethod> DefaultInputMethodFactory::CreateInputMethod(
internal::InputMethodDelegate* delegate,
gfx::AcceleratedWidget widget) {
+#if defined(OS_CHROMEOS) && defined(USE_X11)
+ return scoped_ptr<InputMethod>(new InputMethodIBus(delegate));
+#elif defined(OS_WIN)
if (base::win::IsTSFAwareRequired())
return scoped_ptr<InputMethod>(new InputMethodTSF(delegate, widget));
if (IsRemoteInputMethodWinRequired(widget))
return CreateRemoteInputMethodWin(delegate);
return scoped_ptr<InputMethod>(new InputMethodIMM32(delegate, widget));
-}
+#elif defined(USE_AURA) && defined(USE_X11)
+ return scoped_ptr<InputMethod>(new InputMethodAuraLinux(delegate));
+#else
+ return scoped_ptr<InputMethod>(new InputMethodMinimal(delegate));
#endif
+}
-} // namespace
+// MockInputMethodFactory
+
+// static
+MockInputMethodFactory* MockInputMethodFactory::GetInstance() {
+ return Singleton<MockInputMethodFactory>::get();
+}
+
+scoped_ptr<InputMethod> MockInputMethodFactory::CreateInputMethod(
+ internal::InputMethodDelegate* delegate,
+ gfx::AcceleratedWidget /* widget */) {
+ return scoped_ptr<InputMethod>(new MockInputMethod(delegate));
+}
+
+// Shorthands
scoped_ptr<InputMethod> CreateInputMethod(
internal::InputMethodDelegate* delegate,
gfx::AcceleratedWidget widget) {
- if (g_input_method_set_for_testing)
- return scoped_ptr<InputMethod>(new MockInputMethod(delegate));
-#if defined(OS_CHROMEOS) && defined(USE_X11)
- return scoped_ptr<InputMethod>(new InputMethodIBus(delegate));
-#elif defined(OS_WIN)
- return CreateInputMethodWinInternal(delegate, widget);
-#elif defined(USE_AURA) && defined(USE_X11)
- return scoped_ptr<InputMethod>(new InputMethodLinuxX11(delegate));
-#else
- return scoped_ptr<InputMethod>(new FakeInputMethod(delegate));
-#endif
+ return InputMethodFactory::GetInstance()->CreateInputMethod(delegate, widget);
}
void SetUpInputMethodFactoryForTesting() {
- g_input_method_set_for_testing = true;
+ InputMethodFactory::SetInstance(MockInputMethodFactory::GetInstance());
}
-InputMethod* GetSharedInputMethod() {
#if defined(OS_WIN)
+InputMethod* GetSharedInputMethod() {
if (!g_shared_input_method)
g_shared_input_method = CreateInputMethod(NULL, NULL).release();
-#else
- NOTREACHED();
-#endif
return g_shared_input_method;
}
@@ -79,4 +119,6 @@ void DestroySharedInputMethod() {
}
} // namespace internal
+#endif
+
} // namespace ui
diff --git a/ui/base/ime/input_method_factory.h b/ui/base/ime/input_method_factory.h
index 300c40b7a4..b738620552 100644
--- a/ui/base/ime/input_method_factory.h
+++ b/ui/base/ime/input_method_factory.h
@@ -5,10 +5,15 @@
#ifndef UI_BASE_IME_INPUT_METHOD_FACTORY_H_
#define UI_BASE_IME_INPUT_METHOD_FACTORY_H_
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
+#include "ui/base/ime/input_method_initializer.h"
#include "ui/base/ui_export.h"
#include "ui/gfx/native_widget_types.h"
+template <typename T> struct DefaultSingletonTraits;
+
namespace ui {
namespace internal {
class InputMethodDelegate;
@@ -16,14 +21,82 @@ class InputMethodDelegate;
class InputMethod;
-// Creates and returns an input method implementation for the platform.
+class UI_EXPORT InputMethodFactory {
+ public:
+ // Returns the current active factory.
+ // If no factory was set, sets the DefaultInputMethodFactory by default. Once
+ // a factory was set, you cannot change the factory, and always the same
+ // factory is returned.
+ static InputMethodFactory* GetInstance();
+
+ // Sets an InputMethodFactory to be used.
+ // This function must be called at most once. |instance| is not owned by this
+ // class or marked automatically as a leaky object. It's a caller's duty to
+ // destroy the object or mark it as leaky.
+ static void SetInstance(InputMethodFactory* instance);
+
+ virtual ~InputMethodFactory() {}
+
+ // Creates and returns an input method implementation.
+ virtual scoped_ptr<InputMethod> CreateInputMethod(
+ internal::InputMethodDelegate* delegate,
+ gfx::AcceleratedWidget widget) = 0;
+
+ private:
+ static void ClearInstance();
+
+ friend UI_EXPORT void ShutdownInputMethod();
+ friend UI_EXPORT void ShutdownInputMethodForTesting();
+};
+
+class DefaultInputMethodFactory : public InputMethodFactory {
+ public:
+ // For Singleton
+ static DefaultInputMethodFactory* GetInstance();
+
+ // Overridden from InputMethodFactory.
+ virtual scoped_ptr<InputMethod> CreateInputMethod(
+ internal::InputMethodDelegate* delegate,
+ gfx::AcceleratedWidget widget) OVERRIDE;
+
+ private:
+ DefaultInputMethodFactory() {}
+
+ friend struct DefaultSingletonTraits<DefaultInputMethodFactory>;
+
+ DISALLOW_COPY_AND_ASSIGN(DefaultInputMethodFactory);
+};
+
+class MockInputMethodFactory : public InputMethodFactory {
+ public:
+ // For Singleton
+ static MockInputMethodFactory* GetInstance();
+
+ // Overridden from InputMethodFactory.
+ virtual scoped_ptr<InputMethod> CreateInputMethod(
+ internal::InputMethodDelegate* delegate,
+ gfx::AcceleratedWidget widget) OVERRIDE;
+
+ private:
+ MockInputMethodFactory() {}
+
+ friend struct DefaultSingletonTraits<MockInputMethodFactory>;
+
+ DISALLOW_COPY_AND_ASSIGN(MockInputMethodFactory);
+};
+
+// Shorthand for
+// InputMethodFactory::GetInstance()->CreateInputMethod(delegate, widget).
UI_EXPORT scoped_ptr<InputMethod> CreateInputMethod(
internal::InputMethodDelegate* delegate,
gfx::AcceleratedWidget widget);
-// With calling this function, CreateInputMethod will return MockInputMethod.
+// Shorthand for InputMethodFactory::SetInstance(new MockInputMethodFactory()).
+// TODO(yukishiino): Retires this shorthand, and makes ui::InitializeInputMethod
+// and ui::InitializeInputMethodForTesting set the appropriate factory.
UI_EXPORT void SetUpInputMethodFactoryForTesting();
+#if defined(OS_WIN)
// Returns a shared input method object for the platform. Caller must not
// delete the object. Currently supported only on Windows. This method is
// for non-Aura environment, where only one input method object is created for
@@ -35,6 +108,7 @@ namespace internal {
// This function must be called only from input_method_initializer.cc.
void DestroySharedInputMethod();
} // namespace internal
+#endif
} // namespace ui;
diff --git a/ui/base/ime/input_method_ibus.cc b/ui/base/ime/input_method_ibus.cc
index ac503a9b72..85bb244fca 100644
--- a/ui/base/ime/input_method_ibus.cc
+++ b/ui/base/ime/input_method_ibus.cc
@@ -4,12 +4,6 @@
#include "ui/base/ime/input_method_ibus.h"
-#include <X11/X.h>
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#undef FocusIn
-#undef FocusOut
-
#include <algorithm>
#include <cstring>
#include <set>
@@ -35,35 +29,9 @@
#include "ui/gfx/rect.h"
namespace {
-
-const int kIBusReleaseMask = 1 << 30;
-
-XKeyEvent* GetKeyEvent(XEvent* event) {
- DCHECK(event && (event->type == KeyPress || event->type == KeyRelease));
- return &event->xkey;
-}
-
-// Converts X (and ibus) state to event flags.
-int EventFlagsFromXState(unsigned int state) {
- return (state & LockMask ? ui::EF_CAPS_LOCK_DOWN : 0) |
- (state & ControlMask ? ui::EF_CONTROL_DOWN : 0) |
- (state & ShiftMask ? ui::EF_SHIFT_DOWN : 0) |
- (state & Mod1Mask ? ui::EF_ALT_DOWN : 0) |
- (state & Button1Mask ? ui::EF_LEFT_MOUSE_BUTTON : 0) |
- (state & Button2Mask ? ui::EF_MIDDLE_MOUSE_BUTTON : 0) |
- (state & Button3Mask ? ui::EF_RIGHT_MOUSE_BUTTON : 0);
-}
-
-// Converts X state to ibus key and button state.
-uint32 IBusStateFromXState(unsigned int state) {
- return (state & (LockMask | ControlMask | ShiftMask | Mod1Mask |
- Button1Mask | Button2Mask | Button3Mask));
-}
-
chromeos::IBusEngineHandlerInterface* GetEngine() {
return chromeos::IBusBridge::Get()->GetEngineHandler();
}
-
} // namespace
namespace ui {
@@ -112,24 +80,13 @@ bool InputMethodIBus::OnUntranslatedIMEMessage(const base::NativeEvent& event,
}
void InputMethodIBus::ProcessKeyEventDone(uint32 id,
- ui::KeyEvent* key_event,
- uint32 ibus_keyval,
- uint32 ibus_keycode,
- uint32 ibus_state,
+ ui::KeyEvent* event,
bool is_handled) {
- DCHECK(key_event);
-
- // TODO(komatsu): Support fabricated key events.
- if (!key_event->HasNativeEvent())
- return;
-
- const base::NativeEvent event = key_event->native_event();
- std::set<uint32>::iterator it = pending_key_events_.find(id);
-
- if (it == pending_key_events_.end())
+ if (pending_key_events_.find(id) == pending_key_events_.end())
return; // Abandoned key event.
- if (event->type == KeyPress) {
+ DCHECK(event);
+ if (event->type() == ET_KEY_PRESSED) {
if (is_handled) {
// IME event has a priority to be handled, so that character composer
// should be reset.
@@ -137,35 +94,21 @@ void InputMethodIBus::ProcessKeyEventDone(uint32 id,
} else {
// If IME does not handle key event, passes keyevent to character composer
// to be able to compose complex characters.
- is_handled = ExecuteCharacterComposer(ibus_keyval, ibus_keycode,
- ibus_state);
+ is_handled = ExecuteCharacterComposer(*event);
}
}
- if (event->type == KeyPress || event->type == KeyRelease)
- ProcessKeyEventPostIME(*key_event, ibus_state, is_handled);
+ if (event->type() == ET_KEY_PRESSED || event->type() == ET_KEY_RELEASED)
+ ProcessKeyEventPostIME(*event, is_handled);
- // Do not use |it| for erasing, ProcessKeyEventPostIME may change the
- // |pending_key_events_|.
+ // ProcessKeyEventPostIME may change the |pending_key_events_|.
pending_key_events_.erase(id);
}
bool InputMethodIBus::DispatchKeyEvent(const ui::KeyEvent& event) {
- if (!event.HasNativeEvent())
- return DispatchFabricatedKeyEvent(event);
-
- const base::NativeEvent& native_event = event.native_event();
- DCHECK(native_event && (native_event->type == KeyPress ||
- native_event->type == KeyRelease));
+ DCHECK(event.type() == ET_KEY_PRESSED || event.type() == ET_KEY_RELEASED);
DCHECK(system_toplevel_window_focused());
- uint32 ibus_keyval = 0;
- uint32 ibus_keycode = 0;
- uint32 ibus_state = 0;
- IBusKeyEventFromNativeKeyEvent(
- native_event,
- &ibus_keyval, &ibus_keycode, &ibus_state);
-
// If |context_| is not usable, then we can only dispatch the key event as is.
// We also dispatch the key event directly if the current text input type is
// TEXT_INPUT_TYPE_PASSWORD, to bypass the input method.
@@ -173,35 +116,30 @@ bool InputMethodIBus::DispatchKeyEvent(const ui::KeyEvent& event) {
// enabled, so that ibus can have a chance to enable the |context_|.
if (!context_focused_ || !GetEngine() ||
GetTextInputType() == TEXT_INPUT_TYPE_PASSWORD ) {
- if (native_event->type == KeyPress) {
- if (ExecuteCharacterComposer(ibus_keyval, ibus_keycode, ibus_state)) {
+ if (event.type() == ET_KEY_PRESSED) {
+ if (ExecuteCharacterComposer(event)) {
// Treating as PostIME event if character composer handles key event and
// generates some IME event,
- ProcessKeyEventPostIME(event, ibus_state, true);
+ ProcessKeyEventPostIME(event, true);
return true;
}
- ProcessUnfilteredKeyPressEvent(native_event, ibus_state);
+ ProcessUnfilteredKeyPressEvent(event);
} else {
- DispatchKeyEventPostIME(native_event);
+ DispatchKeyEventPostIME(event);
}
return true;
}
pending_key_events_.insert(current_keyevent_id_);
- ui::KeyEvent* copied_event = event.Copy();
+ ui::KeyEvent* copied_event = new ui::KeyEvent(event);
GetEngine()->ProcessKeyEvent(
- ibus_keyval,
- ibus_keycode,
- ibus_state,
+ event,
base::Bind(&InputMethodIBus::ProcessKeyEventDone,
weak_ptr_factory_.GetWeakPtr(),
current_keyevent_id_,
// Pass the ownership of |copied_event|.
- base::Owned(copied_event),
- ibus_keyval,
- ibus_keycode,
- ibus_state));
+ base::Owned(copied_event)));
++current_keyevent_id_;
@@ -331,20 +269,6 @@ void InputMethodIBus::ConfirmCompositionText() {
ResetContext();
}
-bool InputMethodIBus::DispatchFabricatedKeyEvent(const ui::KeyEvent& event) {
- // TODO(bryeung): The fabricated events should also pass through IME.
- if (event.type() == ET_KEY_PRESSED) {
- ProcessUnfilteredFabricatedKeyPressEvent(
- ET_KEY_PRESSED, event.key_code(), event.flags());
- } else {
- DispatchFabricatedKeyEventPostIME(
- ET_KEY_RELEASED,
- event.key_code(),
- event.flags());
- }
- return true;
-}
-
void InputMethodIBus::ResetContext() {
if (!context_focused_ || !GetTextInputClient())
return;
@@ -423,24 +347,17 @@ void InputMethodIBus::UpdateContextFocusState() {
void InputMethodIBus::ProcessKeyEventPostIME(
const ui::KeyEvent& event,
- uint32 ibus_state,
bool handled) {
- // TODO(komatsu): Support fabricated key events.
- if (!event.HasNativeEvent())
- return;
- const base::NativeEvent& native_event = event.native_event();
-
TextInputClient* client = GetTextInputClient();
-
if (!client) {
// As ibus works asynchronously, there is a chance that the focused client
// loses focus before this method gets called.
- DispatchKeyEventPostIME(native_event);
+ DispatchKeyEventPostIME(event);
return;
}
- if (native_event->type == KeyPress && handled)
- ProcessFilteredKeyPressEvent(native_event);
+ if (event.type() == ET_KEY_PRESSED && handled)
+ ProcessFilteredKeyPressEvent(event);
// In case the focus was changed by the key event. The |context_| should have
// been reset when the focused window changed.
@@ -448,58 +365,35 @@ void InputMethodIBus::ProcessKeyEventPostIME(
return;
if (HasInputMethodResult())
- ProcessInputMethodResult(native_event, handled);
+ ProcessInputMethodResult(event, handled);
// In case the focus was changed when sending input method results to the
// focused window.
if (client != GetTextInputClient())
return;
- if (native_event->type == KeyPress && !handled)
- ProcessUnfilteredKeyPressEvent(native_event, ibus_state);
- else if (native_event->type == KeyRelease)
- DispatchKeyEventPostIME(native_event);
-}
-
-void InputMethodIBus::IBusKeyEventFromNativeKeyEvent(
- const base::NativeEvent& native_event,
- uint32* ibus_keyval,
- uint32* ibus_keycode,
- uint32* ibus_state) {
- DCHECK(native_event); // A fabricated event is not supported here.
- XKeyEvent* x_key = GetKeyEvent(native_event);
-
- // Yes, ibus uses X11 keysym. We cannot use XLookupKeysym(), which doesn't
- // translate Shift and CapsLock states.
- KeySym keysym = NoSymbol;
- ::XLookupString(x_key, NULL, 0, &keysym, NULL);
- *ibus_keyval = keysym;
- *ibus_keycode = x_key->keycode;
- *ibus_state = IBusStateFromXState(x_key->state);
- if (native_event->type == KeyRelease)
- *ibus_state |= kIBusReleaseMask;
-}
-
-void InputMethodIBus::ProcessFilteredKeyPressEvent(
- const base::NativeEvent& native_event) {
- if (NeedInsertChar())
- DispatchKeyEventPostIME(native_event);
- else
- DispatchFabricatedKeyEventPostIME(
- ET_KEY_PRESSED,
- VKEY_PROCESSKEY,
- EventFlagsFromXState(GetKeyEvent(native_event)->state));
+ if (event.type() == ET_KEY_PRESSED && !handled)
+ ProcessUnfilteredKeyPressEvent(event);
+ else if (event.type() == ET_KEY_RELEASED)
+ DispatchKeyEventPostIME(event);
}
-void InputMethodIBus::ProcessUnfilteredKeyPressEvent(
- const base::NativeEvent& native_event,
- uint32 ibus_state) {
- // For a fabricated event, ProcessUnfilteredFabricatedKeyPressEvent should be
- // called instead.
- DCHECK(native_event);
+void InputMethodIBus::ProcessFilteredKeyPressEvent(const ui::KeyEvent& event) {
+ if (NeedInsertChar()) {
+ DispatchKeyEventPostIME(event);
+ } else {
+ const ui::KeyEvent fabricated_event(ET_KEY_PRESSED,
+ VKEY_PROCESSKEY,
+ event.flags(),
+ false); // is_char
+ DispatchKeyEventPostIME(fabricated_event);
+ }
+}
- TextInputClient* client = GetTextInputClient();
- DispatchKeyEventPostIME(native_event);
+void InputMethodIBus::ProcessUnfilteredKeyPressEvent(
+ const ui::KeyEvent& event) {
+ const TextInputClient* prev_client = GetTextInputClient();
+ DispatchKeyEventPostIME(event);
// We shouldn't dispatch the character anymore if the key event dispatch
// caused focus change. For example, in the following scenario,
@@ -508,57 +402,42 @@ void InputMethodIBus::ProcessUnfilteredKeyPressEvent(
// 3. enable Korean IME, press A, then press Tab to move the focus to the web
// page.
// We should return here not to send the Tab key event to RWHV.
- if (client != GetTextInputClient())
+ TextInputClient* client = GetTextInputClient();
+ if (!client || client != prev_client)
return;
- const uint32 event_flags = EventFlagsFromXState(ibus_state);
-
// If a key event was not filtered by |context_| and |character_composer_|,
// then it means the key event didn't generate any result text. So we need
// to send corresponding character to the focused text input client.
- client = GetTextInputClient();
-
+ const uint32 event_flags = event.flags();
uint16 ch = 0;
- if (!(event_flags & ui::EF_CONTROL_DOWN))
- ch = ui::GetCharacterFromXEvent(native_event);
- if (!ch) {
- ch = ui::GetCharacterFromKeyCode(
- ui::KeyboardCodeFromNative(native_event), event_flags);
+ if (event.HasNativeEvent()) {
+ const base::NativeEvent& native_event = event.native_event();
+
+ if (!(event_flags & ui::EF_CONTROL_DOWN))
+ ch = ui::GetCharacterFromXEvent(native_event);
+ if (!ch) {
+ ch = ui::GetCharacterFromKeyCode(
+ ui::KeyboardCodeFromNative(native_event), event_flags);
+ }
+ } else {
+ ch = ui::GetCharacterFromKeyCode(event.key_code(), event_flags);
}
- if (client && ch)
- client->InsertChar(ch, event_flags);
-}
-
-void InputMethodIBus::ProcessUnfilteredFabricatedKeyPressEvent(
- EventType type,
- KeyboardCode key_code,
- int event_flags) {
- TextInputClient* client = GetTextInputClient();
- DispatchFabricatedKeyEventPostIME(type, key_code, event_flags);
-
- if (client != GetTextInputClient())
- return;
-
- client = GetTextInputClient();
- const uint16 ch = ui::GetCharacterFromKeyCode(key_code, event_flags);
- if (client && ch)
+ if (ch)
client->InsertChar(ch, event_flags);
}
-void InputMethodIBus::ProcessInputMethodResult(
- const base::NativeEvent& native_event,
- bool handled) {
+void InputMethodIBus::ProcessInputMethodResult(const ui::KeyEvent& event,
+ bool handled) {
TextInputClient* client = GetTextInputClient();
DCHECK(client);
if (result_text_.length()) {
if (handled && NeedInsertChar()) {
- const uint32 state =
- EventFlagsFromXState(GetKeyEvent(native_event)->state);
for (string16::const_iterator i = result_text_.begin();
i != result_text_.end(); ++i) {
- client->InsertChar(*i, state);
+ client->InsertChar(*i, event.flags());
}
} else {
client->InsertText(result_text_);
@@ -688,13 +567,8 @@ void InputMethodIBus::DeleteSurroundingText(int32 offset, uint32 length) {
GetTextInputClient()->ExtendSelectionAndDelete(length, 0U);
}
-bool InputMethodIBus::ExecuteCharacterComposer(uint32 ibus_keyval,
- uint32 ibus_keycode,
- uint32 ibus_state) {
- bool consumed = character_composer_.FilterKeyPress(
- ibus_keyval,
- ibus_keycode,
- EventFlagsFromXState(ibus_state));
+bool InputMethodIBus::ExecuteCharacterComposer(const ui::KeyEvent& event) {
+ bool consumed = character_composer_.FilterKeyPress(event);
suppress_next_result_ = false;
chromeos::IBusText preedit;
@@ -741,9 +615,6 @@ void InputMethodIBus::ExtractCompositionText(
const std::vector<chromeos::IBusText::UnderlineAttribute>&
underline_attributes = text.underline_attributes();
- const std::vector<chromeos::IBusText::SelectionAttribute>&
- selection_attributes = text.selection_attributes();
-
if (!underline_attributes.empty()) {
for (size_t i = 0; i < underline_attributes.size(); ++i) {
const uint32 start = underline_attributes[i].start_index;
@@ -763,28 +634,24 @@ void InputMethodIBus::ExtractCompositionText(
}
}
- if (!selection_attributes.empty()) {
- LOG_IF(ERROR, selection_attributes.size() != 1)
- << "Chrome does not support multiple selection";
- for (uint32 i = 0; i < selection_attributes.size(); ++i) {
- const uint32 start = selection_attributes[i].start_index;
- const uint32 end = selection_attributes[i].end_index;
- if (start >= end)
- continue;
- CompositionUnderline underline(
- char16_offsets[start], char16_offsets[end],
- SK_ColorBLACK, true /* thick */);
- out_composition->underlines.push_back(underline);
- // If the cursor is at start or end of this underline, then we treat
- // it as the selection range as well, but make sure to set the cursor
- // position to the selection end.
- if (underline.start_offset == cursor_offset) {
- out_composition->selection.set_start(underline.end_offset);
- out_composition->selection.set_end(cursor_offset);
- } else if (underline.end_offset == cursor_offset) {
- out_composition->selection.set_start(underline.start_offset);
- out_composition->selection.set_end(cursor_offset);
- }
+ DCHECK(text.selection_start() <= text.selection_end());
+ if (text.selection_start() < text.selection_end()) {
+ const uint32 start = text.selection_start();
+ const uint32 end = text.selection_end();
+ CompositionUnderline underline(
+ char16_offsets[start], char16_offsets[end],
+ SK_ColorBLACK, true /* thick */);
+ out_composition->underlines.push_back(underline);
+
+ // If the cursor is at start or end of this underline, then we treat
+ // it as the selection range as well, but make sure to set the cursor
+ // position to the selection end.
+ if (underline.start_offset == cursor_offset) {
+ out_composition->selection.set_start(underline.end_offset);
+ out_composition->selection.set_end(cursor_offset);
+ } else if (underline.end_offset == cursor_offset) {
+ out_composition->selection.set_start(underline.start_offset);
+ out_composition->selection.set_end(cursor_offset);
}
}
diff --git a/ui/base/ime/input_method_ibus.h b/ui/base/ime/input_method_ibus.h
index 47d09396c1..01f958db16 100644
--- a/ui/base/ime/input_method_ibus.h
+++ b/ui/base/ime/input_method_ibus.h
@@ -12,7 +12,7 @@
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
-#include "ui/base/ime/character_composer.h"
+#include "ui/base/ime/chromeos/character_composer.h"
#include "ui/base/ime/chromeos/ibus_bridge.h"
#include "ui/base/ime/composition_text.h"
#include "ui/base/ime/input_method_base.h"
@@ -59,16 +59,8 @@ class UI_EXPORT InputMethodIBus
// Process a key returned from the input method.
virtual void ProcessKeyEventPostIME(const ui::KeyEvent& event,
- uint32 ibus_state,
bool handled);
- // Converts |native_event| to ibus representation.
- virtual void IBusKeyEventFromNativeKeyEvent(
- const base::NativeEvent& native_event,
- uint32* ibus_keyval,
- uint32* ibus_keycode,
- uint32* ibus_state);
-
// Resets context and abandon all pending results and key events.
void ResetContext();
@@ -84,28 +76,20 @@ class UI_EXPORT InputMethodIBus
// Asks the client to confirm current composition text.
void ConfirmCompositionText();
- // Dispatchs a key event which does not contain a native event.
- bool DispatchFabricatedKeyEvent(const ui::KeyEvent& event);
-
// Checks the availability of focused text input client and update focus
// state.
void UpdateContextFocusState();
// Processes a key event that was already filtered by the input method.
// A VKEY_PROCESSKEY may be dispatched to the focused View.
- void ProcessFilteredKeyPressEvent(const base::NativeEvent& native_key_event);
+ void ProcessFilteredKeyPressEvent(const ui::KeyEvent& event);
// Processes a key event that was not filtered by the input method.
- void ProcessUnfilteredKeyPressEvent(const base::NativeEvent& native_key_event,
- uint32 ibus_state);
- void ProcessUnfilteredFabricatedKeyPressEvent(EventType type,
- KeyboardCode key_code,
- int event_flags);
+ void ProcessUnfilteredKeyPressEvent(const ui::KeyEvent& event);
// Sends input method result caused by the given key event to the focused text
// input client.
- void ProcessInputMethodResult(const base::NativeEvent& native_key_event,
- bool filtered);
+ void ProcessInputMethodResult(const ui::KeyEvent& event, bool filtered);
// Checks if the pending input method result needs inserting into the focused
// text input client as a single character.
@@ -120,9 +104,7 @@ class UI_EXPORT InputMethodIBus
// Passes keyevent and executes character composition if necessary. Returns
// true if character composer comsumes key event.
- bool ExecuteCharacterComposer(uint32 ibus_keyval,
- uint32 ibus_keycode,
- uint32 ibus_state);
+ bool ExecuteCharacterComposer(const ui::KeyEvent& event);
// chromeos::IBusInputContextHandlerInterface overrides:
virtual void CommitText(const std::string& text) OVERRIDE;
@@ -135,9 +117,7 @@ class UI_EXPORT InputMethodIBus
void HidePreeditText();
// Callback function for IBusEngineHandlerInterface::ProcessKeyEvent.
- void ProcessKeyEventDone(uint32 id, ui::KeyEvent* key_event,
- uint32 ibus_keyval, uint32 ibus_keycode,
- uint32 ibus_state, bool is_handled);
+ void ProcessKeyEventDone(uint32 id, ui::KeyEvent* event, bool is_handled);
// All pending key events. Note: we do not own these object, we just save
// pointers to these object so that we can abandon them when necessary.
diff --git a/ui/base/ime/input_method_ibus_unittest.cc b/ui/base/ime/input_method_ibus_unittest.cc
index 44c05949ef..f4b068db14 100644
--- a/ui/base/ime/input_method_ibus_unittest.cc
+++ b/ui/base/ime/input_method_ibus_unittest.cc
@@ -70,16 +70,8 @@ class TestableInputMethodIBus : public InputMethodIBus {
bool handled;
};
- struct IBusKeyEventFromNativeKeyEventResult {
- IBusKeyEventFromNativeKeyEventResult() : keyval(0), keycode(0), state(0) {}
- uint32 keyval;
- uint32 keycode;
- uint32 state;
- };
-
// InputMethodIBus override.
virtual void ProcessKeyEventPostIME(const ui::KeyEvent& key_event,
- uint32 ibus_state,
bool handled) OVERRIDE {
process_key_event_post_ime_args_.event = &key_event;
process_key_event_post_ime_args_.handled = handled;
@@ -722,10 +714,8 @@ TEST_F(InputMethodIBusTest, ExtractCompositionTextTest_Selection) {
// Set up ibus text with one underline attribute.
chromeos::IBusText ibus_text;
ibus_text.set_text(kSampleText);
- chromeos::IBusText::SelectionAttribute selection;
- selection.start_index = 1UL;
- selection.end_index = 4UL;
- ibus_text.mutable_selection_attributes()->push_back(selection);
+ ibus_text.set_selection_start(1UL);
+ ibus_text.set_selection_end(4UL);
CompositionText composition_text;
ime_->ExtractCompositionText(ibus_text, kCursorPos, &composition_text);
@@ -733,9 +723,9 @@ TEST_F(InputMethodIBusTest, ExtractCompositionTextTest_Selection) {
EXPECT_EQ(kCursorPos, composition_text.selection.start());
EXPECT_EQ(kCursorPos, composition_text.selection.end());
ASSERT_EQ(1UL, composition_text.underlines.size());
- EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.start_index),
+ EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_start()),
composition_text.underlines[0].start_offset);
- EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index),
+ EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_end()),
composition_text.underlines[0].end_offset);
EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color);
EXPECT_TRUE(composition_text.underlines[0].thick);
@@ -750,24 +740,22 @@ TEST_F(InputMethodIBusTest,
// Set up ibus text with one underline attribute.
chromeos::IBusText ibus_text;
ibus_text.set_text(kSampleText);
- chromeos::IBusText::SelectionAttribute selection;
- selection.start_index = kCursorPos;
- selection.end_index = 4UL;
- ibus_text.mutable_selection_attributes()->push_back(selection);
+ ibus_text.set_selection_start(kCursorPos);
+ ibus_text.set_selection_end(4UL);
CompositionText composition_text;
ime_->ExtractCompositionText(ibus_text, kCursorPos, &composition_text);
EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text);
// If the cursor position is same as selection bounds, selection start
// position become opposit side of selection from cursor.
- EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index),
+ EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_end()),
composition_text.selection.start());
EXPECT_EQ(GetOffsetInUTF16(kSampleText, kCursorPos),
composition_text.selection.end());
ASSERT_EQ(1UL, composition_text.underlines.size());
- EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.start_index),
+ EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_start()),
composition_text.underlines[0].start_offset);
- EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index),
+ EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_end()),
composition_text.underlines[0].end_offset);
EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color);
EXPECT_TRUE(composition_text.underlines[0].thick);
@@ -781,24 +769,22 @@ TEST_F(InputMethodIBusTest, ExtractCompositionTextTest_SelectionEndWithCursor) {
// Set up ibus text with one underline attribute.
chromeos::IBusText ibus_text;
ibus_text.set_text(kSampleText);
- chromeos::IBusText::SelectionAttribute selection;
- selection.start_index = 1UL;
- selection.end_index = kCursorPos;
- ibus_text.mutable_selection_attributes()->push_back(selection);
+ ibus_text.set_selection_start(1UL);
+ ibus_text.set_selection_end(kCursorPos);
CompositionText composition_text;
ime_->ExtractCompositionText(ibus_text, kCursorPos, &composition_text);
EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text);
// If the cursor position is same as selection bounds, selection start
// position become opposit side of selection from cursor.
- EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.start_index),
+ EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_start()),
composition_text.selection.start());
EXPECT_EQ(GetOffsetInUTF16(kSampleText, kCursorPos),
composition_text.selection.end());
ASSERT_EQ(1UL, composition_text.underlines.size());
- EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.start_index),
+ EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_start()),
composition_text.underlines[0].start_offset);
- EXPECT_EQ(GetOffsetInUTF16(kSampleText, selection.end_index),
+ EXPECT_EQ(GetOffsetInUTF16(kSampleText, ibus_text.selection_end()),
composition_text.underlines[0].end_offset);
EXPECT_EQ(SK_ColorBLACK, composition_text.underlines[0].color);
EXPECT_TRUE(composition_text.underlines[0].thick);
@@ -924,10 +910,9 @@ class InputMethodIBusKeyEventTest : public InputMethodIBusTest {
};
TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseTest) {
- const int kXFlags = ShiftMask;
- const unsigned int kIbusFlags = ui::EF_SHIFT_DOWN;
+ const int kFlags = ui::EF_SHIFT_DOWN;
ScopedXI2Event xevent;
- xevent.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_A, kXFlags);
+ xevent.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_A, kFlags);
const ui::KeyEvent event(xevent, true);
// Do key event.
@@ -936,14 +921,12 @@ TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseTest) {
ime_->DispatchKeyEvent(event);
// Check before state.
+ const ui::KeyEvent* key_event =
+ mock_ime_engine_handler_->last_processed_key_event();
EXPECT_EQ(1, mock_ime_engine_handler_->process_key_event_call_count());
- EXPECT_EQ("A",
- chromeos::input_method::GetIBusKey(
- mock_ime_engine_handler_->last_processed_keysym()));
- EXPECT_EQ("KeyA",
- chromeos::input_method::GetIBusKeyCode(
- mock_ime_engine_handler_->last_processed_keycode()));
- EXPECT_EQ(kIbusFlags, mock_ime_engine_handler_->last_processed_state());
+ EXPECT_EQ(ui::VKEY_A, key_event->key_code());
+ EXPECT_EQ("KeyA", key_event->code());
+ EXPECT_EQ(kFlags, key_event->flags());
EXPECT_EQ(0, ime_->process_key_event_post_ime_call_count());
// Do callback.
@@ -963,38 +946,33 @@ TEST_F(InputMethodIBusKeyEventTest, MultiKeyEventDelayResponseTest) {
input_type_ = TEXT_INPUT_TYPE_TEXT;
ime_->OnTextInputTypeChanged(this);
- const int kXFlags = ShiftMask;
- const unsigned int kIbusFlags = ui::EF_SHIFT_DOWN;
+ const int kFlags = ui::EF_SHIFT_DOWN;
ScopedXI2Event xevent;
- xevent.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_B, kXFlags);
+ xevent.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_B, kFlags);
const ui::KeyEvent event(xevent, true);
// Do key event.
ime_->DispatchKeyEvent(event);
- EXPECT_EQ("B",
- chromeos::input_method::GetIBusKey(
- mock_ime_engine_handler_->last_processed_keysym()));
- EXPECT_EQ("KeyB",
- chromeos::input_method::GetIBusKeyCode(
- mock_ime_engine_handler_->last_processed_keycode()));
- EXPECT_EQ(kIbusFlags, mock_ime_engine_handler_->last_processed_state());
+ const ui::KeyEvent* key_event =
+ mock_ime_engine_handler_->last_processed_key_event();
+ EXPECT_EQ(ui::VKEY_B, key_event->key_code());
+ EXPECT_EQ("KeyB", key_event->code());
+ EXPECT_EQ(kFlags, key_event->flags());
KeyEventCallback first_callback =
mock_ime_engine_handler_->last_passed_callback();
// Do key event again.
ScopedXI2Event xevent2;
- xevent2.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_C, kXFlags);
+ xevent2.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_C, kFlags);
const ui::KeyEvent event2(xevent2, true);
ime_->DispatchKeyEvent(event2);
- EXPECT_EQ("C",
- chromeos::input_method::GetIBusKey(
- mock_ime_engine_handler_->last_processed_keysym()));
- EXPECT_EQ("KeyC",
- chromeos::input_method::GetIBusKeyCode(
- mock_ime_engine_handler_->last_processed_keycode()));
- EXPECT_EQ(kIbusFlags, mock_ime_engine_handler_->last_processed_state());
+ const ui::KeyEvent* key_event2 =
+ mock_ime_engine_handler_->last_processed_key_event();
+ EXPECT_EQ(ui::VKEY_C, key_event2->key_code());
+ EXPECT_EQ("KeyC", key_event2->code());
+ EXPECT_EQ(kFlags, key_event2->flags());
// Check before state.
EXPECT_EQ(2,
@@ -1024,9 +1002,8 @@ TEST_F(InputMethodIBusKeyEventTest, MultiKeyEventDelayResponseTest) {
}
TEST_F(InputMethodIBusKeyEventTest, KeyEventDelayResponseResetTest) {
- const int kXFlags = ShiftMask;
ScopedXI2Event xevent;
- xevent.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_A, kXFlags);
+ xevent.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_SHIFT_DOWN);
const ui::KeyEvent event(xevent, true);
// Do key event.
diff --git a/ui/base/ime/input_method_imm32.cc b/ui/base/ime/input_method_imm32.cc
index 8ee5c5c0e9..16a33a1128 100644
--- a/ui/base/ime/input_method_imm32.cc
+++ b/ui/base/ime/input_method_imm32.cc
@@ -235,13 +235,25 @@ LRESULT InputMethodIMM32::OnImeNotify(UINT message,
BOOL* handled) {
*handled = FALSE;
+ bool previous_state = is_candidate_popup_open_;
+
// Update |is_candidate_popup_open_|, whether a candidate window is open.
switch (wparam) {
case IMN_OPENCANDIDATE:
is_candidate_popup_open_ = true;
+ if (!previous_state)
+ OnCandidateWindowShown();
break;
case IMN_CLOSECANDIDATE:
is_candidate_popup_open_ = false;
+ if (previous_state)
+ OnCandidateWindowHidden();
+ break;
+ case IMN_CHANGECANDIDATE:
+ // TODO(kochi): The IME API expects this event to notify window size change,
+ // while this may fire more often without window resize. There is no generic
+ // way to get bounds of candidate window.
+ OnCandidateWindowUpdated();
break;
}
diff --git a/ui/base/ime/input_method_initializer.cc b/ui/base/ime/input_method_initializer.cc
index 5731a25005..ad29e61f50 100644
--- a/ui/base/ime/input_method_initializer.cc
+++ b/ui/base/ime/input_method_initializer.cc
@@ -4,15 +4,16 @@
#include "ui/base/ime/input_method_initializer.h"
+#if defined(TOOLKIT_VIEWS) || defined(USE_AURA)
#include "ui/base/ime/input_method_factory.h"
+#endif
#if defined(OS_CHROMEOS)
#include "base/logging.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "ui/base/ime/chromeos/ibus_bridge.h"
#elif defined(USE_AURA) && defined(USE_X11)
-#include "base/memory/scoped_ptr.h"
-#include "ui/base/ime/input_method_linux_x11.h"
+#include "ui/base/ime/input_method_auralinux.h"
#include "ui/base/ime/linux/fake_input_method_context_factory.h"
#elif defined(OS_WIN)
#include "base/win/metro.h"
@@ -35,7 +36,7 @@ void InitializeInputMethod() {
#if defined(OS_CHROMEOS)
chromeos::IBusBridge::Initialize();
#elif defined(USE_AURA) && defined(USE_X11)
- InputMethodLinuxX11::Initialize();
+ InputMethodAuraLinux::Initialize();
#elif defined(OS_WIN)
if (base::win::IsTSFAwareRequired())
TSFBridge::Initialize();
@@ -43,6 +44,9 @@ void InitializeInputMethod() {
}
void ShutdownInputMethod() {
+#if defined(TOOLKIT_VIEWS) || defined(USE_AURA)
+ InputMethodFactory::ClearInstance();
+#endif
#if defined(OS_CHROMEOS)
chromeos::IBusBridge::Shutdown();
#elif defined(OS_WIN)
@@ -80,6 +84,9 @@ void InitializeInputMethodForTesting() {
}
void ShutdownInputMethodForTesting() {
+#if defined(TOOLKIT_VIEWS) || defined(USE_AURA)
+ InputMethodFactory::ClearInstance();
+#endif
#if defined(OS_CHROMEOS)
chromeos::IBusBridge::Shutdown();
// TODO(nona): Remove DBusThreadManager finalize.
diff --git a/ui/base/ime/input_method_minimal.cc b/ui/base/ime/input_method_minimal.cc
new file mode 100644
index 0000000000..0b51b9e3ce
--- /dev/null
+++ b/ui/base/ime/input_method_minimal.cc
@@ -0,0 +1,67 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/base/ime/input_method_minimal.h"
+
+#include "ui/base/ime/text_input_client.h"
+#include "ui/events/event.h"
+#include "ui/events/event_constants.h"
+
+namespace ui {
+
+InputMethodMinimal::InputMethodMinimal(
+ internal::InputMethodDelegate* delegate) {
+ SetDelegate(delegate);
+}
+
+InputMethodMinimal::~InputMethodMinimal() {}
+
+bool InputMethodMinimal::OnUntranslatedIMEMessage(
+ const base::NativeEvent& event,
+ NativeEventResult* result) {
+ return false;
+}
+
+bool InputMethodMinimal::DispatchKeyEvent(const ui::KeyEvent& event) {
+ DCHECK(event.type() == ET_KEY_PRESSED || event.type() == ET_KEY_RELEASED);
+
+ // If no text input client, do nothing.
+ if (!GetTextInputClient())
+ return DispatchKeyEventPostIME(event);
+
+ // Insert the character.
+ const bool handled = DispatchKeyEventPostIME(event);
+ if (event.type() == ET_KEY_PRESSED && GetTextInputClient()) {
+ const uint16 ch = event.GetCharacter();
+ if (ch) {
+ GetTextInputClient()->InsertChar(ch, event.flags());
+ return true;
+ }
+ }
+ return handled;
+}
+
+void InputMethodMinimal::OnCaretBoundsChanged(const TextInputClient* client) {}
+
+void InputMethodMinimal::CancelComposition(const TextInputClient* client) {}
+
+void InputMethodMinimal::OnInputLocaleChanged() {}
+
+std::string InputMethodMinimal::GetInputLocale() {
+ return std::string();
+}
+
+base::i18n::TextDirection InputMethodMinimal::GetInputTextDirection() {
+ return base::i18n::UNKNOWN_DIRECTION;
+}
+
+bool InputMethodMinimal::IsActive() {
+ return true;
+}
+
+bool InputMethodMinimal::IsCandidatePopupOpen() const {
+ return false;
+}
+
+} // namespace ui
diff --git a/ui/base/ime/input_method_minimal.h b/ui/base/ime/input_method_minimal.h
new file mode 100644
index 0000000000..2ba158f181
--- /dev/null
+++ b/ui/base/ime/input_method_minimal.h
@@ -0,0 +1,37 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_BASE_IME_INPUT_METHOD_MINIMAL_H_
+#define UI_BASE_IME_INPUT_METHOD_MINIMAL_H_
+
+#include "ui/base/ime/input_method_base.h"
+
+namespace ui {
+
+// A minimal implementation of ui::InputMethod, which supports only the direct
+// input without any compositions or conversions.
+class UI_EXPORT InputMethodMinimal : public InputMethodBase {
+ public:
+ explicit InputMethodMinimal(internal::InputMethodDelegate* delegate);
+ virtual ~InputMethodMinimal();
+
+ // Overriden from InputMethod.
+ virtual bool OnUntranslatedIMEMessage(const base::NativeEvent& event,
+ NativeEventResult* result) OVERRIDE;
+ virtual bool DispatchKeyEvent(const ui::KeyEvent& event) OVERRIDE;
+ virtual void OnCaretBoundsChanged(const TextInputClient* client) OVERRIDE;
+ virtual void CancelComposition(const TextInputClient* client) OVERRIDE;
+ virtual void OnInputLocaleChanged() OVERRIDE;
+ virtual std::string GetInputLocale() OVERRIDE;
+ virtual base::i18n::TextDirection GetInputTextDirection() OVERRIDE;
+ virtual bool IsActive() OVERRIDE;
+ virtual bool IsCandidatePopupOpen() const OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(InputMethodMinimal);
+};
+
+} // namespace ui
+
+#endif // UI_BASE_IME_INPUT_METHOD_MINIMAL_H_
diff --git a/ui/base/ime/input_method_win.cc b/ui/base/ime/input_method_win.cc
index 52e85a7699..5a30792e43 100644
--- a/ui/base/ime/input_method_win.cc
+++ b/ui/base/ime/input_method_win.cc
@@ -73,7 +73,7 @@ bool InputMethodWin::DispatchKeyEvent(const ui::KeyEvent& event) {
}
}
- return DispatchKeyEventPostIME(native_key_event);
+ return DispatchKeyEventPostIME(event);
}
void InputMethodWin::OnInputLocaleChanged() {
@@ -364,9 +364,7 @@ bool InputMethodWin::DispatchFabricatedKeyEvent(const ui::KeyEvent& event) {
return true;
}
}
- return DispatchFabricatedKeyEventPostIME(event.type(),
- event.key_code(),
- event.flags());
+ return DispatchKeyEventPostIME(event);
}
} // namespace ui
diff --git a/ui/base/ime/linux/fake_input_method_context.cc b/ui/base/ime/linux/fake_input_method_context.cc
index d52aa8a6f8..434dcf6704 100644
--- a/ui/base/ime/linux/fake_input_method_context.cc
+++ b/ui/base/ime/linux/fake_input_method_context.cc
@@ -11,7 +11,7 @@ FakeInputMethodContext::FakeInputMethodContext() {}
// Overriden from ui::LinuxInputMethodContext
bool FakeInputMethodContext::DispatchKeyEvent(
- const base::NativeEvent& /* native_key_event */) {
+ const ui::KeyEvent& /* key_event */) {
return false;
}
diff --git a/ui/base/ime/linux/fake_input_method_context.h b/ui/base/ime/linux/fake_input_method_context.h
index c27d778c0b..9d9681a1e7 100644
--- a/ui/base/ime/linux/fake_input_method_context.h
+++ b/ui/base/ime/linux/fake_input_method_context.h
@@ -15,8 +15,7 @@ class FakeInputMethodContext : public LinuxInputMethodContext {
FakeInputMethodContext();
// Overriden from ui::LinuxInputMethodContext
- virtual bool DispatchKeyEvent(const base::NativeEvent& native_key_event)
- OVERRIDE;
+ virtual bool DispatchKeyEvent(const ui::KeyEvent& key_event) OVERRIDE;
virtual void Reset() OVERRIDE;
virtual base::i18n::TextDirection GetInputTextDirection() const OVERRIDE;
virtual void OnTextInputTypeChanged(ui::TextInputType text_input_type)
diff --git a/ui/base/ime/linux/linux_input_method_context.h b/ui/base/ime/linux/linux_input_method_context.h
index 2c13a5c4cd..2466afd1c7 100644
--- a/ui/base/ime/linux/linux_input_method_context.h
+++ b/ui/base/ime/linux/linux_input_method_context.h
@@ -5,7 +5,6 @@
#ifndef UI_BASE_IME_LINUX_LINUX_INPUT_METHOD_CONTEXT_H_
#define UI_BASE_IME_LINUX_LINUX_INPUT_METHOD_CONTEXT_H_
-#include "base/event_types.h"
#include "base/i18n/rtl.h"
#include "base/strings/string16.h"
#include "ui/base/ime/text_input_type.h"
@@ -18,6 +17,7 @@ class Rect;
namespace ui {
struct CompositionText;
+class KeyEvent;
// An interface of input method context for input method frameworks on
// GNU/Linux and likes.
@@ -28,7 +28,7 @@ class UI_EXPORT LinuxInputMethodContext {
// Dispatches the key event to an underlying IME. Returns true if the key
// event is handled, otherwise false. A client must set the text input type
// before dispatching a key event.
- virtual bool DispatchKeyEvent(const base::NativeEvent& native_key_event) = 0;
+ virtual bool DispatchKeyEvent(const ui::KeyEvent& key_event) = 0;
// Resets the context. A client needs to call OnTextInputTypeChanged() again
// before calling DispatchKeyEvent().
diff --git a/ui/base/ime/text_input_client.h b/ui/base/ime/text_input_client.h
index 35a6884e14..8623064f3c 100644
--- a/ui/base/ime/text_input_client.h
+++ b/ui/base/ime/text_input_client.h
@@ -43,7 +43,7 @@ class UI_EXPORT TextInputClient {
// Inserts a given text at the insertion point. Current composition text or
// selection will be removed. This method should never be called when the
// current text input type is TEXT_INPUT_TYPE_NONE.
- virtual void InsertText(const string16& text) = 0;
+ virtual void InsertText(const base::string16& text) = 0;
// Inserts a single char at the insertion point. Unlike above InsertText()
// method, this method has an extra |flags| parameter indicating the modifier
@@ -53,7 +53,7 @@ class UI_EXPORT TextInputClient {
// preceding key press event should not be a VKEY_PROCESSKEY.
// This method will be called whenever a char is generated by the keyboard,
// even if the current text input type is TEXT_INPUT_TYPE_NONE.
- virtual void InsertChar(char16 ch, int flags) = 0;
+ virtual void InsertChar(base::char16 ch, int flags) = 0;
// Input context information -------------------------------------------------
@@ -121,8 +121,8 @@ class UI_EXPORT TextInputClient {
// The result will be stored into |*text|.
// Returns false if the operation is not supported or the specified range
// is out of the text range returned by GetTextRange().
- virtual bool GetTextFromRange(
- const gfx::Range& range, string16* text) const = 0;
+ virtual bool GetTextFromRange(const gfx::Range& range,
+ base::string16* text) const = 0;
// Miscellaneous ------------------------------------------------------------
diff --git a/ui/base/l10n/l10n_util.cc b/ui/base/l10n/l10n_util.cc
index 3757d2f3dc..b610e9662d 100644
--- a/ui/base/l10n/l10n_util.cc
+++ b/ui/base/l10n/l10n_util.cc
@@ -253,11 +253,12 @@ bool IsLocaleAvailable(const std::string& locale) {
// means text such as "Google Chrome foo bar..." will be layed out LTR even
// if "foo bar" is RTL. So this function prepends the necessary RLM in such
// cases.
-void AdjustParagraphDirectionality(string16* paragraph) {
+void AdjustParagraphDirectionality(base::string16* paragraph) {
#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
if (base::i18n::IsRTL() &&
base::i18n::StringContainsStrongRTLChars(*paragraph)) {
- paragraph->insert(0, 1, static_cast<char16>(base::i18n::kRightToLeftMark));
+ paragraph->insert(0, 1,
+ static_cast<base::char16>(base::i18n::kRightToLeftMark));
}
#endif
}
@@ -498,7 +499,7 @@ std::string GetApplicationLocale(const std::string& pref_locale) {
bool IsLocaleNameTranslated(const char* locale,
const std::string& display_locale) {
- string16 display_name =
+ base::string16 display_name =
l10n_util::GetDisplayNameForLocale(locale, display_locale, false);
// Because ICU sets the error code to U_USING_DEFAULT_WARNING whether or not
// uloc_getDisplayName returns the actual translation or the default
@@ -509,9 +510,9 @@ bool IsLocaleNameTranslated(const char* locale,
return !IsStringASCII(display_name) || UTF16ToASCII(display_name) != locale;
}
-string16 GetDisplayNameForLocale(const std::string& locale,
- const std::string& display_locale,
- bool is_for_ui) {
+base::string16 GetDisplayNameForLocale(const std::string& locale,
+ const std::string& display_locale,
+ bool is_for_ui) {
std::string locale_code = locale;
// Internally, we use the language code of zh-CN and zh-TW, but we want the
// display names to be Chinese (Simplified) and Chinese (Traditional) instead
@@ -534,7 +535,7 @@ string16 GetDisplayNameForLocale(const std::string& locale,
else if (locale_code == "zh-TW")
locale_code = "zh-Hant";
- string16 display_name;
+ base::string16 display_name;
#if defined(OS_ANDROID)
// Use Java API to get locale display name so that we can remove most of
// the lang data from icu data to reduce binary size, except for zh-Hans and
@@ -562,8 +563,8 @@ string16 GetDisplayNameForLocale(const std::string& locale,
return display_name;
}
-string16 GetDisplayNameForCountry(const std::string& country_code,
- const std::string& display_locale) {
+base::string16 GetDisplayNameForCountry(const std::string& country_code,
+ const std::string& display_locale) {
return GetDisplayNameForLocale("_" + country_code, display_locale, false);
}
@@ -663,23 +664,23 @@ std::string GetStringUTF8(int message_id) {
return UTF16ToUTF8(GetStringUTF16(message_id));
}
-string16 GetStringUTF16(int message_id) {
+base::string16 GetStringUTF16(int message_id) {
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- string16 str = rb.GetLocalizedString(message_id);
+ base::string16 str = rb.GetLocalizedString(message_id);
AdjustParagraphDirectionality(&str);
return str;
}
-string16 GetStringFUTF16(int message_id,
- const std::vector<string16>& replacements,
- std::vector<size_t>* offsets) {
+base::string16 GetStringFUTF16(int message_id,
+ const std::vector<base::string16>& replacements,
+ std::vector<size_t>* offsets) {
// TODO(tc): We could save a string copy if we got the raw string as
// a StringPiece and were able to call ReplaceStringPlaceholders with
- // a StringPiece format string and string16 substitution strings. In
+ // a StringPiece format string and base::string16 substitution strings. In
// practice, the strings should be relatively short.
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- const string16& format_string = rb.GetLocalizedString(message_id);
+ const base::string16& format_string = rb.GetLocalizedString(message_id);
#ifndef NDEBUG
// Make sure every replacement string is being used, so we don't just
@@ -709,69 +710,69 @@ string16 GetStringFUTF16(int message_id,
}
#endif
- string16 formatted = ReplaceStringPlaceholders(format_string, replacements,
- offsets);
+ base::string16 formatted = ReplaceStringPlaceholders(
+ format_string, replacements, offsets);
AdjustParagraphDirectionality(&formatted);
return formatted;
}
std::string GetStringFUTF8(int message_id,
- const string16& a) {
+ const base::string16& a) {
return UTF16ToUTF8(GetStringFUTF16(message_id, a));
}
std::string GetStringFUTF8(int message_id,
- const string16& a,
- const string16& b) {
+ const base::string16& a,
+ const base::string16& b) {
return UTF16ToUTF8(GetStringFUTF16(message_id, a, b));
}
std::string GetStringFUTF8(int message_id,
- const string16& a,
- const string16& b,
- const string16& c) {
+ const base::string16& a,
+ const base::string16& b,
+ const base::string16& c) {
return UTF16ToUTF8(GetStringFUTF16(message_id, a, b, c));
}
std::string GetStringFUTF8(int message_id,
- const string16& a,
- const string16& b,
- const string16& c,
- const string16& d) {
+ const base::string16& a,
+ const base::string16& b,
+ const base::string16& c,
+ const base::string16& d) {
return UTF16ToUTF8(GetStringFUTF16(message_id, a, b, c, d));
}
-string16 GetStringFUTF16(int message_id,
- const string16& a) {
- std::vector<string16> replacements;
+base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a) {
+ std::vector<base::string16> replacements;
replacements.push_back(a);
return GetStringFUTF16(message_id, replacements, NULL);
}
-string16 GetStringFUTF16(int message_id,
- const string16& a,
- const string16& b) {
+base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a,
+ const base::string16& b) {
return GetStringFUTF16(message_id, a, b, NULL);
}
-string16 GetStringFUTF16(int message_id,
- const string16& a,
- const string16& b,
- const string16& c) {
- std::vector<string16> replacements;
+base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a,
+ const base::string16& b,
+ const base::string16& c) {
+ std::vector<base::string16> replacements;
replacements.push_back(a);
replacements.push_back(b);
replacements.push_back(c);
return GetStringFUTF16(message_id, replacements, NULL);
}
-string16 GetStringFUTF16(int message_id,
- const string16& a,
- const string16& b,
- const string16& c,
- const string16& d) {
- std::vector<string16> replacements;
+base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a,
+ const base::string16& b,
+ const base::string16& c,
+ const base::string16& d) {
+ std::vector<base::string16> replacements;
replacements.push_back(a);
replacements.push_back(b);
replacements.push_back(c);
@@ -779,13 +780,13 @@ string16 GetStringFUTF16(int message_id,
return GetStringFUTF16(message_id, replacements, NULL);
}
-string16 GetStringFUTF16(int message_id,
- const string16& a,
- const string16& b,
- const string16& c,
- const string16& d,
- const string16& e) {
- std::vector<string16> replacements;
+base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a,
+ const base::string16& b,
+ const base::string16& c,
+ const base::string16& d,
+ const base::string16& e) {
+ std::vector<base::string16> replacements;
replacements.push_back(a);
replacements.push_back(b);
replacements.push_back(c);
@@ -794,39 +795,41 @@ string16 GetStringFUTF16(int message_id,
return GetStringFUTF16(message_id, replacements, NULL);
}
-string16 GetStringFUTF16(int message_id, const string16& a, size_t* offset) {
+base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a,
+ size_t* offset) {
DCHECK(offset);
std::vector<size_t> offsets;
- std::vector<string16> replacements;
+ std::vector<base::string16> replacements;
replacements.push_back(a);
- string16 result = GetStringFUTF16(message_id, replacements, &offsets);
+ base::string16 result = GetStringFUTF16(message_id, replacements, &offsets);
DCHECK(offsets.size() == 1);
*offset = offsets[0];
return result;
}
-string16 GetStringFUTF16(int message_id,
- const string16& a,
- const string16& b,
- std::vector<size_t>* offsets) {
- std::vector<string16> replacements;
+base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a,
+ const base::string16& b,
+ std::vector<size_t>* offsets) {
+ std::vector<base::string16> replacements;
replacements.push_back(a);
replacements.push_back(b);
return GetStringFUTF16(message_id, replacements, offsets);
}
-string16 GetStringFUTF16Int(int message_id, int a) {
+base::string16 GetStringFUTF16Int(int message_id, int a) {
return GetStringFUTF16(message_id, UTF8ToUTF16(base::IntToString(a)));
}
-string16 GetStringFUTF16Int(int message_id, int64 a) {
+base::string16 GetStringFUTF16Int(int message_id, int64 a) {
return GetStringFUTF16(message_id, UTF8ToUTF16(base::Int64ToString(a)));
}
-// Specialization of operator() method for string16 version.
+// Specialization of operator() method for base::string16 version.
template <>
-bool StringComparator<string16>::operator()(const string16& lhs,
- const string16& rhs) {
+bool StringComparator<base::string16>::operator()(const base::string16& lhs,
+ const base::string16& rhs) {
// If we can not get collator instance for specified locale, just do simple
// string compare.
if (!collator_)
@@ -835,7 +838,7 @@ bool StringComparator<string16>::operator()(const string16& lhs,
UCOL_LESS;
};
-string16 GetPluralStringFUTF16(const std::vector<int>& message_ids,
+base::string16 GetPluralStringFUTF16(const std::vector<int>& message_ids,
int number) {
scoped_ptr<icu::PluralFormat> format = BuildPluralFormat(message_ids);
DCHECK(format);
@@ -844,7 +847,7 @@ string16 GetPluralStringFUTF16(const std::vector<int>& message_ids,
icu::UnicodeString result_files_string = format->format(number, err);
int capacity = result_files_string.length() + 1;
DCHECK_GT(capacity, 1);
- string16 result;
+ base::string16 result;
result_files_string.extract(
static_cast<UChar*>(WriteInto(&result, capacity)), capacity, err);
DCHECK(U_SUCCESS(err));
@@ -857,7 +860,7 @@ std::string GetPluralStringFUTF8(const std::vector<int>& message_ids,
}
void SortStrings16(const std::string& locale,
- std::vector<string16>* strings) {
+ std::vector<base::string16>* strings) {
SortVectorWithStringKey(locale, strings, false);
}
diff --git a/ui/base/l10n/l10n_util.h b/ui/base/l10n/l10n_util.h
index 2207e6d385..2d254fa741 100644
--- a/ui/base/l10n/l10n_util.h
+++ b/ui/base/l10n/l10n_util.h
@@ -55,13 +55,15 @@ bool IsLocaleSupportedByOS(const std::string& locale);
// in the UI thread.
// If |is_for_ui| is true, U+200F is appended so that it can be
// rendered properly in a RTL Chrome.
-UI_EXPORT string16 GetDisplayNameForLocale(const std::string& locale,
- const std::string& display_locale,
- bool is_for_ui);
+UI_EXPORT base::string16 GetDisplayNameForLocale(
+ const std::string& locale,
+ const std::string& display_locale,
+ bool is_for_ui);
// Returns the display name of the |country_code| in |display_locale|.
-UI_EXPORT string16 GetDisplayNameForCountry(const std::string& country_code,
- const std::string& display_locale);
+UI_EXPORT base::string16 GetDisplayNameForCountry(
+ const std::string& country_code,
+ const std::string& display_locale);
// Converts all - into _, to be consistent with ICU and file system names.
UI_EXPORT std::string NormalizeLocale(const std::string& locale);
@@ -88,79 +90,81 @@ UI_EXPORT bool IsValidLocaleSyntax(const std::string& locale);
// Pulls resource string from the string bundle and returns it.
UI_EXPORT std::string GetStringUTF8(int message_id);
-UI_EXPORT string16 GetStringUTF16(int message_id);
+UI_EXPORT base::string16 GetStringUTF16(int message_id);
// Get a resource string and replace $i with replacements[i] for all
// i < replacements.size(). Additionally, $$ is replaced by $.
// If non-NULL |offsets| will be replaced with the start points of the replaced
// strings.
-UI_EXPORT string16 GetStringFUTF16(int message_id,
- const std::vector<string16>& replacements,
- std::vector<size_t>* offsets);
+UI_EXPORT base::string16 GetStringFUTF16(
+ int message_id,
+ const std::vector<base::string16>& replacements,
+ std::vector<size_t>* offsets);
// Convenience wrappers for the above.
-UI_EXPORT string16 GetStringFUTF16(int message_id,
- const string16& a);
-UI_EXPORT string16 GetStringFUTF16(int message_id,
- const string16& a,
- const string16& b);
-UI_EXPORT string16 GetStringFUTF16(int message_id,
- const string16& a,
- const string16& b,
- const string16& c);
-UI_EXPORT string16 GetStringFUTF16(int message_id,
- const string16& a,
- const string16& b,
- const string16& c,
- const string16& d);
-UI_EXPORT string16 GetStringFUTF16(int message_id,
- const string16& a,
- const string16& b,
- const string16& c,
- const string16& d,
- const string16& e);
+UI_EXPORT base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a);
+UI_EXPORT base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a,
+ const base::string16& b);
+UI_EXPORT base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a,
+ const base::string16& b,
+ const base::string16& c);
+UI_EXPORT base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a,
+ const base::string16& b,
+ const base::string16& c,
+ const base::string16& d);
+UI_EXPORT base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a,
+ const base::string16& b,
+ const base::string16& c,
+ const base::string16& d,
+ const base::string16& e);
UI_EXPORT std::string GetStringFUTF8(int message_id,
- const string16& a);
+ const base::string16& a);
UI_EXPORT std::string GetStringFUTF8(int message_id,
- const string16& a,
- const string16& b);
+ const base::string16& a,
+ const base::string16& b);
UI_EXPORT std::string GetStringFUTF8(int message_id,
- const string16& a,
- const string16& b,
- const string16& c);
+ const base::string16& a,
+ const base::string16& b,
+ const base::string16& c);
UI_EXPORT std::string GetStringFUTF8(int message_id,
- const string16& a,
- const string16& b,
- const string16& c,
- const string16& d);
+ const base::string16& a,
+ const base::string16& b,
+ const base::string16& c,
+ const base::string16& d);
// Variants that return the offset(s) of the replaced parameters. The
// vector based version returns offsets ordered by parameter. For example if
// invoked with a and b offsets[0] gives the offset for a and offsets[1] the
// offset of b regardless of where the parameters end up in the string.
-UI_EXPORT string16 GetStringFUTF16(int message_id,
- const string16& a,
- size_t* offset);
-UI_EXPORT string16 GetStringFUTF16(int message_id,
- const string16& a,
- const string16& b,
- std::vector<size_t>* offsets);
+UI_EXPORT base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a,
+ size_t* offset);
+UI_EXPORT base::string16 GetStringFUTF16(int message_id,
+ const base::string16& a,
+ const base::string16& b,
+ std::vector<size_t>* offsets);
// Convenience functions to get a string with a single number as a parameter.
-UI_EXPORT string16 GetStringFUTF16Int(int message_id, int a);
-string16 GetStringFUTF16Int(int message_id, int64 a);
+UI_EXPORT base::string16 GetStringFUTF16Int(int message_id, int a);
+base::string16 GetStringFUTF16Int(int message_id, int64 a);
// Get a resource string using |number| to decide which of |message_ids| should
// be used. |message_ids| must be size 6 and in order: default, singular, zero,
// two, few, many.
-UI_EXPORT string16 GetPluralStringFUTF16(const std::vector<int>& message_ids,
- int number);
+UI_EXPORT base::string16 GetPluralStringFUTF16(
+ const std::vector<int>& message_ids,
+ int number);
UI_EXPORT std::string GetPluralStringFUTF8(const std::vector<int>& message_ids,
int number);
-// In place sorting of string16 strings using collation rules for |locale|.
+// In place sorting of base::string16 strings using collation rules for |locale|.
UI_EXPORT void SortStrings16(const std::string& locale,
- std::vector<string16>* strings);
+ std::vector<base::string16>* strings);
// Returns a vector of available locale codes. E.g., a vector containing
// en-US, es, fr, fi, pt-PT, pt-BR, etc.
diff --git a/ui/base/l10n/l10n_util_collator.h b/ui/base/l10n/l10n_util_collator.h
index b91b804fc3..a0bfb92ebb 100644
--- a/ui/base/l10n/l10n_util_collator.h
+++ b/ui/base/l10n/l10n_util_collator.h
@@ -21,8 +21,8 @@ namespace l10n_util {
// operator (), comparing the string results using a collator.
template <class T, class Method>
class StringMethodComparatorWithCollator
- : public std::binary_function<const string16&,
- const string16&,
+ : public std::binary_function<const base::string16&,
+ const base::string16&,
bool> {
public:
StringMethodComparatorWithCollator(icu::Collator* collator, Method method)
@@ -43,9 +43,10 @@ class StringMethodComparatorWithCollator
// Used by SortStringsUsingMethod. Invokes a method on the objects passed to
// operator (), comparing the string results using <.
template <class T, class Method>
-class StringMethodComparator : public std::binary_function<const string16&,
- const string16&,
- bool> {
+class StringMethodComparator
+ : public std::binary_function<const base::string16&,
+ const base::string16&,
+ bool> {
public:
explicit StringMethodComparator(Method method) : method_(method) { }
@@ -93,10 +94,10 @@ class StringComparator : public std::binary_function<const Element&,
// Returns true if lhs precedes rhs.
bool operator()(const Element& lhs, const Element& rhs) {
- const string16& lhs_string_key = lhs.GetStringKey();
- const string16& rhs_string_key = rhs.GetStringKey();
+ const base::string16& lhs_string_key = lhs.GetStringKey();
+ const base::string16& rhs_string_key = rhs.GetStringKey();
- return StringComparator<string16>(collator_)(lhs_string_key,
+ return StringComparator<base::string16>(collator_)(lhs_string_key,
rhs_string_key);
}
@@ -106,8 +107,8 @@ class StringComparator : public std::binary_function<const Element&,
// Specialization of operator() method for string16 version.
template <> UI_EXPORT
-bool StringComparator<string16>::operator()(const string16& lhs,
- const string16& rhs);
+bool StringComparator<base::string16>::operator()(const base::string16& lhs,
+ const base::string16& rhs);
// In place sorting of |elements| of a vector according to the string key of
// each element in the vector by using collation rules for |locale|.
diff --git a/ui/base/l10n/time_format.cc b/ui/base/l10n/time_format.cc
index aaa35a9969..f3b16a3f96 100644
--- a/ui/base/l10n/time_format.cc
+++ b/ui/base/l10n/time_format.cc
@@ -281,10 +281,10 @@ icu::PluralFormat* TimeFormatter::createFallbackFormat(
return format;
}
-string16 FormatTimeImpl(const TimeDelta& delta, FormatType format_type) {
+base::string16 FormatTimeImpl(const TimeDelta& delta, FormatType format_type) {
if (delta.ToInternalValue() < 0) {
NOTREACHED() << "Negative duration";
- return string16();
+ return base::string16();
}
int number;
@@ -323,7 +323,7 @@ string16 FormatTimeImpl(const TimeDelta& delta, FormatType format_type) {
DCHECK(U_SUCCESS(error));
int capacity = time_string.length() + 1;
DCHECK_GT(capacity, 1);
- string16 result;
+ base::string16 result;
time_string.extract(static_cast<UChar*>(WriteInto(&result, capacity)),
capacity, error);
DCHECK(U_SUCCESS(error));
@@ -335,32 +335,32 @@ string16 FormatTimeImpl(const TimeDelta& delta, FormatType format_type) {
namespace ui {
// static
-string16 TimeFormat::TimeElapsed(const TimeDelta& delta) {
+base::string16 TimeFormat::TimeElapsed(const TimeDelta& delta) {
return FormatTimeImpl(delta, FORMAT_ELAPSED);
}
// static
-string16 TimeFormat::TimeRemaining(const TimeDelta& delta) {
+base::string16 TimeFormat::TimeRemaining(const TimeDelta& delta) {
return FormatTimeImpl(delta, FORMAT_REMAINING);
}
// static
-string16 TimeFormat::TimeRemainingLong(const TimeDelta& delta) {
+base::string16 TimeFormat::TimeRemainingLong(const TimeDelta& delta) {
return FormatTimeImpl(delta, FORMAT_REMAINING_LONG);
}
// static
-string16 TimeFormat::TimeRemainingShort(const TimeDelta& delta) {
+base::string16 TimeFormat::TimeRemainingShort(const TimeDelta& delta) {
return FormatTimeImpl(delta, FORMAT_SHORT);
}
// static
-string16 TimeFormat::TimeDurationLong(const TimeDelta& delta) {
+base::string16 TimeFormat::TimeDurationLong(const TimeDelta& delta) {
return FormatTimeImpl(delta, FORMAT_DURATION_LONG);
}
// static
-string16 TimeFormat::RelativeDate(
+base::string16 TimeFormat::RelativeDate(
const Time& time,
const Time* optional_midnight_today) {
Time midnight_today = optional_midnight_today ? *optional_midnight_today :
@@ -369,12 +369,12 @@ string16 TimeFormat::RelativeDate(
Time tomorrow = midnight_today + day;
Time yesterday = midnight_today - day;
if (time >= tomorrow)
- return string16();
+ return base::string16();
else if (time >= midnight_today)
return l10n_util::GetStringUTF16(IDS_PAST_TIME_TODAY);
else if (time >= yesterday)
return l10n_util::GetStringUTF16(IDS_PAST_TIME_YESTERDAY);
- return string16();
+ return base::string16();
}
} // namespace ui
diff --git a/ui/base/l10n/time_format.h b/ui/base/l10n/time_format.h
index 075b6989ce..0b3a1be353 100644
--- a/ui/base/l10n/time_format.h
+++ b/ui/base/l10n/time_format.h
@@ -25,21 +25,21 @@ class UI_EXPORT TimeFormat {
// in-progress operations and users have different expectations of units.
// Returns times in elapsed-format: "3 mins ago", "2 days ago".
- static string16 TimeElapsed(const base::TimeDelta& delta);
+ static base::string16 TimeElapsed(const base::TimeDelta& delta);
// Returns times in remaining-format: "3 mins left", "2 days left".
- static string16 TimeRemaining(const base::TimeDelta& delta);
+ static base::string16 TimeRemaining(const base::TimeDelta& delta);
// Returns times in remaining-long-format: "3 minutes left", "2 days left".
// Currently, this only affects the minutes in long format, the rest
// of the time units are formatted the same as TimeRemaining does.
- static string16 TimeRemainingLong(const base::TimeDelta& delta);
+ static base::string16 TimeRemainingLong(const base::TimeDelta& delta);
// Returns times in short-format: "3 mins", "2 days".
- static string16 TimeRemainingShort(const base::TimeDelta& delta);
+ static base::string16 TimeRemainingShort(const base::TimeDelta& delta);
// Return times in long-format: "2 hours", "25 minutes".
- static string16 TimeDurationLong(const base::TimeDelta& delta);
+ static base::string16 TimeDurationLong(const base::TimeDelta& delta);
// For displaying a relative time in the past. This method returns either
// "Today", "Yesterday", or an empty string if it's older than that. Returns
@@ -55,8 +55,8 @@ class UI_EXPORT TimeFormat {
// If NULL, the current day's midnight will be retrieved, which can be
// slow. If many items are being processed, it is best to get the current
// time once at the beginning and pass it for each computation.
- static string16 RelativeDate(const base::Time& time,
- const base::Time* optional_midnight_today);
+ static base::string16 RelativeDate(const base::Time& time,
+ const base::Time* optional_midnight_today);
private:
DISALLOW_IMPLICIT_CONSTRUCTORS(TimeFormat);
diff --git a/ui/base/layout.cc b/ui/base/layout.cc
index 1e7e406d46..2c1fb51a39 100644
--- a/ui/base/layout.cc
+++ b/ui/base/layout.cc
@@ -61,7 +61,7 @@ bool UseTouchOptimizedUI() {
#endif // defined(OS_WIN)
const float kScaleFactorScales[] = {1.0f, 1.0f, 1.25f, 1.33f, 1.4f, 1.5f, 1.8f,
- 2.0f};
+ 2.0f, 3.0f};
COMPILE_ASSERT(NUM_SCALE_FACTORS == arraysize(kScaleFactorScales),
kScaleFactorScales_incorrect_size);
diff --git a/ui/base/layout.h b/ui/base/layout.h
index 50b0e50cab..6179a84f72 100644
--- a/ui/base/layout.h
+++ b/ui/base/layout.h
@@ -42,6 +42,7 @@ enum ScaleFactor {
SCALE_FACTOR_150P,
SCALE_FACTOR_180P,
SCALE_FACTOR_200P,
+ SCALE_FACTOR_300P,
NUM_SCALE_FACTORS // This always appears last.
};
diff --git a/ui/base/layout_unittest.cc b/ui/base/layout_unittest.cc
index 8ac2e2d838..b082beab72 100644
--- a/ui/base/layout_unittest.cc
+++ b/ui/base/layout_unittest.cc
@@ -21,6 +21,7 @@ TEST(LayoutTest, GetScaleFactorScale) {
EXPECT_FLOAT_EQ(1.5f, GetImageScale(SCALE_FACTOR_150P));
EXPECT_FLOAT_EQ(1.8f, GetImageScale(SCALE_FACTOR_180P));
EXPECT_FLOAT_EQ(2.0f, GetImageScale(SCALE_FACTOR_200P));
+ EXPECT_FLOAT_EQ(3.0f, GetImageScale(SCALE_FACTOR_300P));
}
TEST(LayoutTest, GetScaleFactorFromScalePartlySupported) {
@@ -60,7 +61,9 @@ TEST(LayoutTest, GetScaleFactorFromScaleAllSupported) {
EXPECT_EQ(SCALE_FACTOR_200P, GetSupportedScaleFactor(1.91f));
EXPECT_EQ(SCALE_FACTOR_200P, GetSupportedScaleFactor(2.0f));
EXPECT_EQ(SCALE_FACTOR_200P, GetSupportedScaleFactor(2.1f));
- EXPECT_EQ(SCALE_FACTOR_200P, GetSupportedScaleFactor(999.0f));
+ EXPECT_EQ(SCALE_FACTOR_300P, GetSupportedScaleFactor(3.0f));
+ EXPECT_EQ(SCALE_FACTOR_300P, GetSupportedScaleFactor(3.1f));
+ EXPECT_EQ(SCALE_FACTOR_300P, GetSupportedScaleFactor(999.0f));
}
} // namespace ui
diff --git a/ui/base/resource/data_pack.cc b/ui/base/resource/data_pack.cc
index 54694d9129..8f8f182244 100644
--- a/ui/base/resource/data_pack.cc
+++ b/ui/base/resource/data_pack.cc
@@ -216,13 +216,13 @@ ui::ScaleFactor DataPack::GetScaleFactor() const {
bool DataPack::WritePack(const base::FilePath& path,
const std::map<uint16, base::StringPiece>& resources,
TextEncodingType textEncodingType) {
- FILE* file = file_util::OpenFile(path, "wb");
+ FILE* file = base::OpenFile(path, "wb");
if (!file)
return false;
if (fwrite(&kFileFormatVersion, sizeof(kFileFormatVersion), 1, file) != 1) {
LOG(ERROR) << "Failed to write file version";
- file_util::CloseFile(file);
+ base::CloseFile(file);
return false;
}
@@ -231,7 +231,7 @@ bool DataPack::WritePack(const base::FilePath& path,
uint32 entry_count = resources.size();
if (fwrite(&entry_count, sizeof(entry_count), 1, file) != 1) {
LOG(ERROR) << "Failed to write entry count";
- file_util::CloseFile(file);
+ base::CloseFile(file);
return false;
}
@@ -239,14 +239,14 @@ bool DataPack::WritePack(const base::FilePath& path,
textEncodingType != BINARY) {
LOG(ERROR) << "Invalid text encoding type, got " << textEncodingType
<< ", expected between " << BINARY << " and " << UTF16;
- file_util::CloseFile(file);
+ base::CloseFile(file);
return false;
}
uint8 write_buffer = textEncodingType;
if (fwrite(&write_buffer, sizeof(uint8), 1, file) != 1) {
LOG(ERROR) << "Failed to write file text resources encoding";
- file_util::CloseFile(file);
+ base::CloseFile(file);
return false;
}
@@ -260,13 +260,13 @@ bool DataPack::WritePack(const base::FilePath& path,
uint16 resource_id = it->first;
if (fwrite(&resource_id, sizeof(resource_id), 1, file) != 1) {
LOG(ERROR) << "Failed to write id for " << resource_id;
- file_util::CloseFile(file);
+ base::CloseFile(file);
return false;
}
if (fwrite(&data_offset, sizeof(data_offset), 1, file) != 1) {
LOG(ERROR) << "Failed to write offset for " << resource_id;
- file_util::CloseFile(file);
+ base::CloseFile(file);
return false;
}
@@ -278,13 +278,13 @@ bool DataPack::WritePack(const base::FilePath& path,
uint16 resource_id = 0;
if (fwrite(&resource_id, sizeof(resource_id), 1, file) != 1) {
LOG(ERROR) << "Failed to write extra resource id.";
- file_util::CloseFile(file);
+ base::CloseFile(file);
return false;
}
if (fwrite(&data_offset, sizeof(data_offset), 1, file) != 1) {
LOG(ERROR) << "Failed to write extra offset.";
- file_util::CloseFile(file);
+ base::CloseFile(file);
return false;
}
@@ -293,12 +293,12 @@ bool DataPack::WritePack(const base::FilePath& path,
it != resources.end(); ++it) {
if (fwrite(it->second.data(), it->second.length(), 1, file) != 1) {
LOG(ERROR) << "Failed to write data for " << it->first;
- file_util::CloseFile(file);
+ base::CloseFile(file);
return false;
}
}
- file_util::CloseFile(file);
+ base::CloseFile(file);
return true;
}
diff --git a/ui/base/resource/resource_bundle.cc b/ui/base/resource/resource_bundle.cc
index 8b622ccd46..b5f8f6138d 100644
--- a/ui/base/resource/resource_bundle.cc
+++ b/ui/base/resource/resource_bundle.cc
@@ -442,8 +442,8 @@ base::StringPiece ResourceBundle::GetRawDataResourceForScale(
return base::StringPiece();
}
-string16 ResourceBundle::GetLocalizedString(int message_id) {
- string16 string;
+base::string16 ResourceBundle::GetLocalizedString(int message_id) {
+ base::string16 string;
if (delegate_ && delegate_->GetLocalizedString(message_id, &string))
return string;
@@ -455,7 +455,7 @@ string16 ResourceBundle::GetLocalizedString(int message_id) {
// string (better than crashing).
if (!locale_resources_data_.get()) {
LOG(WARNING) << "locale resources are not loaded";
- return string16();
+ return base::string16();
}
base::StringPiece data;
@@ -465,7 +465,7 @@ string16 ResourceBundle::GetLocalizedString(int message_id) {
data = GetRawDataResource(message_id);
if (data.empty()) {
NOTREACHED() << "unable to find resource: " << message_id;
- return string16();
+ return base::string16();
}
}
@@ -476,10 +476,10 @@ string16 ResourceBundle::GetLocalizedString(int message_id) {
<< "requested localized string from binary pack file";
// Data pack encodes strings as either UTF8 or UTF16.
- string16 msg;
+ base::string16 msg;
if (encoding == ResourceHandle::UTF16) {
- msg = string16(reinterpret_cast<const char16*>(data.data()),
- data.length() / 2);
+ msg = base::string16(reinterpret_cast<const base::char16*>(data.data()),
+ data.length() / 2);
} else if (encoding == ResourceHandle::UTF8) {
msg = UTF8ToUTF16(data);
}
diff --git a/ui/base/resource/resource_bundle.h b/ui/base/resource/resource_bundle.h
index bea12c19a2..272c5b3341 100644
--- a/ui/base/resource/resource_bundle.h
+++ b/ui/base/resource/resource_bundle.h
@@ -105,7 +105,7 @@ class UI_EXPORT ResourceBundle {
// Retrieve a localized string. Return true if a string was provided or
// false to attempt retrieval of the default string.
- virtual bool GetLocalizedString(int message_id, string16* value) = 0;
+ virtual bool GetLocalizedString(int message_id, base::string16* value) = 0;
// Returns a font or NULL to attempt retrieval of the default resource.
virtual scoped_ptr<gfx::Font> GetFont(FontStyle style) = 0;
@@ -230,7 +230,7 @@ class UI_EXPORT ResourceBundle {
// Get a localized string given a message id. Returns an empty
// string if the message_id is not found.
- string16 GetLocalizedString(int message_id);
+ base::string16 GetLocalizedString(int message_id);
// Returns the font list for the specified style.
const gfx::FontList& GetFontList(FontStyle style);
diff --git a/ui/base/strings/ui_strings.grd b/ui/base/strings/ui_strings.grd
index 0875f739b5..89af18972c 100644
--- a/ui/base/strings/ui_strings.grd
+++ b/ui/base/strings/ui_strings.grd
@@ -1604,7 +1604,10 @@ need to be translated for each locale.-->
</message>
<message name="IDS_APP_LIST_FOLDER_NAME_PLACEHOLDER" desc="The placeholder text for app list folder name.">
Unnamed Folder
- </message>
+ </message>
+ <message name="IDS_APP_LIST_SPEECH_HINT_TEXT" desc="The text label in the speech recognition UI to ask the user to speak the search query">
+ Speak now
+ </message>
</messages>
</release>
</grit>
diff --git a/ui/base/strings/ui_strings.target.darwin-arm.mk b/ui/base/strings/ui_strings.target.darwin-arm.mk
index b96d94d3f3..d2251b9b8c 100644
--- a/ui/base/strings/ui_strings.target.darwin-arm.mk
+++ b/ui/base/strings/ui_strings.target.darwin-arm.mk
@@ -20,7 +20,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: gyp_shared_inter
$(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/ui_strings.grd $(LOCAL_PATH)/ui/base/strings/ui_strings_am.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ar.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bg.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ca.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_cs.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_da.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_de.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_el.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_et.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fa.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fil.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_gu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_id.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_it.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_iw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ja.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_kn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ko.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lt.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ml.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_mr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ms.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_nl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_no.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ro.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ru.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ta.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_te.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_th.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_tr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_uk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_vi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_strings.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_am.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ;
$(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_ar.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ;
@@ -84,7 +84,7 @@ $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/app_locale_settings.grd $(LOCAL_PATH)/ui/base/strings/app_locale_settings_am.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ar.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bg.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ca.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_cs.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_da.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_de.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_el.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_et.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fa.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fil.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_gu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_he.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_id.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_it.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ja.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_kn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ko.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lt.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ml.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_mr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ms.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nb.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ro.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ru.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sw.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ta.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_te.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_th.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_tr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_uk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_vi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from app_locale_settings.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_am.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ;
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_ar.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ;
diff --git a/ui/base/strings/ui_strings.target.darwin-mips.mk b/ui/base/strings/ui_strings.target.darwin-mips.mk
index b96d94d3f3..d2251b9b8c 100644
--- a/ui/base/strings/ui_strings.target.darwin-mips.mk
+++ b/ui/base/strings/ui_strings.target.darwin-mips.mk
@@ -20,7 +20,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: gyp_shared_inter
$(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/ui_strings.grd $(LOCAL_PATH)/ui/base/strings/ui_strings_am.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ar.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bg.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ca.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_cs.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_da.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_de.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_el.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_et.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fa.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fil.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_gu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_id.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_it.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_iw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ja.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_kn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ko.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lt.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ml.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_mr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ms.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_nl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_no.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ro.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ru.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ta.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_te.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_th.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_tr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_uk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_vi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_strings.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_am.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ;
$(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_ar.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ;
@@ -84,7 +84,7 @@ $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/app_locale_settings.grd $(LOCAL_PATH)/ui/base/strings/app_locale_settings_am.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ar.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bg.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ca.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_cs.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_da.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_de.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_el.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_et.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fa.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fil.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_gu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_he.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_id.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_it.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ja.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_kn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ko.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lt.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ml.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_mr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ms.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nb.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ro.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ru.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sw.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ta.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_te.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_th.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_tr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_uk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_vi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from app_locale_settings.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_am.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ;
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_ar.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ;
diff --git a/ui/base/strings/ui_strings.target.darwin-x86.mk b/ui/base/strings/ui_strings.target.darwin-x86.mk
index b96d94d3f3..93a301977d 100644
--- a/ui/base/strings/ui_strings.target.darwin-x86.mk
+++ b/ui/base/strings/ui_strings.target.darwin-x86.mk
@@ -20,7 +20,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: gyp_shared_inter
$(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/ui_strings.grd $(LOCAL_PATH)/ui/base/strings/ui_strings_am.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ar.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bg.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ca.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_cs.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_da.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_de.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_el.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_et.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fa.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fil.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_gu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_id.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_it.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_iw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ja.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_kn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ko.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lt.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ml.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_mr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ms.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_nl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_no.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ro.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ru.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ta.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_te.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_th.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_tr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_uk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_vi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_strings.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_am.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ;
$(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_ar.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ;
@@ -84,7 +84,7 @@ $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/app_locale_settings.grd $(LOCAL_PATH)/ui/base/strings/app_locale_settings_am.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ar.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bg.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ca.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_cs.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_da.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_de.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_el.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_et.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fa.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fil.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_gu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_he.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_id.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_it.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ja.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_kn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ko.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lt.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ml.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_mr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ms.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nb.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ro.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ru.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sw.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ta.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_te.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_th.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_tr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_uk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_vi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from app_locale_settings.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_am.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ;
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_ar.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ;
diff --git a/ui/base/strings/ui_strings.target.linux-arm.mk b/ui/base/strings/ui_strings.target.linux-arm.mk
index b96d94d3f3..d2251b9b8c 100644
--- a/ui/base/strings/ui_strings.target.linux-arm.mk
+++ b/ui/base/strings/ui_strings.target.linux-arm.mk
@@ -20,7 +20,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: gyp_shared_inter
$(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/ui_strings.grd $(LOCAL_PATH)/ui/base/strings/ui_strings_am.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ar.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bg.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ca.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_cs.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_da.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_de.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_el.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_et.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fa.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fil.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_gu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_id.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_it.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_iw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ja.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_kn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ko.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lt.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ml.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_mr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ms.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_nl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_no.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ro.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ru.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ta.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_te.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_th.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_tr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_uk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_vi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_strings.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_am.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ;
$(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_ar.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ;
@@ -84,7 +84,7 @@ $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/app_locale_settings.grd $(LOCAL_PATH)/ui/base/strings/app_locale_settings_am.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ar.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bg.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ca.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_cs.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_da.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_de.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_el.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_et.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fa.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fil.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_gu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_he.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_id.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_it.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ja.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_kn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ko.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lt.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ml.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_mr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ms.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nb.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ro.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ru.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sw.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ta.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_te.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_th.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_tr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_uk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_vi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from app_locale_settings.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_am.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ;
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_ar.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ;
diff --git a/ui/base/strings/ui_strings.target.linux-mips.mk b/ui/base/strings/ui_strings.target.linux-mips.mk
index b96d94d3f3..d2251b9b8c 100644
--- a/ui/base/strings/ui_strings.target.linux-mips.mk
+++ b/ui/base/strings/ui_strings.target.linux-mips.mk
@@ -20,7 +20,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: gyp_shared_inter
$(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/ui_strings.grd $(LOCAL_PATH)/ui/base/strings/ui_strings_am.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ar.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bg.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ca.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_cs.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_da.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_de.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_el.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_et.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fa.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fil.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_gu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_id.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_it.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_iw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ja.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_kn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ko.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lt.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ml.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_mr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ms.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_nl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_no.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ro.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ru.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ta.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_te.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_th.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_tr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_uk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_vi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_strings.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_am.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ;
$(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_ar.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ;
@@ -84,7 +84,7 @@ $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/app_locale_settings.grd $(LOCAL_PATH)/ui/base/strings/app_locale_settings_am.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ar.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bg.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ca.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_cs.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_da.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_de.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_el.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_et.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fa.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fil.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_gu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_he.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_id.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_it.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ja.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_kn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ko.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lt.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ml.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_mr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ms.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nb.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ro.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ru.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sw.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ta.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_te.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_th.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_tr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_uk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_vi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from app_locale_settings.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_am.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ;
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_ar.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ;
diff --git a/ui/base/strings/ui_strings.target.linux-x86.mk b/ui/base/strings/ui_strings.target.linux-x86.mk
index b96d94d3f3..93a301977d 100644
--- a/ui/base/strings/ui_strings.target.linux-x86.mk
+++ b/ui/base/strings/ui_strings.target.linux-x86.mk
@@ -20,7 +20,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: gyp_shared_inter
$(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/ui_strings.grd $(LOCAL_PATH)/ui/base/strings/ui_strings_am.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ar.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bg.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_bn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ca.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_cs.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_da.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_de.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_el.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_es.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_et.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fa.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fil.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_fr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_gu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_hu.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_id.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_it.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_iw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ja.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_kn.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ko.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lt.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_lv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ml.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_mr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ms.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_nl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_no.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ro.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ru.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sl.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sv.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_sw.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_ta.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_te.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_th.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_tr.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_uk.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_vi.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/ui_strings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_strings.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_strings $(gyp_shared_intermediate_dir)/ui/ui_strings/grit; python ../../../tools/grit/grit.py -i ui_strings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_strings" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_am.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ;
$(gyp_shared_intermediate_dir)/ui/ui_strings/ui_strings_ar.pak: $(gyp_shared_intermediate_dir)/ui/ui_strings/grit/ui_strings.h ;
@@ -84,7 +84,7 @@ $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/base/strings/app_locale_settings.grd $(LOCAL_PATH)/ui/base/strings/app_locale_settings_am.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ar.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bg.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_bn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ca.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_cs.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_da.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_de.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_el.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_en-GB.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es-419.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_es.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_et.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fa.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fil.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_fr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_gu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_he.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_hu.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_id.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_it.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ja.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_kn.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ko.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lt.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_lv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ml.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_mr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ms.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nb.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_nl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-BR.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_pt-PT.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ro.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ru.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sl.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sv.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_sw.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_ta.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_te.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_th.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_tr.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_uk.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_vi.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-CN.xtb $(LOCAL_PATH)/ui/base/strings/app_locale_settings_zh-TW.xtb $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from app_locale_settings.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/base/strings; mkdir -p $(gyp_shared_intermediate_dir)/ui/app_locale_settings $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit; python ../../../tools/grit/grit.py -i app_locale_settings.grd build -f ../../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/app_locale_settings" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_am.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ;
$(gyp_shared_intermediate_dir)/ui/app_locale_settings/app_locale_settings_ar.pak: $(gyp_shared_intermediate_dir)/ui/app_locale_settings/grit/app_locale_settings.h ;
diff --git a/ui/base/text/bytes_formatting.cc b/ui/base/text/bytes_formatting.cc
index db3537287f..02bf55c8b9 100644
--- a/ui/base/text/bytes_formatting.cc
+++ b/ui/base/text/bytes_formatting.cc
@@ -34,14 +34,14 @@ const int kSpeedStrings[] = {
IDS_APP_PEBIBYTES_PER_SECOND
};
-string16 FormatBytesInternal(int64 bytes,
- DataUnits units,
- bool show_units,
- const int* const suffix) {
+base::string16 FormatBytesInternal(int64 bytes,
+ DataUnits units,
+ bool show_units,
+ const int* const suffix) {
DCHECK(units >= DATA_UNITS_BYTE && units <= DATA_UNITS_PEBIBYTE);
if (bytes < 0) {
NOTREACHED() << "Negative bytes value";
- return string16();
+ return base::string16();
}
// Put the quantity in the right units.
@@ -53,7 +53,7 @@ string16 FormatBytesInternal(int64 bytes,
if (bytes != 0 && units != DATA_UNITS_BYTE && unit_amount < 100)
fractional_digits = 1;
- string16 result = base::FormatDouble(unit_amount, fractional_digits);
+ base::string16 result = base::FormatDouble(unit_amount, fractional_digits);
if (show_units)
result = l10n_util::GetStringFUTF16(suffix[units], result);
@@ -91,19 +91,23 @@ DataUnits GetByteDisplayUnits(int64 bytes) {
return DataUnits(unit_index);
}
-string16 FormatBytesWithUnits(int64 bytes, DataUnits units, bool show_units) {
+base::string16 FormatBytesWithUnits(int64 bytes,
+ DataUnits units,
+ bool show_units) {
return FormatBytesInternal(bytes, units, show_units, kByteStrings);
}
-string16 FormatSpeedWithUnits(int64 bytes, DataUnits units, bool show_units) {
+base::string16 FormatSpeedWithUnits(int64 bytes,
+ DataUnits units,
+ bool show_units) {
return FormatBytesInternal(bytes, units, show_units, kSpeedStrings);
}
-string16 FormatBytes(int64 bytes) {
+base::string16 FormatBytes(int64 bytes) {
return FormatBytesWithUnits(bytes, GetByteDisplayUnits(bytes), true);
}
-string16 FormatSpeed(int64 bytes) {
+base::string16 FormatSpeed(int64 bytes) {
return FormatSpeedWithUnits(bytes, GetByteDisplayUnits(bytes), true);
}
diff --git a/ui/base/text/bytes_formatting.h b/ui/base/text/bytes_formatting.h
index 2b0f517e5a..0e81818338 100644
--- a/ui/base/text/bytes_formatting.h
+++ b/ui/base/text/bytes_formatting.h
@@ -16,12 +16,12 @@ namespace ui {
// Simple call to return a byte quantity as a string in human-readable format.
// Ex: FormatBytes(512) => "512 B"
// Ex: FormatBytes(101479) => "99.1 kB"
-UI_EXPORT string16 FormatBytes(int64 bytes);
+UI_EXPORT base::string16 FormatBytes(int64 bytes);
// Simple call to return a speed as a string in human-readable format.
// Ex: FormatSpeed(512) => "512 B/s"
// Ex: FormatSpeed(101479) => "99.1 kB/s"
-UI_EXPORT string16 FormatSpeed(int64 bytes);
+UI_EXPORT base::string16 FormatSpeed(int64 bytes);
// Less-Simple API -------------------------------------------------------------
@@ -43,13 +43,16 @@ UI_EXPORT DataUnits GetByteDisplayUnits(int64 bytes);
// unit suffix. Specify in the |units| argument the units to be used.
// Ex: FormatBytes(512, DATA_UNITS_KIBIBYTE, true) => "0.5 kB"
// Ex: FormatBytes(10*1024, DATA_UNITS_MEBIBYTE, false) => "0.1"
-UI_EXPORT string16 FormatBytesWithUnits(int64 bytes, DataUnits units,
- bool show_units);
+UI_EXPORT base::string16 FormatBytesWithUnits(int64 bytes,
+ DataUnits units,
+ bool show_units);
// As above, but with "/s" units for speed values.
// Ex: FormatSpeed(512, DATA_UNITS_KIBIBYTE, true) => "0.5 kB/s"
// Ex: FormatSpeed(10*1024, DATA_UNITS_MEBIBYTE, false) => "0.1"
-string16 FormatSpeedWithUnits(int64 bytes, DataUnits units, bool show_units);
+base::string16 FormatSpeedWithUnits(int64 bytes,
+ DataUnits units,
+ bool show_units);
} // namespace ui
diff --git a/ui/base/ui_base_paths.cc b/ui/base/ui_base_paths.cc
index ae1f3fff26..ee7566ef43 100644
--- a/ui/base/ui_base_paths.cc
+++ b/ui/base/ui_base_paths.cc
@@ -63,7 +63,7 @@ bool PathProvider(int key, base::FilePath* result) {
}
if (create_dir && !base::PathExists(cur) &&
- !file_util::CreateDirectory(cur))
+ !base::CreateDirectory(cur))
return false;
*result = cur;
diff --git a/ui/base/x/root_window_property_watcher_x.h b/ui/base/x/root_window_property_watcher_x.h
index 2d542d687e..76090162f7 100644
--- a/ui/base/x/root_window_property_watcher_x.h
+++ b/ui/base/x/root_window_property_watcher_x.h
@@ -9,12 +9,10 @@
#include "base/basictypes.h"
#include "ui/base/gtk/gtk_signal.h"
-#include "ui/base/ui_export.h"
template <typename T> struct DefaultSingletonTraits;
namespace ui {
-
namespace internal {
// This class keeps track of changes to properties on the root window. This is
@@ -38,7 +36,6 @@ class RootWindowPropertyWatcherX {
};
} // namespace internal
-
} // namespace ui
#endif // UI_BASE_X_ROOT_WINDOW_PROPERTY_WATCHER_X_H_
diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc
index 6650e31fba..dfecc6cd8a 100644
--- a/ui/base/x/x11_util.cc
+++ b/ui/base/x/x11_util.cc
@@ -444,7 +444,7 @@ int CoalescePendingMotionEvents(const XEvent* xev,
XDisplay* display = xev->xany.display;
int event_type = xev->xgeneric.evtype;
- DCHECK_EQ(event_type, XI_Motion);
+ DCHECK(event_type == XI_Motion || event_type == XI_TouchUpdate);
while (XPending(display)) {
XEvent next_event;
@@ -474,6 +474,7 @@ int CoalescePendingMotionEvents(const XEvent* xev,
// and that no buttons or modifiers have changed.
if (xievent->event == next_xievent->event &&
xievent->child == next_xievent->child &&
+ xievent->detail == next_xievent->detail &&
xievent->buttons.mask_len == next_xievent->buttons.mask_len &&
(memcmp(xievent->buttons.mask,
next_xievent->buttons.mask,
@@ -498,7 +499,7 @@ int CoalescePendingMotionEvents(const XEvent* xev,
break;
}
- if (num_coalesced > 0) {
+ if (event_type == XI_Motion && num_coalesced > 0) {
base::TimeDelta delta = ui::EventTimeFromNative(last_event) -
ui::EventTimeFromNative(const_cast<XEvent*>(xev));
UMA_HISTOGRAM_COUNTS_10000("Event.CoalescedCount.Mouse", num_coalesced);
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index b4ad3ef98a..76e09c4566 100644
--- a/ui/compositor/compositor.cc
+++ b/ui/compositor/compositor.cc
@@ -12,11 +12,13 @@
#include "base/debug/trace_event.h"
#include "base/memory/singleton.h"
#include "base/message_loop/message_loop.h"
+#include "base/metrics/histogram.h"
#include "base/run_loop.h"
#include "base/strings/string_util.h"
#include "base/sys_info.h"
#include "base/threading/thread.h"
#include "base/threading/thread_restrictions.h"
+#include "cc/base/latency_info_swap_promise.h"
#include "cc/base/switches.h"
#include "cc/input/input_handler.h"
#include "cc/layers/layer.h"
@@ -91,7 +93,7 @@ Texture::~Texture() {
}
std::string Texture::Produce() {
- return EmptyString();
+ return std::string();
}
CompositorLock::CompositorLock(Compositor* compositor)
@@ -270,6 +272,8 @@ Compositor::Compositor(gfx::AcceleratedWidget widget)
command_line->HasSwitch(cc::switches::kUIShowCompositedLayerBorders);
settings.initial_debug_state.show_fps_counter =
command_line->HasSwitch(cc::switches::kUIShowFPSCounter);
+ settings.initial_debug_state.show_layer_animation_bounds_rects =
+ command_line->HasSwitch(cc::switches::kUIShowLayerAnimationBounds);
settings.initial_debug_state.show_paint_rects =
command_line->HasSwitch(switches::kUIShowPaintRects);
settings.initial_debug_state.show_property_changed_rects =
@@ -285,12 +289,15 @@ Compositor::Compositor(gfx::AcceleratedWidget widget)
settings.initial_debug_state.show_non_occluding_rects =
command_line->HasSwitch(cc::switches::kUIShowNonOccludingRects);
+ base::TimeTicks before_create = base::TimeTicks::Now();
if (!!g_compositor_thread) {
host_ = cc::LayerTreeHost::CreateThreaded(
this, NULL, settings, g_compositor_thread->message_loop_proxy());
} else {
host_ = cc::LayerTreeHost::CreateSingleThreaded(this, this, NULL, settings);
}
+ UMA_HISTOGRAM_TIMES("GPU.CreateBrowserCompositor",
+ base::TimeTicks::Now() - before_create);
host_->SetRootLayer(root_web_layer_);
host_->SetLayerTreeHostClientReady();
}
@@ -437,7 +444,9 @@ void Compositor::ScheduleRedrawRect(const gfx::Rect& damage_rect) {
}
void Compositor::SetLatencyInfo(const ui::LatencyInfo& latency_info) {
- host_->SetLatencyInfo(latency_info);
+ scoped_ptr<cc::SwapPromise> swap_promise(
+ new cc::LatencyInfoSwapPromise(latency_info));
+ host_->QueueSwapPromise(swap_promise.Pass());
}
bool Compositor::ReadPixels(SkBitmap* bitmap,
@@ -505,7 +514,7 @@ void Compositor::Layout() {
}
scoped_ptr<cc::OutputSurface> Compositor::CreateOutputSurface(bool fallback) {
- return ContextFactory::GetInstance()->CreateOutputSurface(this);
+ return ContextFactory::GetInstance()->CreateOutputSurface(this, fallback);
}
void Compositor::DidCommit() {
diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h
index 7dabd53416..f5f293912b 100644
--- a/ui/compositor/compositor.h
+++ b/ui/compositor/compositor.h
@@ -19,9 +19,7 @@
#include "ui/compositor/compositor_observer.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/size.h"
-#include "ui/gfx/transform.h"
#include "ui/gfx/vector2d.h"
-#include "ui/gl/gl_share_group.h"
class SkBitmap;
@@ -30,6 +28,10 @@ class MessageLoopProxy;
class RunLoop;
}
+namespace blink {
+class WebGraphicsContext3D;
+}
+
namespace cc {
class ContextProvider;
class Layer;
@@ -38,30 +40,13 @@ class LayerTreeHost;
}
namespace gfx {
-class GLContext;
-class GLSurface;
-class GLShareGroup;
-class Point;
class Rect;
class Size;
}
-namespace blink {
-class WebGraphicsContext3D;
-}
-
-namespace webkit {
-namespace gpu {
-class ContextProviderInProcess;
-class WebGraphicsContext3DInProcessCommandBufferImpl;
-}
-}
-
namespace ui {
class Compositor;
-class CompositorObserver;
-class ContextProviderFromContextFactory;
class Layer;
class PostedSwapQueue;
class Reflector;
@@ -86,7 +71,7 @@ class COMPOSITOR_EXPORT ContextFactory {
// per-compositor data (e.g. a shared context), that needs to be cleaned up
// by calling RemoveCompositor when the compositor gets destroyed.
virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface(
- Compositor* compositor) = 0;
+ Compositor* compositor, bool software_fallback) = 0;
// Creates a reflector that copies the content of the |mirrored_compositor|
// onto |mirroing_layer|.
@@ -179,7 +164,7 @@ class COMPOSITOR_EXPORT CompositorLock
// This is only to be used for test. It allows execution of other tasks on
// the current message loop before the current task finishs (there is a
// potential for re-entrancy).
-class COMPOSITOR_EXPORT DrawWaiterForTest : public ui::CompositorObserver {
+class COMPOSITOR_EXPORT DrawWaiterForTest : public CompositorObserver {
public:
// Waits for a draw to be issued by the compositor. If the test times out
// here, there may be a logic error in the compositor code causing it
@@ -264,7 +249,7 @@ class COMPOSITOR_EXPORT Compositor
// from changes to layer properties.
void ScheduleRedrawRect(const gfx::Rect& damage_rect);
- void SetLatencyInfo(const ui::LatencyInfo& latency_info);
+ void SetLatencyInfo(const LatencyInfo& latency_info);
// Reads the region |bounds_in_pixel| of the contents of the last rendered
// frame into the given bitmap.
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc
index a0858a6cca..91857ba800 100644
--- a/ui/compositor/layer.cc
+++ b/ui/compositor/layer.cc
@@ -57,8 +57,6 @@ Layer::Layer()
layer_brightness_(0.0f),
layer_grayscale_(0.0f),
layer_inverted_(false),
- layer_mask_(NULL),
- layer_mask_back_link_(NULL),
zoom_(1),
zoom_inset_(0),
delegate_(NULL),
@@ -81,8 +79,6 @@ Layer::Layer(LayerType type)
layer_brightness_(0.0f),
layer_grayscale_(0.0f),
layer_inverted_(false),
- layer_mask_(NULL),
- layer_mask_back_link_(NULL),
zoom_(1),
zoom_inset_(0),
delegate_(NULL),
@@ -101,12 +97,10 @@ Layer::~Layer() {
animator_ = NULL;
if (compositor_)
compositor_->SetRootLayer(NULL);
+ if (layer_mask_.get())
+ SetMaskLayer(scoped_ptr<Layer>());
if (parent_)
parent_->Remove(this);
- if (layer_mask_)
- SetMaskLayer(NULL);
- if (layer_mask_back_link_)
- layer_mask_back_link_->SetMaskLayer(NULL);
for (size_t i = 0; i < children_.size(); ++i)
children_[i]->parent_ = NULL;
cc_layer_->RemoveLayerAnimationEventObserver(this);
@@ -281,28 +275,18 @@ void Layer::SetLayerInverted(bool inverted) {
SetLayerFilters();
}
-void Layer::SetMaskLayer(Layer* layer_mask) {
+void Layer::SetMaskLayer(scoped_ptr<Layer> layer_mask) {
// The provided mask should not have a layer mask itself.
- DCHECK(!layer_mask ||
+ DCHECK(!layer_mask.get() ||
(!layer_mask->layer_mask_layer() &&
- layer_mask->children().empty() &&
- !layer_mask->layer_mask_back_link_));
- DCHECK(!layer_mask_back_link_);
- if (layer_mask_ == layer_mask)
+ layer_mask->children().empty()));
+ if (layer_mask_.get() == layer_mask.get())
return;
- // We need to de-reference the currently linked object so that no problem
- // arises if the mask layer gets deleted before this object.
- if (layer_mask_)
- layer_mask_->layer_mask_back_link_ = NULL;
- layer_mask_ = layer_mask;
+ layer_mask_ = layer_mask.Pass();
cc_layer_->SetMaskLayer(
- layer_mask ? layer_mask->cc_layer() : NULL);
- // We need to reference the linked object so that it can properly break the
- // link to us when it gets deleted.
- if (layer_mask) {
- layer_mask->layer_mask_back_link_ = this;
- layer_mask->OnDeviceScaleFactorChanged(device_scale_factor_);
- }
+ layer_mask_.get() ? layer_mask_->cc_layer() : NULL);
+ if (layer_mask_.get())
+ layer_mask_->OnDeviceScaleFactorChanged(device_scale_factor_);
}
void Layer::SetBackgroundZoom(float zoom, int inset) {
@@ -528,7 +512,7 @@ void Layer::SetShowDelegatedContent(cc::DelegatedFrameProvider* frame_provider,
DCHECK_EQ(type_, LAYER_TEXTURED);
scoped_refptr<cc::DelegatedRendererLayer> new_layer =
- cc::DelegatedRendererLayer::Create(NULL, frame_provider);
+ cc::DelegatedRendererLayer::Create(frame_provider);
SwitchToLayer(new_layer);
delegated_renderer_layer_ = new_layer;
layer_updated_externally_ = true;
@@ -667,6 +651,11 @@ std::string Layer::DebugName() {
return name_;
}
+scoped_refptr<base::debug::ConvertableToTraceFormat> Layer::TakeDebugInfo() {
+ // TODO: return something useful here.
+ return NULL;
+}
+
void Layer::OnAnimationStarted(const cc::AnimationEvent& event) {
if (animator_.get())
animator_->OnThreadedAnimationStarted(event);
diff --git a/ui/compositor/layer.h b/ui/compositor/layer.h
index 4faab1228f..9ddeb56626 100644
--- a/ui/compositor/layer.h
+++ b/ui/compositor/layer.h
@@ -198,11 +198,10 @@ class COMPOSITOR_EXPORT Layer
// Set a layer mask for a layer.
// Note the provided layer mask can neither have a layer mask itself nor can
- // it have any children. The ownership of |layer_mask| will not be
- // transferred with this call.
+ // it have any children.
// Furthermore: A mask layer can only be set to one layer.
- void SetMaskLayer(Layer* layer_mask);
- Layer* layer_mask_layer() { return layer_mask_; }
+ void SetMaskLayer(scoped_ptr<Layer> layer_mask);
+ Layer* layer_mask_layer() { return layer_mask_.get(); }
// Sets the visibility of the Layer. A Layer may be visible but not
// drawn. This happens if any ancestor of a Layer is not visible.
@@ -287,6 +286,8 @@ class COMPOSITOR_EXPORT Layer
// |compostior_| to repaint the content.
void SendDamagedRects();
+ const SkRegion& damaged_region() const { return damaged_region_; }
+
// Suppresses painting the content by disgarding damaged region and ignoring
// new paint requests.
void SuppressPaint();
@@ -336,6 +337,9 @@ class COMPOSITOR_EXPORT Layer
// LayerClient
virtual std::string DebugName() OVERRIDE;
+ virtual scoped_refptr<base::debug::ConvertableToTraceFormat>
+ TakeDebugInfo() OVERRIDE;
+
// LayerAnimationEventObserver
virtual void OnAnimationStarted(const cc::AnimationEvent& event) OVERRIDE;
@@ -444,12 +448,8 @@ class COMPOSITOR_EXPORT Layer
float layer_grayscale_;
bool layer_inverted_;
- // The associated mask layer with this layer.
- Layer* layer_mask_;
- // The back link from the mask layer to it's associated masked layer.
- // We keep this reference for the case that if the mask layer gets deleted
- // while attached to the main layer before the main layer is deleted.
- Layer* layer_mask_back_link_;
+ // The mask layer associated with this layer.
+ scoped_ptr<Layer> layer_mask_;
// The zoom factor to scale the layer by. Zooming is disabled when this is
// set to 1.
diff --git a/ui/compositor/layer_animator.cc b/ui/compositor/layer_animator.cc
index dd727a6c54..0fad04a2cd 100644
--- a/ui/compositor/layer_animator.cc
+++ b/ui/compositor/layer_animator.cc
@@ -55,6 +55,7 @@ gfx::AnimationContainer* GetAnimationContainer() {
LayerAnimator::LayerAnimator(base::TimeDelta transition_duration)
: delegate_(NULL),
preemption_strategy_(IMMEDIATELY_SET_NEW_TARGET),
+ is_transition_duration_locked_(false),
transition_duration_(transition_duration),
tween_type_(gfx::Tween::LINEAR),
is_started_(false),
@@ -118,6 +119,10 @@ ANIMATED_PROPERTY(float, BRIGHTNESS, Brightness, float, brightness);
ANIMATED_PROPERTY(float, GRAYSCALE, Grayscale, float, grayscale);
ANIMATED_PROPERTY(SkColor, COLOR, Color, SkColor, color);
+base::TimeDelta LayerAnimator::GetTransitionDuration() const {
+ return transition_duration_;
+}
+
void LayerAnimator::SetDelegate(LayerAnimationDelegate* delegate) {
delegate_ = delegate;
}
@@ -810,8 +815,10 @@ void LayerAnimator::OnScheduled(LayerAnimationSequence* sequence) {
sequence->OnScheduled();
}
-base::TimeDelta LayerAnimator::GetTransitionDuration() const {
- return transition_duration_;
+void LayerAnimator::SetTransitionDuration(base::TimeDelta duration) {
+ if (is_transition_duration_locked_)
+ return;
+ transition_duration_ = duration;
}
void LayerAnimator::ClearAnimationsInternal() {
diff --git a/ui/compositor/layer_animator.h b/ui/compositor/layer_animator.h
index 5fe0d5c189..ad3754de15 100644
--- a/ui/compositor/layer_animator.h
+++ b/ui/compositor/layer_animator.h
@@ -88,6 +88,10 @@ class COMPOSITOR_EXPORT LayerAnimator
virtual void SetColor(SkColor color);
SkColor GetTargetColor() const;
+ // Returns the default length of animations, including adjustment for slow
+ // animation mode if set.
+ base::TimeDelta GetTransitionDuration() const;
+
// Sets the layer animation delegate the animator is associated with. The
// animator does not own the delegate. The layer animator expects a non-NULL
// delegate for most of its operations, so do not call any methods without
@@ -294,9 +298,8 @@ class COMPOSITOR_EXPORT LayerAnimator
// starting the animation or adding to the queue.
void OnScheduled(LayerAnimationSequence* sequence);
- // Returns the default length of animations, including adjustment for slow
- // animation mode if set.
- base::TimeDelta GetTransitionDuration() const;
+ // Sets |transition_duration_| unless |is_transition_duration_locked_| is set.
+ void SetTransitionDuration(base::TimeDelta duration);
// Clears the animation queues and notifies any running animations that they
// have been aborted.
@@ -317,6 +320,10 @@ class COMPOSITOR_EXPORT LayerAnimator
// Determines how animations are replaced.
PreemptionStrategy preemption_strategy_;
+ // Whether the length of animations is locked. While it is locked
+ // SetTransitionDuration does not set |transition_duration_|.
+ bool is_transition_duration_locked_;
+
// The default length of animations.
base::TimeDelta transition_duration_;
diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc
index 2d94d35d46..62e4507a04 100644
--- a/ui/compositor/layer_unittest.cc
+++ b/ui/compositor/layer_unittest.cc
@@ -180,9 +180,8 @@ class TestLayerDelegate : public LayerDelegate {
// Overridden from LayerDelegate:
virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE {
- SkIRect clip_bounds;
- canvas->sk_canvas()->getClipDeviceBounds(&clip_bounds);
- paint_size_ = gfx::Size(clip_bounds.width(), clip_bounds.height());
+ gfx::ImageSkiaRep contents = canvas->ExtractImageRep();
+ paint_size_ = gfx::Size(contents.pixel_width(), contents.pixel_height());
canvas->FillRect(gfx::Rect(paint_size_), colors_[color_index_]);
color_index_ = (color_index_ + 1) % static_cast<int>(colors_.size());
const SkMatrix& matrix = canvas->sk_canvas()->getTotalMatrix();
diff --git a/ui/compositor/scoped_layer_animation_settings.cc b/ui/compositor/scoped_layer_animation_settings.cc
index b5bad673f6..84456ee5bc 100644
--- a/ui/compositor/scoped_layer_animation_settings.cc
+++ b/ui/compositor/scoped_layer_animation_settings.cc
@@ -81,7 +81,9 @@ class InvertingObserver : public ImplicitAnimationObserver {
ScopedLayerAnimationSettings::ScopedLayerAnimationSettings(
LayerAnimator* animator)
: animator_(animator),
- old_transition_duration_(animator->transition_duration_),
+ old_is_transition_duration_locked_(
+ animator->is_transition_duration_locked_),
+ old_transition_duration_(animator->GetTransitionDuration()),
old_tween_type_(animator->tween_type()),
old_preemption_strategy_(animator->preemption_strategy()),
inverse_observer_(new InvertingObserver()) {
@@ -90,7 +92,9 @@ ScopedLayerAnimationSettings::ScopedLayerAnimationSettings(
}
ScopedLayerAnimationSettings::~ScopedLayerAnimationSettings() {
- animator_->transition_duration_ = old_transition_duration_;
+ animator_->is_transition_duration_locked_ =
+ old_is_transition_duration_locked_;
+ animator_->SetTransitionDuration(old_transition_duration_);
animator_->set_tween_type(old_tween_type_);
animator_->set_preemption_strategy(old_preemption_strategy_);
@@ -113,11 +117,15 @@ void ScopedLayerAnimationSettings::AddObserver(
void ScopedLayerAnimationSettings::SetTransitionDuration(
base::TimeDelta duration) {
- animator_->transition_duration_ = duration;
+ animator_->SetTransitionDuration(duration);
+}
+
+void ScopedLayerAnimationSettings::LockTransitionDuration() {
+ animator_->is_transition_duration_locked_ = true;
}
base::TimeDelta ScopedLayerAnimationSettings::GetTransitionDuration() const {
- return animator_->transition_duration_;
+ return animator_->GetTransitionDuration();
}
void ScopedLayerAnimationSettings::SetTweenType(gfx::Tween::Type tween_type) {
diff --git a/ui/compositor/scoped_layer_animation_settings.h b/ui/compositor/scoped_layer_animation_settings.h
index e36b853272..e8a1b468ba 100644
--- a/ui/compositor/scoped_layer_animation_settings.h
+++ b/ui/compositor/scoped_layer_animation_settings.h
@@ -34,6 +34,12 @@ class COMPOSITOR_EXPORT ScopedLayerAnimationSettings {
void SetTransitionDuration(base::TimeDelta duration);
base::TimeDelta GetTransitionDuration() const;
+ // Locks transition duration in |animator_|. When transition duration
+ // is locked any subsequent changes to it are ignored until the
+ // ScopedLayerAnimationSettings object that has locked the duration goes out
+ // of scope.
+ void LockTransitionDuration();
+
void SetTweenType(gfx::Tween::Type tween_type);
gfx::Tween::Type GetTweenType() const;
@@ -50,6 +56,7 @@ class COMPOSITOR_EXPORT ScopedLayerAnimationSettings {
private:
LayerAnimator* animator_;
+ bool old_is_transition_duration_locked_;
base::TimeDelta old_transition_duration_;
gfx::Tween::Type old_tween_type_;
LayerAnimator::PreemptionStrategy old_preemption_strategy_;
diff --git a/ui/compositor/test/default_context_factory.cc b/ui/compositor/test/default_context_factory.cc
index f5601c9c02..4839e1f19a 100644
--- a/ui/compositor/test/default_context_factory.cc
+++ b/ui/compositor/test/default_context_factory.cc
@@ -30,7 +30,8 @@ bool DefaultContextFactory::Initialize() {
}
scoped_ptr<cc::OutputSurface> DefaultContextFactory::CreateOutputSurface(
- Compositor* compositor) {
+ Compositor* compositor, bool software_fallback) {
+ DCHECK(!software_fallback);
blink::WebGraphicsContext3D::Attributes attrs;
attrs.depth = false;
attrs.stencil = false;
diff --git a/ui/compositor/test/default_context_factory.h b/ui/compositor/test/default_context_factory.h
index b89bdd80ee..7b8501bf82 100644
--- a/ui/compositor/test/default_context_factory.h
+++ b/ui/compositor/test/default_context_factory.h
@@ -23,7 +23,7 @@ class DefaultContextFactory : public ContextFactory {
// ContextFactory implementation
virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface(
- Compositor* compositor) OVERRIDE;
+ Compositor* compositor, bool software_fallback) OVERRIDE;
virtual scoped_refptr<Reflector> CreateReflector(
Compositor* compositor,
diff --git a/ui/compositor/test/test_context_factory.cc b/ui/compositor/test/test_context_factory.cc
index d47dec9399..0c4b274f53 100644
--- a/ui/compositor/test/test_context_factory.cc
+++ b/ui/compositor/test/test_context_factory.cc
@@ -15,7 +15,8 @@ TestContextFactory::TestContextFactory() {}
TestContextFactory::~TestContextFactory() {}
scoped_ptr<cc::OutputSurface> TestContextFactory::CreateOutputSurface(
- Compositor* compositor) {
+ Compositor* compositor, bool software_fallback) {
+ DCHECK(!software_fallback);
return make_scoped_ptr(
new cc::OutputSurface(cc::TestContextProvider::Create()));
}
diff --git a/ui/compositor/test/test_context_factory.h b/ui/compositor/test/test_context_factory.h
index d419292110..9b4bd9dc81 100644
--- a/ui/compositor/test/test_context_factory.h
+++ b/ui/compositor/test/test_context_factory.h
@@ -19,7 +19,7 @@ class TestContextFactory : public ContextFactory {
// ContextFactory implementation
virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface(
- Compositor* compositor) OVERRIDE;
+ Compositor* compositor, bool software_fallback) OVERRIDE;
virtual scoped_refptr<Reflector> CreateReflector(
Compositor* mirrored_compositor,
diff --git a/ui/events/cocoa/events_mac.mm b/ui/events/cocoa/events_mac.mm
index da08510a92..ffc34d7f2a 100644
--- a/ui/events/cocoa/events_mac.mm
+++ b/ui/events/cocoa/events_mac.mm
@@ -141,6 +141,10 @@ KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) {
return ui::KeyboardCodeFromNSEvent(native_event);
}
+std::string CodeFromNative(const base::NativeEvent& native_event) {
+ return ui::CodeFromNSEvent(native_event);
+}
+
bool IsMouseEvent(const base::NativeEvent& native_event) {
EventType type = EventTypeFromNative(native_event);
return type == ET_MOUSE_PRESSED ||
diff --git a/ui/events/dom4_keycode_converter.target.darwin-arm.mk b/ui/events/dom4_keycode_converter.target.darwin-arm.mk
index 22e9a5dde0..819f6318c0 100644
--- a/ui/events/dom4_keycode_converter.target.darwin-arm.mk
+++ b/ui/events/dom4_keycode_converter.target.darwin-arm.mk
@@ -61,6 +61,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -70,9 +71,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -142,6 +145,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -151,9 +155,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/events/dom4_keycode_converter.target.darwin-mips.mk b/ui/events/dom4_keycode_converter.target.darwin-mips.mk
index c9d1b7394a..b0052c16fb 100644
--- a/ui/events/dom4_keycode_converter.target.darwin-mips.mk
+++ b/ui/events/dom4_keycode_converter.target.darwin-mips.mk
@@ -60,6 +60,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -69,9 +70,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -140,6 +143,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -149,9 +153,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/events/dom4_keycode_converter.target.darwin-x86.mk b/ui/events/dom4_keycode_converter.target.darwin-x86.mk
index 07ed16efae..0ec9a1d4e7 100644
--- a/ui/events/dom4_keycode_converter.target.darwin-x86.mk
+++ b/ui/events/dom4_keycode_converter.target.darwin-x86.mk
@@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -72,9 +73,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -147,6 +150,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -156,9 +160,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/events/dom4_keycode_converter.target.linux-arm.mk b/ui/events/dom4_keycode_converter.target.linux-arm.mk
index 22e9a5dde0..819f6318c0 100644
--- a/ui/events/dom4_keycode_converter.target.linux-arm.mk
+++ b/ui/events/dom4_keycode_converter.target.linux-arm.mk
@@ -61,6 +61,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -70,9 +71,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -142,6 +145,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -151,9 +155,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/events/dom4_keycode_converter.target.linux-mips.mk b/ui/events/dom4_keycode_converter.target.linux-mips.mk
index c9d1b7394a..b0052c16fb 100644
--- a/ui/events/dom4_keycode_converter.target.linux-mips.mk
+++ b/ui/events/dom4_keycode_converter.target.linux-mips.mk
@@ -60,6 +60,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -69,9 +70,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -140,6 +143,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -149,9 +153,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/events/dom4_keycode_converter.target.linux-x86.mk b/ui/events/dom4_keycode_converter.target.linux-x86.mk
index 07ed16efae..0ec9a1d4e7 100644
--- a/ui/events/dom4_keycode_converter.target.linux-x86.mk
+++ b/ui/events/dom4_keycode_converter.target.linux-x86.mk
@@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -72,9 +73,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -147,6 +150,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -156,9 +160,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/events/event.cc b/ui/events/event.cc
index 5c25306215..ae1391a60c 100644
--- a/ui/events/event.cc
+++ b/ui/events/event.cc
@@ -22,6 +22,8 @@
#if defined(USE_X11)
#include "ui/events/keycodes/keyboard_code_conversion_x.h"
+#elif defined(USE_OZONE)
+#include "ui/events/keycodes/keyboard_code_conversion.h"
#endif
namespace {
@@ -513,6 +515,7 @@ KeyEvent::KeyEvent(const base::NativeEvent& native_event, bool is_char)
EventTypeFromNative(native_event),
EventFlagsFromNative(native_event)),
key_code_(KeyboardCodeFromNative(native_event)),
+ code_(CodeFromNative(native_event)),
is_char_(is_char),
character_(0) {
#if defined(USE_X11)
@@ -530,6 +533,18 @@ KeyEvent::KeyEvent(EventType type,
character_(GetCharacterFromKeyCode(key_code, flags)) {
}
+KeyEvent::KeyEvent(EventType type,
+ KeyboardCode key_code,
+ const std::string& code,
+ int flags,
+ bool is_char)
+ : Event(type, EventTimeForNow(), flags),
+ key_code_(key_code),
+ code_(code),
+ is_char_(is_char),
+ character_(GetCharacterFromKeyCode(key_code, flags)) {
+}
+
uint16 KeyEvent::GetCharacter() const {
if (character_)
return character_;
@@ -549,23 +564,13 @@ uint16 KeyEvent::GetCharacter() const {
ch = GetCharacterFromXEvent(native_event());
return ch ? ch : GetCharacterFromKeyCode(key_code_, flags());
#else
- NOTIMPLEMENTED();
- return 0;
-#endif
-}
+ if (native_event()) {
+ DCHECK(EventTypeFromNative(native_event()) == ET_KEY_PRESSED ||
+ EventTypeFromNative(native_event()) == ET_KEY_RELEASED);
+ }
-KeyEvent* KeyEvent::Copy() const {
-#if defined(USE_OZONE)
- KeyEvent* copy = new KeyEvent(*this);
-#else
- KeyEvent* copy = HasNativeEvent() ?
- new KeyEvent(::CopyNativeEvent(native_event()), is_char()) :
- new KeyEvent(*this);
-#endif
-#if defined(USE_X11)
- copy->set_delete_native_event(true);
+ return GetCharacterFromKeyCode(key_code_, flags());
#endif
- return copy;
}
bool KeyEvent::IsUnicodeKeyCode() const {
diff --git a/ui/events/event.h b/ui/events/event.h
index 71c8f6712a..5f90b820af 100644
--- a/ui/events/event.h
+++ b/ui/events/event.h
@@ -514,6 +514,11 @@ class EVENTS_EXPORT KeyEvent : public Event {
// Used for synthetic events.
KeyEvent(EventType type, KeyboardCode key_code, int flags, bool is_char);
+ // Used for synthetic events with code of DOM KeyboardEvent (e.g. 'KeyA')
+ // See also: ui/events/keycodes/dom4/keycode_converter_data.h
+ KeyEvent(EventType type, KeyboardCode key_code, const std::string& code,
+ int flags, bool is_char);
+
// This allows an I18N virtual keyboard to fabricate a keyboard event that
// does not have a corresponding KeyboardCode (example: U+00E1 Latin small
// letter A with acute, U+0410 Cyrillic capital letter A).
@@ -523,9 +528,6 @@ class EVENTS_EXPORT KeyEvent : public Event {
// BMP characters.
uint16 GetCharacter() const;
- // Returns the copy of this key event. Used in NativeWebKeyboardEvent.
- KeyEvent* Copy() const;
-
KeyboardCode key_code() const { return key_code_; }
bool is_char() const { return is_char_; }
@@ -538,6 +540,8 @@ class EVENTS_EXPORT KeyEvent : public Event {
// TODO(msw): Additional work may be needed for analogues on other platforms.
bool IsUnicodeKeyCode() const;
+ std::string code() const { return code_; }
+
// Normalizes flags_ to make it Windows/Mac compatible. Since the way
// of setting modifier mask on X is very different than Windows/Mac as shown
// in http://crbug.com/127142#c8, the normalization is necessary.
@@ -545,6 +549,14 @@ class EVENTS_EXPORT KeyEvent : public Event {
private:
KeyboardCode key_code_;
+
+ // String of 'code' defined in DOM KeyboardEvent (e.g. 'KeyA', 'Space')
+ // http://www.w3.org/TR/uievents/#keyboard-key-codes.
+ //
+ // This value represents the physical position in the keyboard and can be
+ // converted from / to keyboard scan code like XKB.
+ std::string code_;
+
// True if this is a translated character event (vs. a raw key down). Both
// share the same type: ET_KEY_PRESSED.
bool is_char_;
diff --git a/ui/events/event_dispatcher.cc b/ui/events/event_dispatcher.cc
index d43ce39a37..1c11ef9fe5 100644
--- a/ui/events/event_dispatcher.cc
+++ b/ui/events/event_dispatcher.cc
@@ -6,6 +6,9 @@
#include <algorithm>
+#include "ui/events/event_target.h"
+#include "ui/events/event_targeter.h"
+
namespace ui {
namespace {
@@ -42,6 +45,29 @@ Event* EventDispatcherDelegate::current_event() {
EventDispatchDetails EventDispatcherDelegate::DispatchEvent(EventTarget* target,
Event* event) {
+ CHECK(target);
+ EventDispatchDetails details = PreDispatchEvent(target, event);
+ if (!details.dispatcher_destroyed)
+ details = DispatchEventToTarget(target, event);
+ if (!details.dispatcher_destroyed)
+ details = PostDispatchEvent(target, *event);
+
+ return details;
+}
+
+EventDispatchDetails EventDispatcherDelegate::PreDispatchEvent(
+ EventTarget* target, Event* event) {
+ return EventDispatchDetails();
+}
+
+EventDispatchDetails EventDispatcherDelegate::PostDispatchEvent(
+ EventTarget* target, const Event& event) {
+ return EventDispatchDetails();
+}
+
+EventDispatchDetails EventDispatcherDelegate::DispatchEventToTarget(
+ EventTarget* target,
+ Event* event) {
EventDispatcher* old_dispatcher = dispatcher_;
EventDispatcher dispatcher(this);
dispatcher_ = &dispatcher;
@@ -54,6 +80,9 @@ EventDispatchDetails EventDispatcherDelegate::DispatchEvent(EventTarget* target,
return dispatcher.details();
}
+////////////////////////////////////////////////////////////////////////////////
+// EventDispatcher:
+
EventDispatcher::EventDispatcher(EventDispatcherDelegate* delegate)
: delegate_(delegate),
current_event_(NULL) {
diff --git a/ui/events/event_dispatcher.h b/ui/events/event_dispatcher.h
index c7a7dec712..9f3a450e76 100644
--- a/ui/events/event_dispatcher.h
+++ b/ui/events/event_dispatcher.h
@@ -8,12 +8,14 @@
#include "base/auto_reset.h"
#include "ui/events/event.h"
#include "ui/events/event_constants.h"
-#include "ui/events/event_target.h"
+#include "ui/events/event_handler.h"
#include "ui/events/events_export.h"
namespace ui {
class EventDispatcher;
+class EventTarget;
+class EventTargeter;
struct EventDispatchDetails {
EventDispatchDetails()
@@ -37,14 +39,30 @@ class EVENTS_EXPORT EventDispatcherDelegate {
// dispatched).
Event* current_event();
- protected:
- // Dispatches the event to the target. Returns true if the delegate is still
- // alive after dispatching event, and false if the delegate was destroyed
- // during the event dispatch.
+ // Dispatches |event| to |target|. This calls |PreDispatchEvent()| before
+ // dispatching the event, and |PostDispatchEvent()| after the event has been
+ // dispatched.
EventDispatchDetails DispatchEvent(EventTarget* target, Event* event)
WARN_UNUSED_RESULT;
+ protected:
+ // This is called once a target has been determined for an event, right before
+ // the event is dispatched to the target. This function may modify |event| to
+ // prepare it for dispatch (e.g. update event flags, location etc.).
+ virtual EventDispatchDetails PreDispatchEvent(
+ EventTarget* target,
+ Event* event) WARN_UNUSED_RESULT;
+
+ // This is called right after the event dispatch is completed.
+ virtual EventDispatchDetails PostDispatchEvent(
+ EventTarget* target,
+ const Event& event) WARN_UNUSED_RESULT;
+
private:
+ // Dispatches the event to the target.
+ EventDispatchDetails DispatchEventToTarget(EventTarget* target,
+ Event* event) WARN_UNUSED_RESULT;
+
EventDispatcher* dispatcher_;
DISALLOW_COPY_AND_ASSIGN(EventDispatcherDelegate);
diff --git a/ui/events/event_dispatcher_unittest.cc b/ui/events/event_dispatcher_unittest.cc
index 6aae01a52b..30bbd0dd99 100644
--- a/ui/events/event_dispatcher_unittest.cc
+++ b/ui/events/event_dispatcher_unittest.cc
@@ -6,6 +6,9 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/events/event.h"
+#include "ui/events/event_dispatcher.h"
+#include "ui/events/event_target.h"
+#include "ui/events/event_target_iterator.h"
#include "ui/events/event_utils.h"
namespace ui {
@@ -43,6 +46,14 @@ class TestTarget : public EventTarget {
return parent_;
}
+ virtual scoped_ptr<EventTargetIterator> GetChildIterator() const OVERRIDE {
+ return scoped_ptr<EventTargetIterator>();
+ }
+
+ virtual EventTargeter* GetEventTargeter() OVERRIDE {
+ return NULL;
+ }
+
TestTarget* parent_;
std::vector<int> handler_list_;
bool valid_;
diff --git a/ui/events/event_processor.cc b/ui/events/event_processor.cc
new file mode 100644
index 0000000000..45fa8302ca
--- /dev/null
+++ b/ui/events/event_processor.cc
@@ -0,0 +1,24 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/events/event_processor.h"
+
+#include "ui/events/event_target.h"
+#include "ui/events/event_targeter.h"
+
+namespace ui {
+
+EventDispatchDetails EventProcessor::OnEventFromSource(Event* event) {
+ EventTarget* root = GetRootTarget();
+ CHECK(root);
+ EventTargeter* targeter = root->GetEventTargeter();
+ CHECK(targeter);
+ EventTarget* target = targeter->FindTargetForEvent(root, event);
+ if (!target)
+ return EventDispatchDetails();
+
+ return DispatchEvent(target, event);
+}
+
+} // namespace ui
diff --git a/ui/events/event_processor.h b/ui/events/event_processor.h
new file mode 100644
index 0000000000..fd9bee3b02
--- /dev/null
+++ b/ui/events/event_processor.h
@@ -0,0 +1,30 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_EVENTS_EVENT_PROCESSOR_H_
+#define UI_EVENTS_EVENT_PROCESSOR_H_
+
+#include "ui/events/event_dispatcher.h"
+#include "ui/events/event_source.h"
+
+namespace ui {
+
+// EventProcessor receives an event from an EventSource and dispatches it to a
+// tree of EventTargets.
+class EVENTS_EXPORT EventProcessor : public EventDispatcherDelegate {
+ public:
+ virtual ~EventProcessor() {}
+
+ // Returns the root of the tree this event processor owns.
+ virtual EventTarget* GetRootTarget() = 0;
+
+ // Dispatches an event received from the EventSource to the tree of
+ // EventTargets (whose root is returned by GetRootTarget()).
+ virtual EventDispatchDetails OnEventFromSource(Event* event)
+ WARN_UNUSED_RESULT;
+};
+
+} // namespace ui
+
+#endif // UI_EVENTS_EVENT_PROCESSOR_H_
diff --git a/ui/events/event_processor_unittest.cc b/ui/events/event_processor_unittest.cc
new file mode 100644
index 0000000000..841cdb7503
--- /dev/null
+++ b/ui/events/event_processor_unittest.cc
@@ -0,0 +1,163 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/events/event.h"
+#include "ui/events/event_targeter.h"
+#include "ui/events/test/test_event_processor.h"
+#include "ui/events/test/test_event_target.h"
+
+namespace ui {
+namespace test {
+
+class EventProcessorTest : public testing::Test {
+ public:
+ EventProcessorTest() {}
+ virtual ~EventProcessorTest() {}
+
+ // testing::Test:
+ virtual void SetUp() OVERRIDE {
+ processor_.SetRoot(scoped_ptr<EventTarget>(new TestEventTarget()));
+ root()->SetEventTargeter(make_scoped_ptr(new EventTargeter()));
+ }
+
+ TestEventTarget* root() {
+ return static_cast<TestEventTarget*>(processor_.GetRootTarget());
+ }
+
+ void DispatchEvent(Event* event) {
+ processor_.OnEventFromSource(event);
+ }
+
+ protected:
+ TestEventProcessor processor_;
+
+ DISALLOW_COPY_AND_ASSIGN(EventProcessorTest);
+};
+
+TEST_F(EventProcessorTest, Basic) {
+ scoped_ptr<TestEventTarget> child(new TestEventTarget());
+ root()->AddChild(child.Pass());
+
+ MouseEvent mouse(ET_MOUSE_MOVED, gfx::Point(10, 10), gfx::Point(10, 10),
+ EF_NONE);
+ DispatchEvent(&mouse);
+ EXPECT_TRUE(root()->child_at(0)->DidReceiveEvent(ET_MOUSE_MOVED));
+ EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED));
+
+ root()->RemoveChild(root()->child_at(0));
+ DispatchEvent(&mouse);
+ EXPECT_TRUE(root()->DidReceiveEvent(ET_MOUSE_MOVED));
+}
+
+template<typename T>
+class BoundsEventTargeter : public EventTargeter {
+ public:
+ virtual ~BoundsEventTargeter() {}
+
+ protected:
+ virtual bool SubtreeShouldBeExploredForEvent(
+ EventTarget* target, const LocatedEvent& event) OVERRIDE {
+ T* t = static_cast<T*>(target);
+ return (t->bounds().Contains(event.location()));
+ }
+};
+
+class BoundsTestTarget : public TestEventTarget {
+ public:
+ BoundsTestTarget() {}
+ virtual ~BoundsTestTarget() {}
+
+ void set_bounds(gfx::Rect rect) { bounds_ = rect; }
+ gfx::Rect bounds() const { return bounds_; }
+
+ static void ConvertPointToTarget(BoundsTestTarget* source,
+ BoundsTestTarget* target,
+ gfx::Point* location) {
+ gfx::Vector2d vector;
+ if (source->Contains(target)) {
+ for (; target && target != source;
+ target = static_cast<BoundsTestTarget*>(target->parent())) {
+ vector += target->bounds().OffsetFromOrigin();
+ }
+ *location -= vector;
+ } else if (target->Contains(source)) {
+ for (; source && source != target;
+ source = static_cast<BoundsTestTarget*>(source->parent())) {
+ vector += source->bounds().OffsetFromOrigin();
+ }
+ *location += vector;
+ } else {
+ NOTREACHED();
+ }
+ }
+
+ private:
+ // EventTarget:
+ virtual void ConvertEventToTarget(EventTarget* target,
+ LocatedEvent* event) OVERRIDE {
+ event->ConvertLocationToTarget(this,
+ static_cast<BoundsTestTarget*>(target));
+ }
+
+ gfx::Rect bounds_;
+
+ DISALLOW_COPY_AND_ASSIGN(BoundsTestTarget);
+};
+
+TEST_F(EventProcessorTest, Bounds) {
+ scoped_ptr<BoundsTestTarget> parent(new BoundsTestTarget());
+ scoped_ptr<BoundsTestTarget> child(new BoundsTestTarget());
+ scoped_ptr<BoundsTestTarget> grandchild(new BoundsTestTarget());
+
+ parent->set_bounds(gfx::Rect(0, 0, 30, 30));
+ child->set_bounds(gfx::Rect(5, 5, 20, 20));
+ grandchild->set_bounds(gfx::Rect(5, 5, 5, 5));
+
+ child->AddChild(scoped_ptr<TestEventTarget>(grandchild.Pass()));
+ parent->AddChild(scoped_ptr<TestEventTarget>(child.Pass()));
+ root()->AddChild(scoped_ptr<TestEventTarget>(parent.Pass()));
+
+ ASSERT_EQ(1u, root()->child_count());
+ ASSERT_EQ(1u, root()->child_at(0)->child_count());
+ ASSERT_EQ(1u, root()->child_at(0)->child_at(0)->child_count());
+
+ TestEventTarget* parent_r = root()->child_at(0);
+ TestEventTarget* child_r = parent_r->child_at(0);
+ TestEventTarget* grandchild_r = child_r->child_at(0);
+
+ // Dispatch a mouse event that falls on the parent, but not on the child. When
+ // the default event-targeter used, the event will still reach |grandchild|,
+ // because the default targeter does not look at the bounds.
+ MouseEvent mouse(ET_MOUSE_MOVED, gfx::Point(1, 1), gfx::Point(1, 1), EF_NONE);
+ DispatchEvent(&mouse);
+ EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED));
+ EXPECT_FALSE(parent_r->DidReceiveEvent(ET_MOUSE_MOVED));
+ EXPECT_FALSE(child_r->DidReceiveEvent(ET_MOUSE_MOVED));
+ EXPECT_TRUE(grandchild_r->DidReceiveEvent(ET_MOUSE_MOVED));
+ grandchild_r->ResetReceivedEvents();
+
+ // Now install a targeter on the parent that looks at the bounds and makes
+ // sure the event reaches the target only if the location of the event within
+ // the bounds of the target.
+ parent_r->SetEventTargeter(scoped_ptr<EventTargeter>(
+ new BoundsEventTargeter<BoundsTestTarget>()));
+ DispatchEvent(&mouse);
+ EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED));
+ EXPECT_TRUE(parent_r->DidReceiveEvent(ET_MOUSE_MOVED));
+ EXPECT_FALSE(child_r->DidReceiveEvent(ET_MOUSE_MOVED));
+ EXPECT_FALSE(grandchild_r->DidReceiveEvent(ET_MOUSE_MOVED));
+ parent_r->ResetReceivedEvents();
+
+ MouseEvent second(ET_MOUSE_MOVED, gfx::Point(12, 12), gfx::Point(12, 12),
+ EF_NONE);
+ DispatchEvent(&second);
+ EXPECT_FALSE(root()->DidReceiveEvent(ET_MOUSE_MOVED));
+ EXPECT_FALSE(parent_r->DidReceiveEvent(ET_MOUSE_MOVED));
+ EXPECT_FALSE(child_r->DidReceiveEvent(ET_MOUSE_MOVED));
+ EXPECT_TRUE(grandchild_r->DidReceiveEvent(ET_MOUSE_MOVED));
+}
+
+} // namespace test
+} // namespace ui
diff --git a/ui/events/event_source.cc b/ui/events/event_source.cc
new file mode 100644
index 0000000000..4946ea0dfd
--- /dev/null
+++ b/ui/events/event_source.cc
@@ -0,0 +1,19 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/events/event_source.h"
+
+#include "ui/events/event_processor.h"
+
+namespace ui {
+
+void EventSource::SendEventToProcessor(Event* event) {
+ EventProcessor* processor = GetEventProcessor();
+ CHECK(processor);
+ EventDispatchDetails details = processor->OnEventFromSource(event);
+ if (details.dispatcher_destroyed)
+ return;
+}
+
+} // namespace ui
diff --git a/ui/events/event_source.h b/ui/events/event_source.h
new file mode 100644
index 0000000000..f8da9e6635
--- /dev/null
+++ b/ui/events/event_source.h
@@ -0,0 +1,29 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_EVENTS_EVENT_SOURCE_H_
+#define UI_EVENTS_EVENT_SOURCE_H_
+
+#include "ui/events/events_export.h"
+
+namespace ui {
+
+class Event;
+class EventProcessor;
+
+// EventSource receives events from the native platform (e.g. X11, win32 etc.)
+// and sends the events to an EventProcessor.
+class EVENTS_EXPORT EventSource {
+ public:
+ virtual ~EventSource() {}
+
+ virtual EventProcessor* GetEventProcessor() = 0;
+
+ protected:
+ void SendEventToProcessor(Event* event);
+};
+
+} // namespace ui
+
+#endif // UI_EVENTS_EVENT_SOURCE_H_
diff --git a/ui/events/event_target.cc b/ui/events/event_target.cc
index 56b7a1639f..9b44f9a74a 100644
--- a/ui/events/event_target.cc
+++ b/ui/events/event_target.cc
@@ -18,6 +18,10 @@ EventTarget::EventTarget()
EventTarget::~EventTarget() {
}
+void EventTarget::ConvertEventToTarget(EventTarget* target,
+ LocatedEvent* event) {
+}
+
void EventTarget::AddPreTargetHandler(EventHandler* handler) {
pre_target_list_.push_back(handler);
}
diff --git a/ui/events/event_target.h b/ui/events/event_target.h
index 936a86d716..fd03667da9 100644
--- a/ui/events/event_target.h
+++ b/ui/events/event_target.h
@@ -5,19 +5,23 @@
#ifndef UI_EVENTS_EVENT_TARGET_H_
#define UI_EVENTS_EVENT_TARGET_H_
+#include <vector>
+
#include "base/basictypes.h"
#include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
#include "ui/events/event_handler.h"
#include "ui/events/events_export.h"
namespace ui {
class EventDispatcher;
+class EventTargeter;
+class EventTargetIterator;
+class LocatedEvent;
class EVENTS_EXPORT EventTarget : public EventHandler {
public:
- typedef std::vector<EventTarget*> EventTargets;
-
class DispatcherApi {
public:
explicit DispatcherApi(EventTarget* target) : target_(target) {}
@@ -36,9 +40,24 @@ class EVENTS_EXPORT EventTarget : public EventHandler {
EventTarget();
virtual ~EventTarget();
- virtual bool CanAcceptEvent(const ui::Event& event) = 0;
+ virtual bool CanAcceptEvent(const Event& event) = 0;
+
+ // Returns the parent EventTarget in the event-target tree.
virtual EventTarget* GetParentTarget() = 0;
+ // Returns an iterator an EventTargeter can use to iterate over the list of
+ // child EventTargets.
+ virtual scoped_ptr<EventTargetIterator> GetChildIterator() const = 0;
+
+ // Returns the EventTargeter that should be used to find the target for an
+ // event in the subtree rooted at this EventTarget.
+ virtual EventTargeter* GetEventTargeter() = 0;
+
+ // Updates the states in |event| (e.g. location) to be suitable for |target|,
+ // so that |event| can be dispatched to |target|.
+ virtual void ConvertEventToTarget(EventTarget* target,
+ LocatedEvent* event);
+
// Adds a handler to receive events before the target. The handler must be
// explicitly removed from the target before the handler is destroyed. The
// EventTarget does not take ownership of the handler.
diff --git a/ui/events/event_target_iterator.h b/ui/events/event_target_iterator.h
new file mode 100644
index 0000000000..3083c83077
--- /dev/null
+++ b/ui/events/event_target_iterator.h
@@ -0,0 +1,48 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_EVENTS_EVENT_TARGET_ITERATOR_H_
+#define UI_EVENTS_EVENT_TARGET_ITERATOR_H_
+
+#include <vector>
+
+namespace ui {
+
+class EventTarget;
+
+// An interface that allows iterating over a set of EventTargets.
+class EventTargetIterator {
+ public:
+ virtual ~EventTargetIterator() {}
+ virtual EventTarget* GetNextTarget() = 0;
+};
+
+// Provides an EventTargetIterator implementation for iterating over a list of
+// EventTargets. The list is iterated in the reverse order, since typically the
+// EventTargets are maintained in increasing z-order in the lists.
+template<typename T>
+class EventTargetIteratorImpl : public EventTargetIterator {
+ public:
+ explicit EventTargetIteratorImpl(const std::vector<T*>& children)
+ : begin_(children.rbegin()),
+ end_(children.rend()) {
+ }
+ virtual ~EventTargetIteratorImpl() {}
+
+ virtual EventTarget* GetNextTarget() OVERRIDE {
+ if (begin_ == end_)
+ return NULL;
+ EventTarget* target = *(begin_);
+ ++begin_;
+ return target;
+ }
+
+ private:
+ typename std::vector<T*>::const_reverse_iterator begin_;
+ typename std::vector<T*>::const_reverse_iterator end_;
+};
+
+} // namespace ui
+
+#endif // UI_EVENTS_EVENT_TARGET_ITERATOR_H_
diff --git a/ui/events/event_targeter.cc b/ui/events/event_targeter.cc
new file mode 100644
index 0000000000..41d4442659
--- /dev/null
+++ b/ui/events/event_targeter.cc
@@ -0,0 +1,56 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/events/event_targeter.h"
+
+#include "ui/events/event.h"
+#include "ui/events/event_target.h"
+#include "ui/events/event_target_iterator.h"
+
+namespace ui {
+
+EventTargeter::~EventTargeter() {
+}
+
+EventTarget* EventTargeter::FindTargetForEvent(EventTarget* root,
+ Event* event) {
+ if (event->IsMouseEvent() ||
+ event->IsScrollEvent() ||
+ event->IsTouchEvent() ||
+ event->IsGestureEvent()) {
+ return FindTargetForLocatedEvent(root,
+ static_cast<LocatedEvent*>(event));
+ }
+ return root;
+}
+
+EventTarget* EventTargeter::FindTargetForLocatedEvent(EventTarget* root,
+ LocatedEvent* event) {
+ scoped_ptr<EventTargetIterator> iter = root->GetChildIterator();
+ if (iter) {
+ EventTarget* target = root;
+ EventTarget* child = NULL;
+ while ((child = iter->GetNextTarget())) {
+ if (!SubtreeShouldBeExploredForEvent(child, *event))
+ continue;
+ target->ConvertEventToTarget(child, event);
+ EventTargeter* targeter = child->GetEventTargeter();
+ EventTarget* child_target = targeter ?
+ targeter->FindTargetForLocatedEvent(child, event) :
+ FindTargetForLocatedEvent(child, event);
+ if (child_target)
+ return child_target;
+ target = child;
+ }
+ target->ConvertEventToTarget(root, event);
+ }
+ return root->CanAcceptEvent(*event) ? root : NULL;
+}
+
+bool EventTargeter::SubtreeShouldBeExploredForEvent(EventTarget* target,
+ const LocatedEvent& event) {
+ return true;
+}
+
+} // namespace ui
diff --git a/ui/events/event_targeter.h b/ui/events/event_targeter.h
new file mode 100644
index 0000000000..a28662b5e8
--- /dev/null
+++ b/ui/events/event_targeter.h
@@ -0,0 +1,45 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_EVENTS_EVENT_TARGETER_H_
+#define UI_EVENTS_EVENT_TARGETER_H_
+
+#include "base/compiler_specific.h"
+#include "ui/events/event.h"
+#include "ui/events/events_export.h"
+
+namespace ui {
+
+class Event;
+class EventTarget;
+class LocatedEvent;
+
+class EVENTS_EXPORT EventTargeter {
+ public:
+ virtual ~EventTargeter();
+
+ // Returns the target |event| should be dispatched to. If there is no such
+ // target, this should return NULL.
+ virtual EventTarget* FindTargetForEvent(EventTarget* root,
+ Event* event);
+
+ // Same as FindTargetForEvent(), but used for positional events. The location
+ // etc. of |event| are in |root|'s coordinate system. When finding the target
+ // for the event, the targeter can mutate the |event| (e.g. chnage the
+ // coordinate to be in the returned target's coordinate sustem) so that it can
+ // be dispatched to the target without any farther modification.
+ virtual EventTarget* FindTargetForLocatedEvent(EventTarget* root,
+ LocatedEvent* event);
+
+ protected:
+ // Returns true of |target| or one of its descendants can be a target of
+ // |event|. Note that the location etc. of |event| is in |target|'s parent's
+ // coordinate system.
+ virtual bool SubtreeShouldBeExploredForEvent(EventTarget* target,
+ const LocatedEvent& event);
+};
+
+} // namespace ui
+
+#endif // UI_EVENTS_EVENT_TARGETER_H_
diff --git a/ui/events/event_unittest.cc b/ui/events/event_unittest.cc
index 7fbceca2ef..012fc608b6 100644
--- a/ui/events/event_unittest.cc
+++ b/ui/events/event_unittest.cc
@@ -5,6 +5,8 @@
#include "base/memory/scoped_ptr.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/events/event.h"
+#include "ui/events/event_utils.h"
+#include "ui/events/keycodes/dom4/keycode_converter.h"
#include "ui/events/test/events_test_utils.h"
#if defined(USE_X11)
@@ -262,9 +264,71 @@ TEST(EventTest, NormalizeKeyEventFlags) {
TEST(EventTest, KeyEventCopy) {
KeyEvent key(ET_KEY_PRESSED, VKEY_A, EF_NONE, false);
- scoped_ptr<KeyEvent> copied_key(key.Copy());
+ scoped_ptr<KeyEvent> copied_key(new KeyEvent(key));
EXPECT_EQ(copied_key->type(), key.type());
EXPECT_EQ(copied_key->key_code(), key.key_code());
}
+TEST(EventTest, KeyEventCode) {
+ KeycodeConverter* conv = KeycodeConverter::GetInstance();
+
+ const char kCodeForSpace[] = "Space";
+ const uint16 kNativeCodeSpace = conv->CodeToNativeKeycode(kCodeForSpace);
+ ASSERT_NE(conv->InvalidNativeKeycode(), kNativeCodeSpace);
+
+ {
+ KeyEvent key(ET_KEY_PRESSED, VKEY_SPACE, kCodeForSpace, EF_NONE, false);
+ EXPECT_EQ(kCodeForSpace, key.code());
+ }
+ {
+ // Regardless the KeyEvent.key_code (VKEY_RETURN), code should be
+ // the specified value.
+ KeyEvent key(ET_KEY_PRESSED, VKEY_RETURN, kCodeForSpace, EF_NONE, false);
+ EXPECT_EQ(kCodeForSpace, key.code());
+ }
+ {
+ // If the synthetic event is initialized without code, it returns
+ // an empty string.
+ // TODO(komatsu): Fill a fallback value assuming the US keyboard layout.
+ KeyEvent key(ET_KEY_PRESSED, VKEY_SPACE, EF_NONE, false);
+ EXPECT_TRUE(key.code().empty());
+ }
+#if defined(USE_X11)
+ {
+ // KeyEvent converts from the native keycode (XKB) to the code.
+ ScopedXI2Event xevent;
+ xevent.InitKeyEvent(ET_KEY_PRESSED, VKEY_SPACE, kNativeCodeSpace);
+ KeyEvent key(xevent, false);
+ EXPECT_EQ(kCodeForSpace, key.code());
+ }
+#endif // USE_X11
+#if defined(OS_WIN)
+ {
+ // Test a non extended key.
+ ASSERT_EQ((kNativeCodeSpace & 0xFF), kNativeCodeSpace);
+
+ const LPARAM lParam = GetLParamFromScanCode(kNativeCodeSpace);
+ MSG native_event = { NULL, WM_KEYUP, VKEY_SPACE, lParam };
+ KeyEvent key(native_event, false);
+
+ // KeyEvent converts from the native keycode (scan code) to the code.
+ EXPECT_EQ(kCodeForSpace, key.code());
+ }
+ {
+ const char kCodeForHome[] = "Home";
+ const uint16 kNativeCodeHome = 0xe047;
+
+ // 'Home' is an extended key with 0xe000 bits.
+ ASSERT_NE((kNativeCodeHome & 0xFF), kNativeCodeHome);
+ const LPARAM lParam = GetLParamFromScanCode(kNativeCodeHome);
+
+ MSG native_event = { NULL, WM_KEYUP, VKEY_HOME, lParam };
+ KeyEvent key(native_event, false);
+
+ // KeyEvent converts from the native keycode (scan code) to the code.
+ EXPECT_EQ(kCodeForHome, key.code());
+ }
+#endif // OS_WIN
+}
+
} // namespace ui
diff --git a/ui/events/event_utils.h b/ui/events/event_utils.h
index be210e6851..e67a74111d 100644
--- a/ui/events/event_utils.h
+++ b/ui/events/event_utils.h
@@ -68,6 +68,12 @@ EVENTS_EXPORT int EventButtonFromNative(const base::NativeEvent& native_event);
EVENTS_EXPORT KeyboardCode KeyboardCodeFromNative(
const base::NativeEvent& native_event);
+// Returns the DOM KeyboardEvent code (physical location in the
+// keyboard) from a native event. The ownership of the return value
+// is NOT trasferred to the caller.
+EVENTS_EXPORT const char* CodeFromNative(
+ const base::NativeEvent& native_event);
+
// Returns true if the message is a mouse event.
EVENTS_EXPORT bool IsMouseEvent(const base::NativeEvent& native_event);
@@ -145,6 +151,11 @@ EVENTS_EXPORT int GetModifiersFromKeyState();
// Returns true if |message| identifies a mouse event that was generated as the
// result of a touch event.
EVENTS_EXPORT bool IsMouseEventFromTouch(UINT message);
+
+// Converts scan code and lParam each other. The scan code
+// representing an extended key contains 0xE000 bits.
+EVENTS_EXPORT uint16 GetScanCodeFromLParam(LPARAM lParam);
+EVENTS_EXPORT LPARAM GetLParamFromScanCode(uint16 scan_code);
#endif
// Returns true if default post-target handling was canceled for |event| after
diff --git a/ui/events/events.gyp b/ui/events/events.gyp
index 9c88e31ccb..b7a4313682 100644
--- a/ui/events/events.gyp
+++ b/ui/events/events.gyp
@@ -85,8 +85,15 @@
'event_dispatcher.h',
'event_handler.cc',
'event_handler.h',
+ 'event_processor.cc',
+ 'event_processor.h',
+ 'event_source.cc',
+ 'event_source.h',
'event_target.cc',
'event_target.h',
+ 'event_target_iterator.h',
+ 'event_targeter.cc',
+ 'event_targeter.h',
'event_utils.cc',
'event_utils.h',
'events_export.h',
@@ -154,6 +161,10 @@
'test/events_test_utils.h',
'test/events_test_utils_x11.cc',
'test/events_test_utils_x11.h',
+ 'test/test_event_processor.cc',
+ 'test/test_event_processor.h',
+ 'test/test_event_target.cc',
+ 'test/test_event_target.h',
],
'conditions': [
['use_x11==1', {
@@ -178,17 +189,25 @@
],
'sources': [
'event_dispatcher_unittest.cc',
+ 'event_processor_unittest.cc',
'event_unittest.cc',
'gestures/velocity_calculator_unittest.cc',
'keycodes/dom4/keycode_converter_unittest.cc',
'latency_info_unittest.cc',
- 'test/events_unittests.cc',
+ 'test/run_all_unittests.cc',
'test/test_suite.cc',
'test/test_suite.h',
'ozone/evdev/key_event_converter_unittest.cc',
'ozone/evdev/touch_event_converter_unittest.cc',
'x/events_x_unittest.cc',
],
+ 'conditions': [
+ ['OS=="linux" and linux_use_tcmalloc==1', {
+ 'dependencies': [
+ '<(DEPTH)/base/allocator/allocator.gyp:allocator',
+ ],
+ }],
+ ],
},
],
}
diff --git a/ui/events/events.target.darwin-arm.mk b/ui/events/events.target.darwin-arm.mk
new file mode 100644
index 0000000000..f2c8437d7c
--- /dev/null
+++ b/ui/events/events.target.darwin-arm.mk
@@ -0,0 +1,334 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := ui_events_events_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+ $(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+ ui/events/event.cc \
+ ui/events/event_dispatcher.cc \
+ ui/events/event_handler.cc \
+ ui/events/event_processor.cc \
+ ui/events/event_source.cc \
+ ui/events/event_target.cc \
+ ui/events/event_targeter.cc \
+ ui/events/event_utils.cc \
+ ui/events/events_stub.cc \
+ ui/events/gestures/gesture_configuration.cc \
+ ui/events/gestures/gesture_point.cc \
+ ui/events/gestures/gesture_recognizer_impl.cc \
+ ui/events/gestures/gesture_sequence.cc \
+ ui/events/gestures/gesture_types.cc \
+ ui/events/gestures/gesture_util.cc \
+ ui/events/gestures/velocity_calculator.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -fno-tree-sra \
+ -fuse-ld=gold \
+ -Wno-psabi \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -g \
+ -fomit-frame-pointer \
+ -fdata-sections \
+ -ffunction-sections
+
+MY_DEFS_Debug := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-DEVENTS_IMPLEMENTATION' \
+ '-DSK_ENABLE_INST_COUNT=0' \
+ '-DSK_SUPPORT_GPU=1' \
+ '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+ '-DSK_ENABLE_LEGACY_API_ALIASING=1' \
+ '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
+ '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \
+ '-DGR_GL_IGNORE_ES3_MSAA=0' \
+ '-DSK_BUILD_FOR_ANDROID' \
+ '-DSK_USE_POSIX_THREADS' \
+ '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
+ '-DU_USING_ICU_NAMESPACE=0' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+ '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+ '-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(LOCAL_PATH) \
+ $(LOCAL_PATH)/skia/config \
+ $(LOCAL_PATH)/third_party/skia/src/core \
+ $(LOCAL_PATH)/third_party/skia/include/core \
+ $(LOCAL_PATH)/third_party/skia/include/effects \
+ $(LOCAL_PATH)/third_party/skia/include/pdf \
+ $(LOCAL_PATH)/third_party/skia/include/gpu \
+ $(LOCAL_PATH)/third_party/skia/include/lazy \
+ $(LOCAL_PATH)/third_party/skia/include/pathops \
+ $(LOCAL_PATH)/third_party/skia/include/pipe \
+ $(LOCAL_PATH)/third_party/skia/include/ports \
+ $(LOCAL_PATH)/third_party/skia/include/utils \
+ $(LOCAL_PATH)/skia/ext \
+ $(PWD)/external/icu4c/common \
+ $(PWD)/external/icu4c/i18n \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-abi \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -fno-tree-sra \
+ -fuse-ld=gold \
+ -Wno-psabi \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -fno-ident \
+ -fdata-sections \
+ -ffunction-sections \
+ -fomit-frame-pointer
+
+MY_DEFS_Release := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-DEVENTS_IMPLEMENTATION' \
+ '-DSK_ENABLE_INST_COUNT=0' \
+ '-DSK_SUPPORT_GPU=1' \
+ '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+ '-DSK_ENABLE_LEGACY_API_ALIASING=1' \
+ '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
+ '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \
+ '-DGR_GL_IGNORE_ES3_MSAA=0' \
+ '-DSK_BUILD_FOR_ANDROID' \
+ '-DSK_USE_POSIX_THREADS' \
+ '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
+ '-DU_USING_ICU_NAMESPACE=0' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DNDEBUG' \
+ '-DNVALGRIND' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+ '-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(LOCAL_PATH) \
+ $(LOCAL_PATH)/skia/config \
+ $(LOCAL_PATH)/third_party/skia/src/core \
+ $(LOCAL_PATH)/third_party/skia/include/core \
+ $(LOCAL_PATH)/third_party/skia/include/effects \
+ $(LOCAL_PATH)/third_party/skia/include/pdf \
+ $(LOCAL_PATH)/third_party/skia/include/gpu \
+ $(LOCAL_PATH)/third_party/skia/include/lazy \
+ $(LOCAL_PATH)/third_party/skia/include/pathops \
+ $(LOCAL_PATH)/third_party/skia/include/pipe \
+ $(LOCAL_PATH)/third_party/skia/include/ports \
+ $(LOCAL_PATH)/third_party/skia/include/utils \
+ $(LOCAL_PATH)/skia/ext \
+ $(PWD)/external/icu4c/common \
+ $(PWD)/external/icu4c/i18n \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-abi \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+ -Wl,-z,now \
+ -Wl,-z,relro \
+ -Wl,-z,noexecstack \
+ -fPIC \
+ -Wl,-z,relro \
+ -Wl,-z,now \
+ -fuse-ld=gold \
+ -nostdlib \
+ -Wl,--no-undefined \
+ -Wl,--exclude-libs=ALL \
+ -Wl,--icf=safe \
+ -Wl,--fatal-warnings \
+ -Wl,--gc-sections \
+ -Wl,--warn-shared-textrel \
+ -Wl,-O1 \
+ -Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+ -Wl,-z,now \
+ -Wl,-z,relro \
+ -Wl,-z,noexecstack \
+ -fPIC \
+ -Wl,-z,relro \
+ -Wl,-z,now \
+ -fuse-ld=gold \
+ -nostdlib \
+ -Wl,--no-undefined \
+ -Wl,--exclude-libs=ALL \
+ -Wl,--icf=safe \
+ -Wl,-O1 \
+ -Wl,--as-needed \
+ -Wl,--gc-sections \
+ -Wl,--fatal-warnings \
+ -Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+ skia_skia_library_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+ libstlport \
+ libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: ui_events_events_gyp
+
+# Alias gyp target name.
+.PHONY: events
+events: ui_events_events_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events.target.darwin-mips.mk b/ui/events/events.target.darwin-mips.mk
new file mode 100644
index 0000000000..049b8d775b
--- /dev/null
+++ b/ui/events/events.target.darwin-mips.mk
@@ -0,0 +1,328 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := ui_events_events_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+ $(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+ ui/events/event.cc \
+ ui/events/event_dispatcher.cc \
+ ui/events/event_handler.cc \
+ ui/events/event_processor.cc \
+ ui/events/event_source.cc \
+ ui/events/event_target.cc \
+ ui/events/event_targeter.cc \
+ ui/events/event_utils.cc \
+ ui/events/events_stub.cc \
+ ui/events/gestures/gesture_configuration.cc \
+ ui/events/gestures/gesture_point.cc \
+ ui/events/gestures/gesture_recognizer_impl.cc \
+ ui/events/gestures/gesture_sequence.cc \
+ ui/events/gestures/gesture_types.cc \
+ ui/events/gestures/gesture_util.cc \
+ ui/events/gestures/velocity_calculator.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -EL \
+ -mhard-float \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -g \
+ -fomit-frame-pointer \
+ -fdata-sections \
+ -ffunction-sections
+
+MY_DEFS_Debug := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-DEVENTS_IMPLEMENTATION' \
+ '-DSK_ENABLE_INST_COUNT=0' \
+ '-DSK_SUPPORT_GPU=1' \
+ '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+ '-DSK_ENABLE_LEGACY_API_ALIASING=1' \
+ '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
+ '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \
+ '-DGR_GL_IGNORE_ES3_MSAA=0' \
+ '-DSK_BUILD_FOR_ANDROID' \
+ '-DSK_USE_POSIX_THREADS' \
+ '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
+ '-DU_USING_ICU_NAMESPACE=0' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+ '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+ '-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(LOCAL_PATH) \
+ $(LOCAL_PATH)/skia/config \
+ $(LOCAL_PATH)/third_party/skia/src/core \
+ $(LOCAL_PATH)/third_party/skia/include/core \
+ $(LOCAL_PATH)/third_party/skia/include/effects \
+ $(LOCAL_PATH)/third_party/skia/include/pdf \
+ $(LOCAL_PATH)/third_party/skia/include/gpu \
+ $(LOCAL_PATH)/third_party/skia/include/lazy \
+ $(LOCAL_PATH)/third_party/skia/include/pathops \
+ $(LOCAL_PATH)/third_party/skia/include/pipe \
+ $(LOCAL_PATH)/third_party/skia/include/ports \
+ $(LOCAL_PATH)/third_party/skia/include/utils \
+ $(LOCAL_PATH)/skia/ext \
+ $(PWD)/external/icu4c/common \
+ $(PWD)/external/icu4c/i18n \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-uninitialized \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -EL \
+ -mhard-float \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -fno-ident \
+ -fdata-sections \
+ -ffunction-sections \
+ -fomit-frame-pointer
+
+MY_DEFS_Release := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-DEVENTS_IMPLEMENTATION' \
+ '-DSK_ENABLE_INST_COUNT=0' \
+ '-DSK_SUPPORT_GPU=1' \
+ '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+ '-DSK_ENABLE_LEGACY_API_ALIASING=1' \
+ '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
+ '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \
+ '-DGR_GL_IGNORE_ES3_MSAA=0' \
+ '-DSK_BUILD_FOR_ANDROID' \
+ '-DSK_USE_POSIX_THREADS' \
+ '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
+ '-DU_USING_ICU_NAMESPACE=0' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DNDEBUG' \
+ '-DNVALGRIND' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+ '-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(LOCAL_PATH) \
+ $(LOCAL_PATH)/skia/config \
+ $(LOCAL_PATH)/third_party/skia/src/core \
+ $(LOCAL_PATH)/third_party/skia/include/core \
+ $(LOCAL_PATH)/third_party/skia/include/effects \
+ $(LOCAL_PATH)/third_party/skia/include/pdf \
+ $(LOCAL_PATH)/third_party/skia/include/gpu \
+ $(LOCAL_PATH)/third_party/skia/include/lazy \
+ $(LOCAL_PATH)/third_party/skia/include/pathops \
+ $(LOCAL_PATH)/third_party/skia/include/pipe \
+ $(LOCAL_PATH)/third_party/skia/include/ports \
+ $(LOCAL_PATH)/third_party/skia/include/utils \
+ $(LOCAL_PATH)/skia/ext \
+ $(PWD)/external/icu4c/common \
+ $(PWD)/external/icu4c/i18n \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-uninitialized \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+ -Wl,-z,now \
+ -Wl,-z,relro \
+ -Wl,-z,noexecstack \
+ -fPIC \
+ -EL \
+ -Wl,--no-keep-memory \
+ -nostdlib \
+ -Wl,--no-undefined \
+ -Wl,--exclude-libs=ALL \
+ -Wl,--fatal-warnings \
+ -Wl,--gc-sections \
+ -Wl,--warn-shared-textrel \
+ -Wl,-O1 \
+ -Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+ -Wl,-z,now \
+ -Wl,-z,relro \
+ -Wl,-z,noexecstack \
+ -fPIC \
+ -EL \
+ -Wl,--no-keep-memory \
+ -nostdlib \
+ -Wl,--no-undefined \
+ -Wl,--exclude-libs=ALL \
+ -Wl,-O1 \
+ -Wl,--as-needed \
+ -Wl,--gc-sections \
+ -Wl,--fatal-warnings \
+ -Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+ skia_skia_library_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+ libstlport \
+ libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: ui_events_events_gyp
+
+# Alias gyp target name.
+.PHONY: events
+events: ui_events_events_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events.target.darwin-x86.mk b/ui/events/events.target.darwin-x86.mk
new file mode 100644
index 0000000000..c6f7ecdf13
--- /dev/null
+++ b/ui/events/events.target.darwin-x86.mk
@@ -0,0 +1,334 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := ui_events_events_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+ $(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+ ui/events/event.cc \
+ ui/events/event_dispatcher.cc \
+ ui/events/event_handler.cc \
+ ui/events/event_processor.cc \
+ ui/events/event_source.cc \
+ ui/events/event_target.cc \
+ ui/events/event_targeter.cc \
+ ui/events/event_utils.cc \
+ ui/events/events_stub.cc \
+ ui/events/gestures/gesture_configuration.cc \
+ ui/events/gestures/gesture_point.cc \
+ ui/events/gestures/gesture_recognizer_impl.cc \
+ ui/events/gestures/gesture_sequence.cc \
+ ui/events/gestures/gesture_types.cc \
+ ui/events/gestures/gesture_util.cc \
+ ui/events/gestures/velocity_calculator.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -m32 \
+ -mmmx \
+ -march=pentium4 \
+ -msse2 \
+ -mfpmath=sse \
+ -fuse-ld=gold \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -fno-stack-protector \
+ -Os \
+ -g \
+ -fomit-frame-pointer \
+ -fdata-sections \
+ -ffunction-sections
+
+MY_DEFS_Debug := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-DEVENTS_IMPLEMENTATION' \
+ '-DSK_ENABLE_INST_COUNT=0' \
+ '-DSK_SUPPORT_GPU=1' \
+ '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+ '-DSK_ENABLE_LEGACY_API_ALIASING=1' \
+ '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
+ '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \
+ '-DGR_GL_IGNORE_ES3_MSAA=0' \
+ '-DSK_BUILD_FOR_ANDROID' \
+ '-DSK_USE_POSIX_THREADS' \
+ '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
+ '-DU_USING_ICU_NAMESPACE=0' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+ '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+ '-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(LOCAL_PATH) \
+ $(LOCAL_PATH)/skia/config \
+ $(LOCAL_PATH)/third_party/skia/src/core \
+ $(LOCAL_PATH)/third_party/skia/include/core \
+ $(LOCAL_PATH)/third_party/skia/include/effects \
+ $(LOCAL_PATH)/third_party/skia/include/pdf \
+ $(LOCAL_PATH)/third_party/skia/include/gpu \
+ $(LOCAL_PATH)/third_party/skia/include/lazy \
+ $(LOCAL_PATH)/third_party/skia/include/pathops \
+ $(LOCAL_PATH)/third_party/skia/include/pipe \
+ $(LOCAL_PATH)/third_party/skia/include/ports \
+ $(LOCAL_PATH)/third_party/skia/include/utils \
+ $(LOCAL_PATH)/skia/ext \
+ $(PWD)/external/icu4c/common \
+ $(PWD)/external/icu4c/i18n \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -m32 \
+ -mmmx \
+ -march=pentium4 \
+ -msse2 \
+ -mfpmath=sse \
+ -fuse-ld=gold \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -fno-stack-protector \
+ -Os \
+ -fno-ident \
+ -fdata-sections \
+ -ffunction-sections \
+ -fomit-frame-pointer \
+ -fno-unwind-tables \
+ -fno-asynchronous-unwind-tables
+
+MY_DEFS_Release := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-DEVENTS_IMPLEMENTATION' \
+ '-DSK_ENABLE_INST_COUNT=0' \
+ '-DSK_SUPPORT_GPU=1' \
+ '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+ '-DSK_ENABLE_LEGACY_API_ALIASING=1' \
+ '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
+ '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \
+ '-DGR_GL_IGNORE_ES3_MSAA=0' \
+ '-DSK_BUILD_FOR_ANDROID' \
+ '-DSK_USE_POSIX_THREADS' \
+ '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
+ '-DU_USING_ICU_NAMESPACE=0' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DNDEBUG' \
+ '-DNVALGRIND' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+ '-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(LOCAL_PATH) \
+ $(LOCAL_PATH)/skia/config \
+ $(LOCAL_PATH)/third_party/skia/src/core \
+ $(LOCAL_PATH)/third_party/skia/include/core \
+ $(LOCAL_PATH)/third_party/skia/include/effects \
+ $(LOCAL_PATH)/third_party/skia/include/pdf \
+ $(LOCAL_PATH)/third_party/skia/include/gpu \
+ $(LOCAL_PATH)/third_party/skia/include/lazy \
+ $(LOCAL_PATH)/third_party/skia/include/pathops \
+ $(LOCAL_PATH)/third_party/skia/include/pipe \
+ $(LOCAL_PATH)/third_party/skia/include/ports \
+ $(LOCAL_PATH)/third_party/skia/include/utils \
+ $(LOCAL_PATH)/skia/ext \
+ $(PWD)/external/icu4c/common \
+ $(PWD)/external/icu4c/i18n \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+ -Wl,-z,now \
+ -Wl,-z,relro \
+ -Wl,-z,noexecstack \
+ -fPIC \
+ -m32 \
+ -fuse-ld=gold \
+ -nostdlib \
+ -Wl,--no-undefined \
+ -Wl,--exclude-libs=ALL \
+ -Wl,--fatal-warnings \
+ -Wl,--gc-sections \
+ -Wl,--warn-shared-textrel \
+ -Wl,-O1 \
+ -Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+ -Wl,-z,now \
+ -Wl,-z,relro \
+ -Wl,-z,noexecstack \
+ -fPIC \
+ -m32 \
+ -fuse-ld=gold \
+ -nostdlib \
+ -Wl,--no-undefined \
+ -Wl,--exclude-libs=ALL \
+ -Wl,-O1 \
+ -Wl,--as-needed \
+ -Wl,--gc-sections \
+ -Wl,--fatal-warnings \
+ -Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+ skia_skia_library_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+ libstlport \
+ libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: ui_events_events_gyp
+
+# Alias gyp target name.
+.PHONY: events
+events: ui_events_events_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events.target.linux-arm.mk b/ui/events/events.target.linux-arm.mk
new file mode 100644
index 0000000000..f2c8437d7c
--- /dev/null
+++ b/ui/events/events.target.linux-arm.mk
@@ -0,0 +1,334 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := ui_events_events_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+ $(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+ ui/events/event.cc \
+ ui/events/event_dispatcher.cc \
+ ui/events/event_handler.cc \
+ ui/events/event_processor.cc \
+ ui/events/event_source.cc \
+ ui/events/event_target.cc \
+ ui/events/event_targeter.cc \
+ ui/events/event_utils.cc \
+ ui/events/events_stub.cc \
+ ui/events/gestures/gesture_configuration.cc \
+ ui/events/gestures/gesture_point.cc \
+ ui/events/gestures/gesture_recognizer_impl.cc \
+ ui/events/gestures/gesture_sequence.cc \
+ ui/events/gestures/gesture_types.cc \
+ ui/events/gestures/gesture_util.cc \
+ ui/events/gestures/velocity_calculator.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -fno-tree-sra \
+ -fuse-ld=gold \
+ -Wno-psabi \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -g \
+ -fomit-frame-pointer \
+ -fdata-sections \
+ -ffunction-sections
+
+MY_DEFS_Debug := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-DEVENTS_IMPLEMENTATION' \
+ '-DSK_ENABLE_INST_COUNT=0' \
+ '-DSK_SUPPORT_GPU=1' \
+ '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+ '-DSK_ENABLE_LEGACY_API_ALIASING=1' \
+ '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
+ '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \
+ '-DGR_GL_IGNORE_ES3_MSAA=0' \
+ '-DSK_BUILD_FOR_ANDROID' \
+ '-DSK_USE_POSIX_THREADS' \
+ '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
+ '-DU_USING_ICU_NAMESPACE=0' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+ '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+ '-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(LOCAL_PATH) \
+ $(LOCAL_PATH)/skia/config \
+ $(LOCAL_PATH)/third_party/skia/src/core \
+ $(LOCAL_PATH)/third_party/skia/include/core \
+ $(LOCAL_PATH)/third_party/skia/include/effects \
+ $(LOCAL_PATH)/third_party/skia/include/pdf \
+ $(LOCAL_PATH)/third_party/skia/include/gpu \
+ $(LOCAL_PATH)/third_party/skia/include/lazy \
+ $(LOCAL_PATH)/third_party/skia/include/pathops \
+ $(LOCAL_PATH)/third_party/skia/include/pipe \
+ $(LOCAL_PATH)/third_party/skia/include/ports \
+ $(LOCAL_PATH)/third_party/skia/include/utils \
+ $(LOCAL_PATH)/skia/ext \
+ $(PWD)/external/icu4c/common \
+ $(PWD)/external/icu4c/i18n \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-abi \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -fno-tree-sra \
+ -fuse-ld=gold \
+ -Wno-psabi \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -fno-ident \
+ -fdata-sections \
+ -ffunction-sections \
+ -fomit-frame-pointer
+
+MY_DEFS_Release := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-DEVENTS_IMPLEMENTATION' \
+ '-DSK_ENABLE_INST_COUNT=0' \
+ '-DSK_SUPPORT_GPU=1' \
+ '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+ '-DSK_ENABLE_LEGACY_API_ALIASING=1' \
+ '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
+ '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \
+ '-DGR_GL_IGNORE_ES3_MSAA=0' \
+ '-DSK_BUILD_FOR_ANDROID' \
+ '-DSK_USE_POSIX_THREADS' \
+ '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
+ '-DU_USING_ICU_NAMESPACE=0' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DNDEBUG' \
+ '-DNVALGRIND' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+ '-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(LOCAL_PATH) \
+ $(LOCAL_PATH)/skia/config \
+ $(LOCAL_PATH)/third_party/skia/src/core \
+ $(LOCAL_PATH)/third_party/skia/include/core \
+ $(LOCAL_PATH)/third_party/skia/include/effects \
+ $(LOCAL_PATH)/third_party/skia/include/pdf \
+ $(LOCAL_PATH)/third_party/skia/include/gpu \
+ $(LOCAL_PATH)/third_party/skia/include/lazy \
+ $(LOCAL_PATH)/third_party/skia/include/pathops \
+ $(LOCAL_PATH)/third_party/skia/include/pipe \
+ $(LOCAL_PATH)/third_party/skia/include/ports \
+ $(LOCAL_PATH)/third_party/skia/include/utils \
+ $(LOCAL_PATH)/skia/ext \
+ $(PWD)/external/icu4c/common \
+ $(PWD)/external/icu4c/i18n \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-abi \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+ -Wl,-z,now \
+ -Wl,-z,relro \
+ -Wl,-z,noexecstack \
+ -fPIC \
+ -Wl,-z,relro \
+ -Wl,-z,now \
+ -fuse-ld=gold \
+ -nostdlib \
+ -Wl,--no-undefined \
+ -Wl,--exclude-libs=ALL \
+ -Wl,--icf=safe \
+ -Wl,--fatal-warnings \
+ -Wl,--gc-sections \
+ -Wl,--warn-shared-textrel \
+ -Wl,-O1 \
+ -Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+ -Wl,-z,now \
+ -Wl,-z,relro \
+ -Wl,-z,noexecstack \
+ -fPIC \
+ -Wl,-z,relro \
+ -Wl,-z,now \
+ -fuse-ld=gold \
+ -nostdlib \
+ -Wl,--no-undefined \
+ -Wl,--exclude-libs=ALL \
+ -Wl,--icf=safe \
+ -Wl,-O1 \
+ -Wl,--as-needed \
+ -Wl,--gc-sections \
+ -Wl,--fatal-warnings \
+ -Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+ skia_skia_library_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+ libstlport \
+ libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: ui_events_events_gyp
+
+# Alias gyp target name.
+.PHONY: events
+events: ui_events_events_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events.target.linux-mips.mk b/ui/events/events.target.linux-mips.mk
new file mode 100644
index 0000000000..049b8d775b
--- /dev/null
+++ b/ui/events/events.target.linux-mips.mk
@@ -0,0 +1,328 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := ui_events_events_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+ $(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+ ui/events/event.cc \
+ ui/events/event_dispatcher.cc \
+ ui/events/event_handler.cc \
+ ui/events/event_processor.cc \
+ ui/events/event_source.cc \
+ ui/events/event_target.cc \
+ ui/events/event_targeter.cc \
+ ui/events/event_utils.cc \
+ ui/events/events_stub.cc \
+ ui/events/gestures/gesture_configuration.cc \
+ ui/events/gestures/gesture_point.cc \
+ ui/events/gestures/gesture_recognizer_impl.cc \
+ ui/events/gestures/gesture_sequence.cc \
+ ui/events/gestures/gesture_types.cc \
+ ui/events/gestures/gesture_util.cc \
+ ui/events/gestures/velocity_calculator.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -EL \
+ -mhard-float \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -g \
+ -fomit-frame-pointer \
+ -fdata-sections \
+ -ffunction-sections
+
+MY_DEFS_Debug := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-DEVENTS_IMPLEMENTATION' \
+ '-DSK_ENABLE_INST_COUNT=0' \
+ '-DSK_SUPPORT_GPU=1' \
+ '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+ '-DSK_ENABLE_LEGACY_API_ALIASING=1' \
+ '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
+ '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \
+ '-DGR_GL_IGNORE_ES3_MSAA=0' \
+ '-DSK_BUILD_FOR_ANDROID' \
+ '-DSK_USE_POSIX_THREADS' \
+ '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
+ '-DU_USING_ICU_NAMESPACE=0' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+ '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+ '-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(LOCAL_PATH) \
+ $(LOCAL_PATH)/skia/config \
+ $(LOCAL_PATH)/third_party/skia/src/core \
+ $(LOCAL_PATH)/third_party/skia/include/core \
+ $(LOCAL_PATH)/third_party/skia/include/effects \
+ $(LOCAL_PATH)/third_party/skia/include/pdf \
+ $(LOCAL_PATH)/third_party/skia/include/gpu \
+ $(LOCAL_PATH)/third_party/skia/include/lazy \
+ $(LOCAL_PATH)/third_party/skia/include/pathops \
+ $(LOCAL_PATH)/third_party/skia/include/pipe \
+ $(LOCAL_PATH)/third_party/skia/include/ports \
+ $(LOCAL_PATH)/third_party/skia/include/utils \
+ $(LOCAL_PATH)/skia/ext \
+ $(PWD)/external/icu4c/common \
+ $(PWD)/external/icu4c/i18n \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-uninitialized \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -EL \
+ -mhard-float \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -fno-ident \
+ -fdata-sections \
+ -ffunction-sections \
+ -fomit-frame-pointer
+
+MY_DEFS_Release := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-DEVENTS_IMPLEMENTATION' \
+ '-DSK_ENABLE_INST_COUNT=0' \
+ '-DSK_SUPPORT_GPU=1' \
+ '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+ '-DSK_ENABLE_LEGACY_API_ALIASING=1' \
+ '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
+ '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \
+ '-DGR_GL_IGNORE_ES3_MSAA=0' \
+ '-DSK_BUILD_FOR_ANDROID' \
+ '-DSK_USE_POSIX_THREADS' \
+ '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
+ '-DU_USING_ICU_NAMESPACE=0' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DNDEBUG' \
+ '-DNVALGRIND' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+ '-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(LOCAL_PATH) \
+ $(LOCAL_PATH)/skia/config \
+ $(LOCAL_PATH)/third_party/skia/src/core \
+ $(LOCAL_PATH)/third_party/skia/include/core \
+ $(LOCAL_PATH)/third_party/skia/include/effects \
+ $(LOCAL_PATH)/third_party/skia/include/pdf \
+ $(LOCAL_PATH)/third_party/skia/include/gpu \
+ $(LOCAL_PATH)/third_party/skia/include/lazy \
+ $(LOCAL_PATH)/third_party/skia/include/pathops \
+ $(LOCAL_PATH)/third_party/skia/include/pipe \
+ $(LOCAL_PATH)/third_party/skia/include/ports \
+ $(LOCAL_PATH)/third_party/skia/include/utils \
+ $(LOCAL_PATH)/skia/ext \
+ $(PWD)/external/icu4c/common \
+ $(PWD)/external/icu4c/i18n \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-uninitialized \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+ -Wl,-z,now \
+ -Wl,-z,relro \
+ -Wl,-z,noexecstack \
+ -fPIC \
+ -EL \
+ -Wl,--no-keep-memory \
+ -nostdlib \
+ -Wl,--no-undefined \
+ -Wl,--exclude-libs=ALL \
+ -Wl,--fatal-warnings \
+ -Wl,--gc-sections \
+ -Wl,--warn-shared-textrel \
+ -Wl,-O1 \
+ -Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+ -Wl,-z,now \
+ -Wl,-z,relro \
+ -Wl,-z,noexecstack \
+ -fPIC \
+ -EL \
+ -Wl,--no-keep-memory \
+ -nostdlib \
+ -Wl,--no-undefined \
+ -Wl,--exclude-libs=ALL \
+ -Wl,-O1 \
+ -Wl,--as-needed \
+ -Wl,--gc-sections \
+ -Wl,--fatal-warnings \
+ -Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+ skia_skia_library_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+ libstlport \
+ libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: ui_events_events_gyp
+
+# Alias gyp target name.
+.PHONY: events
+events: ui_events_events_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events.target.linux-x86.mk b/ui/events/events.target.linux-x86.mk
new file mode 100644
index 0000000000..c6f7ecdf13
--- /dev/null
+++ b/ui/events/events.target.linux-x86.mk
@@ -0,0 +1,334 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := ui_events_events_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+ $(call intermediates-dir-for,GYP,skia_skia_gyp)/skia.stamp \
+ $(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_library_gyp)/skia_skia_library_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+ ui/events/event.cc \
+ ui/events/event_dispatcher.cc \
+ ui/events/event_handler.cc \
+ ui/events/event_processor.cc \
+ ui/events/event_source.cc \
+ ui/events/event_target.cc \
+ ui/events/event_targeter.cc \
+ ui/events/event_utils.cc \
+ ui/events/events_stub.cc \
+ ui/events/gestures/gesture_configuration.cc \
+ ui/events/gestures/gesture_point.cc \
+ ui/events/gestures/gesture_recognizer_impl.cc \
+ ui/events/gestures/gesture_sequence.cc \
+ ui/events/gestures/gesture_types.cc \
+ ui/events/gestures/gesture_util.cc \
+ ui/events/gestures/velocity_calculator.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -m32 \
+ -mmmx \
+ -march=pentium4 \
+ -msse2 \
+ -mfpmath=sse \
+ -fuse-ld=gold \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -fno-stack-protector \
+ -Os \
+ -g \
+ -fomit-frame-pointer \
+ -fdata-sections \
+ -ffunction-sections
+
+MY_DEFS_Debug := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-DEVENTS_IMPLEMENTATION' \
+ '-DSK_ENABLE_INST_COUNT=0' \
+ '-DSK_SUPPORT_GPU=1' \
+ '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+ '-DSK_ENABLE_LEGACY_API_ALIASING=1' \
+ '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
+ '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \
+ '-DGR_GL_IGNORE_ES3_MSAA=0' \
+ '-DSK_BUILD_FOR_ANDROID' \
+ '-DSK_USE_POSIX_THREADS' \
+ '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
+ '-DU_USING_ICU_NAMESPACE=0' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+ '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+ '-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(LOCAL_PATH) \
+ $(LOCAL_PATH)/skia/config \
+ $(LOCAL_PATH)/third_party/skia/src/core \
+ $(LOCAL_PATH)/third_party/skia/include/core \
+ $(LOCAL_PATH)/third_party/skia/include/effects \
+ $(LOCAL_PATH)/third_party/skia/include/pdf \
+ $(LOCAL_PATH)/third_party/skia/include/gpu \
+ $(LOCAL_PATH)/third_party/skia/include/lazy \
+ $(LOCAL_PATH)/third_party/skia/include/pathops \
+ $(LOCAL_PATH)/third_party/skia/include/pipe \
+ $(LOCAL_PATH)/third_party/skia/include/ports \
+ $(LOCAL_PATH)/third_party/skia/include/utils \
+ $(LOCAL_PATH)/skia/ext \
+ $(PWD)/external/icu4c/common \
+ $(PWD)/external/icu4c/i18n \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -m32 \
+ -mmmx \
+ -march=pentium4 \
+ -msse2 \
+ -mfpmath=sse \
+ -fuse-ld=gold \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -fno-stack-protector \
+ -Os \
+ -fno-ident \
+ -fdata-sections \
+ -ffunction-sections \
+ -fomit-frame-pointer \
+ -fno-unwind-tables \
+ -fno-asynchronous-unwind-tables
+
+MY_DEFS_Release := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-DEVENTS_IMPLEMENTATION' \
+ '-DSK_ENABLE_INST_COUNT=0' \
+ '-DSK_SUPPORT_GPU=1' \
+ '-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+ '-DSK_ENABLE_LEGACY_API_ALIASING=1' \
+ '-DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1' \
+ '-DSK_SUPPORT_LEGACY_COLORTYPE=1' \
+ '-DGR_GL_IGNORE_ES3_MSAA=0' \
+ '-DSK_BUILD_FOR_ANDROID' \
+ '-DSK_USE_POSIX_THREADS' \
+ '-DSK_DEFERRED_CANVAS_USES_FACTORIES=1' \
+ '-DU_USING_ICU_NAMESPACE=0' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DNDEBUG' \
+ '-DNVALGRIND' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+ '-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+ $(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(LOCAL_PATH) \
+ $(LOCAL_PATH)/skia/config \
+ $(LOCAL_PATH)/third_party/skia/src/core \
+ $(LOCAL_PATH)/third_party/skia/include/core \
+ $(LOCAL_PATH)/third_party/skia/include/effects \
+ $(LOCAL_PATH)/third_party/skia/include/pdf \
+ $(LOCAL_PATH)/third_party/skia/include/gpu \
+ $(LOCAL_PATH)/third_party/skia/include/lazy \
+ $(LOCAL_PATH)/third_party/skia/include/pathops \
+ $(LOCAL_PATH)/third_party/skia/include/pipe \
+ $(LOCAL_PATH)/third_party/skia/include/ports \
+ $(LOCAL_PATH)/third_party/skia/include/utils \
+ $(LOCAL_PATH)/skia/ext \
+ $(PWD)/external/icu4c/common \
+ $(PWD)/external/icu4c/i18n \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+### Rules for final target.
+
+LOCAL_LDFLAGS_Debug := \
+ -Wl,-z,now \
+ -Wl,-z,relro \
+ -Wl,-z,noexecstack \
+ -fPIC \
+ -m32 \
+ -fuse-ld=gold \
+ -nostdlib \
+ -Wl,--no-undefined \
+ -Wl,--exclude-libs=ALL \
+ -Wl,--fatal-warnings \
+ -Wl,--gc-sections \
+ -Wl,--warn-shared-textrel \
+ -Wl,-O1 \
+ -Wl,--as-needed
+
+
+LOCAL_LDFLAGS_Release := \
+ -Wl,-z,now \
+ -Wl,-z,relro \
+ -Wl,-z,noexecstack \
+ -fPIC \
+ -m32 \
+ -fuse-ld=gold \
+ -nostdlib \
+ -Wl,--no-undefined \
+ -Wl,--exclude-libs=ALL \
+ -Wl,-O1 \
+ -Wl,--as-needed \
+ -Wl,--gc-sections \
+ -Wl,--fatal-warnings \
+ -Wl,--warn-shared-textrel
+
+
+LOCAL_LDFLAGS := $(LOCAL_LDFLAGS_$(GYP_CONFIGURATION))
+
+LOCAL_STATIC_LIBRARIES := \
+ skia_skia_library_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+ libstlport \
+ libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: ui_events_events_gyp
+
+# Alias gyp target name.
+.PHONY: events
+events: ui_events_events_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/ui/events/events_base.target.darwin-arm.mk b/ui/events/events_base.target.darwin-arm.mk
index 5c8764c4e2..ff8ffb29f7 100644
--- a/ui/events/events_base.target.darwin-arm.mk
+++ b/ui/events/events_base.target.darwin-arm.mk
@@ -64,6 +64,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -73,9 +74,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DEVENTS_BASE_IMPLEMENTATION' \
'-D__STDC_CONSTANT_MACROS' \
@@ -146,6 +149,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -155,9 +159,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DEVENTS_BASE_IMPLEMENTATION' \
'-D__STDC_CONSTANT_MACROS' \
diff --git a/ui/events/events_base.target.darwin-mips.mk b/ui/events/events_base.target.darwin-mips.mk
index ab430b4d38..ee2067a6ec 100644
--- a/ui/events/events_base.target.darwin-mips.mk
+++ b/ui/events/events_base.target.darwin-mips.mk
@@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -72,9 +73,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DEVENTS_BASE_IMPLEMENTATION' \
'-D__STDC_CONSTANT_MACROS' \
@@ -144,6 +147,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -153,9 +157,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DEVENTS_BASE_IMPLEMENTATION' \
'-D__STDC_CONSTANT_MACROS' \
diff --git a/ui/events/events_base.target.darwin-x86.mk b/ui/events/events_base.target.darwin-x86.mk
index 4d9761415f..b83b0d620c 100644
--- a/ui/events/events_base.target.darwin-x86.mk
+++ b/ui/events/events_base.target.darwin-x86.mk
@@ -66,6 +66,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -75,9 +76,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DEVENTS_BASE_IMPLEMENTATION' \
'-D__STDC_CONSTANT_MACROS' \
@@ -151,6 +154,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -160,9 +164,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DEVENTS_BASE_IMPLEMENTATION' \
'-D__STDC_CONSTANT_MACROS' \
diff --git a/ui/events/events_base.target.linux-arm.mk b/ui/events/events_base.target.linux-arm.mk
index 5c8764c4e2..ff8ffb29f7 100644
--- a/ui/events/events_base.target.linux-arm.mk
+++ b/ui/events/events_base.target.linux-arm.mk
@@ -64,6 +64,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -73,9 +74,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DEVENTS_BASE_IMPLEMENTATION' \
'-D__STDC_CONSTANT_MACROS' \
@@ -146,6 +149,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -155,9 +159,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DEVENTS_BASE_IMPLEMENTATION' \
'-D__STDC_CONSTANT_MACROS' \
diff --git a/ui/events/events_base.target.linux-mips.mk b/ui/events/events_base.target.linux-mips.mk
index ab430b4d38..ee2067a6ec 100644
--- a/ui/events/events_base.target.linux-mips.mk
+++ b/ui/events/events_base.target.linux-mips.mk
@@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -72,9 +73,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DEVENTS_BASE_IMPLEMENTATION' \
'-D__STDC_CONSTANT_MACROS' \
@@ -144,6 +147,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -153,9 +157,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DEVENTS_BASE_IMPLEMENTATION' \
'-D__STDC_CONSTANT_MACROS' \
diff --git a/ui/events/events_base.target.linux-x86.mk b/ui/events/events_base.target.linux-x86.mk
index 4d9761415f..b83b0d620c 100644
--- a/ui/events/events_base.target.linux-x86.mk
+++ b/ui/events/events_base.target.linux-x86.mk
@@ -66,6 +66,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -75,9 +76,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DEVENTS_BASE_IMPLEMENTATION' \
'-D__STDC_CONSTANT_MACROS' \
@@ -151,6 +154,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -160,9 +164,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DEVENTS_BASE_IMPLEMENTATION' \
'-D__STDC_CONSTANT_MACROS' \
diff --git a/ui/events/events_stub.cc b/ui/events/events_stub.cc
index 5a7aa775ee..3d63e4ddf6 100644
--- a/ui/events/events_stub.cc
+++ b/ui/events/events_stub.cc
@@ -148,4 +148,9 @@ KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) {
return static_cast<KeyboardCode>(0);
}
+const char* CodeFromNative(const base::NativeEvent& native_event) {
+ NOTIMPLEMENTED();
+ return "";
+}
+
} // namespace ui
diff --git a/ui/events/gestures/gesture_recognizer.h b/ui/events/gestures/gesture_recognizer.h
index 88f230f614..92d225a711 100644
--- a/ui/events/gestures/gesture_recognizer.h
+++ b/ui/events/gestures/gesture_recognizer.h
@@ -40,10 +40,11 @@ class EVENTS_EXPORT GestureRecognizer {
// Return the window which should handle this TouchEvent, in the case where
// the touch is already associated with a target.
// Otherwise, returns null.
- virtual GestureConsumer* GetTouchLockedTarget(TouchEvent* event) = 0;
+ virtual GestureConsumer* GetTouchLockedTarget(const TouchEvent& event) = 0;
// Return the window which should handle this GestureEvent.
- virtual GestureConsumer* GetTargetForGestureEvent(GestureEvent* event) = 0;
+ virtual GestureConsumer* GetTargetForGestureEvent(
+ const GestureEvent& event) = 0;
// If there is an active touch within
// GestureConfiguration::max_separation_for_gesture_touches_in_pixels,
diff --git a/ui/events/gestures/gesture_recognizer_impl.cc b/ui/events/gestures/gesture_recognizer_impl.cc
index 50a159b658..4a599345c8 100644
--- a/ui/events/gestures/gesture_recognizer_impl.cc
+++ b/ui/events/gestures/gesture_recognizer_impl.cc
@@ -65,14 +65,14 @@ GestureRecognizerImpl::~GestureRecognizerImpl() {
// Checks if this finger is already down, if so, returns the current target.
// Otherwise, returns NULL.
GestureConsumer* GestureRecognizerImpl::GetTouchLockedTarget(
- TouchEvent* event) {
- return touch_id_target_[event->touch_id()];
+ const TouchEvent& event) {
+ return touch_id_target_[event.touch_id()];
}
GestureConsumer* GestureRecognizerImpl::GetTargetForGestureEvent(
- GestureEvent* event) {
+ const GestureEvent& event) {
GestureConsumer* target = NULL;
- int touch_id = event->GetLowestTouchId();
+ int touch_id = event.GetLowestTouchId();
target = touch_id_target_for_gestures_[touch_id];
return target;
}
@@ -185,7 +185,7 @@ void GestureRecognizerImpl::SetupTargets(const TouchEvent& event,
if (event.type() == ui::ET_TOUCH_RELEASED ||
event.type() == ui::ET_TOUCH_CANCELLED) {
touch_id_target_.erase(event.touch_id());
- } else {
+ } else if (event.type() == ui::ET_TOUCH_PRESSED) {
touch_id_target_[event.touch_id()] = target;
if (target)
touch_id_target_for_gestures_[event.touch_id()] = target;
@@ -239,7 +239,7 @@ void GestureRecognizerImpl::RemoveGestureEventHelper(
}
void GestureRecognizerImpl::DispatchPostponedGestureEvent(GestureEvent* event) {
- GestureConsumer* consumer = GetTargetForGestureEvent(event);
+ GestureConsumer* consumer = GetTargetForGestureEvent(*event);
if (consumer) {
GestureEventHelper* helper = FindDispatchHelperForConsumer(consumer);
if (helper)
diff --git a/ui/events/gestures/gesture_recognizer_impl.h b/ui/events/gestures/gesture_recognizer_impl.h
index 6e45c1376b..59c92cfb4a 100644
--- a/ui/events/gestures/gesture_recognizer_impl.h
+++ b/ui/events/gestures/gesture_recognizer_impl.h
@@ -34,9 +34,10 @@ class EVENTS_EXPORT GestureRecognizerImpl : public GestureRecognizer,
std::vector<GestureEventHelper*>& helpers() { return helpers_; }
// Overridden from GestureRecognizer
- virtual GestureConsumer* GetTouchLockedTarget(TouchEvent* event) OVERRIDE;
+ virtual GestureConsumer* GetTouchLockedTarget(
+ const TouchEvent& event) OVERRIDE;
virtual GestureConsumer* GetTargetForGestureEvent(
- GestureEvent* event) OVERRIDE;
+ const GestureEvent& event) OVERRIDE;
virtual GestureConsumer* GetTargetForLocation(
const gfx::Point& location) OVERRIDE;
virtual void TransferEventsTo(GestureConsumer* current_consumer,
diff --git a/ui/events/keycodes/keyboard_code_conversion_mac.h b/ui/events/keycodes/keyboard_code_conversion_mac.h
index d74c57948b..719c922d13 100644
--- a/ui/events/keycodes/keyboard_code_conversion_mac.h
+++ b/ui/events/keycodes/keyboard_code_conversion_mac.h
@@ -37,6 +37,8 @@ EVENTS_BASE_EXPORT int MacKeyCodeForWindowsKeyCode(
// has a different notion of key codes.
EVENTS_BASE_EXPORT KeyboardCode KeyboardCodeFromNSEvent(NSEvent* event);
+EVENTS_BASE_EXPORT const char* CodeFromNSEvent(NSEvent* event);
+
} // namespace ui
#endif // UI_EVENTS_KEYCODES_KEYBOARD_CODE_CONVERSION_MAC_H_
diff --git a/ui/events/keycodes/keyboard_code_conversion_mac.mm b/ui/events/keycodes/keyboard_code_conversion_mac.mm
index ed50392f84..fdda790be1 100644
--- a/ui/events/keycodes/keyboard_code_conversion_mac.mm
+++ b/ui/events/keycodes/keyboard_code_conversion_mac.mm
@@ -9,6 +9,7 @@
#import <Carbon/Carbon.h>
#include "base/logging.h"
+#include "ui/events/keycodes/dom4/keycode_converter.h"
namespace ui {
@@ -555,4 +556,9 @@ KeyboardCode KeyboardCodeFromNSEvent(NSEvent* event) {
return KeyboardCodeFromKeyCode([event keyCode]);
}
+const char* CodeFromNSEvent(NSEvent* event) {
+ return KeycodeConverter::GetInstance()->NativeKeycodeToCode(
+ [event keyCode]);
+}
+
} // namespace ui
diff --git a/ui/events/keycodes/keyboard_code_conversion_win.cc b/ui/events/keycodes/keyboard_code_conversion_win.cc
index 66eeaa75dc..ebb54388b8 100644
--- a/ui/events/keycodes/keyboard_code_conversion_win.cc
+++ b/ui/events/keycodes/keyboard_code_conversion_win.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "ui/events/keycodes/keyboard_code_conversion_win.h"
+#include "ui/events/keycodes/dom4/keycode_converter.h"
namespace ui {
@@ -14,4 +15,9 @@ KeyboardCode KeyboardCodeForWindowsKeyCode(WORD keycode) {
return static_cast<KeyboardCode>(keycode);
}
+const char* CodeForWindowsScanCode(WORD scan_code) {
+ return KeycodeConverter::GetInstance()->NativeKeycodeToCode(
+ scan_code);
+}
+
} // namespace ui
diff --git a/ui/events/keycodes/keyboard_code_conversion_win.h b/ui/events/keycodes/keyboard_code_conversion_win.h
index 1883c8d2c0..4f09a2ac9a 100644
--- a/ui/events/keycodes/keyboard_code_conversion_win.h
+++ b/ui/events/keycodes/keyboard_code_conversion_win.h
@@ -13,6 +13,7 @@ namespace ui {
// Methods to convert ui::KeyboardCode/Windows virtual key type methods.
EVENTS_BASE_EXPORT WORD WindowsKeyCodeForKeyboardCode(KeyboardCode keycode);
EVENTS_BASE_EXPORT KeyboardCode KeyboardCodeForWindowsKeyCode(WORD keycode);
+EVENTS_BASE_EXPORT const char* CodeForWindowsScanCode(WORD scan_code);
} // namespace ui
diff --git a/ui/events/keycodes/keyboard_code_conversion_x.cc b/ui/events/keycodes/keyboard_code_conversion_x.cc
index 8b88e39395..821f8c4701 100644
--- a/ui/events/keycodes/keyboard_code_conversion_x.cc
+++ b/ui/events/keycodes/keyboard_code_conversion_x.cc
@@ -14,6 +14,7 @@
#include "base/logging.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
+#include "ui/events/keycodes/dom4/keycode_converter.h"
namespace ui {
@@ -284,6 +285,8 @@ KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym) {
return VKEY_MENU;
case XK_ISO_Level3_Shift:
return VKEY_ALTGR;
+ case XK_Multi_key:
+ return VKEY_COMPOSE;
case XK_Pause:
return VKEY_PAUSE;
case XK_Caps_Lock:
@@ -437,12 +440,17 @@ KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym) {
return VKEY_UNKNOWN;
}
+const char* CodeFromXEvent(XEvent* xev) {
+ return KeycodeConverter::GetInstance()->NativeKeycodeToCode(
+ xev->xkey.keycode);
+}
+
uint16 GetCharacterFromXEvent(XEvent* xev) {
char buf[6];
int bytes_written = XLookupString(&xev->xkey, buf, 6, NULL, NULL);
DCHECK_LE(bytes_written, 6);
- string16 result;
+ base::string16 result;
return (bytes_written > 0 && UTF8ToUTF16(buf, bytes_written, &result) &&
result.length() == 1) ? result[0] : 0;
}
@@ -586,6 +594,8 @@ int XKeysymForWindowsKeyCode(KeyboardCode keycode, bool shift) {
return XK_Menu;
case VKEY_ALTGR:
return XK_ISO_Level3_Shift;
+ case VKEY_COMPOSE:
+ return XK_Multi_key;
case VKEY_PAUSE:
return XK_Pause;
diff --git a/ui/events/keycodes/keyboard_code_conversion_x.h b/ui/events/keycodes/keyboard_code_conversion_x.h
index bd8e9caa7f..b5d8fe87c3 100644
--- a/ui/events/keycodes/keyboard_code_conversion_x.h
+++ b/ui/events/keycodes/keyboard_code_conversion_x.h
@@ -17,6 +17,8 @@ EVENTS_BASE_EXPORT KeyboardCode KeyboardCodeFromXKeyEvent(XEvent* xev);
EVENTS_BASE_EXPORT KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym);
+EVENTS_BASE_EXPORT const char* CodeFromXEvent(XEvent* xev);
+
// Returns a character on a standard US PC keyboard from an XEvent.
EVENTS_BASE_EXPORT uint16 GetCharacterFromXEvent(XEvent* xev);
diff --git a/ui/events/keycodes/keyboard_codes_posix.h b/ui/events/keycodes/keyboard_codes_posix.h
index 1f7e06f96b..e984839d15 100644
--- a/ui/events/keycodes/keyboard_codes_posix.h
+++ b/ui/events/keycodes/keyboard_codes_posix.h
@@ -221,6 +221,11 @@ enum KeyboardCode {
// (VK_OEM_AX) code to represent AltGr, matching the behaviour of Firefox on
// Linux.
VKEY_ALTGR = 0xE1,
+#if defined(USE_X11)
+ // Windows does not have a specific key code for Compose. We use the unused
+ // 0xE6 (VK_ICO_CLEAR) code to represent Compose.
+ VKEY_COMPOSE = 0xE6,
+#endif
};
} // namespace ui
diff --git a/ui/events/latency_info.cc b/ui/events/latency_info.cc
index b75af66ed7..99729995bd 100644
--- a/ui/events/latency_info.cc
+++ b/ui/events/latency_info.cc
@@ -21,10 +21,14 @@ const char* GetComponentName(ui::LatencyComponentType type) {
CASE_TYPE(INPUT_EVENT_LATENCY_UI_COMPONENT);
CASE_TYPE(INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_COMPONENT);
CASE_TYPE(INPUT_EVENT_LATENCY_ACKED_TOUCH_COMPONENT);
+ CASE_TYPE(WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT);
CASE_TYPE(INPUT_EVENT_LATENCY_TERMINATED_MOUSE_COMPONENT);
CASE_TYPE(INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT);
CASE_TYPE(INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT);
CASE_TYPE(INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT);
+ CASE_TYPE(INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT);
+ CASE_TYPE(INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT);
+ CASE_TYPE(LATENCY_INFO_LIST_TERMINATED_OVERFLOW_COMPONENT);
default:
DLOG(WARNING) << "Unhandled LatencyComponentType.\n";
break;
@@ -39,6 +43,9 @@ bool IsTerminalComponent(ui::LatencyComponentType type) {
case ui::INPUT_EVENT_LATENCY_TERMINATED_TOUCH_COMPONENT:
case ui::INPUT_EVENT_LATENCY_TERMINATED_GESTURE_COMPONENT:
case ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT:
+ case ui::INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT:
+ case ui::INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT:
+ case ui::LATENCY_INFO_LIST_TERMINATED_OVERFLOW_COMPONENT:
return true;
default:
return false;
@@ -155,8 +162,7 @@ void LatencyInfo::AddLatencyNumberWithTimestamp(LatencyComponentType component,
bool dump_to_trace) {
if (dump_to_trace && IsBeginComponent(component)) {
// Should only ever add begin component once.
- // Put the CHECK back once crbug.com/321116 is resolved.
- // CHECK_EQ(-1, trace_id);
+ CHECK_EQ(-1, trace_id);
trace_id = component_sequence_number;
TRACE_EVENT_ASYNC_BEGIN0("benchmark",
"InputLatency",
diff --git a/ui/events/latency_info.h b/ui/events/latency_info.h
index ea3293cb37..7b70654362 100644
--- a/ui/events/latency_info.h
+++ b/ui/events/latency_info.h
@@ -38,6 +38,9 @@ enum LatencyComponentType {
INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_COMPONENT,
// Timestamp when the touch event is acked.
INPUT_EVENT_LATENCY_ACKED_TOUCH_COMPONENT,
+ // Frame number when a window snapshot was requested. The snapshot
+ // is taken when the rendering results actually reach the screen.
+ WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT,
// ---------------------------TERMINAL COMPONENT-----------------------------
// TERMINAL COMPONENT is when we show the latency end in chrome://tracing.
// Timestamp when the mouse event is acked from renderer and it does not
@@ -52,9 +55,15 @@ enum LatencyComponentType {
// Timestamp when the frame is swapped (i.e. when the rendering caused by
// input event actually takes effect).
INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT,
- // Frame number when a window snapshot was requested. The snapshot
- // is taken when the rendering results actually reach the screen.
- WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT
+ // This component indicates that the input causes a commit to be scheduled
+ // but the commit failed.
+ INPUT_EVENT_LATENCY_TERMINATED_COMMIT_FAILED_COMPONENT,
+ // This component indicates that the input causes a swap to be scheduled
+ // but the swap failed.
+ INPUT_EVENT_LATENCY_TERMINATED_SWAP_FAILED_COMPONENT,
+ // This component indicates that the cached LatencyInfo number exceeds the
+ // maximal allowed size.
+ LATENCY_INFO_LIST_TERMINATED_OVERFLOW_COMPONENT,
};
struct EVENTS_BASE_EXPORT LatencyInfo {
diff --git a/ui/events/ozone/events_ozone.cc b/ui/events/ozone/events_ozone.cc
index 0db40f48a2..4655d41192 100644
--- a/ui/events/ozone/events_ozone.cc
+++ b/ui/events/ozone/events_ozone.cc
@@ -52,6 +52,12 @@ KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) {
return event->key_code();
}
+const char* CodeFromNative(const base::NativeEvent& native_event) {
+ const ui::KeyEvent* event = static_cast<const ui::KeyEvent*>(native_event);
+ DCHECK(event->IsKeyEvent());
+ return event->code().c_str();
+}
+
bool IsMouseEvent(const base::NativeEvent& native_event) {
const ui::Event* e = static_cast<const ui::Event*>(native_event);
return e->IsMouseEvent();
diff --git a/ui/events/test/events_test_utils_x11.cc b/ui/events/test/events_test_utils_x11.cc
index 9b2cc5bbd1..210216b47e 100644
--- a/ui/events/test/events_test_utils_x11.cc
+++ b/ui/events/test/events_test_utils_x11.cc
@@ -16,24 +16,6 @@
namespace {
-const int kScrollValuatorNum = 5;
-const int kScrollValuatorMap[kScrollValuatorNum][4] = {
- // { valuator_index, valuator_type, min_val, max_val }
- { 0, ui::DeviceDataManager::DT_CMT_SCROLL_X, -100, 100 },
- { 1, ui::DeviceDataManager::DT_CMT_SCROLL_Y, -100, 100 },
- { 2, ui::DeviceDataManager::DT_CMT_ORDINAL_X, -100, 100 },
- { 3, ui::DeviceDataManager::DT_CMT_ORDINAL_Y, -100, 100 },
- { 4, ui::DeviceDataManager::DT_CMT_FINGER_COUNT, 0, 3},
-};
-
-const int kTouchValuatorNum = 3;
-const int kTouchValuatorMap[kTouchValuatorNum][4] = {
- // { valuator_index, valuator_type, min_val, max_val }
- { 0, ui::DeviceDataManager::DT_TOUCH_MAJOR, 0, 1000},
- { 1, ui::DeviceDataManager::DT_TOUCH_ORIENTATION, 0, 1},
- { 2, ui::DeviceDataManager::DT_TOUCH_PRESSURE, 0, 1000},
-};
-
// Converts ui::EventType to state for X*Events.
unsigned int XEventState(int flags) {
return
@@ -104,7 +86,8 @@ unsigned int XButtonEventButton(ui::EventType type,
return 0;
}
-void InitValuatorsForXIDeviceEvent(XIDeviceEvent* xiev, int valuator_count) {
+void InitValuatorsForXIDeviceEvent(XIDeviceEvent* xiev) {
+ int valuator_count = ui::DeviceDataManager::DT_LAST_ENTRY;
xiev->valuators.mask_len = (valuator_count / 8) + 1;
xiev->valuators.mask = new unsigned char[xiev->valuators.mask_len];
memset(xiev->valuators.mask, 0, xiev->valuators.mask_len);
@@ -204,18 +187,38 @@ void ScopedXI2Event::InitScrollEvent(int deviceid,
int y_offset_ordinal,
int finger_count) {
Cleanup();
+ event_.reset(CreateXInput2Event(deviceid, XI_Motion, 0, gfx::Point()));
+
+ Valuator valuators[] = {
+ Valuator(DeviceDataManager::DT_CMT_SCROLL_X, x_offset),
+ Valuator(DeviceDataManager::DT_CMT_SCROLL_Y, y_offset),
+ Valuator(DeviceDataManager::DT_CMT_ORDINAL_X, x_offset_ordinal),
+ Valuator(DeviceDataManager::DT_CMT_ORDINAL_Y, y_offset_ordinal),
+ Valuator(DeviceDataManager::DT_CMT_FINGER_COUNT, finger_count)
+ };
+ SetUpValuators(
+ std::vector<Valuator>(valuators, valuators + arraysize(valuators)));
+}
+
+void ScopedXI2Event::InitFlingScrollEvent(int deviceid,
+ int x_velocity,
+ int y_velocity,
+ int x_velocity_ordinal,
+ int y_velocity_ordinal,
+ bool is_cancel) {
+ Cleanup();
event_.reset(CreateXInput2Event(deviceid, XI_Motion, deviceid, gfx::Point()));
- int valuator_data[kScrollValuatorNum] =
- { x_offset, y_offset, x_offset_ordinal, y_offset_ordinal, finger_count};
- XIDeviceEvent* xiev =
- static_cast<XIDeviceEvent*>(event_->xcookie.data);
+ Valuator valuators[] = {
+ Valuator(DeviceDataManager::DT_CMT_FLING_STATE, is_cancel ? 1 : 0),
+ Valuator(DeviceDataManager::DT_CMT_FLING_Y, y_velocity),
+ Valuator(DeviceDataManager::DT_CMT_ORDINAL_Y, y_velocity_ordinal),
+ Valuator(DeviceDataManager::DT_CMT_FLING_X, x_velocity),
+ Valuator(DeviceDataManager::DT_CMT_ORDINAL_X, x_velocity_ordinal)
+ };
- InitValuatorsForXIDeviceEvent(xiev, kScrollValuatorNum);
- for(int i = 0; i < kScrollValuatorNum; i++) {
- XISetMask(xiev->valuators.mask, i);
- xiev->valuators.values[i] = valuator_data[i];
- }
+ SetUpValuators(
+ std::vector<Valuator>(valuators, valuators + arraysize(valuators)));
}
void ScopedXI2Event::InitTouchEvent(int deviceid,
@@ -224,22 +227,8 @@ void ScopedXI2Event::InitTouchEvent(int deviceid,
const gfx::Point& location,
const std::vector<Valuator>& valuators) {
Cleanup();
- event_.reset(CreateXInput2Event(
- deviceid, evtype, tracking_id, location));
-
- XIDeviceEvent* xiev =
- static_cast<XIDeviceEvent*>(event_->xcookie.data);
- InitValuatorsForXIDeviceEvent(xiev, valuators.size());
- int val_count = 0;
- for (int i = 0; i < kTouchValuatorNum; i++) {
- for (size_t j = 0; j < valuators.size(); j++) {
- if (valuators[j].data_type == kTouchValuatorMap[i][1]) {
- XISetMask(xiev->valuators.mask, kTouchValuatorMap[i][0]);
- xiev->valuators.values[val_count++] = valuators[j].value;
- }
- }
- }
-
+ event_.reset(CreateXInput2Event(deviceid, evtype, tracking_id, location));
+ SetUpValuators(valuators);
}
void ScopedXI2Event::Cleanup() {
@@ -255,39 +244,31 @@ void ScopedXI2Event::Cleanup() {
event_.reset();
}
- void SetUpScrollDeviceForTest(unsigned int deviceid) {
+void ScopedXI2Event::SetUpValuators(const std::vector<Valuator>& valuators) {
+ CHECK(event_.get());
+ CHECK_EQ(GenericEvent, event_->type);
+ XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(event_->xcookie.data);
+ InitValuatorsForXIDeviceEvent(xiev);
+ ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance();
+ for (size_t i = 0; i < valuators.size(); ++i) {
+ manager->SetValuatorDataForTest(xiev, valuators[i].data_type,
+ valuators[i].value);
+ }
+}
+
+void SetUpScrollDeviceForTest(unsigned int deviceid) {
std::vector<unsigned int> device_list;
device_list.push_back(deviceid);
TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list);
ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance();
- manager->SetDeviceListForTest(device_list, device_list, device_list);
-
- for (int i = 0; i < kScrollValuatorNum; i++) {
- manager->SetDeviceValuatorForTest(
- deviceid,
- kScrollValuatorMap[i][0],
- static_cast<DeviceDataManager::DataType>(kScrollValuatorMap[i][1]),
- kScrollValuatorMap[i][2],
- kScrollValuatorMap[i][3]);
- }
+ manager->SetDeviceListForTest(std::vector<unsigned int>(), device_list);
}
-void SetupTouchDevicesForTest(const std::vector<unsigned int>& devices) {
- std::vector<unsigned int> empty_list;
+void SetUpTouchDevicesForTest(const std::vector<unsigned int>& devices) {
TouchFactory::GetInstance()->SetTouchDeviceForTest(devices);
ui::DeviceDataManager* manager = ui::DeviceDataManager::GetInstance();
- manager->SetDeviceListForTest(devices, empty_list, empty_list);
- for (size_t i = 0; i < devices.size(); i++) {
- for (int j = 0; j < kTouchValuatorNum; j++) {
- manager->SetDeviceValuatorForTest(
- devices[i],
- kTouchValuatorMap[j][0],
- static_cast<DeviceDataManager::DataType>(kTouchValuatorMap[j][1]),
- kTouchValuatorMap[j][2],
- kTouchValuatorMap[j][3]);
- }
- }
+ manager->SetDeviceListForTest(devices, std::vector<unsigned int>());
}
} // namespace ui
diff --git a/ui/events/test/events_test_utils_x11.h b/ui/events/test/events_test_utils_x11.h
index 4faa8f49c4..5f59dd5232 100644
--- a/ui/events/test/events_test_utils_x11.h
+++ b/ui/events/test/events_test_utils_x11.h
@@ -51,6 +51,13 @@ class ScopedXI2Event {
int y_offset_ordinal,
int finger_count);
+ void InitFlingScrollEvent(int deviceid,
+ int x_velocity,
+ int y_velocity,
+ int x_velocity_ordinal,
+ int y_velocity_ordinal,
+ bool is_cancel);
+
void InitTouchEvent(int deviceid,
int evtype,
int tracking_id,
@@ -60,6 +67,8 @@ class ScopedXI2Event {
private:
void Cleanup();
+ void SetUpValuators(const std::vector<Valuator>& valuators);
+
scoped_ptr<XEvent> event_;
DISALLOW_COPY_AND_ASSIGN(ScopedXI2Event);
@@ -69,7 +78,7 @@ class ScopedXI2Event {
void SetUpScrollDeviceForTest(unsigned int deviceid);
// Initializes a list of touchscreen devices for touch events.
-void SetupTouchDevicesForTest(const std::vector<unsigned int>& devices);
+void SetUpTouchDevicesForTest(const std::vector<unsigned int>& devices);
} // namespace ui
diff --git a/ui/events/test/events_unittests.cc b/ui/events/test/run_all_unittests.cc
index c9885e736c..dab855c9d3 100644
--- a/ui/events/test/events_unittests.cc
+++ b/ui/events/test/run_all_unittests.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
diff --git a/ui/events/test/test_event_processor.cc b/ui/events/test/test_event_processor.cc
new file mode 100644
index 0000000000..995912831f
--- /dev/null
+++ b/ui/events/test/test_event_processor.cc
@@ -0,0 +1,32 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/events/test/test_event_processor.h"
+
+#include "ui/events/event_target.h"
+
+namespace ui {
+namespace test {
+
+TestEventProcessor::TestEventProcessor() {}
+TestEventProcessor::~TestEventProcessor() {}
+
+void TestEventProcessor::SetRoot(scoped_ptr<EventTarget> root) {
+ root_ = root.Pass();
+}
+
+bool TestEventProcessor::CanDispatchToTarget(EventTarget* target) {
+ return true;
+}
+
+EventTarget* TestEventProcessor::GetRootTarget() {
+ return root_.get();
+}
+
+EventDispatchDetails TestEventProcessor::OnEventFromSource(Event* event) {
+ return EventProcessor::OnEventFromSource(event);
+}
+
+} // namespace test
+} // namespace ui
diff --git a/ui/events/test/test_event_processor.h b/ui/events/test/test_event_processor.h
new file mode 100644
index 0000000000..e9ba0963d5
--- /dev/null
+++ b/ui/events/test/test_event_processor.h
@@ -0,0 +1,35 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_EVENTS_TEST_TEST_EVENT_PROCESSOR_H_
+#define UI_EVENTS_TEST_TEST_EVENT_PROCESSOR_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "ui/events/event_processor.h"
+
+namespace ui {
+namespace test {
+
+class TestEventProcessor : public EventProcessor {
+ public:
+ TestEventProcessor();
+ virtual ~TestEventProcessor();
+
+ void SetRoot(scoped_ptr<EventTarget> root);
+
+ // EventProcessor:
+ virtual bool CanDispatchToTarget(EventTarget* target) OVERRIDE;
+ virtual EventTarget* GetRootTarget() OVERRIDE;
+ virtual EventDispatchDetails OnEventFromSource(Event* event) OVERRIDE;
+
+ private:
+ scoped_ptr<EventTarget> root_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestEventProcessor);
+};
+
+} // namespace test
+} // namespace ui
+
+#endif // UI_EVENTS_TEST_TEST_EVENT_PROCESSOR_H_
diff --git a/ui/events/test/test_event_target.cc b/ui/events/test/test_event_target.cc
new file mode 100644
index 0000000000..68d2eb2d67
--- /dev/null
+++ b/ui/events/test/test_event_target.cc
@@ -0,0 +1,87 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/events/test/test_event_target.h"
+
+#include "ui/events/event.h"
+#include "ui/events/event_target_iterator.h"
+#include "ui/events/event_targeter.h"
+
+namespace ui {
+namespace test {
+
+TestEventTarget::TestEventTarget()
+ : parent_(NULL) {}
+TestEventTarget::~TestEventTarget() {}
+
+void TestEventTarget::AddChild(scoped_ptr<TestEventTarget> child) {
+ TestEventTarget* child_r = child.get();
+ if (child->parent()) {
+ AddChild(child->parent()->RemoveChild(child.release()));
+ } else {
+ children_.push_back(child.release());
+ }
+ child_r->set_parent(this);
+}
+
+scoped_ptr<TestEventTarget> TestEventTarget::RemoveChild(TestEventTarget *c) {
+ ScopedVector<TestEventTarget>::iterator iter = std::find(children_.begin(),
+ children_.end(),
+ c);
+ if (iter != children_.end()) {
+ children_.weak_erase(iter);
+ c->set_parent(NULL);
+ return scoped_ptr<TestEventTarget>(c);
+ }
+ return scoped_ptr<TestEventTarget>();
+}
+
+void TestEventTarget::SetEventTargeter(scoped_ptr<EventTargeter> targeter) {
+ targeter_ = targeter.Pass();
+}
+
+bool TestEventTarget::DidReceiveEvent(ui::EventType type) const {
+ return received_.count(type) > 0;
+}
+
+void TestEventTarget::ResetReceivedEvents() {
+ received_.clear();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// TestEventTarget, protected
+
+bool TestEventTarget::CanAcceptEvent(const ui::Event& event) {
+ return true;
+}
+
+EventTarget* TestEventTarget::GetParentTarget() {
+ return parent_;
+}
+
+scoped_ptr<EventTargetIterator> TestEventTarget::GetChildIterator() const {
+ return scoped_ptr<EventTargetIterator>(
+ new EventTargetIteratorImpl<TestEventTarget>(children_.get()));
+}
+
+EventTargeter* TestEventTarget::GetEventTargeter() {
+ return targeter_.get();
+}
+
+void TestEventTarget::OnEvent(Event* event) {
+ received_.insert(event->type());
+ EventTarget::OnEvent(event);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// TestEventTarget, private
+
+bool TestEventTarget::Contains(TestEventTarget* target) const {
+ while (target && target != this)
+ target = target->parent();
+ return target == this;
+}
+
+} // namespace test
+} // namespace ui
diff --git a/ui/events/test/test_event_target.h b/ui/events/test/test_event_target.h
new file mode 100644
index 0000000000..43994ffd5b
--- /dev/null
+++ b/ui/events/test/test_event_target.h
@@ -0,0 +1,65 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_EVENTS_TEST_TEST_EVENT_TARGET_H_
+#define UI_EVENTS_TEST_TEST_EVENT_TARGET_H_
+
+#include <set>
+
+#include "base/memory/scoped_vector.h"
+#include "ui/events/event_target.h"
+
+namespace gfx {
+class Point;
+}
+
+namespace ui {
+namespace test {
+
+class TestEventTarget : public EventTarget {
+ public:
+ TestEventTarget();
+ virtual ~TestEventTarget();
+
+ void AddChild(scoped_ptr<TestEventTarget> child);
+ scoped_ptr<TestEventTarget> RemoveChild(TestEventTarget* child);
+
+ TestEventTarget* parent() { return parent_; }
+
+ TestEventTarget* child_at(int index) { return children_[index]; }
+ size_t child_count() const { return children_.size(); }
+
+ void SetEventTargeter(scoped_ptr<EventTargeter> targeter);
+
+ bool DidReceiveEvent(ui::EventType type) const;
+ void ResetReceivedEvents();
+
+ protected:
+ bool Contains(TestEventTarget* target) const;
+
+ // EventTarget:
+ virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE;
+ virtual EventTarget* GetParentTarget() OVERRIDE;
+ virtual scoped_ptr<EventTargetIterator> GetChildIterator() const OVERRIDE;
+ virtual EventTargeter* GetEventTargeter() OVERRIDE;
+
+ // EventHandler:
+ virtual void OnEvent(Event* event) OVERRIDE;
+
+ private:
+ void set_parent(TestEventTarget* parent) { parent_ = parent; }
+
+ TestEventTarget* parent_;
+ ScopedVector<TestEventTarget> children_;
+ scoped_ptr<EventTargeter> targeter_;
+
+ std::set<ui::EventType> received_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestEventTarget);
+};
+
+} // namespace test
+} // namespace ui
+
+#endif // UI_EVENTS_TEST_TEST_EVENT_TARGET_H_
diff --git a/ui/events/win/events_win.cc b/ui/events/win/events_win.cc
index 04b9cd058a..67f0213ca3 100644
--- a/ui/events/win/events_win.cc
+++ b/ui/events/win/events_win.cc
@@ -228,6 +228,11 @@ KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) {
return KeyboardCodeForWindowsKeyCode(native_event.wParam);
}
+const char* CodeFromNative(const base::NativeEvent& native_event) {
+ const uint16 scan_code = GetScanCodeFromLParam(native_event.lParam);
+ return CodeForWindowsScanCode(scan_code);
+}
+
bool IsMouseEvent(const base::NativeEvent& native_event) {
return IsClientMouseEvent(native_event) ||
IsNonClientMouseEvent(native_event);
@@ -369,4 +374,28 @@ bool IsMouseEventFromTouch(UINT message) {
MOUSEEVENTF_FROMTOUCH;
}
+// Conversion scan_code and LParam each other.
+// uint16 scan_code:
+// ui/events/keycodes/dom4/keycode_converter_data.h
+// 0 - 15bits: represetns the scan code.
+// 28 - 30 bits (0xE000): represents whether this is an extended key or not.
+//
+// LPARAM lParam:
+// http://msdn.microsoft.com/en-us/library/windows/desktop/ms644984.aspx
+// 16 - 23bits: represetns the scan code.
+// 24bit (0x0100): represents whether this is an extended key or not.
+uint16 GetScanCodeFromLParam(LPARAM l_param) {
+ uint16 scan_code = ((l_param >> 16) & 0x00FF);
+ if (l_param & (1 << 24))
+ scan_code |= 0xE000;
+ return scan_code;
+}
+
+LPARAM GetLParamFromScanCode(uint16 scan_code) {
+ LPARAM l_param = static_cast<LPARAM>(scan_code & 0x00FF) << 16;
+ if ((scan_code & 0xE000) == 0xE000)
+ l_param |= (1 << 24);
+ return l_param;
+}
+
} // namespace ui
diff --git a/ui/events/x/device_data_manager.cc b/ui/events/x/device_data_manager.cc
index 12dfb0c834..a2e02928c4 100644
--- a/ui/events/x/device_data_manager.cc
+++ b/ui/events/x/device_data_manager.cc
@@ -582,9 +582,8 @@ bool DeviceDataManager::GetDataRange(unsigned int deviceid,
}
void DeviceDataManager::SetDeviceListForTest(
- const std::vector<unsigned int>& devices,
- const std::vector<unsigned int>& cmt_devices,
- const std::vector<unsigned int>& touchpads) {
+ const std::vector<unsigned int>& touchscreen,
+ const std::vector<unsigned int>& cmt_devices) {
for (int i = 0; i < kMaxDeviceNum; ++i) {
valuator_count_[i] = 0;
valuator_lookup_[i].clear();
@@ -595,44 +594,59 @@ void DeviceDataManager::SetDeviceListForTest(
last_seen_valuator_[i][j].clear();
}
- for (size_t i = 0; i < devices.size(); i++) {
- unsigned int deviceid = devices[i];
- valuator_lookup_[deviceid].resize(DT_LAST_ENTRY, -1);
- data_type_lookup_[deviceid].resize(DT_LAST_ENTRY, DT_LAST_ENTRY);
- valuator_min_[deviceid].resize(DT_LAST_ENTRY, 0);
- valuator_max_[deviceid].resize(DT_LAST_ENTRY, 0);
- for (int j = 0; j < kMaxSlotNum; j++)
- last_seen_valuator_[deviceid][j].resize(DT_LAST_ENTRY, 0);
+ for (size_t i = 0; i < touchscreen.size(); i++) {
+ unsigned int deviceid = touchscreen[i];
+ InitializeValuatorsForTest(deviceid, kTouchDataTypeStart, kTouchDataTypeEnd,
+ 0, 1000);
}
cmt_devices_.reset();
for (size_t i = 0; i < cmt_devices.size(); ++i) {
- unsigned int deviceid = devices[i];
+ unsigned int deviceid = cmt_devices[i];
cmt_devices_[deviceid] = true;
+ touchpads_[deviceid] = true;
+ InitializeValuatorsForTest(deviceid, kCMTDataTypeStart, kCMTDataTypeEnd,
+ -1000, 1000);
}
+}
- touchpads_.reset();
- for (size_t i = 0; i < touchpads.size(); ++i) {
- unsigned int deviceid = devices[i];
- touchpads_[deviceid] = true;
+void DeviceDataManager::SetValuatorDataForTest(XIDeviceEvent* xievent,
+ DataType type,
+ double value) {
+ int index = valuator_lookup_[xievent->deviceid][type];
+ CHECK(!XIMaskIsSet(xievent->valuators.mask, index));
+ CHECK(index >= 0 && index < valuator_count_[xievent->deviceid]);
+ XISetMask(xievent->valuators.mask, index);
+
+ double* valuators = xievent->valuators.values;
+ for (int i = 0; i < index; ++i) {
+ if (XIMaskIsSet(xievent->valuators.mask, i))
+ valuators++;
}
+ for (int i = DT_LAST_ENTRY - 1; i > valuators - xievent->valuators.values;
+ --i)
+ xievent->valuators.values[i] = xievent->valuators.values[i - 1];
+ *valuators = value;
}
-void DeviceDataManager::SetDeviceValuatorForTest(int deviceid,
- int val_index,
- DataType data_type,
- double min,
- double max) {
- valuator_lookup_[deviceid][data_type] = val_index;
- data_type_lookup_[deviceid][val_index] = data_type;
- valuator_min_[deviceid][data_type] = min;
- valuator_max_[deviceid][data_type] = max;
-
- // Recalulate the number of valuators for the device.
- valuator_count_[deviceid] = 0;
- for (size_t i = 0; i < DT_LAST_ENTRY; ++i) {
- if (valuator_lookup_[deviceid][i] != -1)
- valuator_count_[deviceid]++;
+void DeviceDataManager::InitializeValuatorsForTest(int deviceid,
+ int start_valuator,
+ int end_valuator,
+ double min_value,
+ double max_value) {
+ valuator_lookup_[deviceid].resize(DT_LAST_ENTRY, -1);
+ data_type_lookup_[deviceid].resize(DT_LAST_ENTRY, DT_LAST_ENTRY);
+ valuator_min_[deviceid].resize(DT_LAST_ENTRY, 0);
+ valuator_max_[deviceid].resize(DT_LAST_ENTRY, 0);
+ for (int j = 0; j < kMaxSlotNum; j++)
+ last_seen_valuator_[deviceid][j].resize(DT_LAST_ENTRY, 0);
+ for (int j = start_valuator; j <= end_valuator; ++j) {
+ valuator_lookup_[deviceid][j] = valuator_count_[deviceid];
+ data_type_lookup_[deviceid][valuator_count_[deviceid]] = j;
+ valuator_min_[deviceid][j] = min_value;
+ valuator_max_[deviceid][j] = max_value;
+ valuator_count_[deviceid]++;
}
}
+
} // namespace ui
diff --git a/ui/events/x/device_data_manager.h b/ui/events/x/device_data_manager.h
index 62a95f88ef..aff0649357 100644
--- a/ui/events/x/device_data_manager.h
+++ b/ui/events/x/device_data_manager.h
@@ -215,23 +215,17 @@ class EVENTS_BASE_EXPORT DeviceDataManager {
double* min,
double* max);
- // Setups relevant valuator informations for device ids in the list |devices|.
+ // Sets up relevant valuator informations for device ids in the device lists.
// This function is only for test purpose. It does not query the X server for
// the actual device info, but rather inits the relevant valuator structures
- // to have safe default values for testing. |cmt_devices| and |touchpads|
- // should only contain device ids in |devices|.
- void SetDeviceListForTest(const std::vector<unsigned int>& devices,
- const std::vector<unsigned int>& cmt_devices,
- const std::vector<unsigned int>& touchpads);
-
- // Setups device with |deviceid| to have valuator with type |data_type|,
- // at index |val_index|, and with |min|/|max| values. This is only for test
- // purpose.
- void SetDeviceValuatorForTest(int deviceid,
- int val_index,
- DataType data_type,
- double min,
- double max);
+ // to have safe default values for testing.
+ void SetDeviceListForTest(const std::vector<unsigned int>& touchscreen,
+ const std::vector<unsigned int>& cmt_devices);
+
+ void SetValuatorDataForTest(XIDeviceEvent* xievent,
+ DataType type,
+ double value);
+
private:
// Requirement for Singleton.
friend struct DefaultSingletonTraits<DeviceDataManager>;
@@ -245,6 +239,12 @@ class EVENTS_BASE_EXPORT DeviceDataManager {
// Check if an XI event contains data of the specified type.
bool HasEventData(const XIDeviceEvent* xiev, const DataType type) const;
+ void InitializeValuatorsForTest(int deviceid,
+ int start_valuator,
+ int end_valuator,
+ double min_value,
+ double max_value);
+
static const int kMaxDeviceNum = 128;
static const int kMaxXIEventType = XI_LASTEVENT + 1;
static const int kMaxSlotNum = 10;
diff --git a/ui/events/x/events_x.cc b/ui/events/x/events_x.cc
index f8f2decec6..498a69c7dc 100644
--- a/ui/events/x/events_x.cc
+++ b/ui/events/x/events_x.cc
@@ -474,6 +474,10 @@ KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) {
return KeyboardCodeFromXKeyEvent(native_event);
}
+const char* CodeFromNative(const base::NativeEvent& native_event) {
+ return CodeFromXEvent(native_event);
+}
+
bool IsMouseEvent(const base::NativeEvent& native_event) {
if (native_event->type == EnterNotify ||
native_event->type == LeaveNotify ||
diff --git a/ui/events/x/events_x_unittest.cc b/ui/events/x/events_x_unittest.cc
index 643454b5dc..b6c7f38c0c 100644
--- a/ui/events/x/events_x_unittest.cc
+++ b/ui/events/x/events_x_unittest.cc
@@ -175,7 +175,7 @@ TEST(EventsXTest, ClickCount) {
TEST(EventsXTest, TouchEventBasic) {
std::vector<unsigned int> devices;
devices.push_back(0);
- ui::SetupTouchDevicesForTest(devices);
+ ui::SetUpTouchDevicesForTest(devices);
std::vector<Valuator> valuators;
// Init touch begin with tracking id 5, touch id 0.
diff --git a/ui/gfx/android/gfx_jni_registrar.cc b/ui/gfx/android/gfx_jni_registrar.cc
index be60a33e5a..5b9ab1dbf1 100644
--- a/ui/gfx/android/gfx_jni_registrar.cc
+++ b/ui/gfx/android/gfx_jni_registrar.cc
@@ -8,6 +8,7 @@
#include "base/android/jni_registrar.h"
#include "ui/gfx/android/java_bitmap.h"
#include "ui/gfx/android/shared_device_display_info.h"
+#include "ui/gfx/android/view_configuration.h"
namespace gfx {
namespace android {
@@ -16,6 +17,7 @@ static base::android::RegistrationMethod kGfxRegisteredMethods[] = {
{ "SharedDeviceDisplayInfo",
SharedDeviceDisplayInfo::RegisterSharedDeviceDisplayInfo },
{ "JavaBitmap", JavaBitmap::RegisterJavaBitmap },
+ { "ViewConfiguration", ViewConfiguration::RegisterViewConfiguration }
};
bool RegisterJni(JNIEnv* env) {
diff --git a/ui/gfx/android/view_configuration.cc b/ui/gfx/android/view_configuration.cc
new file mode 100644
index 0000000000..63657178b1
--- /dev/null
+++ b/ui/gfx/android/view_configuration.cc
@@ -0,0 +1,56 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/gfx/android/view_configuration.h"
+
+#include "base/android/jni_android.h"
+#include "jni/ViewConfiguration_jni.h"
+
+using namespace JNI_ViewConfiguration;
+using base::android::AttachCurrentThread;
+using base::android::GetApplicationContext;
+
+namespace gfx {
+
+int ViewConfiguration::GetDoubleTapTimeoutInMs() {
+ JNIEnv* env = AttachCurrentThread();
+ return Java_ViewConfiguration_getDoubleTapTimeout(env);
+}
+
+int ViewConfiguration::GetLongPressTimeoutInMs() {
+ JNIEnv* env = AttachCurrentThread();
+ return Java_ViewConfiguration_getLongPressTimeout(env);
+}
+
+int ViewConfiguration::GetTapTimeoutInMs() {
+ JNIEnv* env = AttachCurrentThread();
+ return Java_ViewConfiguration_getTapTimeout(env);
+}
+
+int ViewConfiguration::GetMaximumFlingVelocityInPixelsPerSecond() {
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> view =
+ Java_ViewConfiguration_get(env, GetApplicationContext());
+ return Java_ViewConfiguration_getScaledMaximumFlingVelocity(env, view.obj());
+}
+
+int ViewConfiguration::GetMinimumFlingVelocityInPixelsPerSecond() {
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> view =
+ Java_ViewConfiguration_get(env, GetApplicationContext());
+ return Java_ViewConfiguration_getScaledMinimumFlingVelocity(env, view.obj());
+}
+
+int ViewConfiguration::GetTouchSlopInPixels() {
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> view =
+ Java_ViewConfiguration_get(env, GetApplicationContext());
+ return Java_ViewConfiguration_getScaledTouchSlop(env, view.obj());
+}
+
+bool ViewConfiguration::RegisterViewConfiguration(JNIEnv* env) {
+ return RegisterNativesImpl(env);
+}
+
+} // namespace gfx
diff --git a/ui/gfx/android/view_configuration.h b/ui/gfx/android/view_configuration.h
new file mode 100644
index 0000000000..f0995cb3e2
--- /dev/null
+++ b/ui/gfx/android/view_configuration.h
@@ -0,0 +1,32 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_GFX_ANDROID_VIEW_CONFIGURATION_H_
+#define UI_GFX_ANDROID_VIEW_CONFIGURATION_H_
+
+#include <jni.h>
+
+#include "ui/gfx/gfx_export.h"
+
+namespace gfx {
+
+// Provides access to Android's ViewConfiguration for gesture-related constants.
+class GFX_EXPORT ViewConfiguration {
+ public:
+ static int GetDoubleTapTimeoutInMs();
+ static int GetLongPressTimeoutInMs();
+ static int GetTapTimeoutInMs();
+
+ static int GetMaximumFlingVelocityInPixelsPerSecond();
+ static int GetMinimumFlingVelocityInPixelsPerSecond();
+
+ static int GetTouchSlopInPixels();
+
+ // Registers methods with JNI and returns true if succeeded.
+ static bool RegisterViewConfiguration(JNIEnv* env);
+};
+
+} // namespace gfx
+
+#endif // UI_GFX_ANDROID_VIEW_CONFIGURATION_H_
diff --git a/ui/gfx/canvas.cc b/ui/gfx/canvas.cc
index 69f10cfff2..b89efa9e2b 100644
--- a/ui/gfx/canvas.cc
+++ b/ui/gfx/canvas.cc
@@ -332,6 +332,22 @@ void Canvas::DrawFocusRect(const Rect& rect) {
DrawDashedRect(rect, SK_ColorGRAY);
}
+void Canvas::DrawSolidFocusRect(const Rect& rect, SkColor color) {
+ SkPaint paint;
+ paint.setColor(color);
+ paint.setStrokeWidth(SkIntToScalar(1));
+ // Note: We cannot use DrawRect since it would create a path and fill it which
+ // would cause problems near the edge of the canvas.
+ int x1 = std::min(rect.x(), rect.right());
+ int x2 = std::max(rect.x(), rect.right());
+ int y1 = std::min(rect.y(), rect.bottom());
+ int y2 = std::max(rect.y(), rect.bottom());
+ DrawLine(Point(x1, y1), Point(x2, y1), paint);
+ DrawLine(Point(x1, y2), Point(x2, y2), paint);
+ DrawLine(Point(x1, y1), Point(x1, y2), paint);
+ DrawLine(Point(x2, y1), Point(x2, y2 + 1), paint);
+}
+
void Canvas::DrawImageInt(const ImageSkia& image, int x, int y) {
SkPaint paint;
DrawImageInt(image, x, y, paint);
diff --git a/ui/gfx/canvas.h b/ui/gfx/canvas.h
index eb86e69871..f8193f1134 100644
--- a/ui/gfx/canvas.h
+++ b/ui/gfx/canvas.h
@@ -409,6 +409,10 @@ class GFX_EXPORT Canvas {
// Draws a dotted gray rectangle used for focus purposes.
void DrawFocusRect(const Rect& rect);
+ // Draws a |rect| in the specified region with the specified |color| with a
+ // with of one logical pixel which might be more device pixels.
+ void DrawSolidFocusRect(const Rect& rect, SkColor color);
+
// Tiles the image in the specified region.
// Parameters are specified relative to current canvas scale not in pixels.
// Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1.
diff --git a/ui/gfx/font.cc b/ui/gfx/font.cc
index 7f6ac7ce80..9eea73b608 100644
--- a/ui/gfx/font.cc
+++ b/ui/gfx/font.cc
@@ -78,6 +78,10 @@ std::string Font::GetFontName() const {
return platform_font_->GetFontName();
}
+std::string Font::GetActualFontNameForTesting() const {
+ return platform_font_->GetActualFontNameForTesting();
+}
+
int Font::GetFontSize() const {
return platform_font_->GetFontSize();
}
diff --git a/ui/gfx/font.h b/ui/gfx/font.h
index f84bfa2bf6..963dde70ff 100644
--- a/ui/gfx/font.h
+++ b/ui/gfx/font.h
@@ -96,9 +96,12 @@ class GFX_EXPORT Font {
// Returns the style of the font.
int GetStyle() const;
- // Returns the font name in UTF-8.
+ // Returns the specified font name in UTF-8.
std::string GetFontName() const;
+ // Returns the actually used font name in UTF-8.
+ std::string GetActualFontNameForTesting() const;
+
// Returns the font size in pixels.
int GetFontSize() const;
diff --git a/ui/gfx/font_list_unittest.cc b/ui/gfx/font_list_unittest.cc
index f263673e16..6cbb41fbec 100644
--- a/ui/gfx/font_list_unittest.cc
+++ b/ui/gfx/font_list_unittest.cc
@@ -9,6 +9,7 @@
#include <vector>
#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
@@ -289,10 +290,10 @@ TEST(FontListTest, Fonts_DeriveFontListWithSizeDeltaAndStyle) {
EXPECT_EQ("Sans serif|13|bold", FontToString(derived_fonts[1]));
}
-// Disabled. http://crbug.com/316955
-TEST(FontListTest, DISABLED_Fonts_GetHeight_GetBaseline) {
+TEST(FontListTest, Fonts_GetHeight_GetBaseline) {
// If a font list has only one font, the height and baseline must be the same.
Font font1("Arial", 16);
+ ASSERT_EQ("arial", StringToLowerASCII(font1.GetActualFontNameForTesting()));
FontList font_list1("Arial, 16px");
EXPECT_EQ(font1.GetHeight(), font_list1.GetHeight());
EXPECT_EQ(font1.GetBaseline(), font_list1.GetBaseline());
@@ -300,6 +301,7 @@ TEST(FontListTest, DISABLED_Fonts_GetHeight_GetBaseline) {
// If there are two different fonts, the font list returns the max value
// for ascent and descent.
Font font2("Symbol", 16);
+ ASSERT_EQ("symbol", StringToLowerASCII(font2.GetActualFontNameForTesting()));
EXPECT_NE(font1.GetBaseline(), font2.GetBaseline());
EXPECT_NE(font1.GetHeight() - font1.GetBaseline(),
font2.GetHeight() - font2.GetBaseline());
diff --git a/ui/gfx/font_unittest.cc b/ui/gfx/font_unittest.cc
index 2fe61939d1..2fdaab872f 100644
--- a/ui/gfx/font_unittest.cc
+++ b/ui/gfx/font_unittest.cc
@@ -5,6 +5,7 @@
#include "ui/gfx/font.h"
#include "base/strings/string16.h"
+#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -63,6 +64,7 @@ TEST_F(FontTest, LoadArial) {
EXPECT_EQ(cf.GetStyle(), Font::NORMAL);
EXPECT_EQ(cf.GetFontSize(), 16);
EXPECT_EQ(cf.GetFontName(), "Arial");
+ EXPECT_EQ("arial", StringToLowerASCII(cf.GetActualFontNameForTesting()));
FreeIfNecessary(native);
}
@@ -72,6 +74,7 @@ TEST_F(FontTest, LoadArialBold) {
NativeFont native = bold.GetNativeFont();
EXPECT_TRUE(native);
EXPECT_EQ(bold.GetStyle(), Font::BOLD);
+ EXPECT_EQ("arial", StringToLowerASCII(cf.GetActualFontNameForTesting()));
FreeIfNecessary(native);
}
@@ -123,6 +126,22 @@ TEST_F(FontTest, Widths) {
cf.GetStringWidth(ASCIIToUTF16("ab")));
}
+#if !defined(OS_WIN)
+// On Windows, Font::GetActualFontNameForTesting() doesn't work well for now.
+// http://crbug.com/327287
+TEST_F(FontTest, GetActualFontNameForTesting) {
+ Font arial("Arial", 16);
+ EXPECT_EQ("arial", StringToLowerASCII(arial.GetActualFontNameForTesting()));
+ Font symbol("Symbol", 16);
+ EXPECT_EQ("symbol", StringToLowerASCII(symbol.GetActualFontNameForTesting()));
+
+ const char* const invalid_font_name = "no_such_font_name";
+ Font fallback_font(invalid_font_name, 16);
+ EXPECT_NE(invalid_font_name,
+ StringToLowerASCII(fallback_font.GetActualFontNameForTesting()));
+}
+#endif
+
#if defined(OS_WIN)
TEST_F(FontTest, DeriveFontResizesIfSizeTooSmall) {
Font cf("Arial", 8);
diff --git a/ui/gfx/frame_time.h b/ui/gfx/frame_time.h
index 8d143eed2c..5cc65f5f4a 100644
--- a/ui/gfx/frame_time.h
+++ b/ui/gfx/frame_time.h
@@ -28,7 +28,10 @@ class FrameTime {
#endif
static bool TimestampsAreHighRes() {
- return base::TimeTicks::IsHighResNowFastAndReliable();
+ // This should really return base::TimeTicks::IsHighResNowFastAndReliable();
+ // Returning false makes sure we are only using low-res timestamps until we
+ // use FrameTime everywhere we need to. See crbug.com/315334
+ return false;
}
};
diff --git a/ui/gfx/gfx.gyp b/ui/gfx/gfx.gyp
index bba9b57414..5fb17d52ee 100644
--- a/ui/gfx/gfx.gyp
+++ b/ui/gfx/gfx.gyp
@@ -41,6 +41,8 @@
'android/java_bitmap.h',
'android/shared_device_display_info.cc',
'android/shared_device_display_info.h',
+ 'android/view_configuration.cc',
+ 'android/view_configuration.h',
'animation/animation.cc',
'animation/animation.h',
'animation/animation_container.cc',
@@ -403,8 +405,20 @@
['OS=="android"' , {
'targets': [
{
+ 'target_name': 'gfx_view_jni_headers',
+ 'type': 'none',
+ 'variables': {
+ 'jni_gen_package': 'ui/gfx',
+ 'input_java_class': 'android/view/ViewConfiguration.class',
+ },
+ 'includes': [ '../../build/jar_file_jni_generator.gypi' ],
+ },
+ {
'target_name': 'gfx_jni_headers',
'type': 'none',
+ 'dependencies': [
+ 'gfx_view_jni_headers'
+ ],
'direct_dependent_settings': {
'include_dirs': [
'<(SHARED_INTERMEDIATE_DIR)/ui/gfx',
@@ -416,7 +430,7 @@
],
'variables': {
'jni_gen_package': 'ui/gfx',
- 'jni_generator_ptr_type': 'long',
+ 'jni_generator_ptr_type': 'long'
},
'includes': [ '../../build/jni_generator.gypi' ],
},
diff --git a/ui/gfx/gfx.target.darwin-arm.mk b/ui/gfx/gfx.target.darwin-arm.mk
index 9dd3da459a..68cdfaf472 100644
--- a/ui/gfx/gfx.target.darwin-arm.mk
+++ b/ui/gfx/gfx.target.darwin-arm.mk
@@ -33,6 +33,7 @@ LOCAL_SRC_FILES := \
ui/gfx/android/gfx_jni_registrar.cc \
ui/gfx/android/java_bitmap.cc \
ui/gfx/android/shared_device_display_info.cc \
+ ui/gfx/android/view_configuration.cc \
ui/gfx/animation/animation.cc \
ui/gfx/animation/animation_container.cc \
ui/gfx/animation/linear_animation.cc \
@@ -137,6 +138,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -146,9 +148,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGFX_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
@@ -254,6 +258,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -263,9 +268,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGFX_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
diff --git a/ui/gfx/gfx.target.darwin-mips.mk b/ui/gfx/gfx.target.darwin-mips.mk
index 2c83dfcfea..1f3e3c58ab 100644
--- a/ui/gfx/gfx.target.darwin-mips.mk
+++ b/ui/gfx/gfx.target.darwin-mips.mk
@@ -33,6 +33,7 @@ LOCAL_SRC_FILES := \
ui/gfx/android/gfx_jni_registrar.cc \
ui/gfx/android/java_bitmap.cc \
ui/gfx/android/shared_device_display_info.cc \
+ ui/gfx/android/view_configuration.cc \
ui/gfx/animation/animation.cc \
ui/gfx/animation/animation_container.cc \
ui/gfx/animation/linear_animation.cc \
@@ -136,6 +137,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -145,9 +147,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGFX_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
@@ -252,6 +256,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -261,9 +266,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGFX_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
diff --git a/ui/gfx/gfx.target.darwin-x86.mk b/ui/gfx/gfx.target.darwin-x86.mk
index 661858e374..627d38a969 100644
--- a/ui/gfx/gfx.target.darwin-x86.mk
+++ b/ui/gfx/gfx.target.darwin-x86.mk
@@ -33,6 +33,7 @@ LOCAL_SRC_FILES := \
ui/gfx/android/gfx_jni_registrar.cc \
ui/gfx/android/java_bitmap.cc \
ui/gfx/android/shared_device_display_info.cc \
+ ui/gfx/android/view_configuration.cc \
ui/gfx/animation/animation.cc \
ui/gfx/animation/animation_container.cc \
ui/gfx/animation/linear_animation.cc \
@@ -139,6 +140,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -148,9 +150,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGFX_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -258,6 +262,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -267,9 +272,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGFX_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
diff --git a/ui/gfx/gfx.target.linux-arm.mk b/ui/gfx/gfx.target.linux-arm.mk
index 9dd3da459a..68cdfaf472 100644
--- a/ui/gfx/gfx.target.linux-arm.mk
+++ b/ui/gfx/gfx.target.linux-arm.mk
@@ -33,6 +33,7 @@ LOCAL_SRC_FILES := \
ui/gfx/android/gfx_jni_registrar.cc \
ui/gfx/android/java_bitmap.cc \
ui/gfx/android/shared_device_display_info.cc \
+ ui/gfx/android/view_configuration.cc \
ui/gfx/animation/animation.cc \
ui/gfx/animation/animation_container.cc \
ui/gfx/animation/linear_animation.cc \
@@ -137,6 +138,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -146,9 +148,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGFX_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
@@ -254,6 +258,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -263,9 +268,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGFX_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
diff --git a/ui/gfx/gfx.target.linux-mips.mk b/ui/gfx/gfx.target.linux-mips.mk
index 2c83dfcfea..1f3e3c58ab 100644
--- a/ui/gfx/gfx.target.linux-mips.mk
+++ b/ui/gfx/gfx.target.linux-mips.mk
@@ -33,6 +33,7 @@ LOCAL_SRC_FILES := \
ui/gfx/android/gfx_jni_registrar.cc \
ui/gfx/android/java_bitmap.cc \
ui/gfx/android/shared_device_display_info.cc \
+ ui/gfx/android/view_configuration.cc \
ui/gfx/animation/animation.cc \
ui/gfx/animation/animation_container.cc \
ui/gfx/animation/linear_animation.cc \
@@ -136,6 +137,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -145,9 +147,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGFX_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
@@ -252,6 +256,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -261,9 +266,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGFX_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
diff --git a/ui/gfx/gfx.target.linux-x86.mk b/ui/gfx/gfx.target.linux-x86.mk
index 661858e374..627d38a969 100644
--- a/ui/gfx/gfx.target.linux-x86.mk
+++ b/ui/gfx/gfx.target.linux-x86.mk
@@ -33,6 +33,7 @@ LOCAL_SRC_FILES := \
ui/gfx/android/gfx_jni_registrar.cc \
ui/gfx/android/java_bitmap.cc \
ui/gfx/android/shared_device_display_info.cc \
+ ui/gfx/android/view_configuration.cc \
ui/gfx/animation/animation.cc \
ui/gfx/animation/animation_container.cc \
ui/gfx/animation/linear_animation.cc \
@@ -139,6 +140,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -148,9 +150,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGFX_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -258,6 +262,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -267,9 +272,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGFX_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
diff --git a/ui/gfx/gfx_jni_headers.target.darwin-arm.mk b/ui/gfx/gfx_jni_headers.target.darwin-arm.mk
index cdfd65e013..dd5ac24499 100644
--- a/ui/gfx/gfx_jni_headers.target.darwin-arm.mk
+++ b/ui/gfx/gfx_jni_headers.target.darwin-arm.mk
@@ -11,7 +11,8 @@ gyp_intermediate_dir := $(call local-intermediates-dir)
gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
+GYP_TARGET_DEPENDENCIES := \
+ $(call intermediates-dir-for,GYP,ui_gfx_gfx_view_jni_headers_gyp)/gfx_view_jni_headers.stamp
### Generated for rule "ui_gfx_gfx_gyp_gfx_jni_headers_target_generate_jni_headers":
@@ -90,6 +91,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -99,9 +101,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -169,6 +173,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -178,9 +183,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gfx/gfx_jni_headers.target.darwin-mips.mk b/ui/gfx/gfx_jni_headers.target.darwin-mips.mk
index 242613f584..a25c617066 100644
--- a/ui/gfx/gfx_jni_headers.target.darwin-mips.mk
+++ b/ui/gfx/gfx_jni_headers.target.darwin-mips.mk
@@ -11,7 +11,8 @@ gyp_intermediate_dir := $(call local-intermediates-dir)
gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
+GYP_TARGET_DEPENDENCIES := \
+ $(call intermediates-dir-for,GYP,ui_gfx_gfx_view_jni_headers_gyp)/gfx_view_jni_headers.stamp
### Generated for rule "ui_gfx_gfx_gyp_gfx_jni_headers_target_generate_jni_headers":
@@ -89,6 +90,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -98,9 +100,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -167,6 +171,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -176,9 +181,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gfx/gfx_jni_headers.target.darwin-x86.mk b/ui/gfx/gfx_jni_headers.target.darwin-x86.mk
index b2f69d44ee..d49eda774f 100644
--- a/ui/gfx/gfx_jni_headers.target.darwin-x86.mk
+++ b/ui/gfx/gfx_jni_headers.target.darwin-x86.mk
@@ -11,7 +11,8 @@ gyp_intermediate_dir := $(call local-intermediates-dir)
gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
+GYP_TARGET_DEPENDENCIES := \
+ $(call intermediates-dir-for,GYP,ui_gfx_gfx_view_jni_headers_gyp)/gfx_view_jni_headers.stamp
### Generated for rule "ui_gfx_gfx_gyp_gfx_jni_headers_target_generate_jni_headers":
@@ -92,6 +93,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -101,9 +103,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -174,6 +178,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -183,9 +188,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gfx/gfx_jni_headers.target.linux-arm.mk b/ui/gfx/gfx_jni_headers.target.linux-arm.mk
index cdfd65e013..dd5ac24499 100644
--- a/ui/gfx/gfx_jni_headers.target.linux-arm.mk
+++ b/ui/gfx/gfx_jni_headers.target.linux-arm.mk
@@ -11,7 +11,8 @@ gyp_intermediate_dir := $(call local-intermediates-dir)
gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
+GYP_TARGET_DEPENDENCIES := \
+ $(call intermediates-dir-for,GYP,ui_gfx_gfx_view_jni_headers_gyp)/gfx_view_jni_headers.stamp
### Generated for rule "ui_gfx_gfx_gyp_gfx_jni_headers_target_generate_jni_headers":
@@ -90,6 +91,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -99,9 +101,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -169,6 +173,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -178,9 +183,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gfx/gfx_jni_headers.target.linux-mips.mk b/ui/gfx/gfx_jni_headers.target.linux-mips.mk
index 242613f584..a25c617066 100644
--- a/ui/gfx/gfx_jni_headers.target.linux-mips.mk
+++ b/ui/gfx/gfx_jni_headers.target.linux-mips.mk
@@ -11,7 +11,8 @@ gyp_intermediate_dir := $(call local-intermediates-dir)
gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
+GYP_TARGET_DEPENDENCIES := \
+ $(call intermediates-dir-for,GYP,ui_gfx_gfx_view_jni_headers_gyp)/gfx_view_jni_headers.stamp
### Generated for rule "ui_gfx_gfx_gyp_gfx_jni_headers_target_generate_jni_headers":
@@ -89,6 +90,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -98,9 +100,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -167,6 +171,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -176,9 +181,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gfx/gfx_jni_headers.target.linux-x86.mk b/ui/gfx/gfx_jni_headers.target.linux-x86.mk
index b2f69d44ee..d49eda774f 100644
--- a/ui/gfx/gfx_jni_headers.target.linux-x86.mk
+++ b/ui/gfx/gfx_jni_headers.target.linux-x86.mk
@@ -11,7 +11,8 @@ gyp_intermediate_dir := $(call local-intermediates-dir)
gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
# Make sure our deps are built first.
-GYP_TARGET_DEPENDENCIES :=
+GYP_TARGET_DEPENDENCIES := \
+ $(call intermediates-dir-for,GYP,ui_gfx_gfx_view_jni_headers_gyp)/gfx_view_jni_headers.stamp
### Generated for rule "ui_gfx_gfx_gyp_gfx_jni_headers_target_generate_jni_headers":
@@ -92,6 +93,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -101,9 +103,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -174,6 +178,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -183,9 +188,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gfx/gfx_view_jni_headers.target.darwin-arm.mk b/ui/gfx/gfx_view_jni_headers.target.darwin-arm.mk
new file mode 100644
index 0000000000..e3674d90bd
--- /dev/null
+++ b/ui/gfx/gfx_view_jni_headers.target.darwin-arm.mk
@@ -0,0 +1,226 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := ui_gfx_gfx_view_jni_headers_gyp
+LOCAL_MODULE_STEM := gfx_view_jni_headers
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_jni_headers_from_jar_file":
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(PWD)/prebuilts/sdk/18/android.jar $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating JNI bindings from $(PWD)/prebuilts/sdk/18/android.jar/android/view/ViewConfiguration.class ($@)"
+ $(hide)cd $(gyp_local_path)/ui/gfx; mkdir -p $(gyp_shared_intermediate_dir)/ui/gfx/jni; ../../base/android/jni_generator/jni_generator.py -j "$(PWD)/prebuilts/sdk/18/android.jar" --input_file android/view/ViewConfiguration.class --output_dir "$(gyp_shared_intermediate_dir)/ui/gfx/jni" --optimize_generation 0
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_GENERATED_SOURCES := \
+ $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES :=
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -fno-tree-sra \
+ -fuse-ld=gold \
+ -Wno-psabi \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -g \
+ -fomit-frame-pointer \
+ -fdata-sections \
+ -ffunction-sections
+
+MY_DEFS_Debug := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+ '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+ '-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-abi \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -fno-tree-sra \
+ -fuse-ld=gold \
+ -Wno-psabi \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -fno-ident \
+ -fdata-sections \
+ -ffunction-sections \
+ -fomit-frame-pointer
+
+MY_DEFS_Release := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DNDEBUG' \
+ '-DNVALGRIND' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+ '-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-abi \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: ui_gfx_gfx_view_jni_headers_gyp
+
+# Alias gyp target name.
+.PHONY: gfx_view_jni_headers
+gfx_view_jni_headers: ui_gfx_gfx_view_jni_headers_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
diff --git a/ui/gfx/gfx_view_jni_headers.target.darwin-mips.mk b/ui/gfx/gfx_view_jni_headers.target.darwin-mips.mk
new file mode 100644
index 0000000000..4d9f26b3b6
--- /dev/null
+++ b/ui/gfx/gfx_view_jni_headers.target.darwin-mips.mk
@@ -0,0 +1,224 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := ui_gfx_gfx_view_jni_headers_gyp
+LOCAL_MODULE_STEM := gfx_view_jni_headers
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_jni_headers_from_jar_file":
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(PWD)/prebuilts/sdk/18/android.jar $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating JNI bindings from $(PWD)/prebuilts/sdk/18/android.jar/android/view/ViewConfiguration.class ($@)"
+ $(hide)cd $(gyp_local_path)/ui/gfx; mkdir -p $(gyp_shared_intermediate_dir)/ui/gfx/jni; ../../base/android/jni_generator/jni_generator.py -j "$(PWD)/prebuilts/sdk/18/android.jar" --input_file android/view/ViewConfiguration.class --output_dir "$(gyp_shared_intermediate_dir)/ui/gfx/jni" --optimize_generation 0
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_GENERATED_SOURCES := \
+ $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES :=
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -EL \
+ -mhard-float \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -g \
+ -fomit-frame-pointer \
+ -fdata-sections \
+ -ffunction-sections
+
+MY_DEFS_Debug := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+ '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+ '-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-uninitialized \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -EL \
+ -mhard-float \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -fno-ident \
+ -fdata-sections \
+ -ffunction-sections \
+ -fomit-frame-pointer
+
+MY_DEFS_Release := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DNDEBUG' \
+ '-DNVALGRIND' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+ '-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-uninitialized \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: ui_gfx_gfx_view_jni_headers_gyp
+
+# Alias gyp target name.
+.PHONY: gfx_view_jni_headers
+gfx_view_jni_headers: ui_gfx_gfx_view_jni_headers_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
diff --git a/ui/gfx/gfx_view_jni_headers.target.darwin-x86.mk b/ui/gfx/gfx_view_jni_headers.target.darwin-x86.mk
new file mode 100644
index 0000000000..16b0959015
--- /dev/null
+++ b/ui/gfx/gfx_view_jni_headers.target.darwin-x86.mk
@@ -0,0 +1,230 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := ui_gfx_gfx_view_jni_headers_gyp
+LOCAL_MODULE_STEM := gfx_view_jni_headers
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_jni_headers_from_jar_file":
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(PWD)/prebuilts/sdk/18/android.jar $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating JNI bindings from $(PWD)/prebuilts/sdk/18/android.jar/android/view/ViewConfiguration.class ($@)"
+ $(hide)cd $(gyp_local_path)/ui/gfx; mkdir -p $(gyp_shared_intermediate_dir)/ui/gfx/jni; ../../base/android/jni_generator/jni_generator.py -j "$(PWD)/prebuilts/sdk/18/android.jar" --input_file android/view/ViewConfiguration.class --output_dir "$(gyp_shared_intermediate_dir)/ui/gfx/jni" --optimize_generation 0
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_GENERATED_SOURCES := \
+ $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES :=
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -m32 \
+ -mmmx \
+ -march=pentium4 \
+ -msse2 \
+ -mfpmath=sse \
+ -fuse-ld=gold \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -fno-stack-protector \
+ -Os \
+ -g \
+ -fomit-frame-pointer \
+ -fdata-sections \
+ -ffunction-sections
+
+MY_DEFS_Debug := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+ '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+ '-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -m32 \
+ -mmmx \
+ -march=pentium4 \
+ -msse2 \
+ -mfpmath=sse \
+ -fuse-ld=gold \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -fno-stack-protector \
+ -Os \
+ -fno-ident \
+ -fdata-sections \
+ -ffunction-sections \
+ -fomit-frame-pointer \
+ -fno-unwind-tables \
+ -fno-asynchronous-unwind-tables
+
+MY_DEFS_Release := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DNDEBUG' \
+ '-DNVALGRIND' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+ '-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: ui_gfx_gfx_view_jni_headers_gyp
+
+# Alias gyp target name.
+.PHONY: gfx_view_jni_headers
+gfx_view_jni_headers: ui_gfx_gfx_view_jni_headers_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
diff --git a/ui/gfx/gfx_view_jni_headers.target.linux-arm.mk b/ui/gfx/gfx_view_jni_headers.target.linux-arm.mk
new file mode 100644
index 0000000000..e3674d90bd
--- /dev/null
+++ b/ui/gfx/gfx_view_jni_headers.target.linux-arm.mk
@@ -0,0 +1,226 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := ui_gfx_gfx_view_jni_headers_gyp
+LOCAL_MODULE_STEM := gfx_view_jni_headers
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_jni_headers_from_jar_file":
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(PWD)/prebuilts/sdk/18/android.jar $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating JNI bindings from $(PWD)/prebuilts/sdk/18/android.jar/android/view/ViewConfiguration.class ($@)"
+ $(hide)cd $(gyp_local_path)/ui/gfx; mkdir -p $(gyp_shared_intermediate_dir)/ui/gfx/jni; ../../base/android/jni_generator/jni_generator.py -j "$(PWD)/prebuilts/sdk/18/android.jar" --input_file android/view/ViewConfiguration.class --output_dir "$(gyp_shared_intermediate_dir)/ui/gfx/jni" --optimize_generation 0
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_GENERATED_SOURCES := \
+ $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES :=
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -fno-tree-sra \
+ -fuse-ld=gold \
+ -Wno-psabi \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -g \
+ -fomit-frame-pointer \
+ -fdata-sections \
+ -ffunction-sections
+
+MY_DEFS_Debug := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+ '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+ '-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-abi \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -fno-tree-sra \
+ -fuse-ld=gold \
+ -Wno-psabi \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -fno-ident \
+ -fdata-sections \
+ -ffunction-sections \
+ -fomit-frame-pointer
+
+MY_DEFS_Release := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DNDEBUG' \
+ '-DNVALGRIND' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+ '-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-abi \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: ui_gfx_gfx_view_jni_headers_gyp
+
+# Alias gyp target name.
+.PHONY: gfx_view_jni_headers
+gfx_view_jni_headers: ui_gfx_gfx_view_jni_headers_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
diff --git a/ui/gfx/gfx_view_jni_headers.target.linux-mips.mk b/ui/gfx/gfx_view_jni_headers.target.linux-mips.mk
new file mode 100644
index 0000000000..4d9f26b3b6
--- /dev/null
+++ b/ui/gfx/gfx_view_jni_headers.target.linux-mips.mk
@@ -0,0 +1,224 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := ui_gfx_gfx_view_jni_headers_gyp
+LOCAL_MODULE_STEM := gfx_view_jni_headers
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_jni_headers_from_jar_file":
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(PWD)/prebuilts/sdk/18/android.jar $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating JNI bindings from $(PWD)/prebuilts/sdk/18/android.jar/android/view/ViewConfiguration.class ($@)"
+ $(hide)cd $(gyp_local_path)/ui/gfx; mkdir -p $(gyp_shared_intermediate_dir)/ui/gfx/jni; ../../base/android/jni_generator/jni_generator.py -j "$(PWD)/prebuilts/sdk/18/android.jar" --input_file android/view/ViewConfiguration.class --output_dir "$(gyp_shared_intermediate_dir)/ui/gfx/jni" --optimize_generation 0
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_GENERATED_SOURCES := \
+ $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES :=
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -EL \
+ -mhard-float \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -g \
+ -fomit-frame-pointer \
+ -fdata-sections \
+ -ffunction-sections
+
+MY_DEFS_Debug := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+ '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+ '-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-uninitialized \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+ -fstack-protector \
+ --param=ssp-buffer-size=4 \
+ \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -EL \
+ -mhard-float \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fstack-protector \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -Os \
+ -fno-ident \
+ -fdata-sections \
+ -ffunction-sections \
+ -fomit-frame-pointer
+
+MY_DEFS_Release := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DNDEBUG' \
+ '-DNVALGRIND' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+ '-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-uninitialized \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: ui_gfx_gfx_view_jni_headers_gyp
+
+# Alias gyp target name.
+.PHONY: gfx_view_jni_headers
+gfx_view_jni_headers: ui_gfx_gfx_view_jni_headers_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
diff --git a/ui/gfx/gfx_view_jni_headers.target.linux-x86.mk b/ui/gfx/gfx_view_jni_headers.target.linux-x86.mk
new file mode 100644
index 0000000000..16b0959015
--- /dev/null
+++ b/ui/gfx/gfx_view_jni_headers.target.linux-x86.mk
@@ -0,0 +1,230 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := GYP
+LOCAL_MODULE := ui_gfx_gfx_view_jni_headers_gyp
+LOCAL_MODULE_STEM := gfx_view_jni_headers
+LOCAL_MODULE_SUFFIX := .stamp
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES :=
+
+### Rules for action "generate_jni_headers_from_jar_file":
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h: $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(PWD)/prebuilts/sdk/18/android.jar $(GYP_TARGET_DEPENDENCIES)
+ @echo "Gyp action: Generating JNI bindings from $(PWD)/prebuilts/sdk/18/android.jar/android/view/ViewConfiguration.class ($@)"
+ $(hide)cd $(gyp_local_path)/ui/gfx; mkdir -p $(gyp_shared_intermediate_dir)/ui/gfx/jni; ../../base/android/jni_generator/jni_generator.py -j "$(PWD)/prebuilts/sdk/18/android.jar" --input_file android/view/ViewConfiguration.class --output_dir "$(gyp_shared_intermediate_dir)/ui/gfx/jni" --optimize_generation 0
+
+
+
+GYP_GENERATED_OUTPUTS := \
+ $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_GENERATED_SOURCES := \
+ $(gyp_shared_intermediate_dir)/ui/gfx/jni/ViewConfiguration_jni.h
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES :=
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Debug := \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -m32 \
+ -mmmx \
+ -march=pentium4 \
+ -msse2 \
+ -mfpmath=sse \
+ -fuse-ld=gold \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -fno-stack-protector \
+ -Os \
+ -g \
+ -fomit-frame-pointer \
+ -fdata-sections \
+ -ffunction-sections
+
+MY_DEFS_Debug := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+ '-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+ '-D_DEBUG'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Debug := \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Debug := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS_Release := \
+ --param=ssp-buffer-size=4 \
+ -Werror \
+ -fno-exceptions \
+ -fno-strict-aliasing \
+ -Wall \
+ -Wno-unused-parameter \
+ -Wno-missing-field-initializers \
+ -fvisibility=hidden \
+ -pipe \
+ -fPIC \
+ -m32 \
+ -mmmx \
+ -march=pentium4 \
+ -msse2 \
+ -mfpmath=sse \
+ -fuse-ld=gold \
+ -ffunction-sections \
+ -funwind-tables \
+ -g \
+ -fno-short-enums \
+ -finline-limit=64 \
+ -Wa,--noexecstack \
+ -U_FORTIFY_SOURCE \
+ -Wno-extra \
+ -Wno-ignored-qualifiers \
+ -Wno-type-limits \
+ -fno-stack-protector \
+ -Os \
+ -fno-ident \
+ -fdata-sections \
+ -ffunction-sections \
+ -fomit-frame-pointer \
+ -fno-unwind-tables \
+ -fno-asynchronous-unwind-tables
+
+MY_DEFS_Release := \
+ '-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
+ '-D_FILE_OFFSET_BITS=64' \
+ '-DNO_TCMALLOC' \
+ '-DDISABLE_NACL' \
+ '-DCHROMIUM_BUILD' \
+ '-DUSE_LIBJPEG_TURBO=1' \
+ '-DUSE_PROPRIETARY_CODECS' \
+ '-DENABLE_CONFIGURATION_POLICY' \
+ '-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
+ '-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
+ '-DUSE_OPENSSL=1' \
+ '-DENABLE_EGLIMAGE=1' \
+ '-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
+ '-DENABLE_MANAGED_USERS=1' \
+ '-D__STDC_CONSTANT_MACROS' \
+ '-D__STDC_FORMAT_MACROS' \
+ '-DANDROID' \
+ '-D__GNU_SOURCE=1' \
+ '-DUSE_STLPORT=1' \
+ '-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+ '-DCHROME_BUILD_ID=""' \
+ '-DNDEBUG' \
+ '-DNVALGRIND' \
+ '-DDYNAMIC_ANNOTATIONS_ENABLED=0' \
+ '-D_FORTIFY_SOURCE=2'
+
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES_Release := \
+ $(PWD)/frameworks/wilhelm/include \
+ $(PWD)/bionic \
+ $(PWD)/external/stlport/stlport
+
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS_Release := \
+ -fno-rtti \
+ -fno-threadsafe-statics \
+ -fvisibility-inlines-hidden \
+ -Wsign-compare \
+ -Wno-error=c++0x-compat \
+ -Wno-non-virtual-dtor \
+ -Wno-sign-promo
+
+
+LOCAL_CFLAGS := $(MY_CFLAGS_$(GYP_CONFIGURATION)) $(MY_DEFS_$(GYP_CONFIGURATION))
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES_$(GYP_CONFIGURATION))
+LOCAL_CPPFLAGS := $(LOCAL_CPPFLAGS_$(GYP_CONFIGURATION))
+### Rules for final target.
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: ui_gfx_gfx_view_jni_headers_gyp
+
+# Alias gyp target name.
+.PHONY: gfx_view_jni_headers
+gfx_view_jni_headers: ui_gfx_gfx_view_jni_headers_gyp
+
+LOCAL_MODULE_PATH := $(PRODUCT_OUT)/gyp_stamp
+LOCAL_UNINSTALLABLE_MODULE := true
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(LOCAL_ADDITIONAL_DEPENDENCIES)
+ $(hide) echo "Gyp timestamp: $@"
+ $(hide) mkdir -p $(dir $@)
+ $(hide) touch $@
diff --git a/ui/gfx/gpu_memory_buffer.h b/ui/gfx/gpu_memory_buffer.h
index 17bb669385..4a7b142d17 100644
--- a/ui/gfx/gpu_memory_buffer.h
+++ b/ui/gfx/gpu_memory_buffer.h
@@ -18,7 +18,8 @@ namespace gfx {
enum GpuMemoryBufferType {
EMPTY_BUFFER,
SHARED_MEMORY_BUFFER,
- EGL_CLIENT_BUFFER
+ EGL_CLIENT_BUFFER,
+ IO_SURFACE_BUFFER
};
struct GpuMemoryBufferHandle {
@@ -28,6 +29,9 @@ struct GpuMemoryBufferHandle {
#if defined(OS_ANDROID)
, native_buffer(NULL)
#endif
+#if defined(OS_MACOSX)
+ , io_surface_id(0)
+#endif
{
}
bool is_null() const { return type == EMPTY_BUFFER; }
@@ -36,6 +40,10 @@ struct GpuMemoryBufferHandle {
#if defined(OS_ANDROID)
EGLClientBuffer native_buffer;
#endif
+#if defined(OS_MACOSX)
+ uint32 io_surface_id;
+#endif
+
};
// Interface for creating and accessing a zero-copy GPU memory buffer.
diff --git a/ui/gfx/image/image_family.cc b/ui/gfx/image/image_family.cc
index 4a43a92e01..6719bc1ab1 100644
--- a/ui/gfx/image/image_family.cc
+++ b/ui/gfx/image/image_family.cc
@@ -21,6 +21,8 @@ ImageFamily::const_iterator::const_iterator(
const std::map<MapKey, gfx::Image>::const_iterator& other)
: map_iterator_(other) {}
+ImageFamily::const_iterator::~const_iterator() {}
+
ImageFamily::ImageFamily() {}
ImageFamily::~ImageFamily() {}
diff --git a/ui/gfx/image/image_family.h b/ui/gfx/image/image_family.h
index 93e005d18d..c092b2a87c 100644
--- a/ui/gfx/image/image_family.h
+++ b/ui/gfx/image/image_family.h
@@ -48,6 +48,8 @@ class GFX_EXPORT ImageFamily {
const_iterator(const const_iterator& other);
+ ~const_iterator();
+
const_iterator& operator++() {
++map_iterator_;
return *this;
diff --git a/ui/gfx/pango_util.cc b/ui/gfx/pango_util.cc
index c6f0b62f92..1f8ac261b5 100644
--- a/ui/gfx/pango_util.cc
+++ b/ui/gfx/pango_util.cc
@@ -226,7 +226,8 @@ static void SetupPangoLayoutWithoutFont(
if (flags & Canvas::HIDE_PREFIX) {
DCHECK_EQ(1, g_unichar_to_utf8(kAcceleratorChar, NULL));
base::string16 accelerator_removed =
- RemoveAcceleratorChar(text, static_cast<char16>(kAcceleratorChar),
+ RemoveAcceleratorChar(text,
+ static_cast<base::char16>(kAcceleratorChar),
NULL, NULL);
utf8 = UTF16ToUTF8(accelerator_removed);
} else {
diff --git a/ui/gfx/platform_font.h b/ui/gfx/platform_font.h
index d576bcdf06..bf470983e1 100644
--- a/ui/gfx/platform_font.h
+++ b/ui/gfx/platform_font.h
@@ -60,9 +60,12 @@ class GFX_EXPORT PlatformFont : public base::RefCounted<PlatformFont> {
// Returns the style of the font.
virtual int GetStyle() const = 0;
- // Returns the font name in UTF-8.
+ // Returns the specified font name in UTF-8.
virtual std::string GetFontName() const = 0;
+ // Returns the actually used font name in UTF-8.
+ virtual std::string GetActualFontNameForTesting() const = 0;
+
// Returns the font size in pixels.
virtual int GetFontSize() const = 0;
diff --git a/ui/gfx/platform_font_ios.h b/ui/gfx/platform_font_ios.h
index 2b30955032..ed93a6b6e6 100644
--- a/ui/gfx/platform_font_ios.h
+++ b/ui/gfx/platform_font_ios.h
@@ -26,6 +26,7 @@ class PlatformFontIOS : public PlatformFont {
virtual int GetExpectedTextWidth(int length) const OVERRIDE;
virtual int GetStyle() const OVERRIDE;
virtual std::string GetFontName() const OVERRIDE;
+ virtual std::string GetActualFontNameForTesting() const OVERRIDE;
virtual int GetFontSize() const OVERRIDE;
virtual NativeFont GetNativeFont() const OVERRIDE;
diff --git a/ui/gfx/platform_font_ios.mm b/ui/gfx/platform_font_ios.mm
index 92608d322c..32dcca4e39 100644
--- a/ui/gfx/platform_font_ios.mm
+++ b/ui/gfx/platform_font_ios.mm
@@ -76,6 +76,10 @@ std::string PlatformFontIOS::GetFontName() const {
return font_name_;
}
+std::string PlatformFontIOS::GetActualFontNameForTesting() const {
+ return base::SysNSStringToUTF8([GetNativeFont() familyName]);
+}
+
int PlatformFontIOS::GetFontSize() const {
return font_size_;
}
diff --git a/ui/gfx/platform_font_mac.h b/ui/gfx/platform_font_mac.h
index 02006c3be1..2f5f8deb3f 100644
--- a/ui/gfx/platform_font_mac.h
+++ b/ui/gfx/platform_font_mac.h
@@ -28,6 +28,7 @@ class PlatformFontMac : public PlatformFont {
virtual int GetExpectedTextWidth(int length) const OVERRIDE;
virtual int GetStyle() const OVERRIDE;
virtual std::string GetFontName() const OVERRIDE;
+ virtual std::string GetActualFontNameForTesting() const OVERRIDE;
virtual int GetFontSize() const OVERRIDE;
virtual NativeFont GetNativeFont() const OVERRIDE;
diff --git a/ui/gfx/platform_font_mac.mm b/ui/gfx/platform_font_mac.mm
index fa9d589aff..877507eb47 100644
--- a/ui/gfx/platform_font_mac.mm
+++ b/ui/gfx/platform_font_mac.mm
@@ -126,6 +126,10 @@ std::string PlatformFontMac::GetFontName() const {
return font_name_;
}
+std::string PlatformFontMac::GetActualFontNameForTesting() const {
+ return base::SysNSStringToUTF8([native_font_ familyName]);
+}
+
int PlatformFontMac::GetFontSize() const {
return font_size_;
}
diff --git a/ui/gfx/platform_font_ozone.cc b/ui/gfx/platform_font_ozone.cc
index f93b7373e4..aef042a0c9 100644
--- a/ui/gfx/platform_font_ozone.cc
+++ b/ui/gfx/platform_font_ozone.cc
@@ -6,14 +6,17 @@
namespace gfx {
+// static
PlatformFont* PlatformFont::CreateDefault() {
return NULL;
}
+// static
PlatformFont* PlatformFont::CreateFromNativeFont(NativeFont native_font) {
return NULL;
}
+// static
PlatformFont* PlatformFont::CreateFromNameAndSize(const std::string& font_name,
int font_size) {
return NULL;
diff --git a/ui/gfx/platform_font_pango.cc b/ui/gfx/platform_font_pango.cc
index 020cc7f229..db1d7dce35 100644
--- a/ui/gfx/platform_font_pango.cc
+++ b/ui/gfx/platform_font_pango.cc
@@ -15,6 +15,7 @@
#include "base/strings/string_split.h"
#include "base/strings/utf_string_conversions.h"
#include "third_party/skia/include/core/SkPaint.h"
+#include "third_party/skia/include/core/SkString.h"
#include "third_party/skia/include/core/SkTypeface.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/font.h"
@@ -215,6 +216,12 @@ std::string PlatformFontPango::GetFontName() const {
return font_family_;
}
+std::string PlatformFontPango::GetActualFontNameForTesting() const {
+ SkString family_name;
+ typeface_->getFamilyName(&family_name);
+ return family_name.c_str();
+}
+
int PlatformFontPango::GetFontSize() const {
return font_size_pixels_;
}
@@ -293,7 +300,7 @@ void PlatformFontPango::InitWithNameAndSize(const std::string& font_name,
std::string fallback;
skia::RefPtr<SkTypeface> typeface = skia::AdoptRef(
- SkTypeface::CreateFromName(font_name.c_str(), SkTypeface::kNormal));
+ SkTypeface::CreateFromName(font_name.c_str(), SkTypeface::kNormal));
if (!typeface) {
// A non-scalable font such as .pcf is specified. Falls back to a default
// scalable font.
diff --git a/ui/gfx/platform_font_pango.h b/ui/gfx/platform_font_pango.h
index 136bf671d4..739a633aa4 100644
--- a/ui/gfx/platform_font_pango.h
+++ b/ui/gfx/platform_font_pango.h
@@ -55,6 +55,7 @@ class GFX_EXPORT PlatformFontPango : public PlatformFont {
virtual int GetExpectedTextWidth(int length) const OVERRIDE;
virtual int GetStyle() const OVERRIDE;
virtual std::string GetFontName() const OVERRIDE;
+ virtual std::string GetActualFontNameForTesting() const OVERRIDE;
virtual int GetFontSize() const OVERRIDE;
virtual NativeFont GetNativeFont() const OVERRIDE;
@@ -75,8 +76,8 @@ class GFX_EXPORT PlatformFontPango : public PlatformFont {
void InitWithNameAndSize(const std::string& font_name, int font_size);
void InitWithTypefaceNameSizeAndStyle(
const skia::RefPtr<SkTypeface>& typeface,
- const std::string& name,
- int size,
+ const std::string& font_family,
+ int font_size,
int style);
void InitFromPlatformFont(const PlatformFontPango* other);
diff --git a/ui/gfx/platform_font_win.cc b/ui/gfx/platform_font_win.cc
index a97da2eedc..0209be6673 100644
--- a/ui/gfx/platform_font_win.cc
+++ b/ui/gfx/platform_font_win.cc
@@ -167,6 +167,13 @@ std::string PlatformFontWin::GetFontName() const {
return font_ref_->font_name();
}
+std::string PlatformFontWin::GetActualFontNameForTesting() const {
+ // With the current implementation on Windows, HFontRef::font_name() returns
+ // the font name taken from the HFONT handle, but it's not the name that comes
+ // from the font's metadata. See http://crbug.com/327287
+ return font_ref_->font_name();
+}
+
std::string PlatformFontWin::GetLocalizedFontName() const {
base::win::ScopedCreateDC memory_dc(CreateCompatibleDC(NULL));
if (!memory_dc.Get())
diff --git a/ui/gfx/platform_font_win.h b/ui/gfx/platform_font_win.h
index 035ce8ac13..4826f777ff 100644
--- a/ui/gfx/platform_font_win.h
+++ b/ui/gfx/platform_font_win.h
@@ -63,6 +63,7 @@ class GFX_EXPORT PlatformFontWin : public PlatformFont {
virtual int GetExpectedTextWidth(int length) const OVERRIDE;
virtual int GetStyle() const OVERRIDE;
virtual std::string GetFontName() const OVERRIDE;
+ virtual std::string GetActualFontNameForTesting() const OVERRIDE;
virtual int GetFontSize() const OVERRIDE;
virtual NativeFont GetNativeFont() const OVERRIDE;
diff --git a/ui/gfx/rect_base.h b/ui/gfx/rect_base.h
index 4e7dd8596e..412836ced1 100644
--- a/ui/gfx/rect_base.h
+++ b/ui/gfx/rect_base.h
@@ -147,6 +147,12 @@ class GFX_EXPORT RectBase {
// inside the rect, returns 0.
Type ManhattanDistanceToPoint(const PointClass& point) const;
+ // Returns the manhattan distance between the contents of this rect and the
+ // contents of the given rect. That is, if the intersection of the two rects
+ // is non-empty then the function returns 0. If the rects share a side, it
+ // returns the smallest non-zero value appropriate for Type.
+ Type ManhattanInternalDistance(const Class& rect) const;
+
protected:
RectBase(const PointClass& origin, const SizeClass& size)
: origin_(origin), size_(size) {}
diff --git a/ui/gfx/rect_base_impl.h b/ui/gfx/rect_base_impl.h
index c6de71d548..52201691a1 100644
--- a/ui/gfx/rect_base_impl.h
+++ b/ui/gfx/rect_base_impl.h
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <limits>
+
#include "ui/gfx/rect_base.h"
#include "base/logging.h"
@@ -330,4 +332,24 @@ Type RectBase<Class, PointClass, SizeClass, InsetsClass, VectorClass, Type>::
return x_distance + y_distance;
}
+template<typename Class,
+ typename PointClass,
+ typename SizeClass,
+ typename InsetsClass,
+ typename VectorClass,
+ typename Type>
+Type RectBase<Class, PointClass, SizeClass, InsetsClass, VectorClass, Type>::
+ ManhattanInternalDistance(const Class& rect) const {
+ Class c(x(), y(), width(), height());
+ c.Union(rect);
+
+ static const Type kEpsilon = std::numeric_limits<Type>::is_integer
+ ? 1
+ : std::numeric_limits<Type>::epsilon();
+
+ Type x = std::max<Type>(0, c.width() - width() - rect.width() + kEpsilon);
+ Type y = std::max<Type>(0, c.height() - height() - rect.height() + kEpsilon);
+ return x + y;
+}
+
} // namespace gfx
diff --git a/ui/gfx/rect_unittest.cc b/ui/gfx/rect_unittest.cc
index d62abb6c77..31a156b791 100644
--- a/ui/gfx/rect_unittest.cc
+++ b/ui/gfx/rect_unittest.cc
@@ -893,4 +893,44 @@ TEST(RectTest, ManhattanDistanceToPoint) {
EXPECT_FLOAT_EQ(1.1f, f.ManhattanDistanceToPoint(PointF(0.f, 3.f)));
}
+TEST(RectTest, ManhattanInternalDistance) {
+ Rect i(0, 0, 400, 400);
+ EXPECT_EQ(0, i.ManhattanInternalDistance(gfx::Rect(-1, 0, 2, 1)));
+ EXPECT_EQ(1, i.ManhattanInternalDistance(gfx::Rect(400, 0, 1, 400)));
+ EXPECT_EQ(2, i.ManhattanInternalDistance(gfx::Rect(-100, -100, 100, 100)));
+ EXPECT_EQ(2, i.ManhattanInternalDistance(gfx::Rect(-101, 100, 100, 100)));
+ EXPECT_EQ(4, i.ManhattanInternalDistance(gfx::Rect(-101, -101, 100, 100)));
+ EXPECT_EQ(435, i.ManhattanInternalDistance(gfx::Rect(630, 603, 100, 100)));
+
+ RectF f(0.0f, 0.0f, 400.0f, 400.0f);
+ static const float kEpsilon = std::numeric_limits<float>::epsilon();
+
+ EXPECT_FLOAT_EQ(
+ 0.0f, f.ManhattanInternalDistance(gfx::RectF(-1.0f, 0.0f, 2.0f, 1.0f)));
+ EXPECT_FLOAT_EQ(
+ kEpsilon,
+ f.ManhattanInternalDistance(gfx::RectF(400.0f, 0.0f, 1.0f, 400.0f)));
+ EXPECT_FLOAT_EQ(2.0f * kEpsilon,
+ f.ManhattanInternalDistance(
+ gfx::RectF(-100.0f, -100.0f, 100.0f, 100.0f)));
+ EXPECT_FLOAT_EQ(
+ 1.0f + kEpsilon,
+ f.ManhattanInternalDistance(gfx::RectF(-101.0f, 100.0f, 100.0f, 100.0f)));
+ EXPECT_FLOAT_EQ(2.0f + 2.0f * kEpsilon,
+ f.ManhattanInternalDistance(
+ gfx::RectF(-101.0f, -101.0f, 100.0f, 100.0f)));
+ EXPECT_FLOAT_EQ(
+ 433.0f + 2.0f * kEpsilon,
+ f.ManhattanInternalDistance(gfx::RectF(630.0f, 603.0f, 100.0f, 100.0f)));
+
+ EXPECT_FLOAT_EQ(
+ 0.0f, f.ManhattanInternalDistance(gfx::RectF(-1.0f, 0.0f, 1.1f, 1.0f)));
+ EXPECT_FLOAT_EQ(
+ 0.1f + kEpsilon,
+ f.ManhattanInternalDistance(gfx::RectF(-1.5f, 0.0f, 1.4f, 1.0f)));
+ EXPECT_FLOAT_EQ(
+ kEpsilon,
+ f.ManhattanInternalDistance(gfx::RectF(-1.5f, 0.0f, 1.5f, 1.0f)));
+}
+
} // namespace gfx
diff --git a/ui/gfx/render_text.cc b/ui/gfx/render_text.cc
index 8061e34293..e8e3436f11 100644
--- a/ui/gfx/render_text.cc
+++ b/ui/gfx/render_text.cc
@@ -28,7 +28,7 @@ namespace {
// All chars are replaced by this char when the password style is set.
// TODO(benrg): GTK uses the first of U+25CF, U+2022, U+2731, U+273A, '*'
// that's available in the font (find_invisible_char() in gtkentry.c).
-const char16 kPasswordReplacementChar = '*';
+const base::char16 kPasswordReplacementChar = '*';
// Default color used for the text and cursor.
const SkColor kDefaultColor = SK_ColorBLACK;
@@ -879,7 +879,7 @@ const BreakList<size_t>& RenderText::GetLineBreaks() {
if (line_breaks_.max() != 0)
return line_breaks_;
- const string16& layout_text = GetLayoutText();
+ const base::string16& layout_text = GetLayoutText();
const size_t text_length = layout_text.length();
line_breaks_.SetValue(0);
line_breaks_.SetMax(text_length);
diff --git a/ui/gfx/render_text.h b/ui/gfx/render_text.h
index 09e8e8819a..8696d69056 100644
--- a/ui/gfx/render_text.h
+++ b/ui/gfx/render_text.h
@@ -354,12 +354,19 @@ class GFX_EXPORT RenderText {
// Gets the SelectionModel from a visual point in local coordinates.
virtual SelectionModel FindCursorPosition(const Point& point) = 0;
- // Get the visual bounds of a cursor at |selection|. These bounds typically
- // represent a vertical line, but if |insert_mode| is true they contain the
- // bounds of the associated glyph. These bounds are in local coordinates, but
- // may be outside the visible region if the text is longer than the textfield.
- // Subsequent text, cursor, or bounds changes may invalidate returned values.
- Rect GetCursorBounds(const SelectionModel& selection, bool insert_mode);
+ // Return true if cursor can appear in front of the character at |position|,
+ // which means it is a grapheme boundary or the first character in the text.
+ virtual bool IsCursorablePosition(size_t position) = 0;
+
+ // Get the visual bounds of a cursor at |caret|. These bounds typically
+ // represent a vertical line if |insert_mode| is true. Pass false for
+ // |insert_mode| to retrieve the bounds of the associated glyph. These bounds
+ // are in local coordinates, but may be outside the visible region if the text
+ // is longer than the textfield. Subsequent text, cursor, or bounds changes
+ // may invalidate returned values. Note that |caret| must be placed at
+ // grapheme boundary, that is, |IsCursorablePosition(caret.caret_pos())| must
+ // return true.
+ Rect GetCursorBounds(const SelectionModel& caret, bool insert_mode);
// Compute the current cursor bounds, panning the text to show the cursor in
// the display rect if necessary. These bounds are in local coordinates.
@@ -473,10 +480,6 @@ class GFX_EXPORT RenderText {
virtual size_t TextIndexToLayoutIndex(size_t index) const = 0;
virtual size_t LayoutIndexToTextIndex(size_t index) const = 0;
- // Return true if cursor can appear in front of the character at |position|,
- // which means it is a grapheme boundary or the first character in the text.
- virtual bool IsCursorablePosition(size_t position) = 0;
-
// Reset the layout to be invalid.
virtual void ResetLayout() = 0;
@@ -541,6 +544,7 @@ class GFX_EXPORT RenderText {
FRIEND_TEST_ALL_PREFIXES(RenderTextTest, Multiline_MinWidth);
FRIEND_TEST_ALL_PREFIXES(RenderTextTest, Multiline_NormalWidth);
FRIEND_TEST_ALL_PREFIXES(RenderTextTest, Multiline_SufficientWidth);
+ FRIEND_TEST_ALL_PREFIXES(RenderTextTest, Multiline_Newline);
// Set the cursor to |position|, with the caret trailing the previous
// grapheme, or if there is no previous grapheme, leading the cursor position.
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc
index 35264c5500..c8c50d4281 100644
--- a/ui/gfx/render_text_unittest.cc
+++ b/ui/gfx/render_text_unittest.cc
@@ -8,6 +8,7 @@
#include "base/format_macros.h"
#include "base/memory/scoped_ptr.h"
+#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -1156,11 +1157,14 @@ TEST_F(RenderTextTest, StringSizeEmptyString) {
}
#endif // !defined(OS_MACOSX)
-// Disabled. http://crbug.com/316955
-TEST_F(RenderTextTest, DISABLED_StringSizeRespectsFontListMetrics) {
+TEST_F(RenderTextTest, StringSizeRespectsFontListMetrics) {
// Check that Arial and Symbol have different font metrics.
Font arial_font("Arial", 16);
+ ASSERT_EQ("arial",
+ StringToLowerASCII(arial_font.GetActualFontNameForTesting()));
Font symbol_font("Symbol", 16);
+ ASSERT_EQ("symbol",
+ StringToLowerASCII(symbol_font.GetActualFontNameForTesting()));
EXPECT_NE(arial_font.GetHeight(), symbol_font.GetHeight());
EXPECT_NE(arial_font.GetBaseline(), symbol_font.GetBaseline());
// "a" should be rendered with Arial, not with Symbol.
@@ -1213,8 +1217,7 @@ TEST_F(RenderTextTest, SetFont) {
EXPECT_EQ(12, render_text->GetPrimaryFont().GetFontSize());
}
-// Disabled. http://crbug.com/316955
-TEST_F(RenderTextTest, DISABLED_SetFontList) {
+TEST_F(RenderTextTest, SetFontList) {
scoped_ptr<RenderText> render_text(RenderText::CreateInstance());
render_text->SetFontList(FontList("Arial,Symbol, 13px"));
const std::vector<Font>& fonts = render_text->font_list().GetFonts();
@@ -1733,6 +1736,53 @@ TEST_F(RenderTextTest, Multiline_SufficientWidth) {
}
}
+TEST_F(RenderTextTest, Multiline_Newline) {
+ const struct {
+ const wchar_t* const text;
+ // Ranges of the characters on each line preceding the newline.
+ const Range first_line_char_range;
+ const Range second_line_char_range;
+ } kTestStrings[] = {
+ { L"abc\ndef", Range(0, 3), Range(4, 7) },
+ { L"a \n b ", Range(0, 2), Range(3, 6) },
+ { L"\n" , Range::InvalidRange(), Range::InvalidRange() }
+ };
+
+ scoped_ptr<RenderTextWin> render_text(
+ static_cast<RenderTextWin*>(RenderText::CreateInstance()));
+ render_text->SetDisplayRect(Rect(200, 1000));
+ render_text->SetMultiline(true);
+ Canvas canvas;
+
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestStrings); ++i) {
+ SCOPED_TRACE(base::StringPrintf("kTestStrings[%" PRIuS "]", i));
+ render_text->SetText(WideToUTF16(kTestStrings[i].text));
+ render_text->Draw(&canvas);
+
+ ASSERT_EQ(2U, render_text->lines_.size());
+
+ const Range first_expected_range = kTestStrings[i].first_line_char_range;
+ ASSERT_EQ(first_expected_range.IsValid() ? 2U : 1U,
+ render_text->lines_[0].segments.size());
+ if (first_expected_range.IsValid())
+ EXPECT_EQ(first_expected_range,
+ render_text->lines_[0].segments[0].char_range);
+
+ const internal::LineSegment& newline_segment =
+ render_text->lines_[0].segments[first_expected_range.IsValid() ? 1 : 0];
+ ASSERT_EQ(1U, newline_segment.char_range.length());
+ EXPECT_EQ(L'\n', kTestStrings[i].text[newline_segment.char_range.start()]);
+
+ const Range second_expected_range = kTestStrings[i].second_line_char_range;
+ ASSERT_EQ(second_expected_range.IsValid() ? 1U : 0U,
+ render_text->lines_[1].segments.size());
+ if (second_expected_range.IsValid())
+ EXPECT_EQ(second_expected_range,
+ render_text->lines_[1].segments[0].char_range);
+ }
+}
+
+
TEST_F(RenderTextTest, Win_BreakRunsByUnicodeBlocks) {
scoped_ptr<RenderTextWin> render_text(
static_cast<RenderTextWin*>(RenderText::CreateInstance()));
diff --git a/ui/gfx/render_text_win.cc b/ui/gfx/render_text_win.cc
index 01a04af76b..4afbc7fa71 100644
--- a/ui/gfx/render_text_win.cc
+++ b/ui/gfx/render_text_win.cc
@@ -159,13 +159,15 @@ Range CharRangeToGlyphRange(const internal::TextRun& run,
// Starting from |start_char|, finds a suitable line break position at or before
// |available_width| using word break info from |breaks|. If |empty_line| is
// true, this function will not roll back to |start_char| and |*next_char| will
-// be greater than |start_char| (to avoid constructing empty lines).
+// be greater than |start_char| (to avoid constructing empty lines). Returns
+// whether to skip the line before |*next_char|.
// TODO(ckocagil): Do not break ligatures and diacritics.
// TextRun::logical_clusters might help.
// TODO(ckocagil): We might have to reshape after breaking at ligatures.
// See whether resolving the TODO above resolves this too.
// TODO(ckocagil): Do not reserve width for whitespace at the end of lines.
-void BreakRunAtWidth(const internal::TextRun& run,
+bool BreakRunAtWidth(const wchar_t* text,
+ const internal::TextRun& run,
const BreakList<size_t>& breaks,
size_t start_char,
int available_width,
@@ -180,6 +182,11 @@ void BreakRunAtWidth(const internal::TextRun& run,
*width = 0;
for (size_t i = start_char; i < run.range.end(); ++i) {
+ if (U16_IS_SINGLE(text[i]) && text[i] == L'\n') {
+ *next_char = i + 1;
+ return true;
+ }
+
// |word| holds the word boundary at or before |i|, and |next_word| holds
// the word boundary right after |i|. Advance both |word| and |next_word|
// when |i| reaches |next_word|.
@@ -198,20 +205,24 @@ void BreakRunAtWidth(const internal::TextRun& run,
if (*width > available_width) {
if (!empty_line || word_width < *width) {
+ // Roll back one word.
*width -= word_width;
*next_char = std::max(word->first, start_char);
} else if (char_width < *width) {
+ // Roll back one character.
*width -= char_width;
*next_char = i;
} else {
+ // Continue from the next character.
*next_char = i + 1;
}
- return;
+ return true;
}
}
*next_char = run.range.end();
+ return false;
}
// For segments in the same run, checks the continuity and order of |x_range|
@@ -308,12 +319,14 @@ class LineBreaker {
int min_baseline,
int min_height,
bool multiline,
+ const wchar_t* text,
const BreakList<size_t>* words,
const ScopedVector<TextRun>& runs)
: max_width_(max_width),
min_baseline_(min_baseline),
min_height_(min_height),
multiline_(multiline),
+ text_(text),
words_(words),
runs_(runs),
text_x_(0),
@@ -326,7 +339,16 @@ class LineBreaker {
// Breaks the run at given |run_index| into Line structs.
void AddRun(int run_index) {
const TextRun* run = runs_[run_index];
- if (multiline_ && line_x_ + run->width > max_width_)
+ bool run_fits = !multiline_;
+ if (multiline_ && line_x_ + run->width <= max_width_) {
+ DCHECK(!run->range.is_empty());
+ const wchar_t first_char = text_[run->range.start()];
+ // Uniscribe always puts newline characters in their own runs.
+ if (!U16_IS_SINGLE(first_char) || first_char != L'\n')
+ run_fits = true;
+ }
+
+ if (!run_fits)
BreakRun(run_index);
else
AddSegment(run_index, run->range, run->width);
@@ -362,10 +384,10 @@ class LineBreaker {
// Break the run until it fits the current line.
while (next_char < run->range.end()) {
const size_t current_char = next_char;
- BreakRunAtWidth(*run, *words_, current_char, max_width_ - line_x_,
- line_x_ == 0, &width, &next_char);
+ const bool skip_line = BreakRunAtWidth(text_, *run, *words_, current_char,
+ max_width_ - line_x_, line_x_ == 0, &width, &next_char);
AddSegment(run_index, Range(current_char, next_char), width);
- if (next_char < run->range.end())
+ if (skip_line)
AdvanceLine();
}
}
@@ -449,6 +471,7 @@ class LineBreaker {
const int min_baseline_;
const int min_height_;
const bool multiline_;
+ const wchar_t* text_;
const BreakList<size_t>* const words_;
const ScopedVector<TextRun>& runs_;
@@ -747,6 +770,7 @@ void RenderTextWin::EnsureLayout() {
internal::LineBreaker line_breaker(display_rect().width() - 1,
font_list().GetBaseline(),
font_list().GetHeight(), multiline(),
+ GetLayoutText().c_str(),
multiline() ? &GetLineBreaks() : NULL,
runs_);
for (size_t i = 0; i < runs_.size(); ++i)
diff --git a/ui/gfx/text_elider.cc b/ui/gfx/text_elider.cc
index 8396b0f529..5b9469614f 100644
--- a/ui/gfx/text_elider.cc
+++ b/ui/gfx/text_elider.cc
@@ -34,16 +34,16 @@ namespace gfx {
// U+2026 in utf8
const char kEllipsis[] = "\xE2\x80\xA6";
-const char16 kEllipsisUTF16[] = { 0x2026, 0 };
-const char16 kForwardSlash = '/';
+const base::char16 kEllipsisUTF16[] = { 0x2026, 0 };
+const base::char16 kForwardSlash = '/';
namespace {
// Helper class to split + elide text, while respecting UTF16 surrogate pairs.
class StringSlicer {
public:
- StringSlicer(const string16& text,
- const string16& ellipsis,
+ StringSlicer(const base::string16& text,
+ const base::string16& ellipsis,
bool elide_in_middle)
: text_(text),
ellipsis_(ellipsis),
@@ -55,8 +55,9 @@ class StringSlicer {
// beginning and end of the string; otherwise, the end of the string is
// removed and only the beginning remains. If |insert_ellipsis| is true,
// then an ellipsis character will be inserted at the cut point.
- string16 CutString(size_t length, bool insert_ellipsis) {
- const string16 ellipsis_text = insert_ellipsis ? ellipsis_ : string16();
+ base::string16 CutString(size_t length, bool insert_ellipsis) {
+ const base::string16 ellipsis_text = insert_ellipsis ? ellipsis_
+ : base::string16();
if (!elide_in_middle_)
return text_.substr(0, FindValidBoundaryBefore(length)) + ellipsis_text;
@@ -90,10 +91,10 @@ class StringSlicer {
}
// The text to be sliced.
- const string16& text_;
+ const base::string16& text_;
// Ellipsis string to use.
- const string16& ellipsis_;
+ const base::string16& ellipsis_;
// If true, the middle of the string will be elided.
bool elide_in_middle_;
@@ -103,12 +104,13 @@ class StringSlicer {
// Build a path from the first |num_components| elements in |path_elements|.
// Prepends |path_prefix|, appends |filename|, inserts ellipsis if appropriate.
-string16 BuildPathFromComponents(const string16& path_prefix,
- const std::vector<string16>& path_elements,
- const string16& filename,
- size_t num_components) {
+base::string16 BuildPathFromComponents(
+ const base::string16& path_prefix,
+ const std::vector<base::string16>& path_elements,
+ const base::string16& filename,
+ size_t num_components) {
// Add the initial elements of the path.
- string16 path = path_prefix;
+ base::string16 path = path_prefix;
// Build path from first |num_components| elements.
for (size_t j = 0; j < num_components; ++j)
@@ -116,7 +118,7 @@ string16 BuildPathFromComponents(const string16& path_prefix,
// Add |filename|, ellipsis if necessary.
if (num_components != (path_elements.size() - 1))
- path += string16(kEllipsisUTF16) + kForwardSlash;
+ path += base::string16(kEllipsisUTF16) + kForwardSlash;
path += filename;
return path;
@@ -125,31 +127,32 @@ string16 BuildPathFromComponents(const string16& path_prefix,
// Takes a prefix (Domain, or Domain+subdomain) and a collection of path
// components and elides if possible. Returns a string containing the longest
// possible elided path, or an empty string if elision is not possible.
-string16 ElideComponentizedPath(const string16& url_path_prefix,
- const std::vector<string16>& url_path_elements,
- const string16& url_filename,
- const string16& url_query,
- const FontList& font_list,
- float available_pixel_width) {
+base::string16 ElideComponentizedPath(
+ const base::string16& url_path_prefix,
+ const std::vector<base::string16>& url_path_elements,
+ const base::string16& url_filename,
+ const base::string16& url_query,
+ const FontList& font_list,
+ float available_pixel_width) {
const size_t url_path_number_of_elements = url_path_elements.size();
CHECK(url_path_number_of_elements);
for (size_t i = url_path_number_of_elements - 1; i > 0; --i) {
- string16 elided_path = BuildPathFromComponents(url_path_prefix,
+ base::string16 elided_path = BuildPathFromComponents(url_path_prefix,
url_path_elements, url_filename, i);
if (available_pixel_width >= GetStringWidthF(elided_path, font_list))
return ElideText(elided_path + url_query, font_list,
available_pixel_width, ELIDE_AT_END);
}
- return string16();
+ return base::string16();
}
} // namespace
-string16 ElideEmail(const string16& email,
- const FontList& font_list,
- float available_pixel_width) {
+base::string16 ElideEmail(const base::string16& email,
+ const FontList& font_list,
+ float available_pixel_width) {
if (GetStringWidthF(email, font_list) <= available_pixel_width)
return email;
@@ -159,14 +162,14 @@ string16 ElideEmail(const string16& email,
// symbol in the domain part of the email however so splitting at the last @
// symbol is safe.
const size_t split_index = email.find_last_of('@');
- DCHECK_NE(split_index, string16::npos);
- string16 username = email.substr(0, split_index);
- string16 domain = email.substr(split_index + 1);
+ DCHECK_NE(split_index, base::string16::npos);
+ base::string16 username = email.substr(0, split_index);
+ base::string16 domain = email.substr(split_index + 1);
DCHECK(!username.empty());
DCHECK(!domain.empty());
// Subtract the @ symbol from the available width as it is mandatory.
- const string16 kAtSignUTF16 = ASCIIToUTF16("@");
+ const base::string16 kAtSignUTF16 = ASCIIToUTF16("@");
available_pixel_width -= GetStringWidthF(kAtSignUTF16, font_list);
// Check whether eliding the domain is necessary: if eliding the username
@@ -193,7 +196,7 @@ string16 ElideEmail(const string16& email,
// Failing to elide the domain such that at least one character remains
// (other than the ellipsis itself) remains: return a single ellipsis.
if (domain.length() <= 1U)
- return string16(kEllipsisUTF16);
+ return base::string16(kEllipsisUTF16);
}
// Fit the username in the remaining width (at this point the elided username
@@ -210,13 +213,13 @@ string16 ElideEmail(const string16& email,
// kerning/ligatures/etc. issues potentially wrong by assuming that the width of
// a rendered string is always the sum of the widths of its substrings. Also I
// suspect it could be made simpler.
-string16 ElideUrl(const GURL& url,
- const FontList& font_list,
- float available_pixel_width,
- const std::string& languages) {
+base::string16 ElideUrl(const GURL& url,
+ const FontList& font_list,
+ float available_pixel_width,
+ const std::string& languages) {
// Get a formatted string and corresponding parsing of the url.
url_parse::Parsed parsed;
- const string16 url_string =
+ const base::string16 url_string =
net::FormatUrl(url, languages, net::kFormatUrlOmitAll,
net::UnescapeRule::SPACES, &parsed, NULL, NULL);
if (available_pixel_width <= 0)
@@ -236,21 +239,21 @@ string16 ElideUrl(const GURL& url,
// Get the path substring, including query and reference.
const size_t path_start_index = parsed.path.begin;
const size_t path_len = parsed.path.len;
- string16 url_path_query_etc = url_string.substr(path_start_index);
- string16 url_path = url_string.substr(path_start_index, path_len);
+ base::string16 url_path_query_etc = url_string.substr(path_start_index);
+ base::string16 url_path = url_string.substr(path_start_index, path_len);
// Return general elided text if url minus the query fits.
- const string16 url_minus_query =
+ const base::string16 url_minus_query =
url_string.substr(0, path_start_index + path_len);
if (available_pixel_width >= GetStringWidthF(url_minus_query, font_list))
return ElideText(url_string, font_list, available_pixel_width,
ELIDE_AT_END);
// Get Host.
- string16 url_host = UTF8ToUTF16(url.host());
+ base::string16 url_host = UTF8ToUTF16(url.host());
// Get domain and registry information from the URL.
- string16 url_domain = UTF8ToUTF16(
+ base::string16 url_domain = UTF8ToUTF16(
net::registry_controlled_domains::GetDomainAndRegistry(
url, net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES));
if (url_domain.empty())
@@ -263,11 +266,11 @@ string16 ElideUrl(const GURL& url,
}
// Get sub domain.
- string16 url_subdomain;
+ base::string16 url_subdomain;
const size_t domain_start_index = url_host.find(url_domain);
- if (domain_start_index != string16::npos)
+ if (domain_start_index != base::string16::npos)
url_subdomain = url_host.substr(0, domain_start_index);
- const string16 kWwwPrefix = UTF8ToUTF16("www.");
+ const base::string16 kWwwPrefix = UTF8ToUTF16("www.");
if ((url_subdomain == kWwwPrefix || url_subdomain.empty() ||
url.SchemeIsFile())) {
url_subdomain.clear();
@@ -278,14 +281,14 @@ string16 ElideUrl(const GURL& url,
// domain is now C: - this is a nice hack for eliding to work pleasantly.
if (url.SchemeIsFile()) {
// Split the path string using ":"
- std::vector<string16> file_path_split;
+ std::vector<base::string16> file_path_split;
base::SplitString(url_path, ':', &file_path_split);
if (file_path_split.size() > 1) { // File is of type "file:///C:/.."
url_host.clear();
url_domain.clear();
url_subdomain.clear();
- const string16 kColon = UTF8ToUTF16(":");
+ const base::string16 kColon = UTF8ToUTF16(":");
url_host = url_domain = file_path_split.at(0).substr(1) + kColon;
url_path_query_etc = url_path = file_path_split.at(1);
}
@@ -309,9 +312,9 @@ string16 ElideUrl(const GURL& url,
return url_subdomain + url_domain + url_path_query_etc;
// Query element.
- string16 url_query;
+ base::string16 url_query;
const float kPixelWidthDotsTrailer = GetStringWidthF(
- string16(kEllipsisUTF16), font_list);
+ base::string16(kEllipsisUTF16), font_list);
if (parsed.query.is_nonempty()) {
url_query = UTF8ToUTF16("?") + url_string.substr(parsed.query.begin);
if (available_pixel_width >=
@@ -323,14 +326,14 @@ string16 ElideUrl(const GURL& url,
}
// Parse url_path using '/'.
- std::vector<string16> url_path_elements;
+ std::vector<base::string16> url_path_elements;
base::SplitString(url_path, kForwardSlash, &url_path_elements);
// Get filename - note that for a path ending with /
// such as www.google.com/intl/ads/, the file name is ads/.
size_t url_path_number_of_elements = url_path_elements.size();
DCHECK(url_path_number_of_elements != 0);
- string16 url_filename;
+ base::string16 url_filename;
if ((url_path_elements.at(url_path_number_of_elements - 1)).length() > 0) {
url_filename = *(url_path_elements.end() - 1);
} else if (url_path_number_of_elements > 1) { // Path ends with a '/'.
@@ -350,12 +353,13 @@ string16 ElideUrl(const GURL& url,
}
// Start eliding the path and replacing elements by ".../".
- const string16 kEllipsisAndSlash = string16(kEllipsisUTF16) + kForwardSlash;
+ const base::string16 kEllipsisAndSlash =
+ base::string16(kEllipsisUTF16) + kForwardSlash;
const float pixel_width_ellipsis_slash =
GetStringWidthF(kEllipsisAndSlash, font_list);
// Check with both subdomain and domain.
- string16 elided_path =
+ base::string16 elided_path =
ElideComponentizedPath(url_subdomain + url_domain, url_path_elements,
url_filename, url_query, font_list,
available_pixel_width);
@@ -367,7 +371,7 @@ string16 ElideUrl(const GURL& url,
// This is added only if the subdomain pixel width is larger than
// the pixel width of kEllipsis. Otherwise, subdomain remains,
// which means that this case has been resolved earlier.
- string16 url_elided_domain = url_subdomain + url_domain;
+ base::string16 url_elided_domain = url_subdomain + url_domain;
if (pixel_width_url_subdomain > kPixelWidthDotsTrailer) {
if (!url_subdomain.empty())
url_elided_domain = kEllipsisAndSlash[0] + url_domain;
@@ -383,7 +387,7 @@ string16 ElideUrl(const GURL& url,
}
// Return elided domain/.../filename anyway.
- string16 final_elided_url_string(url_elided_domain);
+ base::string16 final_elided_url_string(url_elided_domain);
const float url_elided_domain_width = GetStringWidthF(url_elided_domain,
font_list);
@@ -391,7 +395,7 @@ string16 ElideUrl(const GURL& url,
if ((available_pixel_width - url_elided_domain_width) >
pixel_width_ellipsis_slash + kPixelWidthDotsTrailer +
GetStringWidthF(ASCIIToUTF16("UV"), font_list)) {
- final_elided_url_string += BuildPathFromComponents(string16(),
+ final_elided_url_string += BuildPathFromComponents(base::string16(),
url_path_elements, url_filename, 1);
} else {
final_elided_url_string += url_path;
@@ -401,19 +405,19 @@ string16 ElideUrl(const GURL& url,
ELIDE_AT_END);
}
-string16 ElideFilename(const base::FilePath& filename,
- const FontList& font_list,
- float available_pixel_width) {
+base::string16 ElideFilename(const base::FilePath& filename,
+ const FontList& font_list,
+ float available_pixel_width) {
#if defined(OS_WIN)
- string16 filename_utf16 = filename.value();
- string16 extension = filename.Extension();
- string16 rootname = filename.BaseName().RemoveExtension().value();
+ base::string16 filename_utf16 = filename.value();
+ base::string16 extension = filename.Extension();
+ base::string16 rootname = filename.BaseName().RemoveExtension().value();
#elif defined(OS_POSIX)
- string16 filename_utf16 = WideToUTF16(base::SysNativeMBToWide(
+ base::string16 filename_utf16 = WideToUTF16(base::SysNativeMBToWide(
filename.value()));
- string16 extension = WideToUTF16(base::SysNativeMBToWide(
+ base::string16 extension = WideToUTF16(base::SysNativeMBToWide(
filename.Extension()));
- string16 rootname = WideToUTF16(base::SysNativeMBToWide(
+ base::string16 rootname = WideToUTF16(base::SysNativeMBToWide(
filename.BaseName().RemoveExtension().value()));
#endif
@@ -422,7 +426,7 @@ string16 ElideFilename(const base::FilePath& filename,
return base::i18n::GetDisplayStringInLTRDirectionality(filename_utf16);
if (rootname.empty() || extension.empty()) {
- const string16 elided_name = ElideText(filename_utf16, font_list,
+ const base::string16 elided_name = ElideText(filename_utf16, font_list,
available_pixel_width, ELIDE_AT_END);
return base::i18n::GetDisplayStringInLTRDirectionality(elided_name);
}
@@ -432,28 +436,28 @@ string16 ElideFilename(const base::FilePath& filename,
// We may have trimmed the path.
if (root_width + ext_width <= available_pixel_width) {
- const string16 elided_name = rootname + extension;
+ const base::string16 elided_name = rootname + extension;
return base::i18n::GetDisplayStringInLTRDirectionality(elided_name);
}
if (ext_width >= available_pixel_width) {
- const string16 elided_name = ElideText(rootname + extension, font_list,
- available_pixel_width,
- ELIDE_IN_MIDDLE);
+ const base::string16 elided_name = ElideText(
+ rootname + extension, font_list, available_pixel_width,
+ ELIDE_IN_MIDDLE);
return base::i18n::GetDisplayStringInLTRDirectionality(elided_name);
}
float available_root_width = available_pixel_width - ext_width;
- string16 elided_name =
+ base::string16 elided_name =
ElideText(rootname, font_list, available_root_width, ELIDE_AT_END);
elided_name += extension;
return base::i18n::GetDisplayStringInLTRDirectionality(elided_name);
}
-string16 ElideText(const string16& text,
- const FontList& font_list,
- float available_pixel_width,
- ElideBehavior elide_behavior) {
+base::string16 ElideText(const base::string16& text,
+ const FontList& font_list,
+ float available_pixel_width,
+ ElideBehavior elide_behavior) {
if (text.empty())
return text;
@@ -461,7 +465,7 @@ string16 ElideText(const string16& text,
const bool elide_in_middle = (elide_behavior == ELIDE_IN_MIDDLE);
const bool insert_ellipsis = (elide_behavior != TRUNCATE_AT_END);
- const string16 ellipsis = string16(kEllipsisUTF16);
+ const base::string16 ellipsis = base::string16(kEllipsisUTF16);
StringSlicer slicer(text, ellipsis, elide_in_middle);
// Pango will return 0 width for absurdly long strings. Cut the string in
@@ -473,7 +477,7 @@ string16 ElideText(const string16& text,
// (eliding way too much from a ridiculous string is probably still
// ridiculous), but we should check other widths for bogus values as well.
if (current_text_pixel_width <= 0 && !text.empty()) {
- const string16 cut = slicer.CutString(text.length() / 2, false);
+ const base::string16 cut = slicer.CutString(text.length() / 2, false);
return ElideText(cut, font_list, available_pixel_width, elide_behavior);
}
@@ -482,7 +486,7 @@ string16 ElideText(const string16& text,
if (insert_ellipsis &&
GetStringWidthF(ellipsis, font_list) > available_pixel_width)
- return string16();
+ return base::string16();
// Use binary search to compute the elided text.
size_t lo = 0;
@@ -491,7 +495,7 @@ string16 ElideText(const string16& text,
for (guess = (lo + hi) / 2; lo <= hi; guess = (lo + hi) / 2) {
// We check the length of the whole desired string at once to ensure we
// handle kerning/ligatures/etc. correctly.
- const string16 cut = slicer.CutString(guess, insert_ellipsis);
+ const base::string16 cut = slicer.CutString(guess, insert_ellipsis);
const float guess_length = GetStringWidthF(cut, font_list);
// Check again that we didn't hit a Pango width overflow. If so, cut the
// current string in half and start over.
@@ -508,17 +512,17 @@ string16 ElideText(const string16& text,
return slicer.CutString(guess, insert_ellipsis);
}
-string16 ElideText(const string16& text,
- const Font& font,
- float available_pixel_width,
- ElideBehavior elide_behavior) {
+base::string16 ElideText(const base::string16& text,
+ const Font& font,
+ float available_pixel_width,
+ ElideBehavior elide_behavior) {
return ElideText(text, FontList(font), available_pixel_width, elide_behavior);
}
SortedDisplayURL::SortedDisplayURL(const GURL& url,
const std::string& languages) {
net::AppendFormattedHost(url, languages, &sort_host_);
- string16 host_minus_www = net::StripWWW(sort_host_);
+ base::string16 host_minus_www = net::StripWWW(sort_host_);
url_parse::Parsed parsed;
display_url_ =
net::FormatUrl(url, languages, net::kFormatUrlOmitAll,
@@ -550,8 +554,8 @@ int SortedDisplayURL::Compare(const SortedDisplayURL& other,
return host_compare_result;
// Hosts match, compare on the portion of the url after the host.
- string16 path = this->AfterHost();
- string16 o_path = other.AfterHost();
+ base::string16 path = this->AfterHost();
+ base::string16 o_path = other.AfterHost();
compare_status = U_ZERO_ERROR;
UCollationResult path_compare_result = collator->compare(
static_cast<const UChar*>(path.c_str()),
@@ -576,16 +580,17 @@ int SortedDisplayURL::Compare(const SortedDisplayURL& other,
return display_url_compare_result;
}
-string16 SortedDisplayURL::AfterHost() const {
+base::string16 SortedDisplayURL::AfterHost() const {
const size_t slash_index = display_url_.find(sort_host_, prefix_end_);
- if (slash_index == string16::npos) {
+ if (slash_index == base::string16::npos) {
NOTREACHED();
- return string16();
+ return base::string16();
}
return display_url_.substr(slash_index + sort_host_.length());
}
-bool ElideString(const string16& input, int max_len, string16* output) {
+bool ElideString(const base::string16& input, int max_len,
+ base::string16* output) {
DCHECK_GE(max_len, 0);
if (static_cast<int>(input.length()) <= max_len) {
output->assign(input);
@@ -630,7 +635,7 @@ namespace {
class RectangleString {
public:
RectangleString(size_t max_rows, size_t max_cols,
- bool strict, string16 *output)
+ bool strict, base::string16 *output)
: max_rows_(max_rows),
max_cols_(max_cols),
current_row_(0),
@@ -647,7 +652,7 @@ class RectangleString {
// AddString() may be called multiple times to concatenate together
// multiple strings into the region (the current caller doesn't do
// this, however).
- void AddString(const string16& input);
+ void AddString(const base::string16& input);
// Perform any deferred output processing. Must be called after the
// last AddString() call has occurred.
@@ -656,15 +661,15 @@ class RectangleString {
private:
// Add a line to the rectangular region at the current position,
// either by itself or by breaking it into words.
- void AddLine(const string16& line);
+ void AddLine(const base::string16& line);
// Add a word to the rectangular region at the current position,
// either by itself or by breaking it into characters.
- void AddWord(const string16& word);
+ void AddWord(const base::string16& word);
// Add text to the output string if the rectangular boundaries
// have not been exceeded, advancing the current position.
- void Append(const string16& string);
+ void Append(const base::string16& string);
// Set the current position to the beginning of the next line. If
// |output| is true, add a newline to the output string if the rectangular
@@ -696,12 +701,12 @@ class RectangleString {
bool suppressed_;
// String onto which the output is accumulated.
- string16* output_;
+ base::string16* output_;
DISALLOW_COPY_AND_ASSIGN(RectangleString);
};
-void RectangleString::AddString(const string16& input) {
+void RectangleString::AddString(const base::string16& input) {
base::i18n::BreakIterator lines(input,
base::i18n::BreakIterator::BREAK_NEWLINE);
if (lines.Init()) {
@@ -720,7 +725,7 @@ bool RectangleString::Finalize() {
return false;
}
-void RectangleString::AddLine(const string16& line) {
+void RectangleString::AddLine(const base::string16& line) {
if (line.length() < max_cols_) {
Append(line);
} else {
@@ -738,7 +743,7 @@ void RectangleString::AddLine(const string16& line) {
current_col_ = 0;
}
-void RectangleString::AddWord(const string16& word) {
+void RectangleString::AddWord(const base::string16& word) {
if (word.length() < max_cols_) {
// Word can be made to fit, no need to fragment it.
if (current_col_ + word.length() >= max_cols_)
@@ -765,7 +770,7 @@ void RectangleString::AddWord(const string16& word) {
}
}
-void RectangleString::Append(const string16& string) {
+void RectangleString::Append(const base::string16& string) {
if (current_row_ < max_rows_)
output_->append(string);
else
@@ -793,7 +798,7 @@ class RectangleText {
float available_pixel_width,
int available_pixel_height,
WordWrapBehavior wrap_behavior,
- std::vector<string16>* lines)
+ std::vector<base::string16>* lines)
: font_list_(font_list),
line_height_(font_list.GetHeight()),
available_pixel_width_(available_pixel_width),
@@ -814,7 +819,7 @@ class RectangleText {
// AddString() may be called multiple times to concatenate together
// multiple strings into the region (the current caller doesn't do
// this, however).
- void AddString(const string16& input);
+ void AddString(const base::string16& input);
// Perform any deferred output processing. Must be called after the last
// AddString() call has occured. Returns a combination of
@@ -825,24 +830,24 @@ class RectangleText {
private:
// Add a line to the rectangular region at the current position,
// either by itself or by breaking it into words.
- void AddLine(const string16& line);
+ void AddLine(const base::string16& line);
// Wrap the specified word across multiple lines.
- int WrapWord(const string16& word);
+ int WrapWord(const base::string16& word);
// Add a long word - wrapping, eliding or truncating per the wrap behavior.
- int AddWordOverflow(const string16& word);
+ int AddWordOverflow(const base::string16& word);
// Add a word to the rectangluar region at the current position.
- int AddWord(const string16& word);
+ int AddWord(const base::string16& word);
// Append the specified |text| to the current output line, incrementing the
// running width by the specified amount. This is an optimization over
// |AddToCurrentLine()| when |text_width| is already known.
- void AddToCurrentLineWithWidth(const string16& text, float text_width);
+ void AddToCurrentLineWithWidth(const base::string16& text, float text_width);
// Append the specified |text| to the current output line.
- void AddToCurrentLine(const string16& text);
+ void AddToCurrentLine(const base::string16& text);
// Set the current position to the beginning of the next line.
bool NewLine();
@@ -869,13 +874,13 @@ class RectangleText {
int current_height_;
// The current line of text.
- string16 current_line_;
+ base::string16 current_line_;
// Indicates whether the last line ended with \n.
bool last_line_ended_in_lf_;
// The output vector of lines.
- std::vector<string16>* lines_;
+ std::vector<base::string16>* lines_;
// Indicates whether a word was so long that it had to be truncated or elided
// to fit the available width.
@@ -887,12 +892,12 @@ class RectangleText {
DISALLOW_COPY_AND_ASSIGN(RectangleText);
};
-void RectangleText::AddString(const string16& input) {
+void RectangleText::AddString(const base::string16& input) {
base::i18n::BreakIterator lines(input,
base::i18n::BreakIterator::BREAK_NEWLINE);
if (lines.Init()) {
while (!insufficient_height_ && lines.Advance()) {
- string16 line = lines.GetString();
+ base::string16 line = lines.GetString();
// The BREAK_NEWLINE iterator will keep the trailing newline character,
// except in the case of the last line, which may not have one. Remove
// the newline character, if it exists.
@@ -915,12 +920,12 @@ int RectangleText::Finalize() {
lines_->pop_back();
}
if (last_line_ended_in_lf_)
- lines_->push_back(string16());
+ lines_->push_back(base::string16());
return (insufficient_width_ ? INSUFFICIENT_SPACE_HORIZONTAL : 0) |
(insufficient_height_ ? INSUFFICIENT_SPACE_VERTICAL : 0);
}
-void RectangleText::AddLine(const string16& line) {
+void RectangleText::AddLine(const base::string16& line) {
const float line_width = GetStringWidthF(line, font_list_);
if (line_width <= available_pixel_width_) {
AddToCurrentLineWithWidth(line, line_width);
@@ -932,7 +937,7 @@ void RectangleText::AddLine(const string16& line) {
if (words.Init()) {
while (words.Advance()) {
const bool truncate = !current_line_.empty();
- const string16& word = words.GetString();
+ const base::string16& word = words.GetString();
const int lines_added = AddWord(word);
if (lines_added) {
if (truncate) {
@@ -955,13 +960,13 @@ void RectangleText::AddLine(const string16& line) {
NewLine();
}
-int RectangleText::WrapWord(const string16& word) {
+int RectangleText::WrapWord(const base::string16& word) {
// Word is so wide that it must be fragmented.
- string16 text = word;
+ base::string16 text = word;
int lines_added = 0;
bool first_fragment = true;
while (!insufficient_height_ && !text.empty()) {
- string16 fragment =
+ base::string16 fragment =
ElideText(text, font_list_, available_pixel_width_,
TRUNCATE_AT_END);
// At least one character has to be added at every line, even if the
@@ -977,7 +982,7 @@ int RectangleText::WrapWord(const string16& word) {
return lines_added;
}
-int RectangleText::AddWordOverflow(const string16& word) {
+int RectangleText::AddWordOverflow(const base::string16& word) {
int lines_added = 0;
// Unless this is the very first word, put it on a new line.
@@ -995,7 +1000,7 @@ int RectangleText::AddWordOverflow(const string16& word) {
} else {
const ElideBehavior elide_behavior =
(wrap_behavior_ == ELIDE_LONG_WORDS ? ELIDE_AT_END : TRUNCATE_AT_END);
- const string16 elided_word =
+ const base::string16 elided_word =
ElideText(word, font_list_, available_pixel_width_, elide_behavior);
AddToCurrentLine(elided_word);
insufficient_width_ = true;
@@ -1004,9 +1009,9 @@ int RectangleText::AddWordOverflow(const string16& word) {
return lines_added;
}
-int RectangleText::AddWord(const string16& word) {
+int RectangleText::AddWord(const base::string16& word) {
int lines_added = 0;
- string16 trimmed;
+ base::string16 trimmed;
TrimWhitespace(word, TRIM_TRAILING, &trimmed);
const float trimmed_width = GetStringWidthF(trimmed, font_list_);
if (trimmed_width <= available_pixel_width_) {
@@ -1022,11 +1027,11 @@ int RectangleText::AddWord(const string16& word) {
return lines_added;
}
-void RectangleText::AddToCurrentLine(const string16& text) {
+void RectangleText::AddToCurrentLine(const base::string16& text) {
AddToCurrentLineWithWidth(text, GetStringWidthF(text, font_list_));
}
-void RectangleText::AddToCurrentLineWithWidth(const string16& text,
+void RectangleText::AddToCurrentLineWithWidth(const base::string16& text,
float text_width) {
if (current_height_ >= available_pixel_height_) {
insufficient_height_ = true;
@@ -1052,20 +1057,21 @@ bool RectangleText::NewLine() {
} // namespace
-bool ElideRectangleString(const string16& input, size_t max_rows,
- size_t max_cols, bool strict, string16* output) {
+bool ElideRectangleString(const base::string16& input, size_t max_rows,
+ size_t max_cols, bool strict,
+ base::string16* output) {
RectangleString rect(max_rows, max_cols, strict, output);
rect.Init();
rect.AddString(input);
return rect.Finalize();
}
-int ElideRectangleText(const string16& input,
+int ElideRectangleText(const base::string16& input,
const FontList& font_list,
float available_pixel_width,
int available_pixel_height,
WordWrapBehavior wrap_behavior,
- std::vector<string16>* lines) {
+ std::vector<base::string16>* lines) {
RectangleText rect(font_list,
available_pixel_width,
available_pixel_height,
@@ -1076,19 +1082,19 @@ int ElideRectangleText(const string16& input,
return rect.Finalize();
}
-string16 TruncateString(const string16& string, size_t length) {
+base::string16 TruncateString(const base::string16& string, size_t length) {
if (string.size() <= length)
// String fits, return it.
return string;
if (length == 0)
// No room for the elide string, return an empty string.
- return string16();
+ return base::string16();
size_t max = length - 1;
// Added to the end of strings that are too big.
- static const char16 kElideString[] = { 0x2026, 0 };
+ static const base::char16 kElideString[] = { 0x2026, 0 };
if (max == 0)
// Just enough room for the elide string.
diff --git a/ui/gfx/text_elider.h b/ui/gfx/text_elider.h
index 95bdeb44b0..4eaca828c7 100644
--- a/ui/gfx/text_elider.h
+++ b/ui/gfx/text_elider.h
@@ -27,7 +27,7 @@ class Font;
class FontList;
GFX_EXPORT extern const char kEllipsis[];
-GFX_EXPORT extern const char16 kEllipsisUTF16[];
+GFX_EXPORT extern const base::char16 kEllipsisUTF16[];
// Elides a well-formed email address (e.g. username@domain.com) to fit into
// |available_pixel_width| using the specified |font_list|.
@@ -39,9 +39,9 @@ GFX_EXPORT extern const char16 kEllipsisUTF16[];
// equally with the elided username (should the username be short enough that it
// doesn't need half the available width: the elided domain will occupy that
// extra width).
-GFX_EXPORT string16 ElideEmail(const string16& email,
- const gfx::FontList& font_list,
- float available_pixel_width);
+GFX_EXPORT base::string16 ElideEmail(const base::string16& email,
+ const gfx::FontList& font_list,
+ float available_pixel_width);
// This function takes a GURL object and elides it. It returns a string
// which composed of parts from subdomain, domain, path, filename and query.
@@ -57,10 +57,10 @@ GFX_EXPORT string16 ElideEmail(const string16& email,
// as an LTR string (using base::i18n::WrapStringWithLTRFormatting()) so that it
// is displayed properly in an RTL context. Please refer to
// http://crbug.com/6487 for more information.
-GFX_EXPORT string16 ElideUrl(const GURL& url,
- const gfx::FontList& font_list,
- float available_pixel_width,
- const std::string& languages);
+GFX_EXPORT base::string16 ElideUrl(const GURL& url,
+ const gfx::FontList& font_list,
+ float available_pixel_width,
+ const std::string& languages);
enum ElideBehavior {
// Add ellipsis at the end of the string.
@@ -73,15 +73,15 @@ enum ElideBehavior {
// Elides |text| to fit in |available_pixel_width| according to the specified
// |elide_behavior|.
-GFX_EXPORT string16 ElideText(const string16& text,
- const gfx::FontList& font_list,
- float available_pixel_width,
- ElideBehavior elide_behavior);
+GFX_EXPORT base::string16 ElideText(const base::string16& text,
+ const gfx::FontList& font_list,
+ float available_pixel_width,
+ ElideBehavior elide_behavior);
// Obsolete version. Use the above version which takes gfx::FontList.
-GFX_EXPORT string16 ElideText(const string16& text,
- const gfx::Font& font,
- float available_pixel_width,
- ElideBehavior elide_behavior);
+GFX_EXPORT base::string16 ElideText(const base::string16& text,
+ const gfx::Font& font,
+ float available_pixel_width,
+ ElideBehavior elide_behavior);
// Elide a filename to fit a given pixel width, with an emphasis on not hiding
// the extension unless we have to. If filename contains a path, the path will
@@ -89,9 +89,9 @@ GFX_EXPORT string16 ElideText(const string16& text,
// filename is forced to have LTR directionality, which means that in RTL UI
// the elided filename is wrapped with LRE (Left-To-Right Embedding) mark and
// PDF (Pop Directional Formatting) mark.
-GFX_EXPORT string16 ElideFilename(const base::FilePath& filename,
- const gfx::FontList& font_list,
- float available_pixel_width);
+GFX_EXPORT base::string16 ElideFilename(const base::FilePath& filename,
+ const gfx::FontList& font_list,
+ float available_pixel_width);
// SortedDisplayURL maintains a string from a URL suitable for display to the
// use. SortedDisplayURL also provides a function used for comparing two
@@ -110,20 +110,20 @@ class GFX_EXPORT SortedDisplayURL {
int Compare(const SortedDisplayURL& other, icu::Collator* collator) const;
// Returns the display string for the URL.
- const string16& display_url() const { return display_url_; }
+ const base::string16& display_url() const { return display_url_; }
private:
// Returns everything after the host. This is used by Compare if the hosts
// match.
- string16 AfterHost() const;
+ base::string16 AfterHost() const;
// Host name minus 'www.'. Used by Compare.
- string16 sort_host_;
+ base::string16 sort_host_;
// End of the prefix (spec and separator) in display_url_.
size_t prefix_end_;
- string16 display_url_;
+ base::string16 display_url_;
DISALLOW_COPY_AND_ASSIGN(SortedDisplayURL);
};
@@ -141,8 +141,8 @@ class GFX_EXPORT SortedDisplayURL {
// puts "Hell...Tom" in str and returns true.
// TODO(tsepez): Doesn't handle UTF-16 surrogate pairs properly.
// TODO(tsepez): Doesn't handle bidi properly.
-GFX_EXPORT bool ElideString(const string16& input, int max_len,
- string16* output);
+GFX_EXPORT bool ElideString(const base::string16& input, int max_len,
+ base::string16* output);
// Reformat |input| into |output| so that it fits into a |max_rows| by
// |max_cols| rectangle of characters. Input newlines are respected, but
@@ -153,9 +153,11 @@ GFX_EXPORT bool ElideString(const string16& input, int max_len,
// intra-word (respecting UTF-16 surrogate pairs) as necssary. Truncation
// (indicated by an added 3 dots) occurs if the result is still too long.
// Returns true if the input had to be truncated (and not just reformatted).
-GFX_EXPORT bool ElideRectangleString(const string16& input, size_t max_rows,
- size_t max_cols, bool strict,
- string16* output);
+GFX_EXPORT bool ElideRectangleString(const base::string16& input,
+ size_t max_rows,
+ size_t max_cols,
+ bool strict,
+ base::string16* output);
// Specifies the word wrapping behavior of |ElideRectangleText()| when a word
// would exceed the available width.
@@ -193,19 +195,20 @@ enum ReformattingResultFlags {
// param. Returns a combination of |ReformattingResultFlags| that indicate
// whether the given rectangle had insufficient space to accommodate |texŧ|,
// leading to elision or truncation (and not just reformatting).
-GFX_EXPORT int ElideRectangleText(const string16& text,
+GFX_EXPORT int ElideRectangleText(const base::string16& text,
const gfx::FontList& font_list,
float available_pixel_width,
int available_pixel_height,
WordWrapBehavior wrap_behavior,
- std::vector<string16>* lines);
+ std::vector<base::string16>* lines);
// Truncates the string to length characters. This breaks the string at
// the first word break before length, adding the horizontal ellipsis
// character (unicode character 0x2026) to render ...
// The supplied string is returned if the string has length characters or
// less.
-GFX_EXPORT string16 TruncateString(const string16& string, size_t length);
+GFX_EXPORT base::string16 TruncateString(const base::string16& string,
+ size_t length);
} // namespace gfx
diff --git a/ui/gfx/utf16_indexing.cc b/ui/gfx/utf16_indexing.cc
index 6af10c1849..c7f38de0d1 100644
--- a/ui/gfx/utf16_indexing.cc
+++ b/ui/gfx/utf16_indexing.cc
@@ -9,12 +9,12 @@
namespace gfx {
-bool IsValidCodePointIndex(const string16& s, size_t index) {
+bool IsValidCodePointIndex(const base::string16& s, size_t index) {
return index == 0 || index == s.length() ||
!(CBU16_IS_TRAIL(s[index]) && CBU16_IS_LEAD(s[index - 1]));
}
-ptrdiff_t UTF16IndexToOffset(const string16& s, size_t base, size_t pos) {
+ptrdiff_t UTF16IndexToOffset(const base::string16& s, size_t base, size_t pos) {
// The indices point between UTF-16 words (range 0 to s.length() inclusive).
// In order to consistently handle indices that point to the middle of a
// surrogate pair, we count the first word in that surrogate pair and not
@@ -30,7 +30,9 @@ ptrdiff_t UTF16IndexToOffset(const string16& s, size_t base, size_t pos) {
return delta;
}
-size_t UTF16OffsetToIndex(const string16& s, size_t base, ptrdiff_t offset) {
+size_t UTF16OffsetToIndex(const base::string16& s,
+ size_t base,
+ ptrdiff_t offset) {
DCHECK_LE(base, s.length());
// As in UTF16IndexToOffset, we count the first half of a surrogate pair, not
// the second. When stepping from pos to pos+1 we check s[pos:pos+1] == s[pos]
diff --git a/ui/gfx/utf16_indexing.h b/ui/gfx/utf16_indexing.h
index a9eaea2dd9..4c2b2c19d5 100644
--- a/ui/gfx/utf16_indexing.h
+++ b/ui/gfx/utf16_indexing.h
@@ -12,7 +12,7 @@ namespace gfx {
// Returns false if s[index-1] is a high surrogate and s[index] is a low
// surrogate, true otherwise.
-GFX_EXPORT bool IsValidCodePointIndex(const string16& s, size_t index);
+GFX_EXPORT bool IsValidCodePointIndex(const base::string16& s, size_t index);
// |UTF16IndexToOffset| returns the number of code points between |base| and
// |pos| in the given string. |UTF16OffsetToIndex| returns the index that is
@@ -37,10 +37,10 @@ GFX_EXPORT bool IsValidCodePointIndex(const string16& s, size_t index);
// Always,
// UTF16IndexToOffset(s, base, UTF16OffsetToIndex(s, base, ofs)) == ofs
// UTF16IndexToOffset(s, i, j) == -UTF16IndexToOffset(s, j, i)
-GFX_EXPORT ptrdiff_t UTF16IndexToOffset(const string16& s,
+GFX_EXPORT ptrdiff_t UTF16IndexToOffset(const base::string16& s,
size_t base,
size_t pos);
-GFX_EXPORT size_t UTF16OffsetToIndex(const string16& s,
+GFX_EXPORT size_t UTF16OffsetToIndex(const base::string16& s,
size_t base,
ptrdiff_t offset);
diff --git a/ui/gl/gl.gyp b/ui/gl/gl.gyp
index 4aa5f70714..da89782ced 100644
--- a/ui/gl/gl.gyp
+++ b/ui/gl/gl.gyp
@@ -254,6 +254,8 @@
'sources': [
'gl_context_cgl.cc',
'gl_context_cgl.h',
+ 'gl_image_io_surface.cc',
+ 'gl_image_io_surface.h',
'gl_surface_cgl.cc',
'gl_surface_cgl.h',
'gl_context_nsview.mm',
diff --git a/ui/gl/gl.target.darwin-arm.mk b/ui/gl/gl.target.darwin-arm.mk
index 30fb91e4e1..02a12dca21 100644
--- a/ui/gl/gl.target.darwin-arm.mk
+++ b/ui/gl/gl.target.darwin-arm.mk
@@ -173,6 +173,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -182,9 +183,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGL_IMPLEMENTATION' \
'-DGL_GLEXT_PROTOTYPES' \
@@ -215,8 +218,8 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH)/third_party/swiftshader/include \
$(LOCAL_PATH)/third_party/mesa/src/include \
@@ -291,6 +294,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -300,9 +304,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGL_IMPLEMENTATION' \
'-DGL_GLEXT_PROTOTYPES' \
@@ -334,8 +340,8 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH)/third_party/swiftshader/include \
$(LOCAL_PATH)/third_party/mesa/src/include \
diff --git a/ui/gl/gl.target.darwin-mips.mk b/ui/gl/gl.target.darwin-mips.mk
index 40d7e00e2c..010aeb46d5 100644
--- a/ui/gl/gl.target.darwin-mips.mk
+++ b/ui/gl/gl.target.darwin-mips.mk
@@ -172,6 +172,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -181,9 +182,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGL_IMPLEMENTATION' \
'-DGL_GLEXT_PROTOTYPES' \
@@ -214,8 +217,8 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH)/third_party/swiftshader/include \
$(LOCAL_PATH)/third_party/mesa/src/include \
@@ -289,6 +292,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -298,9 +302,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGL_IMPLEMENTATION' \
'-DGL_GLEXT_PROTOTYPES' \
@@ -332,8 +338,8 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH)/third_party/swiftshader/include \
$(LOCAL_PATH)/third_party/mesa/src/include \
diff --git a/ui/gl/gl.target.darwin-x86.mk b/ui/gl/gl.target.darwin-x86.mk
index ae32bcd6f2..fabc91edb2 100644
--- a/ui/gl/gl.target.darwin-x86.mk
+++ b/ui/gl/gl.target.darwin-x86.mk
@@ -175,6 +175,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -184,9 +185,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGL_IMPLEMENTATION' \
'-DGL_GLEXT_PROTOTYPES' \
@@ -217,8 +220,8 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH)/third_party/swiftshader/include \
$(LOCAL_PATH)/third_party/mesa/src/include \
@@ -296,6 +299,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -305,9 +309,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGL_IMPLEMENTATION' \
'-DGL_GLEXT_PROTOTYPES' \
@@ -339,8 +345,8 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH)/third_party/swiftshader/include \
$(LOCAL_PATH)/third_party/mesa/src/include \
diff --git a/ui/gl/gl.target.linux-arm.mk b/ui/gl/gl.target.linux-arm.mk
index 30fb91e4e1..02a12dca21 100644
--- a/ui/gl/gl.target.linux-arm.mk
+++ b/ui/gl/gl.target.linux-arm.mk
@@ -173,6 +173,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -182,9 +183,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGL_IMPLEMENTATION' \
'-DGL_GLEXT_PROTOTYPES' \
@@ -215,8 +218,8 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH)/third_party/swiftshader/include \
$(LOCAL_PATH)/third_party/mesa/src/include \
@@ -291,6 +294,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -300,9 +304,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGL_IMPLEMENTATION' \
'-DGL_GLEXT_PROTOTYPES' \
@@ -334,8 +340,8 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH)/third_party/swiftshader/include \
$(LOCAL_PATH)/third_party/mesa/src/include \
diff --git a/ui/gl/gl.target.linux-mips.mk b/ui/gl/gl.target.linux-mips.mk
index 40d7e00e2c..010aeb46d5 100644
--- a/ui/gl/gl.target.linux-mips.mk
+++ b/ui/gl/gl.target.linux-mips.mk
@@ -172,6 +172,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -181,9 +182,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGL_IMPLEMENTATION' \
'-DGL_GLEXT_PROTOTYPES' \
@@ -214,8 +217,8 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH)/third_party/swiftshader/include \
$(LOCAL_PATH)/third_party/mesa/src/include \
@@ -289,6 +292,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -298,9 +302,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGL_IMPLEMENTATION' \
'-DGL_GLEXT_PROTOTYPES' \
@@ -332,8 +338,8 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH)/third_party/swiftshader/include \
$(LOCAL_PATH)/third_party/mesa/src/include \
diff --git a/ui/gl/gl.target.linux-x86.mk b/ui/gl/gl.target.linux-x86.mk
index ae32bcd6f2..fabc91edb2 100644
--- a/ui/gl/gl.target.linux-x86.mk
+++ b/ui/gl/gl.target.linux-x86.mk
@@ -175,6 +175,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -184,9 +185,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGL_IMPLEMENTATION' \
'-DGL_GLEXT_PROTOTYPES' \
@@ -217,8 +220,8 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH)/third_party/swiftshader/include \
$(LOCAL_PATH)/third_party/mesa/src/include \
@@ -296,6 +299,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -305,9 +309,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DGL_IMPLEMENTATION' \
'-DGL_GLEXT_PROTOTYPES' \
@@ -339,8 +345,8 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH)/third_party/swiftshader/include \
$(LOCAL_PATH)/third_party/mesa/src/include \
diff --git a/ui/gl/gl_image_io_surface.cc b/ui/gl/gl_image_io_surface.cc
new file mode 100644
index 0000000000..23a7777898
--- /dev/null
+++ b/ui/gl/gl_image_io_surface.cc
@@ -0,0 +1,79 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/gl/gl_image_io_surface.h"
+
+#include "ui/gl/gl_bindings.h"
+#include "ui/gl/gl_context.h"
+#include "ui/gl/io_surface_support_mac.h"
+
+namespace gfx {
+
+GLImageIOSurface::GLImageIOSurface(gfx::Size size)
+ : io_surface_support_(IOSurfaceSupport::Initialize()),
+ size_(size) {
+ CHECK(io_surface_support_);
+}
+
+GLImageIOSurface::~GLImageIOSurface() {
+ Destroy();
+}
+
+bool GLImageIOSurface::Initialize(gfx::GpuMemoryBufferHandle buffer) {
+ io_surface_.reset(io_surface_support_->IOSurfaceLookup(buffer.io_surface_id));
+ if (!io_surface_) {
+ LOG(ERROR) << "IOSurface lookup failed";
+ return false;
+ }
+
+ return true;
+}
+
+void GLImageIOSurface::Destroy() {
+}
+
+gfx::Size GLImageIOSurface::GetSize() {
+ return size_;
+}
+
+bool GLImageIOSurface::BindTexImage(unsigned target) {
+ if (target != GL_TEXTURE_RECTANGLE_ARB) {
+ // This might be supported in the future. For now, perform strict
+ // validation so we know what's going on.
+ LOG(ERROR) << "IOSurface requires TEXTURE_RECTANGLE_ARB target";
+ return false;
+ }
+
+ CGLContextObj cgl_context = static_cast<CGLContextObj>(
+ GLContext::GetCurrent()->GetHandle());
+
+ DCHECK(io_surface_);
+ CGLError cgl_error = io_surface_support_->CGLTexImageIOSurface2D(
+ cgl_context,
+ target,
+ GL_RGBA,
+ size_.width(),
+ size_.height(),
+ GL_BGRA,
+ GL_UNSIGNED_INT_8_8_8_8_REV,
+ io_surface_.get(),
+ 0);
+ if (cgl_error != kCGLNoError) {
+ LOG(ERROR) << "Error in CGLTexImageIOSurface2D";
+ return false;
+ }
+
+ return true;
+}
+
+void GLImageIOSurface::ReleaseTexImage(unsigned target) {
+}
+
+void GLImageIOSurface::WillUseTexImage() {
+}
+
+void GLImageIOSurface::DidUseTexImage() {
+}
+
+} // namespace gfx
diff --git a/ui/gl/gl_image_io_surface.h b/ui/gl/gl_image_io_surface.h
new file mode 100644
index 0000000000..177098282a
--- /dev/null
+++ b/ui/gl/gl_image_io_surface.h
@@ -0,0 +1,42 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_GL_GL_IMAGE_IO_SURFACE_H_
+#define UI_GL_GL_IMAGE_IO_SURFACE_H_
+
+#include "base/mac/scoped_cftyperef.h"
+#include "ui/gl/gl_image.h"
+
+class IOSurfaceSupport;
+
+namespace gfx {
+
+class GL_EXPORT GLImageIOSurface : public GLImage {
+ public:
+ explicit GLImageIOSurface(gfx::Size size);
+
+ bool Initialize(gfx::GpuMemoryBufferHandle buffer);
+
+ // Implement GLImage.
+ virtual void Destroy() OVERRIDE;
+ virtual gfx::Size GetSize() OVERRIDE;
+ virtual bool BindTexImage(unsigned target) OVERRIDE;
+ virtual void ReleaseTexImage(unsigned target) OVERRIDE;
+ virtual void WillUseTexImage() OVERRIDE;
+ virtual void DidUseTexImage() OVERRIDE;
+
+ protected:
+ virtual ~GLImageIOSurface();
+
+ private:
+ IOSurfaceSupport* io_surface_support_;
+ base::ScopedCFTypeRef<CFTypeRef> io_surface_;
+ gfx::Size size_;
+
+ DISALLOW_COPY_AND_ASSIGN(GLImageIOSurface);
+};
+
+} // namespace gfx
+
+#endif // UI_GL_GL_IMAGE_IO_SURFACE_H_
diff --git a/ui/gl/gl_image_mac.cc b/ui/gl/gl_image_mac.cc
index 04dc61e870..a48047fb1b 100644
--- a/ui/gl/gl_image_mac.cc
+++ b/ui/gl/gl_image_mac.cc
@@ -5,6 +5,7 @@
#include "ui/gl/gl_image.h"
#include "base/debug/trace_event.h"
+#include "ui/gl/gl_image_io_surface.h"
#include "ui/gl/gl_image_shm.h"
#include "ui/gl/gl_image_stub.h"
#include "ui/gl/gl_implementation.h"
@@ -44,6 +45,13 @@ scoped_refptr<GLImage> GLImage::CreateGLImageForGpuMemoryBuffer(
return image;
}
+ case IO_SURFACE_BUFFER: {
+ scoped_refptr<GLImageIOSurface> image(new GLImageIOSurface(size));
+ if (!image->Initialize(buffer))
+ return NULL;
+
+ return image;
+ }
default:
NOTREACHED();
return NULL;
diff --git a/ui/gl/gl_jni_headers.target.darwin-arm.mk b/ui/gl/gl_jni_headers.target.darwin-arm.mk
index 08df60be9b..37b3eb26d6 100644
--- a/ui/gl/gl_jni_headers.target.darwin-arm.mk
+++ b/ui/gl/gl_jni_headers.target.darwin-arm.mk
@@ -91,6 +91,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -100,9 +101,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -170,6 +173,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -179,9 +183,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gl/gl_jni_headers.target.darwin-mips.mk b/ui/gl/gl_jni_headers.target.darwin-mips.mk
index 2ff0d2e505..840261dcc0 100644
--- a/ui/gl/gl_jni_headers.target.darwin-mips.mk
+++ b/ui/gl/gl_jni_headers.target.darwin-mips.mk
@@ -90,6 +90,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -99,9 +100,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -168,6 +171,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -177,9 +181,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gl/gl_jni_headers.target.darwin-x86.mk b/ui/gl/gl_jni_headers.target.darwin-x86.mk
index f6d0dead37..123a185f19 100644
--- a/ui/gl/gl_jni_headers.target.darwin-x86.mk
+++ b/ui/gl/gl_jni_headers.target.darwin-x86.mk
@@ -93,6 +93,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -102,9 +103,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -175,6 +178,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -184,9 +188,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gl/gl_jni_headers.target.linux-arm.mk b/ui/gl/gl_jni_headers.target.linux-arm.mk
index 08df60be9b..37b3eb26d6 100644
--- a/ui/gl/gl_jni_headers.target.linux-arm.mk
+++ b/ui/gl/gl_jni_headers.target.linux-arm.mk
@@ -91,6 +91,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -100,9 +101,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -170,6 +173,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -179,9 +183,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gl/gl_jni_headers.target.linux-mips.mk b/ui/gl/gl_jni_headers.target.linux-mips.mk
index 2ff0d2e505..840261dcc0 100644
--- a/ui/gl/gl_jni_headers.target.linux-mips.mk
+++ b/ui/gl/gl_jni_headers.target.linux-mips.mk
@@ -90,6 +90,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -99,9 +100,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -168,6 +171,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -177,9 +181,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gl/gl_jni_headers.target.linux-x86.mk b/ui/gl/gl_jni_headers.target.linux-x86.mk
index f6d0dead37..123a185f19 100644
--- a/ui/gl/gl_jni_headers.target.linux-x86.mk
+++ b/ui/gl/gl_jni_headers.target.linux-x86.mk
@@ -93,6 +93,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -102,9 +103,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -175,6 +178,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -184,9 +188,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gl/io_surface_support_mac.cc b/ui/gl/io_surface_support_mac.cc
index 077eb817e6..a7aeae85f8 100644
--- a/ui/gl/io_surface_support_mac.cc
+++ b/ui/gl/io_surface_support_mac.cc
@@ -14,6 +14,15 @@ typedef mach_port_t (*IOSurfaceCreateMachPortProcPtr)(CFTypeRef io_surface);
typedef CFTypeRef (*IOSurfaceLookupFromMachPortProcPtr)(mach_port_t port);
typedef size_t (*IOSurfaceGetWidthPtr)(CFTypeRef io_surface);
typedef size_t (*IOSurfaceGetHeightPtr)(CFTypeRef io_surface);
+typedef size_t (*IOSurfaceGetBytesPerRowPtr)(CFTypeRef io_surface);
+typedef void* (*IOSurfaceGetBaseAddressPtr)(CFTypeRef io_surface);
+typedef IOReturn (*IOSurfaceLockPtr)(CFTypeRef io_surface,
+ uint32 options,
+ uint32* seed);
+typedef IOReturn (*IOSurfaceUnlockPtr)(CFTypeRef io_surface,
+ uint32 options,
+ uint32* seed);
+
typedef CGLError (*CGLTexImageIOSurface2DProcPtr)(CGLContextObj ctx,
GLenum target,
GLenum internal_format,
@@ -37,6 +46,7 @@ class IOSurfaceSupportImpl : public IOSurfaceSupport {
virtual CFStringRef GetKIOSurfaceWidth() OVERRIDE;
virtual CFStringRef GetKIOSurfaceHeight() OVERRIDE;
virtual CFStringRef GetKIOSurfaceBytesPerElement() OVERRIDE;
+ virtual CFStringRef GetKIOSurfacePixelFormat() OVERRIDE;
virtual CFStringRef GetKIOSurfaceIsGlobal() OVERRIDE;
virtual CFTypeRef IOSurfaceCreate(CFDictionaryRef properties) OVERRIDE;
@@ -47,6 +57,15 @@ class IOSurfaceSupportImpl : public IOSurfaceSupport {
virtual size_t IOSurfaceGetWidth(CFTypeRef io_surface) OVERRIDE;
virtual size_t IOSurfaceGetHeight(CFTypeRef io_surface) OVERRIDE;
+ virtual size_t IOSurfaceGetBytesPerRow(CFTypeRef io_surface) OVERRIDE;
+ virtual void* IOSurfaceGetBaseAddress(CFTypeRef io_surface) OVERRIDE;
+
+ virtual IOReturn IOSurfaceLock(CFTypeRef io_surface,
+ uint32 options,
+ uint32* seed) OVERRIDE;
+ virtual IOReturn IOSurfaceUnlock(CFTypeRef io_surface,
+ uint32 options,
+ uint32* seed) OVERRIDE;
virtual CGLError CGLTexImageIOSurface2D(CGLContextObj ctx,
GLenum target,
@@ -73,6 +92,7 @@ class IOSurfaceSupportImpl : public IOSurfaceSupport {
CFStringRef k_io_surface_width_;
CFStringRef k_io_surface_height_;
CFStringRef k_io_surface_bytes_per_element_;
+ CFStringRef k_io_surface_pixel_format_;
CFStringRef k_io_surface_is_global_;
IOSurfaceCreateProcPtr io_surface_create_;
IOSurfaceGetIDProcPtr io_surface_get_id_;
@@ -81,6 +101,10 @@ class IOSurfaceSupportImpl : public IOSurfaceSupport {
IOSurfaceLookupFromMachPortProcPtr io_surface_lookup_from_mach_port_;
IOSurfaceGetWidthPtr io_surface_get_width_;
IOSurfaceGetHeightPtr io_surface_get_height_;
+ IOSurfaceGetBytesPerRowPtr io_surface_get_bytes_per_row_;
+ IOSurfaceGetBaseAddressPtr io_surface_get_base_address_;
+ IOSurfaceLockPtr io_surface_lock_;
+ IOSurfaceUnlockPtr io_surface_unlock_;
CGLTexImageIOSurface2DProcPtr cgl_tex_image_io_surface_2d_;
CVPixelBufferGetIOSurfaceProcPtr cv_pixel_buffer_get_io_surface_;
bool initialized_successfully_;
@@ -108,6 +132,10 @@ CFStringRef IOSurfaceSupportImpl::GetKIOSurfaceBytesPerElement() {
return k_io_surface_bytes_per_element_;
}
+CFStringRef IOSurfaceSupportImpl::GetKIOSurfacePixelFormat() {
+ return k_io_surface_pixel_format_;
+}
+
CFStringRef IOSurfaceSupportImpl::GetKIOSurfaceIsGlobal() {
return k_io_surface_is_global_;
}
@@ -142,6 +170,25 @@ size_t IOSurfaceSupportImpl::IOSurfaceGetHeight(CFTypeRef io_surface) {
return io_surface_get_height_(io_surface);
}
+size_t IOSurfaceSupportImpl::IOSurfaceGetBytesPerRow(CFTypeRef io_surface) {
+ return io_surface_get_bytes_per_row_(io_surface);
+}
+
+void* IOSurfaceSupportImpl::IOSurfaceGetBaseAddress(CFTypeRef io_surface) {
+ return io_surface_get_base_address_(io_surface);
+}
+
+IOReturn IOSurfaceSupportImpl::IOSurfaceLock(CFTypeRef io_surface,
+ uint32 options,
+ uint32* seed) {
+ return io_surface_lock_(io_surface, options, seed);
+}
+
+IOReturn IOSurfaceSupportImpl::IOSurfaceUnlock(CFTypeRef io_surface,
+ uint32 options,
+ uint32* seed) {
+ return io_surface_unlock_(io_surface, options, seed);
+}
CGLError IOSurfaceSupportImpl::CGLTexImageIOSurface2D(CGLContextObj ctx,
GLenum target,
@@ -175,6 +222,7 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl()
k_io_surface_width_(NULL),
k_io_surface_height_(NULL),
k_io_surface_bytes_per_element_(NULL),
+ k_io_surface_pixel_format_(NULL),
k_io_surface_is_global_(NULL),
io_surface_create_(NULL),
io_surface_get_id_(NULL),
@@ -183,6 +231,10 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl()
io_surface_lookup_from_mach_port_(NULL),
io_surface_get_width_(NULL),
io_surface_get_height_(NULL),
+ io_surface_get_bytes_per_row_(NULL),
+ io_surface_get_base_address_(NULL),
+ io_surface_lock_(NULL),
+ io_surface_unlock_(NULL),
cgl_tex_image_io_surface_2d_(NULL),
cv_pixel_buffer_get_io_surface_(NULL),
initialized_successfully_(false) {
@@ -206,6 +258,8 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl()
void* surface_height_ptr = dlsym(iosurface_handle_, "kIOSurfaceHeight");
void* surface_bytes_per_element_ptr =
dlsym(iosurface_handle_, "kIOSurfaceBytesPerElement");
+ void* surface_pixel_format_ptr =
+ dlsym(iosurface_handle_, "kIOSurfacePixelFormat");
void* surface_is_global_ptr =
dlsym(iosurface_handle_, "kIOSurfaceIsGlobal");
void* surface_create_ptr = dlsym(iosurface_handle_, "IOSurfaceCreate");
@@ -219,6 +273,12 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl()
dlsym(iosurface_handle_, "IOSurfaceGetWidth");
void* io_surface_get_height_ptr =
dlsym(iosurface_handle_, "IOSurfaceGetHeight");
+ void* io_surface_get_bytes_per_row_ptr =
+ dlsym(iosurface_handle_, "IOSurfaceGetBytesPerRow");
+ void* io_surface_get_base_address_ptr =
+ dlsym(iosurface_handle_, "IOSurfaceGetBaseAddress");
+ void* io_surface_lock_ptr = dlsym(iosurface_handle_, "IOSurfaceLock");
+ void* io_surface_unlock_ptr = dlsym(iosurface_handle_, "IOSurfaceUnlock");
void* tex_image_io_surface_2d_ptr =
dlsym(opengl_handle_, "CGLTexImageIOSurface2D");
void* cv_pixel_buffer_get_io_surface =
@@ -226,6 +286,7 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl()
if (!surface_width_ptr ||
!surface_height_ptr ||
!surface_bytes_per_element_ptr ||
+ !surface_pixel_format_ptr ||
!surface_is_global_ptr ||
!surface_create_ptr ||
!surface_get_id_ptr ||
@@ -234,6 +295,10 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl()
!surface_lookup_from_mach_port_ptr ||
!io_surface_get_width_ptr ||
!io_surface_get_height_ptr ||
+ !io_surface_get_bytes_per_row_ptr ||
+ !io_surface_get_base_address_ptr ||
+ !io_surface_lock_ptr ||
+ !io_surface_unlock_ptr ||
!tex_image_io_surface_2d_ptr ||
!cv_pixel_buffer_get_io_surface) {
CloseLibraryHandles();
@@ -244,6 +309,8 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl()
k_io_surface_height_ = *static_cast<CFStringRef*>(surface_height_ptr);
k_io_surface_bytes_per_element_ =
*static_cast<CFStringRef*>(surface_bytes_per_element_ptr);
+ k_io_surface_pixel_format_ =
+ *static_cast<CFStringRef*>(surface_pixel_format_ptr);
k_io_surface_is_global_ = *static_cast<CFStringRef*>(surface_is_global_ptr);
io_surface_create_ = reinterpret_cast<IOSurfaceCreateProcPtr>(
surface_create_ptr);
@@ -263,6 +330,15 @@ IOSurfaceSupportImpl::IOSurfaceSupportImpl()
io_surface_get_height_ =
reinterpret_cast<IOSurfaceGetHeightPtr>(
io_surface_get_height_ptr);
+ io_surface_get_bytes_per_row_ =
+ reinterpret_cast<IOSurfaceGetBytesPerRowPtr>(
+ io_surface_get_bytes_per_row_ptr);
+ io_surface_get_base_address_ =
+ reinterpret_cast<IOSurfaceGetBaseAddressPtr>(
+ io_surface_get_base_address_ptr);
+ io_surface_lock_ = reinterpret_cast<IOSurfaceLockPtr>(io_surface_lock_ptr);
+ io_surface_unlock_ = reinterpret_cast<IOSurfaceUnlockPtr>(
+ io_surface_unlock_ptr);
cgl_tex_image_io_surface_2d_ =
reinterpret_cast<CGLTexImageIOSurface2DProcPtr>(
tex_image_io_surface_2d_ptr);
diff --git a/ui/gl/io_surface_support_mac.h b/ui/gl/io_surface_support_mac.h
index d8c30e1f1b..d8699c833a 100644
--- a/ui/gl/io_surface_support_mac.h
+++ b/ui/gl/io_surface_support_mac.h
@@ -31,6 +31,7 @@ class GL_EXPORT IOSurfaceSupport {
virtual CFStringRef GetKIOSurfaceWidth() = 0;
virtual CFStringRef GetKIOSurfaceHeight() = 0;
virtual CFStringRef GetKIOSurfaceBytesPerElement() = 0;
+ virtual CFStringRef GetKIOSurfacePixelFormat() = 0;
virtual CFStringRef GetKIOSurfaceIsGlobal() = 0;
virtual CFTypeRef IOSurfaceCreate(CFDictionaryRef properties) = 0;
@@ -49,6 +50,15 @@ class GL_EXPORT IOSurfaceSupport {
virtual size_t IOSurfaceGetWidth(CFTypeRef io_surface) = 0;
virtual size_t IOSurfaceGetHeight(CFTypeRef io_surface) = 0;
+ virtual size_t IOSurfaceGetBytesPerRow(CFTypeRef io_surface) = 0;
+ virtual void* IOSurfaceGetBaseAddress(CFTypeRef io_surface) = 0;
+
+ virtual IOReturn IOSurfaceLock(CFTypeRef io_surface,
+ uint32 options,
+ uint32* seed) = 0;
+ virtual IOReturn IOSurfaceUnlock(CFTypeRef io_surface,
+ uint32 options,
+ uint32* seed) = 0;
virtual CGLError CGLTexImageIOSurface2D(CGLContextObj ctx,
GLenum target,
diff --git a/ui/gl/surface_jni_headers.target.darwin-arm.mk b/ui/gl/surface_jni_headers.target.darwin-arm.mk
index b8f9dfaa50..d035c1ede1 100644
--- a/ui/gl/surface_jni_headers.target.darwin-arm.mk
+++ b/ui/gl/surface_jni_headers.target.darwin-arm.mk
@@ -73,6 +73,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -82,9 +83,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -152,6 +155,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -161,9 +165,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gl/surface_jni_headers.target.darwin-mips.mk b/ui/gl/surface_jni_headers.target.darwin-mips.mk
index 5e5c0e2d30..61c8bece2b 100644
--- a/ui/gl/surface_jni_headers.target.darwin-mips.mk
+++ b/ui/gl/surface_jni_headers.target.darwin-mips.mk
@@ -72,6 +72,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -81,9 +82,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -150,6 +153,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -159,9 +163,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gl/surface_jni_headers.target.darwin-x86.mk b/ui/gl/surface_jni_headers.target.darwin-x86.mk
index 408a501aa2..5fa1b1e5ec 100644
--- a/ui/gl/surface_jni_headers.target.darwin-x86.mk
+++ b/ui/gl/surface_jni_headers.target.darwin-x86.mk
@@ -75,6 +75,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -84,9 +85,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -157,6 +160,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -166,9 +170,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gl/surface_jni_headers.target.linux-arm.mk b/ui/gl/surface_jni_headers.target.linux-arm.mk
index b8f9dfaa50..d035c1ede1 100644
--- a/ui/gl/surface_jni_headers.target.linux-arm.mk
+++ b/ui/gl/surface_jni_headers.target.linux-arm.mk
@@ -73,6 +73,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -82,9 +83,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -152,6 +155,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -161,9 +165,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gl/surface_jni_headers.target.linux-mips.mk b/ui/gl/surface_jni_headers.target.linux-mips.mk
index 5e5c0e2d30..61c8bece2b 100644
--- a/ui/gl/surface_jni_headers.target.linux-mips.mk
+++ b/ui/gl/surface_jni_headers.target.linux-mips.mk
@@ -72,6 +72,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -81,9 +82,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -150,6 +153,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -159,9 +163,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/gl/surface_jni_headers.target.linux-x86.mk b/ui/gl/surface_jni_headers.target.linux-x86.mk
index 408a501aa2..5fa1b1e5ec 100644
--- a/ui/gl/surface_jni_headers.target.linux-x86.mk
+++ b/ui/gl/surface_jni_headers.target.linux-x86.mk
@@ -75,6 +75,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -84,9 +85,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -157,6 +160,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -166,9 +170,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/keyboard/keyboard.gyp b/ui/keyboard/keyboard.gyp
index 7953ef974c..4ea3b09808 100644
--- a/ui/keyboard/keyboard.gyp
+++ b/ui/keyboard/keyboard.gyp
@@ -82,6 +82,7 @@
'../../content/content.gyp:content',
'../../skia/skia.gyp:skia',
'../../testing/gtest.gyp:gtest',
+ '../../url/url.gyp:url_lib',
'../aura/aura.gyp:aura',
'../aura/aura.gyp:aura_test_support',
'../compositor/compositor.gyp:compositor',
diff --git a/ui/keyboard/keyboard_controller.cc b/ui/keyboard/keyboard_controller.cc
index 537cf12b9f..0cb975f7d9 100644
--- a/ui/keyboard/keyboard_controller.cc
+++ b/ui/keyboard/keyboard_controller.cc
@@ -182,6 +182,10 @@ void KeyboardController::OnWindowHierarchyChanged(
OnTextInputStateChanged(proxy_->GetInputMethod()->GetTextInputClient());
}
+void KeyboardController::SetOverrideContentUrl(const GURL& url) {
+ proxy_->SetOverrideContentUrl(url);
+}
+
void KeyboardController::OnTextInputStateChanged(
const ui::TextInputClient* client) {
if (!container_.get())
diff --git a/ui/keyboard/keyboard_controller.h b/ui/keyboard/keyboard_controller.h
index 1daa296a1c..45bba329be 100644
--- a/ui/keyboard/keyboard_controller.h
+++ b/ui/keyboard/keyboard_controller.h
@@ -12,6 +12,7 @@
#include "ui/aura/window_observer.h"
#include "ui/base/ime/input_method_observer.h"
#include "ui/keyboard/keyboard_export.h"
+#include "url/gurl.h"
namespace aura {
class Window;
@@ -51,6 +52,10 @@ class KEYBOARD_EXPORT KeyboardController : public ui::InputMethodObserver,
// KeyboardController.
aura::Window* GetContainerWindow();
+ // Sets the override content url. This is used by for input view for extension
+ // IMEs.
+ void SetOverrideContentUrl(const GURL& url);
+
// Hides virtual keyboard and notifies observer bounds change.
// This function should be called with a delay to avoid layout flicker
// when the focus of input field quickly change. |automatic| is true when the
diff --git a/ui/keyboard/keyboard_controller_proxy.cc b/ui/keyboard/keyboard_controller_proxy.cc
index 1cfb99d92b..2d1bb4b537 100644
--- a/ui/keyboard/keyboard_controller_proxy.cc
+++ b/ui/keyboard/keyboard_controller_proxy.cc
@@ -93,28 +93,46 @@ class KeyboardContentsDelegate : public content::WebContentsDelegate,
namespace keyboard {
-KeyboardControllerProxy::KeyboardControllerProxy() {
+KeyboardControllerProxy::KeyboardControllerProxy()
+ : default_url_(kKeyboardWebUIURL) {
}
KeyboardControllerProxy::~KeyboardControllerProxy() {
}
+const GURL& KeyboardControllerProxy::GetValidUrl() {
+ return override_url_.is_valid() ? override_url_ : default_url_;
+}
+
+void KeyboardControllerProxy::SetOverrideContentUrl(const GURL& url) {
+ if (override_url_ == url)
+ return;
+ override_url_ = url;
+
+ ReloadContents();
+}
+
+void KeyboardControllerProxy::ReloadContents() {
+ if (keyboard_contents_) {
+ content::OpenURLParams params(
+ GetValidUrl(),
+ content::Referrer(),
+ SINGLETON_TAB,
+ content::PAGE_TRANSITION_AUTO_TOPLEVEL,
+ false);
+ keyboard_contents_->OpenURL(params);
+ }
+}
+
aura::Window* KeyboardControllerProxy::GetKeyboardWindow() {
if (!keyboard_contents_) {
content::BrowserContext* context = GetBrowserContext();
- GURL url(kKeyboardWebUIURL);
keyboard_contents_.reset(content::WebContents::Create(
content::WebContents::CreateParams(context,
- content::SiteInstance::CreateForURL(context, url))));
+ content::SiteInstance::CreateForURL(context, GetValidUrl()))));
keyboard_contents_->SetDelegate(new KeyboardContentsDelegate(this));
SetupWebContents(keyboard_contents_.get());
-
- content::OpenURLParams params(url,
- content::Referrer(),
- SINGLETON_TAB,
- content::PAGE_TRANSITION_AUTO_TOPLEVEL,
- false);
- keyboard_contents_->OpenURL(params);
+ ReloadContents();
}
return keyboard_contents_->GetView()->GetNativeView();
diff --git a/ui/keyboard/keyboard_controller_proxy.h b/ui/keyboard/keyboard_controller_proxy.h
index 5358597799..cdd870a6a7 100644
--- a/ui/keyboard/keyboard_controller_proxy.h
+++ b/ui/keyboard/keyboard_controller_proxy.h
@@ -38,6 +38,9 @@ class KEYBOARD_EXPORT KeyboardControllerProxy {
// with the proxy.
virtual aura::Window* GetKeyboardWindow();
+ // Sets the override content url.
+ void SetOverrideContentUrl(const GURL& url);
+
// Gets the InputMethod that will provide notifications about changes in the
// text input context.
virtual ui::InputMethod* GetInputMethod() = 0;
@@ -74,6 +77,15 @@ class KEYBOARD_EXPORT KeyboardControllerProxy {
virtual void SetupWebContents(content::WebContents* contents);
private:
+ // Reloads the web contents to the valid url from GetValidUrl().
+ void ReloadContents();
+
+ // Gets the valid url from default url or override url.
+ const GURL& GetValidUrl();
+
+ const GURL default_url_;
+ GURL override_url_;
+
scoped_ptr<content::WebContents> keyboard_contents_;
DISALLOW_COPY_AND_ASSIGN(KeyboardControllerProxy);
diff --git a/ui/keyboard/keyboard_resources.grd b/ui/keyboard/keyboard_resources.grd
index 00433a5247..1fbf9684ff 100644
--- a/ui/keyboard/keyboard_resources.grd
+++ b/ui/keyboard/keyboard_resources.grd
@@ -63,7 +63,7 @@
<include name="IDR_KEYBOARD_MAIN_JS" file="resources/main.js" type="BINDATA" />
<include name="IDR_KEYBOARD_MANIFEST" file="resources/manifest.json" type="BINDATA" />
<include name="IDR_KEYBOARD_MAIN_CSS" file="resources/main.css" type="BINDATA" />
- <include name="IDR_KEYBOARD_POLYMER" file="resources/polymer.min.js" flattenhtml="true" type="BINDATA" />
+ <include name="IDR_KEYBOARD_POLYMER_LOADER" file="resources/polymer_loader.js" flattenhtml="true" type="BINDATA" />
<include name="IDR_KEYBOARD_SPACEBAR_ROW" file="resources/layouts/spacebar-row.html" type="BINDATA" />
<include name="IDR_KEYBOARD_VOICE_INPUT_JS" file="resources/voice_input.js" type="BINDATA" />
<include name="IDR_KEYBOARD_WEBUI_INDEX" file="resources/webui_index.html" allowexternalscript="true" type="BINDATA" />
diff --git a/ui/keyboard/keyboard_ui_controller.cc b/ui/keyboard/keyboard_ui_controller.cc
index 4967fac869..1c37cdf35a 100644
--- a/ui/keyboard/keyboard_ui_controller.cc
+++ b/ui/keyboard/keyboard_ui_controller.cc
@@ -85,7 +85,7 @@ content::WebUIDataSource* CreateKeyboardUIDataSource() {
source->AddResourcePath("layouts/system-qwerty.html",
IDR_KEYBOARD_LAYOUTS_SYSTEM_QWERTY);
source->AddResourcePath("main.js", IDR_KEYBOARD_MAIN_JS);
- source->AddResourcePath("polymer.min.js", IDR_KEYBOARD_POLYMER);
+ source->AddResourcePath("polymer_loader.js", IDR_KEYBOARD_POLYMER_LOADER);
source->AddResourcePath("voice_input.js", IDR_KEYBOARD_VOICE_INPUT_JS);
// These files are specific to the WebUI version
diff --git a/ui/keyboard/keyboard_ui_handler.cc b/ui/keyboard/keyboard_ui_handler.cc
index 610d0e2500..780e0be4aa 100644
--- a/ui/keyboard/keyboard_ui_handler.cc
+++ b/ui/keyboard/keyboard_ui_handler.cc
@@ -102,12 +102,14 @@ void KeyboardUIHandler::HandleSendKeyEventMessage(
std::string type;
int char_value;
int key_code;
+ std::string key_name;
int modifiers;
if (!args->GetDictionary(0, &params) ||
!params->GetString("type", &type) ||
!params->GetInteger("charValue", &char_value) ||
!params->GetInteger("keyCode", &key_code) ||
+ !params->GetString("keyName", &key_name) ||
!params->GetInteger("modifiers", &modifiers)) {
LOG(ERROR) << "SendKeyEvent failed: bad argument";
return;
@@ -123,6 +125,7 @@ void KeyboardUIHandler::HandleSendKeyEventMessage(
if (!keyboard::SendKeyEvent(type,
char_value,
key_code,
+ key_name,
modifiers,
dispatcher)) {
LOG(ERROR) << "sendKeyEvent failed";
diff --git a/ui/keyboard/keyboard_util.cc b/ui/keyboard/keyboard_util.cc
index 42c26a0a35..bdb049df32 100644
--- a/ui/keyboard/keyboard_util.cc
+++ b/ui/keyboard/keyboard_util.cc
@@ -110,6 +110,7 @@ bool MoveCursor(int swipe_direction,
bool SendKeyEvent(const std::string type,
int key_value,
int key_code,
+ std::string key_name,
int modifiers,
aura::WindowEventDispatcher* dispatcher) {
ui::EventType event_type = ui::ET_UNKNOWN;
@@ -153,7 +154,7 @@ bool SendKeyEvent(const std::string type,
}
}
- ui::KeyEvent event(event_type, code, modifiers, false);
+ ui::KeyEvent event(event_type, code, key_name, modifiers, false);
dispatcher->AsRootWindowHostDelegate()->OnHostKeyEvent(&event);
}
return true;
@@ -241,7 +242,7 @@ const GritResourceMap* GetKeyboardExtensionResources(size_t* size) {
{"keyboard/main.js", IDR_KEYBOARD_MAIN_JS},
{"keyboard/manifest.json", IDR_KEYBOARD_MANIFEST},
{"keyboard/main.css", IDR_KEYBOARD_MAIN_CSS},
- {"keyboard/polymer.min.js", IDR_KEYBOARD_POLYMER},
+ {"keyboard/polymer_loader.js", IDR_KEYBOARD_POLYMER_LOADER},
{"keyboard/voice_input.js", IDR_KEYBOARD_VOICE_INPUT_JS},
};
static const size_t kKeyboardResourcesSize = arraysize(kKeyboardResources);
diff --git a/ui/keyboard/keyboard_util.h b/ui/keyboard/keyboard_util.h
index b5dcefd1e8..232127320b 100644
--- a/ui/keyboard/keyboard_util.h
+++ b/ui/keyboard/keyboard_util.h
@@ -53,12 +53,14 @@ KEYBOARD_EXPORT bool MoveCursor(int swipe_direction,
// Sends a fabricated key event, where |type| is the event type, |key_value|
// is the unicode value of the character, |key_code| is the legacy key code
-// value, and |modifier| indicates if any modifier keys are being virtually
-// pressed. The event is dispatched to the active TextInputClient associated
-// with |root_window|. The type may be "keydown" or "keyup".
+// value, |key_name| is the name of the key as defined in the DOM3 key event
+// specification, and |modifier| indicates if any modifier keys are being
+// virtually pressed. The event is dispatched to the active TextInputClient
+// associated with |root_window|. The type may be "keydown" or "keyup".
KEYBOARD_EXPORT bool SendKeyEvent(std::string type,
int key_value,
int key_code,
+ std::string key_name,
int modifiers,
aura::WindowEventDispatcher* dispatcher);
diff --git a/ui/keyboard/resources/api_adapter.js b/ui/keyboard/resources/api_adapter.js
index 1be04e64ae..934a760046 100644
--- a/ui/keyboard/resources/api_adapter.js
+++ b/ui/keyboard/resources/api_adapter.js
@@ -2,6 +2,16 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+/**
+ * Queries the document for an element with a matching id.
+ * @param {string} id is a case-sensitive string representing the unique ID of
+ * the element being sought.
+ * @return {?Element} The element with that id.
+ */
+var $ = function(id) {
+ return document.getElementById(id);
+}
+
function logIfError() {
if (chrome.runtime.lastError) {
console.log(chrome.runtime.lastError);
@@ -30,6 +40,6 @@ function keyboardLoaded() {
chrome.virtualKeyboardPrivate.onTextInputBoxFocused.addListener(
function (inputContext) {
- keyboard.inputTypeValue = inputContext.type;
+ $('keyboard').inputTypeValue = inputContext.type;
}
);
diff --git a/ui/keyboard/resources/elements/kb-altkey.html b/ui/keyboard/resources/elements/kb-altkey.html
index 7df0bf66e8..276ca5c119 100644
--- a/ui/keyboard/resources/elements/kb-altkey.html
+++ b/ui/keyboard/resources/elements/kb-altkey.html
@@ -58,7 +58,7 @@
* inside a node, the event should be filter out.
* @param {Node} node The accent key node which receives event.
* @param {event} event A pointer move event.
- * @return {boolean} True if event is externla to node.
+ * @return {boolean} True if event is external to node.
*/
function isRelevantEvent(node, event) {
return !(node.compareDocumentPosition(event.relatedTarget)
@@ -72,19 +72,32 @@
this.fire('key-down', {});
}
},
+
out: function(event) {
if (isRelevantEvent(this, event)) {
this.classList.remove('active');
}
},
+
up: function(event) {
var detail = {
- char: this.char || this.textContent
+ char: this.charValue
};
this.fire('key-up', detail);
},
+
// TODO(bshe): kb-altkey should extend from kb-key-base.
autoRelease: function() {
+ },
+
+ /**
+ * Character value associated with the key. Typically, the value is a
+ * single character, but may be multi-character in cases like a ".com"
+ * button.
+ * @return {string}
+ */
+ get charValue() {
+ return this.char || this.textContent;
}
});
</script>
diff --git a/ui/keyboard/resources/elements/kb-key-codes.html b/ui/keyboard/resources/elements/kb-key-codes.html
index 4efd1ecc3a..d99a00fcf7 100644
--- a/ui/keyboard/resources/elements/kb-key-codes.html
+++ b/ui/keyboard/resources/elements/kb-key-codes.html
@@ -35,121 +35,127 @@
// TODO(rsadam): Correctly propagate shutdown keycode. This is currently
// ignored due to chromoting (crbug/146609)
var keyCodes = {
- '\b': {keyCode: 0x08, shiftModifier: false},
- '\t': {keyCode: 0x09, shiftModifier: false},
- '\n': {keyCode: 0x0D, shiftModifier: false},
- 'Esc': {keyCode: 0x1B, shiftModifier: false},
- ' ': {keyCode: 0x20, shiftModifier: false},
- 'Arrow-Left': {keyCode: 0x25, shiftModifier: undefined},
- 'Arrow-Up': {keyCode: 0x26, shiftModifier: undefined},
- 'Arrow-Right': {keyCode: 0x27, shiftModifier: undefined},
- 'Arrow-Down': {keyCode: 0x28, shiftModifier: undefined},
- '0': {keyCode: 0x30, shiftModifier: false},
- ')': {keyCode: 0x30, shiftModifier: true},
- '1': {keyCode: 0x31, shiftModifier: false},
- '!': {keyCode: 0x31, shiftModifier: true},
- '2': {keyCode: 0x32, shiftModifier: false},
- '@': {keyCode: 0x32, shiftModifier: true},
- '3': {keyCode: 0x33, shiftModifier: false},
- '#': {keyCode: 0x33, shiftModifier: true},
- '4': {keyCode: 0x34, shiftModifier: false},
- '$': {keyCode: 0x34, shiftModifier: true},
- '5': {keyCode: 0x35, shiftModifier: false},
- '%': {keyCode: 0x35, shiftModifier: true},
- '6': {keyCode: 0x36, shiftModifier: false},
- '^': {keyCode: 0x36, shiftModifier: true},
- '7': {keyCode: 0x37, shiftModifier: false},
- '&': {keyCode: 0x37, shiftModifier: true},
- '8': {keyCode: 0x38, shiftModifier: false},
- '*': {keyCode: 0x38, shiftModifier: true},
- '9': {keyCode: 0x39, shiftModifier: false},
- '(': {keyCode: 0x39, shiftModifier: true},
- 'a': {keyCode: 0x41, shiftModifier: false},
- 'A': {keyCode: 0x41, shiftModifier: true},
- 'b': {keyCode: 0x42, shiftModifier: false},
- 'B': {keyCode: 0x42, shiftModifier: true},
- 'c': {keyCode: 0x43, shiftModifier: false},
- 'C': {keyCode: 0x43, shiftModifier: true},
- 'd': {keyCode: 0x44, shiftModifier: false},
- 'D': {keyCode: 0x44, shiftModifier: true},
- 'e': {keyCode: 0x45, shiftModifier: false},
- 'E': {keyCode: 0x45, shiftModifier: true},
- 'f': {keyCode: 0x46, shiftModifier: false},
- 'F': {keyCode: 0x46, shiftModifier: true},
- 'g': {keyCode: 0x47, shiftModifier: false},
- 'G': {keyCode: 0x47, shiftModifier: true},
- 'h': {keyCode: 0x48, shiftModifier: false},
- 'H': {keyCode: 0x48, shiftModifier: true},
- 'i': {keyCode: 0x49, shiftModifier: false},
- 'I': {keyCode: 0x49, shiftModifier: true},
- 'j': {keyCode: 0x4A, shiftModifier: false},
- 'J': {keyCode: 0x4A, shiftModifier: true},
- 'k': {keyCode: 0x4B, shiftModifier: false},
- 'K': {keyCode: 0x4B, shiftModifier: true},
- 'l': {keyCode: 0x4C, shiftModifier: false},
- 'L': {keyCode: 0x4C, shiftModifier: true},
- 'm': {keyCode: 0x4D, shiftModifier: false},
- 'M': {keyCode: 0x4D, shiftModifier: true},
- 'n': {keyCode: 0x4E, shiftModifier: false},
- 'N': {keyCode: 0x4E, shiftModifier: true},
- 'o': {keyCode: 0x4F, shiftModifier: false},
- 'O': {keyCode: 0x4F, shiftModifier: true},
- 'p': {keyCode: 0x50, shiftModifier: false},
- 'P': {keyCode: 0x50, shiftModifier: true},
- 'q': {keyCode: 0x51, shiftModifier: false},
- 'Q': {keyCode: 0x51, shiftModifier: true},
- 'r': {keyCode: 0x52, shiftModifier: false},
- 'R': {keyCode: 0x52, shiftModifier: true},
- 's': {keyCode: 0x53, shiftModifier: false},
- 'S': {keyCode: 0x53, shiftModifier: true},
- 't': {keyCode: 0x54, shiftModifier: false},
- 'T': {keyCode: 0x54, shiftModifier: true},
- 'u': {keyCode: 0x55, shiftModifier: false},
- 'U': {keyCode: 0x55, shiftModifier: true},
- 'v': {keyCode: 0x56, shiftModifier: false},
- 'V': {keyCode: 0x56, shiftModifier: true},
- 'w': {keyCode: 0x57, shiftModifier: false},
- 'W': {keyCode: 0x57, shiftModifier: true},
- 'x': {keyCode: 0x58, shiftModifier: false},
- 'X': {keyCode: 0x58, shiftModifier: true},
- 'y': {keyCode: 0x59, shiftModifier: false},
- 'Y': {keyCode: 0x59, shiftModifier: true},
- 'z': {keyCode: 0x5A, shiftModifier: false},
- 'Z': {keyCode: 0x5A, shiftModifier: true},
+ '\b': {keyCode: 0x08, keyName: 'Backspace', shiftModifier: false},
+ '\t': {keyCode: 0x09, keyName: 'Tab', shiftModifier: false},
+ '\n': {keyCode: 0x0D, keyName: 'Enter', shiftModifier: false},
+ 'Esc': {keyCode: 0x1B, keyName: 'Escape', shiftModifier: false},
+ ' ': {keyCode: 0x20, keyName: 'Space', shiftModifier: false},
+ 'Arrow-Left': {keyCode: 0x25, keyName: 'ArrowLeft',
+ shiftModifier: undefined},
+ 'Arrow-Up': {keyCode: 0x26, keyName: 'ArrowUp', shiftModifier: undefined},
+ 'Arrow-Right': {keyCode: 0x27, keyName: 'ArrowRight',
+ shiftModifier: undefined},
+ 'Arrow-Down': {keyCode: 0x28, keyName: 'ArrowDown',
+ shiftModifier: undefined},
+ '0': {keyCode: 0x30, keyName: 'Digit0', shiftModifier: false},
+ ')': {keyCode: 0x30, keyName: 'Digit0', shiftModifier: true},
+ '1': {keyCode: 0x31, keyName: 'Digit1', shiftModifier: false},
+ '!': {keyCode: 0x31, keyName: 'Digit1', shiftModifier: true},
+ '2': {keyCode: 0x32, keyName: 'Digit2', shiftModifier: false},
+ '@': {keyCode: 0x32, keyName: 'Digit2', shiftModifier: true},
+ '3': {keyCode: 0x33, keyName: 'Digit3', shiftModifier: false},
+ '#': {keyCode: 0x33, keyName: 'Digit3', shiftModifier: true},
+ '4': {keyCode: 0x34, keyName: 'Digit4', shiftModifier: false},
+ '$': {keyCode: 0x34, keyName: 'Digit4', shiftModifier: true},
+ '5': {keyCode: 0x35, keyName: 'Digit5', shiftModifier: false},
+ '%': {keyCode: 0x35, keyName: 'Digit5', shiftModifier: true},
+ '6': {keyCode: 0x36, keyName: 'Digit6', shiftModifier: false},
+ '^': {keyCode: 0x36, keyName: 'Digit6', shiftModifier: true},
+ '7': {keyCode: 0x37, keyName: 'Digit7', shiftModifier: false},
+ '&': {keyCode: 0x37, keyName: 'Digit7', shiftModifier: true},
+ '8': {keyCode: 0x38, keyName: 'Digit8', shiftModifier: false},
+ '*': {keyCode: 0x38, keyName: 'Digit8', shiftModifier: true},
+ '9': {keyCode: 0x39, keyName: 'Digit9', shiftModifier: false},
+ '(': {keyCode: 0x39, keyName: 'Digit9', shiftModifier: true},
+ 'a': {keyCode: 0x41, keyName: 'KeyA', shiftModifier: false},
+ 'A': {keyCode: 0x41, keyName: 'KeyA', shiftModifier: true},
+ 'b': {keyCode: 0x42, keyName: 'KeyB', shiftModifier: false},
+ 'B': {keyCode: 0x42, keyName: 'KeyB', shiftModifier: true},
+ 'c': {keyCode: 0x43, keyName: 'KeyC', shiftModifier: false},
+ 'C': {keyCode: 0x43, keyName: 'KeyC', shiftModifier: true},
+ 'd': {keyCode: 0x44, keyName: 'KeyD', shiftModifier: false},
+ 'D': {keyCode: 0x44, keyName: 'KeyD', shiftModifier: true},
+ 'e': {keyCode: 0x45, keyName: 'KeyE', shiftModifier: false},
+ 'E': {keyCode: 0x45, keyName: 'KeyE', shiftModifier: true},
+ 'f': {keyCode: 0x46, keyName: 'KeyF', shiftModifier: false},
+ 'F': {keyCode: 0x46, keyName: 'KeyF', shiftModifier: true},
+ 'g': {keyCode: 0x47, keyName: 'KeyG', shiftModifier: false},
+ 'G': {keyCode: 0x47, keyName: 'KeyG', shiftModifier: true},
+ 'h': {keyCode: 0x48, keyName: 'KeyH', shiftModifier: false},
+ 'H': {keyCode: 0x48, keyName: 'KeyH', shiftModifier: true},
+ 'i': {keyCode: 0x49, keyName: 'KeyI', shiftModifier: false},
+ 'I': {keyCode: 0x49, keyName: 'KeyI', shiftModifier: true},
+ 'j': {keyCode: 0x4A, keyName: 'KeyJ', shiftModifier: false},
+ 'J': {keyCode: 0x4A, keyName: 'KeyJ', shiftModifier: true},
+ 'k': {keyCode: 0x4B, keyName: 'KeyK', shiftModifier: false},
+ 'K': {keyCode: 0x4B, keyName: 'KeyK', shiftModifier: true},
+ 'l': {keyCode: 0x4C, keyName: 'KeyL', shiftModifier: false},
+ 'L': {keyCode: 0x4C, keyName: 'KeyL', shiftModifier: true},
+ 'm': {keyCode: 0x4D, keyName: 'KeyM', shiftModifier: false},
+ 'M': {keyCode: 0x4D, keyName: 'KeyM', shiftModifier: true},
+ 'n': {keyCode: 0x4E, keyName: 'KeyN', shiftModifier: false},
+ 'N': {keyCode: 0x4E, keyName: 'KeyN', shiftModifier: true},
+ 'o': {keyCode: 0x4F, keyName: 'KeyO', shiftModifier: false},
+ 'O': {keyCode: 0x4F, keyName: 'KeyO', shiftModifier: true},
+ 'p': {keyCode: 0x50, keyName: 'KeyP', shiftModifier: false},
+ 'P': {keyCode: 0x50, keyName: 'KeyP', shiftModifier: true},
+ 'q': {keyCode: 0x51, keyName: 'KeyQ', shiftModifier: false},
+ 'Q': {keyCode: 0x51, keyName: 'KeyQ', shiftModifier: true},
+ 'r': {keyCode: 0x52, keyName: 'KeyR', shiftModifier: false},
+ 'R': {keyCode: 0x52, keyName: 'KeyR', shiftModifier: true},
+ 's': {keyCode: 0x53, keyName: 'KeyS', shiftModifier: false},
+ 'S': {keyCode: 0x53, keyName: 'KeyS', shiftModifier: true},
+ 't': {keyCode: 0x54, keyName: 'KeyT', shiftModifier: false},
+ 'T': {keyCode: 0x54, keyName: 'KeyT', shiftModifier: true},
+ 'u': {keyCode: 0x55, keyName: 'KeyU', shiftModifier: false},
+ 'U': {keyCode: 0x55, keyName: 'KeyU', shiftModifier: true},
+ 'v': {keyCode: 0x56, keyName: 'KeyV', shiftModifier: false},
+ 'V': {keyCode: 0x56, keyName: 'KeyV', shiftModifier: true},
+ 'w': {keyCode: 0x57, keyName: 'KeyW', shiftModifier: false},
+ 'W': {keyCode: 0x57, keyName: 'KeyW', shiftModifier: true},
+ 'x': {keyCode: 0x58, keyName: 'KeyX', shiftModifier: false},
+ 'X': {keyCode: 0x58, keyName: 'KeyX', shiftModifier: true},
+ 'y': {keyCode: 0x59, keyName: 'KeyY', shiftModifier: false},
+ 'Y': {keyCode: 0x59, keyName: 'KeyY', shiftModifier: true},
+ 'z': {keyCode: 0x5A, keyName: 'KeyZ', shiftModifier: false},
+ 'Z': {keyCode: 0x5A, keyName: 'KeyZ', shiftModifier: true},
'Fullscreen': {keyCode: 0x7A, shiftModifier: false},
'Shutdown': {keyCode: 0x98, shiftModifier: false},
'Back': {keyCode: 0xA6, shiftModifier: false},
'Forward': {keyCode: 0xA7, shiftModifier: false},
'Reload': {keyCode: 0xA8, shiftModifier: false},
'Search': {keyCode: 0xAA, shiftModifier: false},
- 'Mute': {keyCode: 0xAD, shiftModifier: false},
- 'Volume-Down': {keyCode: 0xAE, shiftModifier: false},
- 'Volume-Up': {keyCode: 0xAF, shiftModifier: false},
+ 'Mute': {keyCode: 0xAD, keyName: 'VolumeMute', shiftModifier: false},
+ 'Volume-Down': {keyCode: 0xAE, keyName: 'VolumeDown',
+ shiftModifier: false},
+ 'Volume-Up': {keyCode: 0xAF, keyName: 'VolumeUp', shiftModifier: false},
'Change-Window': {keyCode: 0xB6, shiftModifier: false},
- ';': {keyCode: 0xBA, shiftModifier: false},
- ':': {keyCode: 0xBA, shiftModifier: true},
- '=': {keyCode: 0xBB, shiftModifier: false},
- '+': {keyCode: 0xBB, shiftModifier: true},
- ',': {keyCode: 0xBC, shiftModifier: false},
- '<': {keyCode: 0xBC, shiftModifier: true},
- '-': {keyCode: 0xBD, shiftModifier: false},
- '_': {keyCode: 0xBD, shiftModifier: true},
- '.': {keyCode: 0xBE, shiftModifier: false},
- '>': {keyCode: 0xBE, shiftModifier: true},
- '/': {keyCode: 0xBF, shiftModifier: false},
- '?': {keyCode: 0xBF, shiftModifier: true},
- '`': {keyCode: 0xC0, shiftModifier: false},
- '~': {keyCode: 0xC0, shiftModifier: true},
- 'Brightness-Down': {keyCode: 0xD8, shiftModifier: false},
- 'Brightness-Up': {keyCode: 0xD9, shiftModifier: false},
- '[': {keyCode: 0xDB, shiftModifier: false},
- '{': {keyCode: 0xDB, shiftModifier: true},
- '\\': {keyCode: 0xDC, shiftModifier: false},
- '|': {keyCode: 0xDC, shiftModifier: true},
- ']': {keyCode: 0xDD, shiftModifier: false},
- '}': {keyCode: 0xDD, shiftModifier: true},
- '\'': {keyCode: 0xDE, shiftModifier: false},
- '"': {keyCode: 0xDE, shiftModifier: true},
+ ';': {keyCode: 0xBA, keyName: 'Semicolon', shiftModifier: false},
+ ':': {keyCode: 0xBA, keyName: 'Semicolon',shiftModifier: true},
+ '=': {keyCode: 0xBB, keyName: 'Equal', shiftModifier: false},
+ '+': {keyCode: 0xBB, keyName: 'Equal', shiftModifier: true},
+ ',': {keyCode: 0xBC, keyName: 'Comma', shiftModifier: false},
+ '<': {keyCode: 0xBC, keyName: 'Comma', shiftModifier: true},
+ '-': {keyCode: 0xBD, keyName: 'Minus', shiftModifier: false},
+ '_': {keyCode: 0xBD, keyName: 'Minus', shiftModifier: true},
+ '.': {keyCode: 0xBE, keyName: 'Period', shiftModifier: false},
+ '>': {keyCode: 0xBE, keyName: 'Period', shiftModifier: true},
+ '/': {keyCode: 0xBF, keyName: 'Slash', shiftModifier: false},
+ '?': {keyCode: 0xBF, keyName: 'Slash', shiftModifier: true},
+ '`': {keyCode: 0xC0, keyName: 'Backquote', shiftModifier: false},
+ '~': {keyCode: 0xC0, keyName: 'Backquote', shiftModifier: true},
+ 'Brightness-Down': {keyCode: 0xD8, keyName: 'BrightnessDown',
+ shiftModifier: false},
+ 'Brightness-Up': {keyCode: 0xD9, keyName: 'BrightnessUp',
+ shiftModifier: false},
+ '[': {keyCode: 0xDB, keyName: 'BracketLeft', shiftModifier: false},
+ '{': {keyCode: 0xDB, keyName: 'BracketLeft', shiftModifier: true},
+ '\\': {keyCode: 0xDC, keyName: 'Backslash', shiftModifier: false},
+ '|': {keyCode: 0xDC, keyName: 'Backslash', shiftModifier: true},
+ ']': {keyCode: 0xDD, keyName: 'BracketRight', shiftModifier: false},
+ '}': {keyCode: 0xDD, keyName: 'BracketRight', shiftModifier: true},
+ '\'': {keyCode: 0xDE, keyName: 'Quote', shiftModifier: false},
+ '"': {keyCode: 0xDE, keyName: 'Quote', shiftModifier: true},
};
Polymer('kb-key-codes', {
@@ -163,6 +169,7 @@
if (entry) {
return {
keyCode: entry.keyCode,
+ keyName: entry.keyName || 'Unidentified',
shiftModifier: entry.shiftModifier
};
}
@@ -171,6 +178,7 @@
// Special case of accented characters.
return {
keyCode: 0,
+ keyName: 'Unidentified',
shiftModifier: false
};
},
@@ -187,16 +195,18 @@
createVirtualKeyEvent: function(detail, type) {
var char = detail.char;
var keyCode = detail.keyCode;
+ var keyName = detail.keyName;
// The shift modifier is handled specially. Some charactares like '+'
// {keyCode: 0xBB, shiftModifier: true}, are available on non-upper
// keysets, and so we rely on caching the correct shiftModifier. If
// the cached value of the shiftModifier is undefined, we defer to
// the shiftModifier in the detail.
var shiftModifier = detail.shiftModifier;
- if (keyCode == undefined) {
+ if (keyCode == undefined || keyName == undefined) {
var state = this.GetKeyCodeAndModifiers(char);
if (state) {
- keyCode = state.keyCode;
+ keyCode = keyCode || state.keyCode;
+ keyName = keyName || state.keyName;
shiftModifier = (state.shiftModifier == undefined) ?
shiftModifier : state.shiftModifier;
} else {
@@ -213,6 +223,7 @@
type: type,
charValue: char.charCodeAt(0),
keyCode: keyCode,
+ keyName: keyName,
modifiers: modifiers
};
},
diff --git a/ui/keyboard/resources/elements/kb-key-sequence.html b/ui/keyboard/resources/elements/kb-key-sequence.html
index f8bc2d9e4d..0157f93e33 100644
--- a/ui/keyboard/resources/elements/kb-key-sequence.html
+++ b/ui/keyboard/resources/elements/kb-key-sequence.html
@@ -58,6 +58,7 @@
var state = getKeyCodeAndModifiers(keyCodeIndex);
if (state) {
key.keyCode = state.keyCode;
+ key.keyName = state.keyName;
key.shiftModifier = state.shiftModifier;
}
replacement.appendChild(key);
diff --git a/ui/keyboard/resources/elements/kb-key.html b/ui/keyboard/resources/elements/kb-key.html
index cd7522c17f..a7dae77f9f 100644
--- a/ui/keyboard/resources/elements/kb-key.html
+++ b/ui/keyboard/resources/elements/kb-key.html
@@ -5,7 +5,7 @@
-->
<polymer-element name="kb-key" extends="kb-key-base"
- attributes="image imageSize keyCode shiftModifier weight">
+ attributes="image imageSize keyCode keyName shiftModifier weight">
<template>
<style>
:host {
@@ -13,7 +13,7 @@
* handling of {{}} in CSS rules. Switch back to
* "-webkit-box-flex: {{weight}}" once the regression is fixed
* (https://github.com/Polymer/polymer/issues/270). */
- -webkit-box-flex: 1;
+ -webkit-box-flex: 100;
background-color: #3b3b3e;
/* TODO(rsadam): remove when {{}} regression is fixed */
background-image: none;
@@ -88,6 +88,15 @@
* @type {number|undefined}
*/
keyCode: undefined,
+
+ /**
+ * Name of the key as defined in the DOM3 specification for key events.
+ * Like the keyCode, the keyName is independent of the state of the
+ * modifier keys.
+ * @type {string|undefined}
+ */
+ keyName: undefined,
+
/**
* Whether the shift key is pressed when producing the key value.
* @type {boolean}
@@ -98,7 +107,7 @@
* Keys with a high weighting are wider than normal keys.
* @type {number}
*/
- weight: 1,
+ weight: 100,
/**
* Called when the image attribute changes. This is used to set the
@@ -130,6 +139,7 @@
populateDetails: function(caller) {
var details = this.super([caller]);
details.keyCode = this.keyCode;
+ details.keyName = this.keyName;
details.shiftModifier = this.shiftModifier;
return details;
},
@@ -150,7 +160,7 @@
<!-- Special keys -->
<polymer-element name="kb-abc-key" class="symbol dark" char="Invalid"
- extends="kb-key">
+ extends="kb-key" weight="125">
<script>
Polymer('kb-abc-key', {
populateDetails: function(caller) {
diff --git a/ui/keyboard/resources/elements/kb-keyboard.html b/ui/keyboard/resources/elements/kb-keyboard.html
index bc66fe9491..e0f0663b6f 100644
--- a/ui/keyboard/resources/elements/kb-keyboard.html
+++ b/ui/keyboard/resources/elements/kb-keyboard.html
@@ -7,9 +7,10 @@
<polymer-element name="kb-keyboard" on-key-over="{{keyOver}}"
on-key-up="{{keyUp}}" on-key-down="{{keyDown}}"
on-key-longpress="{{keyLongpress}}" on-pointerup="{{up}}"
- on-pointerdown="{{down}}" on-enable-sel="{{enableSel}}"
- on-enable-dbl="{{enableDbl}}" on-key-out="{{keyOut}}"
- on-show-options="{{showOptions}}" on-set-layout="{{setLayout}}"
+ on-pointerdown="{{down}}" on-pointerout="{{out}}"
+ on-enable-sel="{{enableSel}}" on-enable-dbl="{{enableDbl}}"
+ on-key-out="{{keyOut}}" on-show-options="{{showOptions}}"
+ on-set-layout="{{setLayout}}"
attributes="keyset layout inputType inputTypeToLayoutMap">
<template>
<style>
@@ -117,7 +118,16 @@
* @const
* @type {number}
*/
- var MIN_SWIPE_DIST = 60;
+ var MIN_SWIPE_DIST_X = 50;
+ var MIN_SWIPE_DIST_Y = 20;
+
+ /**
+ * The maximum swipe distance that will trigger hintText of a key
+ * to be typed.
+ * @const
+ * @type {number}
+ */
+ var MAX_SWIPE_FLICK_DIST = 60;
/**
* The boolean to decide if it is swipe in process or finished.
@@ -150,14 +160,25 @@
/**
* A structure to track the current swipe status.
*/
- var swipeStatus = {
+ var swipeTracker = {
+ /**
+ * The latest PointerMove event in the swipe.
+ * @type {Object}
+ */
+ currentEvent: undefined,
+
+ /**
+ * Whether or not a swipe changes direction.
+ * @type {false}
+ */
+ isComplex: false,
/**
* The count of horizontal and vertical movement.
* @type {number}
*/
- offset_x : 0,
- offset_y : 0,
+ offset_x : 0,
+ offset_y : 0,
/**
* Last touch coordinate.
@@ -167,6 +188,12 @@
pre_y : 0,
/**
+ * The PointerMove event which triggered the swipe.
+ * @type {Object}
+ */
+ startEvent: undefined,
+
+ /**
* The flag of current modifier key.
* @type {number}
*/
@@ -185,6 +212,50 @@
swipeIndex: 0,
/**
+ * Returns the combined direction of the x and y offsets.
+ * @return {number} The latest direction.
+ */
+ getOffsetDirection: function() {
+ // TODO (rsadam): Use angles to figure out the direction.
+ var direction = 0;
+ // Checks for horizontal swipe.
+ if (Math.abs(this.offset_x) > MIN_SWIPE_DIST_X) {
+ if (this.offset_x > 0) {
+ direction |= SWIPE_DIRECTION.RIGHT;
+ } else {
+ direction |= SWIPE_DIRECTION.LEFT;
+ }
+ }
+ // Checks for vertical swipe.
+ if (Math.abs(this.offset_y) > MIN_SWIPE_DIST_Y) {
+ if (this.offset_y < 0) {
+ direction |= SWIPE_DIRECTION.UP;
+ } else {
+ direction |= SWIPE_DIRECTION.DOWN;
+ }
+ }
+ return direction;
+ },
+
+ /**
+ * Populates the swipe update details.
+ * @param {boolean} endSwipe Whether this is the final event for this
+ * swipe.
+ * @return {Object} The current state of the swipeTracker.
+ */
+ populateDetails: function(endSwipe) {
+ var detail = {};
+ detail.direction = this.swipeDirection;
+ detail.index = this.swipeIndex;
+ detail.status = this.swipeStatus;
+ detail.endSwipe = endSwipe;
+ detail.startEvent = this.startEvent;
+ detail.currentEvent = this.currentEvent;
+ detail.isComplex = this.isComplex;
+ return detail;
+ },
+
+ /**
* Reset all the values when swipe finished.
*/
resetAll: function() {
@@ -195,7 +266,45 @@
this.swipeFlags = 0;
this.swipeDirection = 0;
this.swipeIndex = 0;
- }
+ this.startEvent = undefined;
+ this.currentEvent = undefined;
+ this.isComplex = false;
+ },
+
+ /**
+ * Updates the swipe path with the current event.
+ * @param {Object} event The PointerEvent that triggered this update.
+ * @return {boolean} Whether or not to notify swipe observers.
+ */
+ update: function(event) {
+ if(!event.isPrimary)
+ return false;
+ // Update priors.
+ this.offset_x += event.screenX - this.pre_x;
+ this.offset_y += event.screenY - this.pre_y;
+ this.pre_x = event.screenX;
+ this.pre_y = event.screenY;
+
+ // Check if movement crosses minimum thresholds in each direction.
+ var direction = this.getOffsetDirection();
+ if (direction == 0)
+ return false;
+ // If swipeIndex is zero the current event is triggering the swipe.
+ if (this.swipeIndex == 0) {
+ this.startEvent = event;
+ } else if (direction != this.swipeDirection) {
+ // Toggle the isComplex flag.
+ this.isComplex = true;
+ }
+ // Update the swipe tracker.
+ this.swipeDirection = direction;
+ this.offset_x = 0;
+ this.offset_y = 0;
+ this.currentEvent = event;
+ this.swipeIndex++;
+ return true;
+ },
+
};
Polymer('kb-keyboard', {
@@ -242,7 +351,7 @@
ready: function() {
this.voiceInput_ = new VoiceInput(this);
- this.swipeHandler = this.onSwipeUpdate.bind(this);
+ this.swipeHandler = this.move.bind(this);
},
/**
@@ -312,55 +421,67 @@
},
/**
- * This function is bound to swipeHandler. And swipeHandler handle
- * the pointermove event after pointerdown event happened.
- * @para {PointerEvent} event.
+ * Handles a swipe update.
+ * param {Object} detail The swipe update details.
*/
- onSwipeUpdate: function(event) {
- if (!event.isPrimary)
- return;
- swipeStatus.offset_x += event.screenX - swipeStatus.pre_x;
- // swipeStatus.offset_y += event.screenY - swipeStatus.pre_y;
- if (Math.abs(swipeStatus.offset_x) > MIN_SWIPE_DIST ||
- Math.abs(swipeStatus.offset_y) > MIN_SWIPE_DIST) {
- swipeInProgress = true;
- if (this.lastPressedKey) {
- this.lastPressedKey.classList.remove('active');
- this.lastPressedKey = null;
- }
- }
- if (swipeStatus.offset_x > MIN_SWIPE_DIST) {
- swipeStatus.swipeDirection |= SWIPE_DIRECTION.RIGHT;
- swipeStatus.swipeIndex++;
- swipeStatus.offset_x = 0;
- } else if (swipeStatus.offset_x < -MIN_SWIPE_DIST) {
- swipeStatus.swipeDirection |= SWIPE_DIRECTION.LEFT;
- swipeStatus.swipeIndex--;
- swipeStatus.offset_x = 0;
- }
- // Swipe vertically only when the swipe reaches the gradient of 45
- // degree. This can also be larger.
- if (Math.abs(event.screenY - swipeStatus.pre_y) >
- Math.abs(event.screenX - swipeStatus.pre_x)) {
- if (swipeStatus.offset_y > MIN_SWIPE_DIST) {
- swipeStatus.swipeDirection |= SWIPE_DIRECTION.DOWN;
- swipeStatus.offset_y = 0;
- } else if (swipeStatus.offset_y < -MIN_SWIPE_DIST) {
- swipeStatus.swipeDirection |= SWIPE_DIRECTION.UP;
- swipeStatus.offset_y = 0;
- }
- }
- if (swipeStatus.swipeDirection) {
+ onSwipeUpdate: function(detail) {
+ var direction = detail.direction;
+ if (!direction)
+ console.error("Swipe direction cannot be: " + direction);
+ // Triggers swipe editting if it's a purely horizontal swipe.
+ if (!(direction & (SWIPE_DIRECTION.UP | SWIPE_DIRECTION.DOWN))) {
+ // Nothing to do if the swipe has ended.
+ if (detail.endSwipe)
+ return;
var modifiers = 0;
- if (swipeStatus.swipeIndex % 2 != 0) {
+ // TODO (rsadam): This doesn't take into account index shifts caused
+ // by vertical swipes.
+ if (detail.index % 2 != 0) {
modifiers |= Modifier.SHIFT;
modifiers |= Modifier.CONTROL;
}
- MoveCursor(swipeStatus.swipeDirection, modifiers);
- swipeStatus.swipeDirection = 0;
+ MoveCursor(direction, modifiers);
+ return;
+ }
+ // Triggers swipe hintText if it's a purely vertical swipe.
+ if (!(direction & (SWIPE_DIRECTION.LEFT | SWIPE_DIRECTION.RIGHT))) {
+ // Check if event is relevant to us.
+ if ((!detail.endSwipe) ||
+ (direction & SWIPE_DIRECTION.DOWN) ||
+ (detail.isComplex)) {
+ return;
+ }
+ // Too long a swipe.
+ var distance = Math.abs(detail.startEvent.screenY -
+ detail.currentEvent.screenY);
+ if (distance > MAX_SWIPE_FLICK_DIST)
+ return;
+ var triggerKey = detail.startEvent.target;
+ // Swipe-up on a key without hintText.
+ if (!triggerKey || !triggerKey.hintTextValue)
+ return;
+ var detail = {};
+ detail.char = triggerKey.hintTextValue;
+ this.keyTyped(detail);
+ return;
}
- swipeStatus.pre_x = event.screenX;
- swipeStatus.pre_y = event.screenY;
+ },
+
+ /**
+ * This function is bound to swipeHandler. Updates the current swipe
+ * status so that PointerEvents can be converted to Swipe events.
+ * @param {PointerEvent} event.
+ */
+ move: function(event) {
+ if (!swipeTracker.update(event))
+ return;
+ // Conversion was successful, swipe is now in progress.
+ swipeInProgress = true;
+ if (this.lastPressedKey) {
+ this.lastPressedKey.classList.remove('active');
+ this.lastPressedKey = null;
+ }
+ this.onSwipeUpdate(swipeTracker.populateDetails(false));
},
/**
@@ -466,8 +587,8 @@
*/
down: function(event) {
if (event.isPrimary) {
- swipeStatus.pre_x = event.screenX;
- swipeStatus.pre_y = event.screenY;
+ swipeTracker.pre_x = event.screenX;
+ swipeTracker.pre_y = event.screenY;
this.addEventListener("pointermove", this.swipeHandler, false);
}
},
@@ -506,12 +627,32 @@
// all the data should be reset to prepare for the next session.
if (event.isPrimary && swipeInProgress) {
swipeInProgress = false;
- swipeStatus.resetAll();
+ this.onSwipeUpdate(swipeTracker.populateDetails(true))
+ swipeTracker.resetAll();
}
this.removeEventListener('pointermove', this.swipeHandler, false);
},
/**
+ * Handles PointerOut event. This is used for when a swipe gesture goes
+ * outside of the keyboard window.
+ * @param {Object} event The pointerout event that bubbled to the
+ * kb-keyboard.
+ */
+ out: function(event) {
+ // Ignore if triggered from one of the keys.
+ if (this.compareDocumentPosition(event.relatedTarget) &
+ Node.DOCUMENT_POSITION_CONTAINED_BY)
+ return;
+ if (swipeInProgress)
+ this.onSwipeUpdate(swipeTracker.populateDetails(true))
+ // Touched outside of the keyboard area, so disables swipe.
+ swipeInProgress = false;
+ swipeTracker.resetAll();
+ this.removeEventListener('pointermove', this.swipeHandler, false);
+ },
+
+ /**
* Handles key-up event that is sent by kb-key-base.
* @param {CustomEvent} event The key-up event dispatched by kb-key-base.
* @param {Object} detail The detail of pressed kb-key.
@@ -559,7 +700,7 @@
case 'Ctrl':
case 'Alt':
enterUpperOnSpace = false;
- swipeStatus.swipeFlags = 0;
+ swipeTracker.swipeFlags = 0;
return;
case 'Microphone':
this.voiceInput_.onDown();
diff --git a/ui/keyboard/resources/index.html b/ui/keyboard/resources/index.html
index c4890d8e83..16733ba6b7 100644
--- a/ui/keyboard/resources/index.html
+++ b/ui/keyboard/resources/index.html
@@ -10,7 +10,7 @@
<meta charset="UTF-8">
<link rel="stylesheet" href="main.css">
<script src="constants.js"></script>
- <script src="polymer.min.js"></script>
+ <script src="polymer_loader.js"></script>
<script src="api_adapter.js"></script>
<script src="voice_input.js"></script>
<script src="main.js"></script>
diff --git a/ui/keyboard/resources/layouts/dvorak.html b/ui/keyboard/resources/layouts/dvorak.html
index 6da7862e2e..d3d9ee440d 100644
--- a/ui/keyboard/resources/layouts/dvorak.html
+++ b/ui/keyboard/resources/layouts/dvorak.html
@@ -9,28 +9,30 @@
<template>
<kb-keyset id="dvorak-upper">
<kb-row>
- <kb-key class="tab dark" char="&#x0009;" align="left">tab</kb-key>
+ <kb-key class="dark" char="&#x0009;" align="left"
+ weight="120">tab</kb-key>
<kb-key-sequence keys="&quot;,.PYFGCRL" hintTexts="1234567890">
</kb-key-sequence>
- <kb-key class="backspace dark" char="&#x0008;" repeat
- align="right">backspace</kb-key>
+ <kb-key class="dark" char="&#x0008;" repeat align="right"
+ weight="140">backspace</kb-key>
</kb-row>
<kb-row>
- <kb-key class="microphone dark" char="Microphone"></kb-key>
+ <kb-key class="microphone dark" char="Microphone" weight="110"></kb-key>
<kb-key-sequence keys="AOEUIDHTNS"></kb-key-sequence>
- <kb-key class='return dark' char="&#x000A;" align="right">enter</kb-key>
+ <kb-key class="dark" char="&#x000A;" align="right"
+ weight="150">enter</kb-key>
</kb-row>
<kb-row>
- <kb-shift-key weight="1.8" align="left">shift</kb-shift-key>
+ <kb-shift-key weight="130" align="left">shift</kb-shift-key>
<kb-key-sequence keys=";QJKXBMWVZ"></kb-key-sequence>
- <kb-shift-key weight="1.8" align="right">shift</kb-shift-key>
+ <kb-shift-key weight="130" align="right">shift</kb-shift-key>
</kb-row>
<kb-row>
- <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid"
- align="left">#123</kb-key>
+ <kb-key class="dark" toKeyset="down:symbol" char="Invalid"
+ align="left" weight="130">#123</kb-key>
<kb-key-import importId="spacebar-row"></kb-key-import>
<kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid"
- align="right">#123</kb-key>
+ align="right" weight="130">#123</kb-key>
<kb-hide-keyboard-key></kb-hide-keyboard-key>
</kb-row>
<kb-altkey-container hidden>
@@ -39,28 +41,30 @@
<kb-keyset id="dvorak-lower" isDefault=true>
<kb-row>
- <kb-key class="tab dark" char="&#x0009;" align="left">tab</kb-key>
+ <kb-key class="dark" char="&#x0009;" align="left"
+ weight="120">tab</kb-key>
<kb-key-sequence keys="&quot;,.pyfgcrl" hintTexts="1234567890">
</kb-key-sequence>
- <kb-key class="backspace dark" char="&#x0008;" repeat
- align="right">backspace</kb-key>
+ <kb-key class="dark" char="&#x0008;" repeat align="right"
+ weight="140">backspace</kb-key>
</kb-row>
<kb-row>
- <kb-key class="microphone dark" char="Microphone"></kb-key>
+ <kb-key class="microphone dark" char="Microphone" weight="110"></kb-key>
<kb-key-sequence keys="aoeuidhtns"></kb-key-sequence>
- <kb-key class='return dark' char="&#x000A;" align="right">enter</kb-key>
+ <kb-key class="dark" char="&#x000A;" align="right"
+ weight="150">enter</kb-key>
</kb-row>
<kb-row>
- <kb-shift-key weight="1.8" align="left">shift</kb-shift-key>
+ <kb-shift-key weight="130" align="left">shift</kb-shift-key>
<kb-key-sequence keys=";qjkxbmwvz"></kb-key-sequence>
- <kb-shift-key weight="1.8" align="right">shift</kb-shift-key>
+ <kb-shift-key weight="130" align="right">shift</kb-shift-key>
</kb-row>
<kb-row>
- <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid"
- align="left">#123</kb-key>
+ <kb-key class="dark" toKeyset="down:symbol" char="Invalid"
+ align="left" weight="130">#123</kb-key>
<kb-key-import importId="spacebar-row"></kb-key-import>
<kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid"
- align="right">#123</kb-key>
+ align="right" weight="130">#123</kb-key>
<kb-hide-keyboard-key></kb-hide-keyboard-key>
</kb-row>
<kb-altkey-container hidden>
@@ -69,27 +73,29 @@
<kb-keyset id="dvorak-symbol">
<kb-row>
- <kb-key class="tab dark" char="&#x0009;" align="left">tab</kb-key>
+ <kb-key class="dark" char="&#x0009;" align="left"
+ weight="120">tab</kb-key>
<kb-key-sequence keys="1234567890"></kb-key-sequence>
- <kb-key class="backspace dark" char="&#x0008;" repeat
- align="right">backspace</kb-key>
+ <kb-key class="dark" char="&#x0008;" repeat align="right"
+ weight="140">backspace</kb-key>
</kb-row>
<kb-row>
- <kb-key class="microphone dark" char="Microphone"></kb-key>
+ <kb-key class="microphone dark" char="Microphone" weight="110"></kb-key>
<kb-key-sequence keys="@#$%&amp;*-=()"></kb-key-sequence>
- <kb-key class='return dark' char="&#x000A;" align="right">enter</kb-key>
+ <kb-key class="dark" char="&#x000A;" align="right"
+ weight="150">enter</kb-key>
</kb-row>
<kb-row>
- <kb-key class="left-more dark" toKeyset="down:more" char="Invalid"
- align="left">more</kb-key>
+ <kb-key class="dark" toKeyset="down:more" char="Invalid"
+ align="left" weight="280">more</kb-key>
<kb-key-sequence keys="!&quot;':;/?"></kb-key-sequence>
- <kb-key class="right-more dark" toKeyset="down:more" char="Invalid"
- align="right">more</kb-key>
+ <kb-key class="dark" toKeyset="down:more" char="Invalid"
+ align="right" weight="280">more</kb-key>
</kb-row>
<kb-row>
- <kb-abc-key align="left">abc</kb-abc-key>
+ <kb-abc-key align="left" weight="130">abc</kb-abc-key>
<kb-key-import importId="spacebar-row"></kb-key-import>
- <kb-abc-key align="right">abc</kb-abc-key>
+ <kb-abc-key align="right" weight="130">abc</kb-abc-key>
<kb-hide-keyboard-key></kb-hide-keyboard-key>
</kb-row>
<kb-altkey-container hidden>
@@ -98,34 +104,36 @@
<kb-keyset id="dvorak-more">
<kb-row>
- <kb-key class="tab dark" char="&#x0009;" align="left">tab</kb-key>
+ <kb-key class="dark" char="&#x0009;" align="left"
+ weight="120">tab</kb-key>
<kb-key>~</kb-key><kb-key>`</kb-key><kb-key>|</kb-key><kb-key>^</kb-key>
<kb-key>+</kb-key><kb-key>=</kb-key><kb-key>{</kb-key><kb-key>}</kb-key>
<kb-key>&#x003C;</kb-key><kb-key>&#x003E;</kb-key>
- <kb-key class="backspace dark" char="&#x0008;" repeat
- align="right">backspace</kb-key>
+ <kb-key class="dark" char="&#x0008;" repeat align="right"
+ weight="140">backspace</kb-key>
</kb-row>
<kb-row>
- <kb-key class="microphone dark" char="Microphone"></kb-key>
+ <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key>
<kb-key>&#x00A3</kb-key><kb-key>&#x00A2</kb-key><kb-key>&#x20AC</kb-key>
<kb-key>&#x2122</kb-key><kb-key>&#x00A9</kb-key><kb-key>&#x00AE</kb-key>
<kb-key>\</kb-key><kb-key>[</kb-key><kb-key>]</kb-key>
- <kb-key class='return dark' char="&#x000A;" align="right">enter</kb-key>
+ <kb-key class="dark" char="&#x000A;" align="right"
+ weight="210">enter</kb-key>
</kb-row>
<kb-row>
- <kb-key class="left-more dark" toKeyset="down:symbol" char="Invalid"
- align="left">#123</kb-key>
+ <kb-key class="dark" toKeyset="down:symbol" char="Invalid"
+ align="left" weight="180">#123</kb-key>
<kb-key>&#x00D7</kb-key><kb-key>&#x00F7</kb-key><kb-key>_</kb-key>
<kb-key>&#x00A7</kb-key><kb-key>&#x00B6</kb-key><kb-key>&#x00A1</kb-key>
<kb-key>&#x00BF</kb-key><kb-key>&#x2022</kb-key><kb-key>&#x0394</kb-key>
- <kb-key class="right-more dark" toKeyset="down:symbol" char="Invalid"
- align="right">#123</kb-key>
+ <kb-key class="dark" toKeyset="down:symbol" char="Invalid"
+ align="left" weight="180">#123</kb-key>
</kb-row>
<kb-row>
- <kb-abc-key align="left">abc</kb-abc-key>
+ <kb-abc-key align="left" weight="130">abc</kb-abc-key>
<kb-key-import importId="spacebar-row"></kb-key-import>
- <kb-abc-key align="right">abc</kb-abc-key>
+ <kb-abc-key align="right" weight="130">abc</kb-abc-key>
<kb-hide-keyboard-key></kb-hide-keyboard-key>
</kb-row>
</kb-keyset>
-</template>
+</template> \ No newline at end of file
diff --git a/ui/keyboard/resources/layouts/qwerty.html b/ui/keyboard/resources/layouts/qwerty.html
index e1acfb6e3a..b8f83f1c0c 100644
--- a/ui/keyboard/resources/layouts/qwerty.html
+++ b/ui/keyboard/resources/layouts/qwerty.html
@@ -9,26 +9,32 @@
<template>
<kb-keyset id="qwerty-upper">
<kb-row>
- <kb-key class="tab dark" char="&#x0009;" align="left">tab</kb-key>
- <kb-key-sequence keys="QWERTYUIOP" hintTexts="1234567890"></kb-key-sequence>
- <kb-key class="backspace dark" char="&#x0008;" repeat align="right">backspace</kb-key>
+ <kb-key class="dark" char="&#x0009;" align="left"
+ weight="120">tab</kb-key>
+ <kb-key-sequence keys="QWERTYUIOP" hintTexts="1234567890">
+ </kb-key-sequence>
+ <kb-key class="dark" char="&#x0008;" repeat align="right"
+ weight="140">backspace</kb-key>
</kb-row>
<kb-row>
- <kb-key class="microphone dark" char="Microphone"></kb-key>
+ <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key>
<kb-key-sequence keys="ASDFGHJKL"></kb-key-sequence>
- <kb-key class='return dark' char="&#x000A;" align="right">enter</kb-key>
+ <kb-key class="dark" char="&#x000A;" align="right"
+ weight="210">enter</kb-key>
</kb-row>
<kb-row>
- <kb-shift-key weight="1.8" align="left">shift</kb-shift-key>
+ <kb-shift-key weight="180" align="left">shift</kb-shift-key>
<kb-key-sequence keys="ZXCVBNM"></kb-key-sequence>
<kb-key invert hintText="!" char=",">,</kb-key>
<kb-key invert hintText="?" char=".">.</kb-key>
- <kb-shift-key weight="1.8" align="right">shift</kb-shift-key>
+ <kb-shift-key weight="180" align="right">shift</kb-shift-key>
</kb-row>
<kb-row>
- <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid" align="left">#123</kb-key>
+ <kb-key class="dark" toKeyset="down:symbol" char="Invalid"
+ align="left" weight="130">#123</kb-key>
<kb-key-import importId="spacebar-row"></kb-key-import>
- <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid" align="right">#123</kb-key>
+ <kb-key class="dark" toKeyset="down:symbol" char="Invalid"
+ align="right" weight="130">#123</kb-key>
<kb-hide-keyboard-key></kb-hide-keyboard-key>
</kb-row>
<kb-altkey-container hidden>
@@ -37,25 +43,31 @@
<kb-keyset id="qwerty-lower" isDefault=true>
<kb-row>
- <kb-key class="tab dark" char="&#x0009;" align="left">tab</kb-key>
- <kb-key-sequence keys="qwertyuiop" hintTexts="1234567890"></kb-key-sequence>
- <kb-key class="backspace dark" char="&#x0008;" repeat align="right">backspace</kb-key>
+ <kb-key class="dark" char="&#x0009;" align="left"
+ weight="120">tab</kb-key>
+ <kb-key-sequence keys="qwertyuiop" hintTexts="1234567890">
+ </kb-key-sequence>
+ <kb-key class="dark" char="&#x0008;" repeat align="right"
+ weight="140">backspace</kb-key>
</kb-row>
<kb-row>
- <kb-key class="microphone dark" char="Microphone"></kb-key>
+ <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key>
<kb-key-sequence keys="asdfghjkl"></kb-key-sequence>
- <kb-key class='return dark' char="&#x000A;" align="right">enter</kb-key>
+ <kb-key class="dark" char="&#x000A;" align="right"
+ weight="210">enter</kb-key>
</kb-row>
<kb-row>
- <kb-shift-key weight="1.8" align="left">shift</kb-shift-key>
+ <kb-shift-key weight="180" align="left">shift</kb-shift-key>
<kb-key-sequence keys="zxcvbnm"></kb-key-sequence>
<kb-key hintText="!">,</kb-key><kb-key hintText="?">.</kb-key>
- <kb-shift-key weight="1.8" align="right">shift</kb-shift-key>
+ <kb-shift-key weight="180" align="right">shift</kb-shift-key>
</kb-row>
<kb-row>
- <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid" align="left">#123</kb-key>
+ <kb-key class="dark" toKeyset="down:symbol" char="Invalid"
+ align="left" weight="130">#123</kb-key>
<kb-key-import importId="spacebar-row"></kb-key-import>
- <kb-key class="symbol dark" toKeyset="down:symbol" char="Invalid" align="right">#123</kb-key>
+ <kb-key class="dark" toKeyset="down:symbol" char="Invalid"
+ align="right" weight="130">#123</kb-key>
<kb-hide-keyboard-key></kb-hide-keyboard-key>
</kb-row>
<kb-altkey-container hidden>
@@ -64,32 +76,37 @@
<kb-keyset id="qwerty-symbol">
<kb-row>
- <kb-key class="tab dark" char="&#x0009;" align="left">tab</kb-key>
+ <kb-key class="dark" char="&#x0009;" align="left"
+ weight="120">tab</kb-key>
<kb-key>1</kb-key><kb-key>2</kb-key>
<kb-key>3</kb-key><kb-key>4</kb-key>
<kb-key>5</kb-key><kb-key>6</kb-key><kb-key>7</kb-key>
<kb-key>8</kb-key><kb-key>9</kb-key><kb-key>0</kb-key>
- <kb-key class="backspace dark" char="&#x0008;" repeat align="right">backspace</kb-key>
+ <kb-key class="dark" char="&#x0008;" repeat align="right"
+ weight="140">backspace</kb-key>
</kb-row>
<kb-row>
- <kb-key class="microphone dark" char="Microphone"></kb-key>
+ <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key>
<kb-key>@</kb-key><kb-key>#</kb-key><kb-key>$</kb-key>
<kb-key>%</kb-key><kb-key>&</kb-key>
<kb-key>*</kb-key><kb-key>/</kb-key>
<kb-key>(</kb-key><kb-key>)</kb-key>
- <kb-key class='return dark' char="&#x000A;" align="right">enter</kb-key>
+ <kb-key class="dark" char="&#x000A;" align="right"
+ weight="210">enter</kb-key>
</kb-row>
<kb-row>
- <kb-key class="left-more dark" toKeyset="down:more" char="Invalid" align="left">more</kb-key>
+ <kb-key class="dark" toKeyset="down:more" char="Invalid" align="left"
+ weight="180">more</kb-key>
<kb-key>:</kb-key><kb-key>;</kb-key><kb-key>-</kb-key><kb-key>'</kb-key>
<kb-key>"</kb-key><kb-key>!</kb-key>
<kb-key>?</kb-key><kb-key>,</kb-key><kb-key>.</kb-key>
- <kb-key class="right-more dark" toKeyset="down:more" char="Invalid" align="right">more</kb-key>
+ <kb-key class="dark" toKeyset="down:more" char="Invalid" align="right"
+ weight="180">more</kb-key>
</kb-row>
<kb-row>
- <kb-abc-key align="left">abc</kb-abc-key>
+ <kb-abc-key align="left" weight="130">abc</kb-abc-key>
<kb-key-import importId="spacebar-row"></kb-key-import>
- <kb-abc-key align="right">abc</kb-abc-key>
+ <kb-abc-key align="right" weight="130">abc</kb-abc-key>
<kb-hide-keyboard-key></kb-hide-keyboard-key>
</kb-row>
<kb-altkey-container hidden>
@@ -98,30 +115,39 @@
<kb-keyset id="qwerty-more">
<kb-row>
- <kb-key class="tab dark" char="&#x0009;" align="left">tab</kb-key>
+ <kb-key class="dark" char="&#x0009;" align="left"
+ weight="120">tab</kb-key>
<kb-key>~</kb-key><kb-key>`</kb-key><kb-key>|</kb-key><kb-key>^</kb-key>
<kb-key>+</kb-key><kb-key>=</kb-key><kb-key>{</kb-key><kb-key>}</kb-key>
<kb-key>&#x003C;</kb-key><kb-key>&#x003E;</kb-key>
- <kb-key class="backspace dark" char="&#x0008;" repeat align="right">backspace</kb-key>
+ <kb-key class="dark" char="&#x0008;" repeat align="right"
+ weight="140">backspace</kb-key>
</kb-row>
<kb-row>
- <kb-key class="microphone dark" char="Microphone"></kb-key>
- <kb-key>&#x00A3;</kb-key><kb-key>&#x00A2;</kb-key><kb-key>&#x20AC;</kb-key><kb-key>&#x2122;</kb-key>
- <kb-key>&#x00A9;</kb-key><kb-key>&#x00AE;</kb-key><kb-key>\</kb-key><kb-key>[</kb-key>
+ <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key>
+ <kb-key>&#x00A3;</kb-key><kb-key>&#x00A2;</kb-key>
+ <kb-key>&#x20AC;</kb-key><kb-key>&#x2122;</kb-key>
+ <kb-key>&#x00A9;</kb-key><kb-key>&#x00AE;</kb-key>
+ <kb-key>\</kb-key><kb-key>[</kb-key>
<kb-key>]</kb-key>
- <kb-key class='return dark' char="&#x000A;" align="right">enter</kb-key>
+ <kb-key class="dark" char="&#x000A;" align="right"
+ weight="210">enter</kb-key>
</kb-row>
<kb-row>
- <kb-key class="left-more dark" toKeyset="down:symbol" char="Invalid" align="left">#123</kb-key>
- <kb-key>&#x00D7;</kb-key><kb-key>&#x00F7;</kb-key><kb-key>_</kb-key><kb-key>&#x00A7;</kb-key>
- <kb-key>&#x00B6;</kb-key><kb-key>&#x00A1;</kb-key><kb-key>&#x00BF;</kb-key><kb-key>&#x2022;</kb-key>
+ <kb-key class="dark" toKeyset="down:symbol" char="Invalid"
+ align="left" weight="180">#123</kb-key>
+ <kb-key>&#x00D7;</kb-key><kb-key>&#x00F7;</kb-key>
+ <kb-key>_</kb-key><kb-key>&#x00A7;</kb-key>
+ <kb-key>&#x00B6;</kb-key><kb-key>&#x00A1;</kb-key>
+ <kb-key>&#x00BF;</kb-key><kb-key>&#x2022;</kb-key>
<kb-key>&#x0394;</kb-key>
- <kb-key class="right-more dark" toKeyset="down:symbol" char="Invalid" align="right">#123</kb-key>
+ <kb-key class="dark" toKeyset="down:symbol" char="Invalid"
+ align="right" weight="180">#123</kb-key>
</kb-row>
<kb-row>
- <kb-abc-key align="left">abc</kb-abc-key>
+ <kb-abc-key align="left" weight="130">abc</kb-abc-key>
<kb-key-import importId="spacebar-row"></kb-key-import>
- <kb-abc-key align="right">abc</kb-abc-key>
+ <kb-abc-key align="right" weight="130">abc</kb-abc-key>
<kb-hide-keyboard-key></kb-hide-keyboard-key>
</kb-row>
</kb-keyset>
diff --git a/ui/keyboard/resources/layouts/spacebar-row.html b/ui/keyboard/resources/layouts/spacebar-row.html
index db8bcca11c..b4b0e8b499 100644
--- a/ui/keyboard/resources/layouts/spacebar-row.html
+++ b/ui/keyboard/resources/layouts/spacebar-row.html
@@ -6,5 +6,5 @@
<template>
<kb-key class="dotcom dark" align="left">.com</kb-key>
- <kb-key char=" " class="space dark" weight="6.0"></kb-key>
+ <kb-key char=" " class="space dark" weight="800"></kb-key>
</template>
diff --git a/ui/keyboard/resources/layouts/system-qwerty.html b/ui/keyboard/resources/layouts/system-qwerty.html
index 74aa61dd16..53bd3ae95d 100644
--- a/ui/keyboard/resources/layouts/system-qwerty.html
+++ b/ui/keyboard/resources/layouts/system-qwerty.html
@@ -15,38 +15,45 @@
<kb-row>
<kb-key-sequence invert=true keys="'1234567890-="
hintTexts="~!@#$%^&*()_+"> </kb-key-sequence>
- <kb-key class="backspace dark" weight="2.6" char="&#x0008;"
- repeat align="right">backspace</kb-key>
+ <kb-key class="dark" char="&#x0008;" repeat align="right"
+ weight="160">backspace</kb-key>
</kb-row>
<kb-row>
- <kb-key class="tab dark" char="&#x0009;" align="left">tab</kb-key>
+ <kb-key class="dark" char="&#x0009;" align="left"
+ weight="160">tab</kb-key>
<kb-key-sequence keys="QWERTYUIOP"></kb-key-sequence>
<kb-key-sequence invert=true keys="[]\"
hintTexts="{}|"></kb-key-sequence>
</kb-row>
<kb-row>
- <kb-key class="microphone dark" char="Microphone"></kb-key>
+ <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key>
<kb-key-sequence keys="ASDFGHJKL"></kb-key-sequence>
<kb-key-sequence invert=true keys=";&apos;" hintTexts=':"'>
</kb-key-sequence>
- <kb-key class='return dark' char="&#x000A;" align="right">enter</kb-key>
+ <kb-key class="dark" char="&#x000A;" align="right"
+ weight="210">enter</kb-key>
</kb-row>
<kb-row>
- <kb-shift-key weight="1.8" align="left">shift</kb-shift-key>
+ <kb-shift-key weight="230" align="left">shift</kb-shift-key>
<kb-key-sequence keys="ZXCVBNM"></kb-key-sequence>
- <kb-key-sequence invert=true keys=",./" hintTexts="<>?"></kb-key-sequence>
- <kb-shift-key weight="1.8" align="right">shift</kb-shift-key>
+ <kb-key-sequence invert=true keys=",./" hintTexts="<>?">
+ </kb-key-sequence>
+ <kb-shift-key weight="230" align="right">shift</kb-shift-key>
</kb-row>
<kb-row>
- <kb-modifier-key class="symbol dark" weight="2.0" char="Ctrl"
+ <kb-modifier-key class="dark" weight="150" char="Ctrl"
align="left">ctrl</kb-modifier-key>
- <kb-modifier-key class="symbol dark" weight="2.0" char="Alt"
+ <kb-modifier-key class="dark" weight="150" char="Alt"
align="left">alt</kb-modifier-key>
- <kb-key char=" " class="space dark" weight="10.0"></kb-key>
- <kb-key class="dark" repeat char="Arrow-Left" image="left"></kb-key>
- <kb-key class="dark" repeat char="Arrow-Up" image="up"></kb-key>
- <kb-key class="dark" repeat char="Arrow-Down" image="down"></kb-key>
- <kb-key class="dark" repeat char="Arrow-Right" image="right"></kb-key>
+ <kb-key char=" " class="space dark" weight="760"></kb-key>
+ <kb-key class="dark" repeat char="Arrow-Left" image="left"
+ weight="75"> </kb-key>
+ <kb-key class="dark" repeat char="Arrow-Up" image="up"
+ weight="75"></kb-key>
+ <kb-key class="dark" repeat char="Arrow-Down" image="down"
+ weight="75"> </kb-key>
+ <kb-key class="dark" repeat char="Arrow-Right" image="right"
+ weight="75"></kb-key>
<kb-hide-keyboard-key></kb-hide-keyboard-key>
</kb-row>
<kb-altkey-container hidden>
@@ -60,36 +67,42 @@
<kb-row>
<kb-key-sequence keys="'1234567890-=" hintTexts="~!@#$%^&*()_+">
</kb-key-sequence>
- <kb-key class="backspace dark" weight="2.6" char="&#x0008;"
+ <kb-key class="dark" weight="160" char="&#x0008;"
repeat align="right">backspace</kb-key>
</kb-row>
<kb-row>
- <kb-key class="tab dark" char="&#x0009;" align="left">tab</kb-key>
+ <kb-key class="dark" char="&#x0009;" align="left"
+ weight="160">tab</kb-key>
<kb-key-sequence keys="qwertyuiop"></kb-key-sequence>
<kb-key-sequence keys="[]\" hintTexts="{}|"></kb-key-sequence>
</kb-row>
<kb-row>
- <kb-key class="microphone dark" char="Microphone"></kb-key>
+ <kb-key class="microphone dark" char="Microphone" weight="150"></kb-key>
<kb-key-sequence keys="asdfghjkl"></kb-key-sequence>
<kb-key-sequence keys=";&apos;" hintTexts=':"'></kb-key-sequence>
- <kb-key class='return dark' char="&#x000A;" align="right">enter</kb-key>
+ <kb-key class="dark" char="&#x000A;" align="right"
+ weight="210">enter</kb-key>
</kb-row>
<kb-row>
- <kb-shift-key weight="1.8" align="left">shift</kb-shift-key>
+ <kb-shift-key weight="230" align="left">shift</kb-shift-key>
<kb-key-sequence keys="zxcvbnm"></kb-key-sequence>
<kb-key-sequence keys=",./" hintTexts="<>?"></kb-key-sequence>
- <kb-shift-key weight="1.8" align="right">shift</kb-shift-key>
+ <kb-shift-key weight="230" align="right">shift</kb-shift-key>
</kb-row>
<kb-row>
- <kb-modifier-key class="symbol dark" weight="2.0" char="Ctrl"
+ <kb-modifier-key class="symbol dark" weight="150" char="Ctrl"
align="left">ctrl</kb-modifier-key>
- <kb-modifier-key class="symbol dark" weight="2.0" char="Alt"
+ <kb-modifier-key class="symbol dark" weight="150" char="Alt"
align="left">alt</kb-modifier-key>
- <kb-key char=" " class="space dark" weight="10.0"></kb-key>
- <kb-key class="dark" repeat char="Arrow-Left" image="left"></kb-key>
- <kb-key class="dark" repeat char="Arrow-Up" image="up"></kb-key>
- <kb-key class="dark" repeat char="Arrow-Down" image="down"></kb-key>
- <kb-key class="dark" repeat char="Arrow-Right" image="right"></kb-key>
+ <kb-key char=" " class="space dark" weight="760"></kb-key>
+ <kb-key class="dark" repeat char="Arrow-Left" image="left"
+ weight="75"> </kb-key>
+ <kb-key class="dark" repeat char="Arrow-Up" image="up"
+ weight="75"></kb-key>
+ <kb-key class="dark" repeat char="Arrow-Down" image="down"
+ weight="75"> </kb-key>
+ <kb-key class="dark" repeat char="Arrow-Right" image="right"
+ weight="75"></kb-key>
<kb-hide-keyboard-key></kb-hide-keyboard-key>
</kb-row>
<kb-altkey-container hidden>
diff --git a/ui/keyboard/resources/main.css b/ui/keyboard/resources/main.css
index f11c40a966..e2c672adc7 100644
--- a/ui/keyboard/resources/main.css
+++ b/ui/keyboard/resources/main.css
@@ -37,6 +37,8 @@ kb-keyboard:not(.caps-locked)[keyset=upper] kb-shift-key {
*.dark {
background-color: #2a2a2c;
border-top: 2px solid #3a3a3c;
+ font-size: 70%;
+ margin-left: 0.35em;
}
@@ -51,63 +53,6 @@ kb-keyboard:not(.caps-locked)[keyset=upper] kb-shift-key {
}
/**
- * TODO(kevers): Use weight attribute for kb-key rather than CSS rules to
- * enable special keys to be used for multiple layouts when the weights
- * need to vary.
- */
-.at,
-.com,
-.comma,
-.period,
-.tab {
- -webkit-box-flex: 1.3 !important;
-}
-
-.return {
- -webkit-box-flex: 2.1 !important;
-}
-
-.microphone {
- -webkit-box-flex: 1.5 !important;
-}
-
-.symbol {
- -webkit-box-flex: 1.25 !important;
-}
-
-.backspace {
- -webkit-box-flex: 1.7 !important;
-}
-
-.left-more {
- -webkit-box-flex: 1.8 !important;
-}
-
-.right-more {
- -webkit-box-flex: 1.8 !important;
-}
-
-.bar {
- -webkit-box-flex: 0.6 !important;
-}
-
-kb-key.esc,
-kb-shift-key.shift,
-kb-modifier-key,
-kb-abc-key,
-kb-key:-webkit-any(.backspace,
- .dotcom,
- .left-more,
- .return,
- .right-more,
- .symbol,
- .tab) {
- font-size: 70%;
- /* Adjust margin for consistent spacing with the smaller font size. */
- margin-left: 0.35em;
-}
-
-/**
* The microphone key is handled separately from other images since the image
* displayed changes depending on whether it's pressed or not.
*/
diff --git a/ui/keyboard/resources/polymer.min.js b/ui/keyboard/resources/polymer.min.js
deleted file mode 100644
index 915f7d9751..0000000000
--- a/ui/keyboard/resources/polymer.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-<include src="../../../third_party/polymer/polymer.min.js"></include>
diff --git a/ui/keyboard/resources/polymer_loader.js b/ui/keyboard/resources/polymer_loader.js
new file mode 100644
index 0000000000..f39ea61fae
--- /dev/null
+++ b/ui/keyboard/resources/polymer_loader.js
@@ -0,0 +1,11 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// This is necessary because polymer currently doesn't handle the configuration
+// where native Custom Elements are available but native Shadow DOM is not.
+// TODO(bshe): remove this line when polymer supports the configuration.
+document.register = undefined;
+
+<include src="../../../third_party/polymer/platform.js"></include>
+<include src="../../../third_party/polymer/polymer.js"></include>
diff --git a/ui/keyboard/resources/webui_index.html b/ui/keyboard/resources/webui_index.html
index 47ae8ed169..bdc81167fc 100644
--- a/ui/keyboard/resources/webui_index.html
+++ b/ui/keyboard/resources/webui_index.html
@@ -18,7 +18,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<link rel="stylesheet" href="main.css">
<script src="constants.js"></script>
- <script src="polymer.min.js"></script>
+ <script src="polymer_loader.js"></script>
<script src="api_adapter.js"></script>
<script src="voice_input.js"></script>
<link rel="import" href="elements/kb-altkey.html">
diff --git a/ui/message_center/cocoa/notification_controller_unittest.mm b/ui/message_center/cocoa/notification_controller_unittest.mm
index 8ba6026782..783ad119aa 100644
--- a/ui/message_center/cocoa/notification_controller_unittest.mm
+++ b/ui/message_center/cocoa/notification_controller_unittest.mm
@@ -55,7 +55,7 @@ class MockMessageCenter : public message_center::FakeMessageCenter {
DISALLOW_COPY_AND_ASSIGN(MockMessageCenter);
};
-}
+} // namespace
@implementation MCNotificationController (TestingInterface)
- (NSButton*)closeButton {
@@ -93,11 +93,18 @@ class MockMessageCenter : public message_center::FakeMessageCenter {
}
@end
+namespace message_center {
+
class NotificationControllerTest : public ui::CocoaTest {
public:
NSImage* TestIcon() {
return [NSImage imageNamed:NSImageNameUser];
}
+
+ protected:
+ message_center::NotifierId DummyNotifierId() {
+ return message_center::NotifierId();
+ }
};
TEST_F(NotificationControllerTest, BasicLayout) {
@@ -109,7 +116,7 @@ TEST_F(NotificationControllerTest, BasicLayout) {
ASCIIToUTF16("Jonathan and 5 others"),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
notification->set_icon(gfx::Image([TestIcon() retain]));
@@ -139,7 +146,7 @@ TEST_F(NotificationControllerTest, OverflowText) {
"entire thing?"),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
base::scoped_nsobject<MCNotificationController> controller(
@@ -160,7 +167,7 @@ TEST_F(NotificationControllerTest, Close) {
string16(),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
MockMessageCenter message_center;
@@ -187,7 +194,7 @@ TEST_F(NotificationControllerTest, Update) {
"default bounds."),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
base::scoped_nsobject<MCNotificationController> controller(
@@ -223,7 +230,7 @@ TEST_F(NotificationControllerTest, Buttons) {
string16(),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
optional,
NULL));
MockMessageCenter message_center;
@@ -248,7 +255,7 @@ TEST_F(NotificationControllerTest, Image) {
string16(),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
NSImage* image = [NSImage imageNamed:NSImageNameFolder];
@@ -290,7 +297,7 @@ TEST_F(NotificationControllerTest, List) {
UTF8ToUTF16("Notification Message - should be hidden"),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
optional,
NULL));
@@ -308,3 +315,5 @@ TEST_F(NotificationControllerTest, List) {
EXPECT_LT(NSMaxY([[controller listView] frame]),
NSMinY([[controller titleView] frame]));
}
+
+} // namespace message_center
diff --git a/ui/message_center/cocoa/popup_collection_unittest.mm b/ui/message_center/cocoa/popup_collection_unittest.mm
index 3ec7c3318f..445673d1a5 100644
--- a/ui/message_center/cocoa/popup_collection_unittest.mm
+++ b/ui/message_center/cocoa/popup_collection_unittest.mm
@@ -17,6 +17,8 @@
#include "ui/message_center/message_center_style.h"
#include "ui/message_center/notification.h"
+namespace message_center {
+
class PopupCollectionTest : public ui::CocoaTest {
public:
PopupCollectionTest()
@@ -41,6 +43,10 @@ class PopupCollectionTest : public ui::CocoaTest {
message_center::MessageCenter::Shutdown();
}
+ message_center::NotifierId DummyNotifierId() {
+ return message_center::NotifierId();
+ }
+
void AddThreeNotifications() {
scoped_ptr<message_center::Notification> notification;
notification.reset(new message_center::Notification(
@@ -51,7 +57,7 @@ class PopupCollectionTest : public ui::CocoaTest {
" be displayed"),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->AddNotification(notification.Pass());
@@ -63,7 +69,7 @@ class PopupCollectionTest : public ui::CocoaTest {
ASCIIToUTF16("This is the second notification."),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->AddNotification(notification.Pass());
@@ -80,7 +86,7 @@ class PopupCollectionTest : public ui::CocoaTest {
"if the notification is way too big"),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->AddNotification(notification.Pass());
@@ -135,7 +141,7 @@ TEST_F(PopupCollectionTest, AttemptFourOneOffscreen) {
ASCIIToUTF16("This is the fourth notification."),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->AddNotification(notification.Pass());
@@ -184,7 +190,7 @@ TEST_F(PopupCollectionTest, LayoutSpacing) {
ASCIIToUTF16("This is the fourth notification."),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
optional,
NULL));
center_->AddNotification(notification.Pass());
@@ -222,7 +228,7 @@ TEST_F(PopupCollectionTest, TinyScreen) {
" be displayed"),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->AddNotification(notification.Pass());
@@ -244,7 +250,7 @@ TEST_F(PopupCollectionTest, TinyScreen) {
"long notification."),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->UpdateNotification("1", notification.Pass());
@@ -288,7 +294,7 @@ TEST_F(PopupCollectionTest, UpdateIconAndBody) {
"longer body"),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->AddNotification(notification.Pass());
@@ -317,7 +323,7 @@ TEST_F(PopupCollectionTest, CloseCollectionBeforeNewPopupAnimationEnds) {
" be displayed"),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->AddNotification(notification.Pass());
@@ -350,7 +356,7 @@ TEST_F(PopupCollectionTest, CloseCollectionBeforeUpdatePopupAnimationEnds) {
ASCIIToUTF16("New message."),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->UpdateNotification("1", notification.Pass());
@@ -359,3 +365,5 @@ TEST_F(PopupCollectionTest, CloseCollectionBeforeUpdatePopupAnimationEnds) {
// be expected.
collection_.reset();
}
+
+} // namespace message_center
diff --git a/ui/message_center/cocoa/popup_controller_unittest.mm b/ui/message_center/cocoa/popup_controller_unittest.mm
index c39d163128..e443e04cc2 100644
--- a/ui/message_center/cocoa/popup_controller_unittest.mm
+++ b/ui/message_center/cocoa/popup_controller_unittest.mm
@@ -11,6 +11,8 @@
#import "ui/base/test/ui_cocoa_test_helper.h"
#include "ui/message_center/notification.h"
+namespace message_center {
+
class PopupControllerTest : public ui::CocoaTest {
};
@@ -41,3 +43,5 @@ TEST_F(PopupControllerTest, Creation) {
[controller showWindow:nil];
[controller close];
}
+
+} // namespace message_center
diff --git a/ui/message_center/cocoa/tray_controller_unittest.mm b/ui/message_center/cocoa/tray_controller_unittest.mm
index 379c3dea4f..516cf8fc5c 100644
--- a/ui/message_center/cocoa/tray_controller_unittest.mm
+++ b/ui/message_center/cocoa/tray_controller_unittest.mm
@@ -10,7 +10,7 @@
#include "ui/message_center/message_center.h"
#include "ui/message_center/message_center_tray.h"
-namespace {
+namespace message_center {
class TrayControllerTest : public ui::CocoaTest {
public:
@@ -56,4 +56,4 @@ TEST_F(TrayControllerTest, OpenLeftRight) {
EXPECT_EQ(left_point.x - NSWidth(window_frame), NSMinX(window_frame));
}
-} // namespace
+} // namespace message_center
diff --git a/ui/message_center/cocoa/tray_view_controller.mm b/ui/message_center/cocoa/tray_view_controller.mm
index 6865562995..a1994ecddd 100644
--- a/ui/message_center/cocoa/tray_view_controller.mm
+++ b/ui/message_center/cocoa/tray_view_controller.mm
@@ -749,7 +749,7 @@ const CGFloat kTrayBottomMargin = 75;
[settingsButton_ setEnabled:YES];
[clipView_ setFrozen:NO];
- messageCenter_->RemoveAllNotifications(true);
+ messageCenter_->RemoveAllVisibleNotifications(true);
}
- (void)updateQuietModeButtonImage {
diff --git a/ui/message_center/cocoa/tray_view_controller_unittest.mm b/ui/message_center/cocoa/tray_view_controller_unittest.mm
index 03207d965d..cb649f9bdf 100644
--- a/ui/message_center/cocoa/tray_view_controller_unittest.mm
+++ b/ui/message_center/cocoa/tray_view_controller_unittest.mm
@@ -16,6 +16,8 @@
#include "ui/message_center/notification.h"
#include "ui/message_center/notifier_settings.h"
+namespace message_center {
+
class TrayViewControllerTest : public ui::CocoaTest {
public:
TrayViewControllerTest()
@@ -53,6 +55,10 @@ class TrayViewControllerTest : public ui::CocoaTest {
}
protected:
+ message_center::NotifierId DummyNotifierId() {
+ return message_center::NotifierId();
+ }
+
message_center::MessageCenter* center_; // Weak, global.
base::MessageLoop message_loop_;
@@ -71,7 +77,7 @@ TEST_F(TrayViewControllerTest, AddRemoveOne) {
ASCIIToUTF16("This is a simple test."),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->AddNotification(notification_data.Pass());
@@ -105,7 +111,7 @@ TEST_F(TrayViewControllerTest, AddThreeClearAll) {
ASCIIToUTF16("This is a simple test."),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->AddNotification(notification.Pass());
@@ -116,7 +122,7 @@ TEST_F(TrayViewControllerTest, AddThreeClearAll) {
ASCIIToUTF16("This is a simple test."),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->AddNotification(notification.Pass());
@@ -127,7 +133,7 @@ TEST_F(TrayViewControllerTest, AddThreeClearAll) {
ASCIIToUTF16("This is a simple test."),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->AddNotification(notification.Pass());
@@ -160,7 +166,7 @@ TEST_F(TrayViewControllerTest, NoClearAllWhenNoNotifications) {
ASCIIToUTF16("This is a simple test."),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->AddNotification(notification.Pass());
@@ -179,7 +185,7 @@ TEST_F(TrayViewControllerTest, NoClearAllWhenNoNotifications) {
ASCIIToUTF16("This is a simple test."),
gfx::Image(),
string16(),
- message_center::NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL));
center_->AddNotification(notification.Pass());
@@ -199,8 +205,6 @@ TEST_F(TrayViewControllerTest, NoClearAllWhenNoNotifications) {
NSMinX([[tray_ pauseButton] frame]));
}
-namespace message_center {
-
namespace {
Notifier* NewNotifier(const std::string& id,
diff --git a/ui/message_center/fake_message_center.cc b/ui/message_center/fake_message_center.cc
index 98d9035b0b..7b1a093b31 100644
--- a/ui/message_center/fake_message_center.cc
+++ b/ui/message_center/fake_message_center.cc
@@ -74,6 +74,9 @@ void FakeMessageCenter::RemoveNotification(const std::string& id,
void FakeMessageCenter::RemoveAllNotifications(bool by_user) {
}
+void FakeMessageCenter::RemoveAllVisibleNotifications(bool by_user) {
+}
+
void FakeMessageCenter::SetNotificationIcon(const std::string& notification_id,
const gfx::Image& image) {
}
@@ -127,7 +130,7 @@ void FakeMessageCenter::EnterQuietModeWithExpire(
void FakeMessageCenter::SetVisibility(Visibility visible) {
}
-bool FakeMessageCenter::IsMessageCenterVisible() {
+bool FakeMessageCenter::IsMessageCenterVisible() const {
return false;
}
diff --git a/ui/message_center/fake_message_center.h b/ui/message_center/fake_message_center.h
index 08f94eaad8..92e00146d5 100644
--- a/ui/message_center/fake_message_center.h
+++ b/ui/message_center/fake_message_center.h
@@ -39,6 +39,7 @@ class FakeMessageCenter : public MessageCenter {
virtual void RemoveNotification(const std::string& id, bool by_user) OVERRIDE;
virtual void RemoveAllNotifications(bool by_user) OVERRIDE;
+ virtual void RemoveAllVisibleNotifications(bool by_user) OVERRIDE;
virtual void SetNotificationIcon(const std::string& notification_id,
const gfx::Image& image) OVERRIDE;
@@ -64,7 +65,7 @@ class FakeMessageCenter : public MessageCenter {
virtual void EnterQuietModeWithExpire(
const base::TimeDelta& expires_in) OVERRIDE;
virtual void SetVisibility(Visibility visible) OVERRIDE;
- virtual bool IsMessageCenterVisible() OVERRIDE;
+ virtual bool IsMessageCenterVisible() const OVERRIDE;
virtual void RestartPopupTimers() OVERRIDE;
virtual void PausePopupTimers() OVERRIDE;
diff --git a/ui/message_center/message_center.gyp b/ui/message_center/message_center.gyp
index 431ef9e9f1..6333a5ecfe 100644
--- a/ui/message_center/message_center.gyp
+++ b/ui/message_center/message_center.gyp
@@ -78,8 +78,6 @@
'views/message_center_bubble.h',
'views/message_center_button_bar.cc',
'views/message_center_button_bar.h',
- 'views/message_center_focus_border.h',
- 'views/message_center_focus_border.cc',
'views/message_center_view.cc',
'views/message_center_view.h',
'views/message_popup_collection.cc',
diff --git a/ui/message_center/message_center.h b/ui/message_center/message_center.h
index 362f9186d4..1b6cbae33c 100644
--- a/ui/message_center/message_center.h
+++ b/ui/message_center/message_center.h
@@ -15,8 +15,6 @@
#include "ui/message_center/notification_list.h"
#include "ui/message_center/notification_types.h"
-class TrayViewControllerTest;
-
namespace base {
class DictionaryValue;
}
@@ -89,6 +87,7 @@ class MESSAGE_CENTER_EXPORT MessageCenter {
// Removes an existing notification.
virtual void RemoveNotification(const std::string& id, bool by_user) = 0;
virtual void RemoveAllNotifications(bool by_user) = 0;
+ virtual void RemoveAllVisibleNotifications(bool by_user) = 0;
// Sets the icon image. Icon appears at the top-left of the notification.
virtual void SetNotificationIcon(const std::string& notification_id,
@@ -155,7 +154,7 @@ class MESSAGE_CENTER_EXPORT MessageCenter {
virtual void SetVisibility(Visibility visible) = 0;
// Allows querying the visibility of the center.
- virtual bool IsMessageCenterVisible() = 0;
+ virtual bool IsMessageCenterVisible() const = 0;
// UI classes should call this when there is cause to leave popups visible for
// longer than the default (for example, when the mouse hovers over a popup).
@@ -166,7 +165,7 @@ class MESSAGE_CENTER_EXPORT MessageCenter {
virtual void RestartPopupTimers() = 0;
protected:
- friend class ::TrayViewControllerTest;
+ friend class TrayViewControllerTest;
friend class test::MessagePopupCollectionTest;
virtual void DisableTimersForTest() = 0;
diff --git a/ui/message_center/message_center_impl.cc b/ui/message_center/message_center_impl.cc
index c707a2c8ce..45e91c48f9 100644
--- a/ui/message_center/message_center_impl.cc
+++ b/ui/message_center/message_center_impl.cc
@@ -391,6 +391,25 @@ void PopupTimersController::OnNotificationRemoved(const std::string& id,
} // namespace internal
////////////////////////////////////////////////////////////////////////////////
+// MessageCenterImpl::NotificationCache
+
+MessageCenterImpl::NotificationCache::NotificationCache()
+ : unread_count(0) {}
+
+MessageCenterImpl::NotificationCache::~NotificationCache() {}
+
+void MessageCenterImpl::NotificationCache::Rebuild(
+ const NotificationList::Notifications& notifications) {
+ visible_notifications = notifications;
+ unread_count = 0;
+ for (NotificationList::Notifications::const_iterator iter =
+ notifications.begin(); iter != notifications.end(); ++iter) {
+ if (!(*iter)->IsRead())
+ ++unread_count;
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
// MessageCenterImpl
MessageCenterImpl::MessageCenterImpl()
@@ -430,7 +449,7 @@ void MessageCenterImpl::RemoveNotificationBlocker(
blockers_.erase(iter);
}
-void MessageCenterImpl::OnBlockingStateChanged() {
+void MessageCenterImpl::OnBlockingStateChanged(NotificationBlocker* blocker) {
std::list<std::string> blocked_ids;
NotificationList::PopupNotifications popups =
notification_list_->GetPopupNotifications(blockers_, &blocked_ids);
@@ -439,6 +458,11 @@ void MessageCenterImpl::OnBlockingStateChanged() {
iter != blocked_ids.end(); ++iter) {
MarkSinglePopupAsShown((*iter), true);
}
+ notification_cache_.Rebuild(
+ notification_list_->GetVisibleNotifications(blockers_));
+ FOR_EACH_OBSERVER(MessageCenterObserver,
+ observer_list_,
+ OnBlockingStateChanged(blocker));
}
void MessageCenterImpl::SetVisibility(Visibility visibility) {
@@ -461,23 +485,29 @@ void MessageCenterImpl::SetVisibility(Visibility visibility) {
OnCenterVisibilityChanged(visibility));
}
-bool MessageCenterImpl::IsMessageCenterVisible() {
+bool MessageCenterImpl::IsMessageCenterVisible() const {
return notification_list_->is_message_center_visible();
}
size_t MessageCenterImpl::NotificationCount() const {
- return notification_list_->NotificationCount();
+ return notification_cache_.visible_notifications.size();
}
size_t MessageCenterImpl::UnreadNotificationCount() const {
- return notification_list_->unread_count();
+ return notification_cache_.unread_count;
}
bool MessageCenterImpl::HasPopupNotifications() const {
- return notification_list_->HasPopupNotifications(blockers_);
+ return !IsMessageCenterVisible() &&
+ notification_list_->HasPopupNotifications(blockers_);
}
bool MessageCenterImpl::HasNotification(const std::string& id) {
+ // This will return true if the notification with |id| is hidden by the
+ // ChromeOS multi-profile feature. This would be harmless for now because
+ // this check will be used from the UI, so the |id| for hidden profile won't
+ // arrive here.
+ // TODO(mukai): fix this if necessary.
return notification_list_->HasNotification(id);
}
@@ -493,7 +523,7 @@ bool MessageCenterImpl::HasClickedListener(const std::string& id) {
const NotificationList::Notifications&
MessageCenterImpl::GetVisibleNotifications() {
- return notification_list_->GetNotifications();
+ return notification_cache_.visible_notifications;
}
NotificationList::PopupNotifications
@@ -520,6 +550,8 @@ void MessageCenterImpl::AddNotification(scoped_ptr<Notification> notification) {
const std::string& id = notification->id();
bool already_exists = notification_list_->HasNotification(id);
notification_list_->AddNotification(notification.Pass());
+ notification_cache_.Rebuild(
+ notification_list_->GetVisibleNotifications(blockers_));
if (already_exists) {
FOR_EACH_OBSERVER(
@@ -562,6 +594,8 @@ void MessageCenterImpl::UpdateNotification(
std::string new_id = new_notification->id();
notification_list_->UpdateNotificationMessage(old_id,
new_notification.Pass());
+ notification_cache_.Rebuild(
+ notification_list_->GetVisibleNotifications(blockers_));
if (old_id == new_id) {
FOR_EACH_OBSERVER(
MessageCenterObserver, observer_list_, OnNotificationUpdated(new_id));
@@ -593,14 +627,28 @@ void MessageCenterImpl::RemoveNotification(const std::string& id,
// copies the id explicitly here.
std::string copied_id(id);
notification_list_->RemoveNotification(copied_id);
+ notification_cache_.Rebuild(
+ notification_list_->GetVisibleNotifications(blockers_));
FOR_EACH_OBSERVER(MessageCenterObserver,
observer_list_,
OnNotificationRemoved(copied_id, by_user));
}
void MessageCenterImpl::RemoveAllNotifications(bool by_user) {
- const NotificationList::Notifications& notifications =
- notification_list_->GetNotifications();
+ // Using not |blockers_| but an empty list since it wants to remove literally
+ // all notifications.
+ RemoveNotifications(by_user, NotificationBlockers());
+}
+
+void MessageCenterImpl::RemoveAllVisibleNotifications(bool by_user) {
+ RemoveNotifications(by_user, blockers_);
+}
+
+void MessageCenterImpl::RemoveNotifications(
+ bool by_user,
+ const NotificationBlockers& blockers) {
+ const NotificationList::Notifications notifications =
+ notification_list_->GetVisibleNotifications(blockers);
std::set<std::string> ids;
for (NotificationList::Notifications::const_iterator iter =
notifications.begin(); iter != notifications.end(); ++iter) {
@@ -608,9 +656,13 @@ void MessageCenterImpl::RemoveAllNotifications(bool by_user) {
NotificationDelegate* delegate = (*iter)->delegate();
if (delegate)
delegate->Close(by_user);
+ notification_list_->RemoveNotification((*iter)->id());
}
- notification_list_->RemoveAllNotifications();
+ if (!ids.empty()) {
+ notification_cache_.Rebuild(
+ notification_list_->GetVisibleNotifications(blockers_));
+ }
for (std::set<std::string>::const_iterator iter = ids.begin();
iter != ids.end(); ++iter) {
FOR_EACH_OBSERVER(MessageCenterObserver,
@@ -694,6 +746,10 @@ void MessageCenterImpl::DisableNotificationsByNotifier(
iter++;
RemoveNotification(id, false);
}
+ if (!notifications.empty()) {
+ notification_cache_.Rebuild(
+ notification_list_->GetVisibleNotifications(blockers_));
+ }
}
void MessageCenterImpl::ExpandNotification(const std::string& id) {
diff --git a/ui/message_center/message_center_impl.h b/ui/message_center/message_center_impl.h
index 6d19b904a2..3768d96165 100644
--- a/ui/message_center/message_center_impl.h
+++ b/ui/message_center/message_center_impl.h
@@ -146,7 +146,7 @@ class MessageCenterImpl : public MessageCenter,
virtual void AddNotificationBlocker(NotificationBlocker* blocker) OVERRIDE;
virtual void RemoveNotificationBlocker(NotificationBlocker* blocker) OVERRIDE;
virtual void SetVisibility(Visibility visible) OVERRIDE;
- virtual bool IsMessageCenterVisible() OVERRIDE;
+ virtual bool IsMessageCenterVisible() const OVERRIDE;
virtual size_t NotificationCount() const OVERRIDE;
virtual size_t UnreadNotificationCount() const OVERRIDE;
virtual bool HasPopupNotifications() const OVERRIDE;
@@ -162,6 +162,7 @@ class MessageCenterImpl : public MessageCenter,
OVERRIDE;
virtual void RemoveNotification(const std::string& id, bool by_user) OVERRIDE;
virtual void RemoveAllNotifications(bool by_user) OVERRIDE;
+ virtual void RemoveAllVisibleNotifications(bool by_user) OVERRIDE;
virtual void SetNotificationIcon(const std::string& notification_id,
const gfx::Image& image) OVERRIDE;
virtual void SetNotificationImage(const std::string& notification_id,
@@ -188,13 +189,25 @@ class MessageCenterImpl : public MessageCenter,
virtual void PausePopupTimers() OVERRIDE;
// NotificationBlocker::Observer overrides:
- virtual void OnBlockingStateChanged() OVERRIDE;
+ virtual void OnBlockingStateChanged(NotificationBlocker* blocker) OVERRIDE;
protected:
virtual void DisableTimersForTest() OVERRIDE;
private:
+ struct NotificationCache {
+ NotificationCache();
+ ~NotificationCache();
+ void Rebuild(const NotificationList::Notifications& notificaitons);
+
+ NotificationList::Notifications visible_notifications;
+ size_t unread_count;
+ };
+
+ void RemoveNotifications(bool by_user, const NotificationBlockers& blockers);
+
scoped_ptr<NotificationList> notification_list_;
+ NotificationCache notification_cache_;
ObserverList<MessageCenterObserver> observer_list_;
scoped_ptr<internal::PopupTimersController> popup_timers_controller_;
scoped_ptr<base::OneShotTimer<MessageCenterImpl> > quiet_mode_timer_;
diff --git a/ui/message_center/message_center_impl_unittest.cc b/ui/message_center/message_center_impl_unittest.cc
index e54f14b88d..64b29095a6 100644
--- a/ui/message_center/message_center_impl_unittest.cc
+++ b/ui/message_center/message_center_impl_unittest.cc
@@ -83,8 +83,7 @@ class ToggledNotificationBlocker : public NotificationBlocker {
void SetNotificationsEnabled(bool enabled) {
if (notifications_enabled_ != enabled) {
notifications_enabled_ = enabled;
- FOR_EACH_OBSERVER(
- NotificationBlocker::Observer, observers(), OnBlockingStateChanged());
+ NotifyBlockingStateChanged();
}
}
@@ -121,6 +120,23 @@ class PopupNotificationBlocker : public ToggledNotificationBlocker {
DISALLOW_COPY_AND_ASSIGN(PopupNotificationBlocker);
};
+class TotalNotificationBlocker : public PopupNotificationBlocker {
+ public:
+ TotalNotificationBlocker(MessageCenter* message_center,
+ const NotifierId& allowed_notifier)
+ : PopupNotificationBlocker(message_center, allowed_notifier) {}
+ virtual ~TotalNotificationBlocker() {}
+
+ // NotificationBlocker overrides:
+ virtual bool ShouldShowNotification(
+ const NotifierId& notifier_id) const OVERRIDE {
+ return ShouldShowNotificationAsPopup(notifier_id);
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TotalNotificationBlocker);
+};
+
bool PopupNotificationsContain(
const NotificationList::PopupNotifications& popups,
const std::string& id) {
@@ -132,6 +148,18 @@ bool PopupNotificationsContain(
return false;
}
+// Right now, MessageCenter::HasNotification() returns regardless of blockers.
+bool NotificationsContain(
+ const NotificationList::Notifications& notifications,
+ const std::string& id) {
+ for (NotificationList::Notifications::const_iterator iter =
+ notifications.begin(); iter != notifications.end(); ++iter) {
+ if ((*iter)->id() == id)
+ return true;
+ }
+ return false;
+}
+
} // namespace
namespace internal {
@@ -459,6 +487,96 @@ TEST_F(MessageCenterImplTest, NotificationBlockerAllowsPopups) {
EXPECT_EQ(4u, message_center()->GetVisibleNotifications().size());
}
+// TotalNotificationBlocker suppresses showing notifications even from the list.
+// This would provide the feature to 'separated' message centers per-profile for
+// ChromeOS multi-login.
+TEST_F(MessageCenterImplTest, TotalNotificationBlocker) {
+ NotifierId notifier_id1(NotifierId::APPLICATION, "app1");
+ NotifierId notifier_id2(NotifierId::APPLICATION, "app2");
+ TotalNotificationBlocker blocker(message_center(), notifier_id2);
+
+ message_center()->AddNotification(scoped_ptr<Notification>(new Notification(
+ NOTIFICATION_TYPE_SIMPLE,
+ "id1",
+ UTF8ToUTF16("title"),
+ UTF8ToUTF16("message"),
+ gfx::Image() /* icon */,
+ base::string16() /* display_source */,
+ notifier_id1,
+ RichNotificationData(),
+ NULL)));
+ message_center()->AddNotification(scoped_ptr<Notification>(new Notification(
+ NOTIFICATION_TYPE_SIMPLE,
+ "id2",
+ UTF8ToUTF16("title"),
+ UTF8ToUTF16("message"),
+ gfx::Image() /* icon */,
+ base::string16() /* display_source */,
+ notifier_id2,
+ RichNotificationData(),
+ NULL)));
+
+ // "id1" becomes invisible while "id2" is still visible.
+ blocker.SetNotificationsEnabled(false);
+ EXPECT_EQ(1u, message_center()->NotificationCount());
+ NotificationList::Notifications notifications =
+ message_center()->GetVisibleNotifications();
+ EXPECT_FALSE(NotificationsContain(notifications, "id1"));
+ EXPECT_TRUE(NotificationsContain(notifications, "id2"));
+
+ message_center()->AddNotification(scoped_ptr<Notification>(new Notification(
+ NOTIFICATION_TYPE_SIMPLE,
+ "id3",
+ UTF8ToUTF16("title"),
+ UTF8ToUTF16("message"),
+ gfx::Image() /* icon */,
+ base::string16() /* display_source */,
+ notifier_id1,
+ RichNotificationData(),
+ NULL)));
+ message_center()->AddNotification(scoped_ptr<Notification>(new Notification(
+ NOTIFICATION_TYPE_SIMPLE,
+ "id4",
+ UTF8ToUTF16("title"),
+ UTF8ToUTF16("message"),
+ gfx::Image() /* icon */,
+ base::string16() /* display_source */,
+ notifier_id2,
+ RichNotificationData(),
+ NULL)));
+ EXPECT_EQ(2u, message_center()->NotificationCount());
+ notifications = message_center()->GetVisibleNotifications();
+ EXPECT_FALSE(NotificationsContain(notifications, "id1"));
+ EXPECT_TRUE(NotificationsContain(notifications, "id2"));
+ EXPECT_FALSE(NotificationsContain(notifications, "id3"));
+ EXPECT_TRUE(NotificationsContain(notifications, "id4"));
+
+ blocker.SetNotificationsEnabled(true);
+ EXPECT_EQ(4u, message_center()->NotificationCount());
+ notifications = message_center()->GetVisibleNotifications();
+ EXPECT_TRUE(NotificationsContain(notifications, "id1"));
+ EXPECT_TRUE(NotificationsContain(notifications, "id2"));
+ EXPECT_TRUE(NotificationsContain(notifications, "id3"));
+ EXPECT_TRUE(NotificationsContain(notifications, "id4"));
+
+ // RemoveAllVisibleNotifications should remove just visible notifications.
+ blocker.SetNotificationsEnabled(false);
+ message_center()->RemoveAllVisibleNotifications(false /* by_user */);
+ EXPECT_EQ(0u, message_center()->NotificationCount());
+ blocker.SetNotificationsEnabled(true);
+ EXPECT_EQ(2u, message_center()->NotificationCount());
+ notifications = message_center()->GetVisibleNotifications();
+ EXPECT_TRUE(NotificationsContain(notifications, "id1"));
+ EXPECT_FALSE(NotificationsContain(notifications, "id2"));
+ EXPECT_TRUE(NotificationsContain(notifications, "id3"));
+ EXPECT_FALSE(NotificationsContain(notifications, "id4"));
+
+ // And RemoveAllNotifications should remove all.
+ blocker.SetNotificationsEnabled(false);
+ message_center()->RemoveAllNotifications(false /* by_user */);
+ EXPECT_EQ(0u, message_center()->NotificationCount());
+}
+
TEST_F(MessageCenterImplTest, QueueUpdatesWithCenterVisible) {
std::string id("id1");
std::string id2("id2");
diff --git a/ui/message_center/message_center_observer.h b/ui/message_center/message_center_observer.h
index b300db5712..901b60e54a 100644
--- a/ui/message_center/message_center_observer.h
+++ b/ui/message_center/message_center_observer.h
@@ -11,6 +11,7 @@
#include "ui/message_center/message_center_types.h"
namespace message_center {
+class NotificationBlocker;
// An observer class for the change of notifications in the MessageCenter.
class MESSAGE_CENTER_EXPORT MessageCenterObserver {
@@ -49,6 +50,9 @@ class MESSAGE_CENTER_EXPORT MessageCenterObserver {
// Called whenever the quiet mode changes as a result of user action or when
// quiet mode expires.
virtual void OnQuietModeChanged(bool in_quiet_mode) {}
+
+ // Called when the blocking state of |blocker| is changed.
+ virtual void OnBlockingStateChanged(NotificationBlocker* blocker) {}
};
} // namespace message_center
diff --git a/ui/message_center/message_center_tray.cc b/ui/message_center/message_center_tray.cc
index 9a5ea56dfb..58e5868a1e 100644
--- a/ui/message_center/message_center_tray.cc
+++ b/ui/message_center/message_center_tray.cc
@@ -11,6 +11,7 @@
#include "ui/message_center/message_center.h"
#include "ui/message_center/message_center_tray_delegate.h"
#include "ui/message_center/message_center_types.h"
+#include "ui/message_center/notification_blocker.h"
namespace message_center {
@@ -52,6 +53,7 @@ void MessageCenterTray::MarkMessageCenterHidden() {
if (!message_center_visible_)
return;
message_center_visible_ = false;
+ message_center_->SetVisibility(message_center::VISIBILITY_TRANSIENT);
// Some notifications (like system ones) should appear as popups again
// after the message center is closed.
@@ -60,8 +62,6 @@ void MessageCenterTray::MarkMessageCenterHidden() {
return;
}
- message_center_->SetVisibility(message_center::VISIBILITY_TRANSIENT);
-
NotifyMessageCenterTrayChanged();
}
@@ -102,11 +102,8 @@ void MessageCenterTray::HidePopupBubbleInternal() {
if (!popups_visible_)
return;
- // This is called before HidePopups so that we don't double-call this when we
- // see the results of HidePopups via MessageCenterObserver.
- popups_visible_ = false;
-
delegate_->HidePopups();
+ popups_visible_ = false;
}
void MessageCenterTray::ShowNotifierSettingsBubble() {
@@ -157,6 +154,10 @@ void MessageCenterTray::OnQuietModeChanged(bool in_quiet_mode) {
NotifyMessageCenterTrayChanged();
}
+void MessageCenterTray::OnBlockingStateChanged(NotificationBlocker* blocker) {
+ OnMessageCenterChanged();
+}
+
void MessageCenterTray::OnMessageCenterChanged() {
if (message_center_visible_ && message_center_->NotificationCount() == 0)
HideMessageCenterBubble();
diff --git a/ui/message_center/message_center_tray.h b/ui/message_center/message_center_tray.h
index 444bb2f4ec..fed4eb1433 100644
--- a/ui/message_center/message_center_tray.h
+++ b/ui/message_center/message_center_tray.h
@@ -76,6 +76,7 @@ class MESSAGE_CENTER_EXPORT MessageCenterTray : public MessageCenterObserver {
virtual void OnNotificationDisplayed(
const std::string& notification_id) OVERRIDE;
virtual void OnQuietModeChanged(bool in_quiet_mode) OVERRIDE;
+ virtual void OnBlockingStateChanged(NotificationBlocker* blocker) OVERRIDE;
private:
void OnMessageCenterChanged();
diff --git a/ui/message_center/message_center_tray_unittest.cc b/ui/message_center/message_center_tray_unittest.cc
index 6a68b2b989..f9f10e1807 100644
--- a/ui/message_center/message_center_tray_unittest.cc
+++ b/ui/message_center/message_center_tray_unittest.cc
@@ -42,6 +42,8 @@ class MockDelegate : public MessageCenterTrayDelegate {
DISALLOW_COPY_AND_ASSIGN(MockDelegate);
};
+} // namespace
+
class MessageCenterTrayTest : public testing::Test {
public:
MessageCenterTrayTest() {}
@@ -63,6 +65,10 @@ class MessageCenterTrayTest : public testing::Test {
}
protected:
+ NotifierId DummyNotifierId() {
+ return NotifierId();
+ }
+
void AddNotification(const std::string& id) {
scoped_ptr<Notification> notification(
new Notification(message_center::NOTIFICATION_TYPE_SIMPLE,
@@ -71,7 +77,7 @@ class MessageCenterTrayTest : public testing::Test {
ASCIIToUTF16("Notification message body."),
gfx::Image(),
ASCIIToUTF16("www.test.org"),
- NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL /* delegate */));
message_center_->AddNotification(notification.Pass());
@@ -84,8 +90,6 @@ class MessageCenterTrayTest : public testing::Test {
DISALLOW_COPY_AND_ASSIGN(MessageCenterTrayTest);
};
-} // namespace
-
TEST_F(MessageCenterTrayTest, BasicMessageCenter) {
ASSERT_FALSE(message_center_tray_->popups_visible());
ASSERT_FALSE(message_center_tray_->message_center_visible());
@@ -178,7 +182,7 @@ TEST_F(MessageCenterTrayTest, MessageCenterReopenPopupsForSystemPriority) {
ASCIIToUTF16("Notification message body."),
gfx::Image(),
ASCIIToUTF16("www.test.org"),
- NotifierId(),
+ DummyNotifierId(),
message_center::RichNotificationData(),
NULL /* delegate */));
notification->SetSystemPriority();
diff --git a/ui/message_center/notification.cc b/ui/message_center/notification.cc
index c7b2f980c5..5e0f1b6d7c 100644
--- a/ui/message_center/notification.cc
+++ b/ui/message_center/notification.cc
@@ -106,9 +106,13 @@ Notification& Notification::operator=(const Notification& other) {
Notification::~Notification() {}
+bool Notification::IsRead() const {
+ return is_read_ || optional_fields_.priority == MIN_PRIORITY;
+}
+
void Notification::CopyState(Notification* base) {
shown_as_popup_ = base->shown_as_popup();
- is_read_ = base->is_read();
+ is_read_ = base->is_read_;
is_expanded_ = base->is_expanded();
if (!delegate_.get())
delegate_ = base->delegate();
@@ -132,7 +136,7 @@ scoped_ptr<Notification> Notification::CreateSystemNotification(
const base::string16& title,
const base::string16& message,
const gfx::Image& icon,
- int system_component_id,
+ const std::string& system_component_id,
const base::Closure& click_callback) {
scoped_ptr<Notification> notification(
new Notification(
@@ -142,7 +146,7 @@ scoped_ptr<Notification> Notification::CreateSystemNotification(
message,
icon,
base::string16() /* display_source */,
- NotifierId(system_component_id),
+ NotifierId(NotifierId::SYSTEM_COMPONENT, system_component_id),
RichNotificationData(),
new HandleNotificationClickedDelegate(click_callback)));
notification->SetSystemPriority();
diff --git a/ui/message_center/notification.h b/ui/message_center/notification.h
index 004808e8d8..ff6f7d1a14 100644
--- a/ui/message_center/notification.h
+++ b/ui/message_center/notification.h
@@ -88,6 +88,10 @@ class MESSAGE_CENTER_EXPORT Notification {
const NotifierId& notifier_id() const { return notifier_id_; }
+ void set_profile_id(const std::string& profile_id) {
+ notifier_id_.profile_id = profile_id;
+ }
+
// Begin unpacked values from optional_fields.
int priority() const { return optional_fields_.priority; }
void set_priority(int priority) { optional_fields_.priority = priority; }
@@ -144,7 +148,7 @@ class MESSAGE_CENTER_EXPORT Notification {
}
// Read status in the message center.
- bool is_read() const { return is_read_; }
+ bool IsRead() const;
void set_is_read(bool read) { is_read_ = read; }
// Expanded status in the message center (not the popups).
@@ -186,14 +190,14 @@ class MESSAGE_CENTER_EXPORT Notification {
void ButtonClick(int index) const { delegate()->ButtonClick(index); }
void Close(bool by_user) const { delegate()->Close(by_user); }
- // Helper method to create a simple System notification. |click_callback|
+ // Helper method to create a simple system notification. |click_callback|
// will be invoked when the notification is clicked.
static scoped_ptr<Notification> CreateSystemNotification(
const std::string& notification_id,
const base::string16& title,
const base::string16& message,
const gfx::Image& icon,
- int system_component_id,
+ const std::string& system_component_id,
const base::Closure& click_callback);
protected:
diff --git a/ui/message_center/notification_blocker.cc b/ui/message_center/notification_blocker.cc
index 6d6c5d3ce1..0b7d7203c5 100644
--- a/ui/message_center/notification_blocker.cc
+++ b/ui/message_center/notification_blocker.cc
@@ -28,4 +28,14 @@ void NotificationBlocker::RemoveObserver(
observers_.RemoveObserver(observer);
}
+bool NotificationBlocker::ShouldShowNotification(
+ const NotifierId& notifier_id) const {
+ return true;
+}
+
+void NotificationBlocker::NotifyBlockingStateChanged() {
+ FOR_EACH_OBSERVER(
+ NotificationBlocker::Observer, observers_, OnBlockingStateChanged(this));
+}
+
} // namespace message_center
diff --git a/ui/message_center/notification_blocker.h b/ui/message_center/notification_blocker.h
index 437f0eb123..385b9856c7 100644
--- a/ui/message_center/notification_blocker.h
+++ b/ui/message_center/notification_blocker.h
@@ -7,7 +7,7 @@
#include "base/observer_list.h"
#include "ui/message_center/message_center_export.h"
-#include "ui/message_center/notifier_settings.h"
+#include "ui/message_center/notification.h"
namespace message_center {
class MessageCenter;
@@ -19,7 +19,7 @@ class MESSAGE_CENTER_EXPORT NotificationBlocker {
public:
class Observer {
public:
- virtual void OnBlockingStateChanged() = 0;
+ virtual void OnBlockingStateChanged(NotificationBlocker* blocker) = 0;
};
explicit NotificationBlocker(MessageCenter* message_center);
@@ -31,6 +31,10 @@ class MESSAGE_CENTER_EXPORT NotificationBlocker {
// Checks the current state and updates the availability.
virtual void CheckState() {}
+ // Returns true when notifications from |notifier_id| should appear in the
+ // message center. Default returns true always.
+ virtual bool ShouldShowNotification(const NotifierId& notifier_id) const;
+
// Returns true when notifications from |notifier_id| should be shown as
// popups on screen. If it's false, those notifications should be queued.
// When a blocker starts returning false for a notification which is already
@@ -39,13 +43,16 @@ class MESSAGE_CENTER_EXPORT NotificationBlocker {
const NotifierId& notifier_id) const = 0;
protected:
- ObserverList<Observer>& observers() { return observers_; }
+ MessageCenter* message_center() { return message_center_; }
+ void NotifyBlockingStateChanged();
private:
ObserverList<Observer> observers_;
MessageCenter* message_center_; // weak
};
+typedef std::vector<NotificationBlocker*> NotificationBlockers;
+
} // namespace message_center
#endif // UI_MESSAGE_CENTER_NOTIFICATION_BLOCKER_H_
diff --git a/ui/message_center/notification_list.cc b/ui/message_center/notification_list.cc
index a13f270fbc..3ec0bfe296 100644
--- a/ui/message_center/notification_list.cc
+++ b/ui/message_center/notification_list.cc
@@ -11,7 +11,6 @@
#include "base/values.h"
#include "ui/message_center/message_center_style.h"
#include "ui/message_center/notification.h"
-#include "ui/message_center/notification_blocker.h"
#include "ui/message_center/notification_types.h"
namespace message_center {
@@ -19,10 +18,10 @@ namespace message_center {
namespace {
bool ShouldShowNotificationAsPopup(
- const NotifierId& notifier_id,
- const std::vector<NotificationBlocker*>& blockers) {
+ const Notification& notification,
+ const NotificationBlockers& blockers) {
for (size_t i = 0; i < blockers.size(); ++i) {
- if (!blockers[i]->ShouldShowNotificationAsPopup(notifier_id))
+ if (!blockers[i]->ShouldShowNotificationAsPopup(notification.notifier_id()))
return false;
}
return true;
@@ -53,7 +52,6 @@ bool CompareTimestampSerial::operator()(Notification* n1, Notification* n2) {
NotificationList::NotificationList()
: message_center_visible_(false),
- unread_count_(0),
quiet_mode_(false) {
}
@@ -72,18 +70,16 @@ void NotificationList::SetMessageCenterVisible(
if (!visible)
return;
- unread_count_ = 0;
-
for (Notifications::iterator iter = notifications_.begin();
iter != notifications_.end(); ++iter) {
Notification* notification = *iter;
+ bool was_popup = notification->shown_as_popup();
+ bool was_read = notification->IsRead();
if (notification->priority() < SYSTEM_PRIORITY)
notification->set_shown_as_popup(true);
notification->set_is_read(true);
- if (updated_ids &&
- !(notification->shown_as_popup() && notification->is_read())) {
+ if (updated_ids && !(was_popup && was_read))
updated_ids->insert(notification->id());
- }
}
}
@@ -123,15 +119,6 @@ void NotificationList::RemoveNotification(const std::string& id) {
EraseNotification(GetNotification(id));
}
-void NotificationList::RemoveAllNotifications() {
- for (Notifications::iterator loopiter = notifications_.begin();
- loopiter != notifications_.end(); ) {
- Notifications::iterator curiter = loopiter++;
- EraseNotification(curiter);
- }
- unread_count_ = 0;
-}
-
NotificationList::Notifications NotificationList::GetNotificationsByNotifierId(
const NotifierId& notifier_id) {
Notifications notifications;
@@ -185,12 +172,12 @@ bool NotificationList::HasNotificationOfType(const std::string& id,
}
bool NotificationList::HasPopupNotifications(
- const std::vector<NotificationBlocker*>& blockers) {
+ const NotificationBlockers& blockers) {
for (Notifications::iterator iter = notifications_.begin();
iter != notifications_.end(); ++iter) {
if ((*iter)->priority() < DEFAULT_PRIORITY)
break;
- if (!ShouldShowNotificationAsPopup((*iter)->notifier_id(), blockers))
+ if (!ShouldShowNotificationAsPopup(**iter, blockers))
continue;
if (!(*iter)->shown_as_popup())
return true;
@@ -199,7 +186,7 @@ bool NotificationList::HasPopupNotifications(
}
NotificationList::PopupNotifications NotificationList::GetPopupNotifications(
- const std::vector<NotificationBlocker*>& blockers,
+ const NotificationBlockers& blockers,
std::list<std::string>* blocked_ids) {
PopupNotifications result;
size_t default_priority_popup_count = 0;
@@ -214,7 +201,7 @@ NotificationList::PopupNotifications NotificationList::GetPopupNotifications(
if ((*iter)->priority() < DEFAULT_PRIORITY)
continue;
- if (!ShouldShowNotificationAsPopup((*iter)->notifier_id(), blockers)) {
+ if (!ShouldShowNotificationAsPopup(**iter, blockers)) {
if (blocked_ids)
blocked_ids->push_back((*iter)->id());
continue;
@@ -247,10 +234,8 @@ void NotificationList::MarkSinglePopupAsShown(
// The popup notification is already marked as read when it's displayed.
// Set the is_read() back to false if necessary.
- if (!mark_notification_as_read) {
+ if (!mark_notification_as_read)
(*iter)->set_is_read(false);
- ++unread_count_;
- }
}
void NotificationList::MarkSinglePopupAsDisplayed(const std::string& id) {
@@ -261,10 +246,8 @@ void NotificationList::MarkSinglePopupAsDisplayed(const std::string& id) {
if ((*iter)->shown_as_popup())
return;
- if (!(*iter)->is_read()) {
+ if (!(*iter)->IsRead())
(*iter)->set_is_read(true);
- --unread_count_;
- }
}
void NotificationList::MarkNotificationAsExpanded(const std::string& id) {
@@ -292,12 +275,40 @@ void NotificationList::SetQuietMode(bool quiet_mode) {
}
}
-const NotificationList::Notifications& NotificationList::GetNotifications() {
- return notifications_;
+NotificationList::Notifications NotificationList::GetVisibleNotifications(
+ const NotificationBlockers& blockers) const {
+ Notifications result;
+ for (Notifications::const_iterator iter = notifications_.begin();
+ iter != notifications_.end(); ++iter) {
+ bool should_show = true;
+ for (size_t i = 0; i < blockers.size(); ++i) {
+ if (!blockers[i]->ShouldShowNotification((*iter)->notifier_id())) {
+ should_show = false;
+ break;
+ }
+ }
+ if (should_show)
+ result.insert(*iter);
+ }
+
+ return result;
}
-size_t NotificationList::NotificationCount() const {
- return notifications_.size();
+size_t NotificationList::NotificationCount(
+ const NotificationBlockers& blockers) const {
+ return GetVisibleNotifications(blockers).size();
+}
+
+size_t NotificationList::UnreadCount(
+ const NotificationBlockers& blockers) const {
+ Notifications notifications = GetVisibleNotifications(blockers);
+ size_t unread_count = 0;
+ for (Notifications::const_iterator iter = notifications.begin();
+ iter != notifications.end(); ++iter) {
+ if (!(*iter)->IsRead())
+ ++unread_count;
+ }
+ return unread_count;
}
NotificationList::Notifications::iterator NotificationList::GetNotification(
@@ -311,8 +322,6 @@ NotificationList::Notifications::iterator NotificationList::GetNotification(
}
void NotificationList::EraseNotification(Notifications::iterator iter) {
- if (!(*iter)->is_read() && (*iter)->priority() > MIN_PRIORITY)
- --unread_count_;
delete *iter;
notifications_.erase(iter);
}
@@ -326,10 +335,6 @@ void NotificationList::PushNotification(scoped_ptr<Notification> notification) {
notification->CopyState(*iter);
state_inherited = true;
EraseNotification(iter);
- // if |iter| is unread, EraseNotification decrements |unread_count_| but
- // actually the count is unchanged since |notification| will be added.
- if (!notification->is_read())
- ++unread_count_;
}
// Add the notification to the the list and mark it unread and unshown.
if (!state_inherited) {
@@ -339,8 +344,6 @@ void NotificationList::PushNotification(scoped_ptr<Notification> notification) {
notification->set_shown_as_popup(message_center_visible_
|| quiet_mode_
|| notification->shown_as_popup());
- if (notification->priority() > MIN_PRIORITY)
- ++unread_count_;
}
// Take ownership. The notification can only be removed from the list
// in EraseNotification(), which will delete it.
diff --git a/ui/message_center/notification_list.h b/ui/message_center/notification_list.h
index 3feee7eee3..3ea8112eb3 100644
--- a/ui/message_center/notification_list.h
+++ b/ui/message_center/notification_list.h
@@ -16,6 +16,7 @@
#include "ui/gfx/native_widget_types.h"
#include "ui/message_center/message_center_export.h"
#include "ui/message_center/notification.h"
+#include "ui/message_center/notification_blocker.h"
#include "ui/message_center/notification_types.h"
namespace base {
@@ -24,7 +25,6 @@ class DictionaryValue;
namespace message_center {
-class NotificationBlocker;
class NotificationDelegate;
namespace test {
@@ -67,8 +67,6 @@ class MESSAGE_CENTER_EXPORT NotificationList {
void RemoveNotification(const std::string& id);
- void RemoveAllNotifications();
-
Notifications GetNotificationsByNotifierId(const NotifierId& notifier_id);
// Returns true if the notification exists and was updated.
@@ -94,7 +92,7 @@ class MESSAGE_CENTER_EXPORT NotificationList {
// Returns false if the first notification has been shown as a popup (which
// means that all notifications have been shown).
- bool HasPopupNotifications(const std::vector<NotificationBlocker*>& blockers);
+ bool HasPopupNotifications(const NotificationBlockers& blockers);
// Returns the recent notifications of the priority higher then LOW,
// that have not been shown as a popup. kMaxVisiblePopupNotifications are
@@ -103,7 +101,7 @@ class MESSAGE_CENTER_EXPORT NotificationList {
// to |blocked_ids|. |blocked_ids| can be NULL if the caller doesn't care
// which notifications are blocked.
PopupNotifications GetPopupNotifications(
- const std::vector<NotificationBlocker*>& blockers,
+ const NotificationBlockers& blockers,
std::list<std::string>* blocked_ids);
// Marks a specific popup item as shown. Set |mark_notification_as_read| to
@@ -128,11 +126,13 @@ class MESSAGE_CENTER_EXPORT NotificationList {
// specified time-delta from now.
void EnterQuietModeWithExpire(const base::TimeDelta& expires_in);
- // Returns all notifications, in a (priority-timestamp) order. Suitable for
- // rendering notifications in a NotificationCenter.
- const Notifications& GetNotifications();
- size_t NotificationCount() const;
- size_t unread_count() const { return unread_count_; }
+ // Returns all visible notifications, in a (priority-timestamp) order.
+ // Suitable for rendering notifications in a MessageCenter.
+ Notifications GetVisibleNotifications(
+ const NotificationBlockers& blockers) const;
+ size_t NotificationCount(const NotificationBlockers& blockers) const;
+ size_t UnreadCount(const NotificationBlockers& blockers) const;
+
bool is_message_center_visible() const { return message_center_visible_; }
private:
@@ -149,7 +149,6 @@ class MESSAGE_CENTER_EXPORT NotificationList {
Notifications notifications_;
bool message_center_visible_;
- size_t unread_count_;
bool quiet_mode_;
DISALLOW_COPY_AND_ASSIGN(NotificationList);
diff --git a/ui/message_center/notification_list_unittest.cc b/ui/message_center/notification_list_unittest.cc
index 18d72379a1..10c843fa9a 100644
--- a/ui/message_center/notification_list_unittest.cc
+++ b/ui/message_center/notification_list_unittest.cc
@@ -75,8 +75,7 @@ class NotificationListTest : public testing::Test {
}
NotificationList::PopupNotifications GetPopups() {
- return notification_list()->GetPopupNotifications(
- std::vector<NotificationBlocker*>(), NULL);
+ return notification_list()->GetPopupNotifications(blockers_, NULL);
}
size_t GetPopupCounts() {
@@ -86,12 +85,13 @@ class NotificationListTest : public testing::Test {
Notification* GetNotification(const std::string& id) {
NotificationList::Notifications::iterator iter =
notification_list()->GetNotification(id);
- if (iter == notification_list()->GetNotifications().end())
+ if (iter == notification_list()->notifications_.end())
return NULL;
return *iter;
}
NotificationList* notification_list() { return notification_list_.get(); }
+ const NotificationBlockers& blockers() const { return blockers_; }
static const char kIdFormat[];
static const char kTitleFormat[];
@@ -101,6 +101,7 @@ class NotificationListTest : public testing::Test {
private:
scoped_ptr<NotificationList> notification_list_;
+ NotificationBlockers blockers_;
size_t counter_;
DISALLOW_COPY_AND_ASSIGN(NotificationListTest);
@@ -123,17 +124,16 @@ const char NotificationListTest::kDisplaySource[] = "source";
const char NotificationListTest::kExtensionId[] = "ext";
TEST_F(NotificationListTest, Basic) {
- ASSERT_EQ(0u, notification_list()->NotificationCount());
- ASSERT_EQ(0u, notification_list()->unread_count());
+ ASSERT_EQ(0u, notification_list()->NotificationCount(blockers()));
+ ASSERT_EQ(0u, notification_list()->UnreadCount(blockers()));
std::string id0 = AddNotification();
- EXPECT_EQ(1u, notification_list()->NotificationCount());
+ EXPECT_EQ(1u, notification_list()->NotificationCount(blockers()));
std::string id1 = AddNotification();
- EXPECT_EQ(2u, notification_list()->NotificationCount());
- EXPECT_EQ(2u, notification_list()->unread_count());
+ EXPECT_EQ(2u, notification_list()->NotificationCount(blockers()));
+ EXPECT_EQ(2u, notification_list()->UnreadCount(blockers()));
- EXPECT_TRUE(notification_list()->HasPopupNotifications(
- std::vector<NotificationBlocker*>()));
+ EXPECT_TRUE(notification_list()->HasPopupNotifications(blockers()));
EXPECT_TRUE(notification_list()->HasNotification(id0));
EXPECT_TRUE(notification_list()->HasNotification(id1));
EXPECT_FALSE(notification_list()->HasNotification(id1 + "foo"));
@@ -142,51 +142,47 @@ TEST_F(NotificationListTest, Basic) {
notification_list()->MarkSinglePopupAsShown(id0, true);
notification_list()->MarkSinglePopupAsShown(id1, true);
- EXPECT_EQ(2u, notification_list()->NotificationCount());
+ EXPECT_EQ(2u, notification_list()->NotificationCount(blockers()));
EXPECT_EQ(0u, GetPopupCounts());
notification_list()->RemoveNotification(id0);
- EXPECT_EQ(1u, notification_list()->NotificationCount());
- EXPECT_EQ(1u, notification_list()->unread_count());
+ EXPECT_EQ(1u, notification_list()->NotificationCount(blockers()));
+ EXPECT_EQ(1u, notification_list()->UnreadCount(blockers()));
AddNotification();
- EXPECT_EQ(2u, notification_list()->NotificationCount());
-
- notification_list()->RemoveAllNotifications();
- EXPECT_EQ(0u, notification_list()->NotificationCount());
- EXPECT_EQ(0u, notification_list()->unread_count());
+ EXPECT_EQ(2u, notification_list()->NotificationCount(blockers()));
}
TEST_F(NotificationListTest, MessageCenterVisible) {
AddNotification();
- EXPECT_EQ(1u, notification_list()->NotificationCount());
- ASSERT_EQ(1u, notification_list()->unread_count());
+ EXPECT_EQ(1u, notification_list()->NotificationCount(blockers()));
+ ASSERT_EQ(1u, notification_list()->UnreadCount(blockers()));
ASSERT_EQ(1u, GetPopupCounts());
// Make the message center visible. It resets the unread count and popup
// counts.
notification_list()->SetMessageCenterVisible(true, NULL);
- ASSERT_EQ(0u, notification_list()->unread_count());
+ ASSERT_EQ(0u, notification_list()->UnreadCount(blockers()));
ASSERT_EQ(0u, GetPopupCounts());
}
TEST_F(NotificationListTest, UnreadCount) {
std::string id0 = AddNotification();
std::string id1 = AddNotification();
- ASSERT_EQ(2u, notification_list()->unread_count());
+ ASSERT_EQ(2u, notification_list()->UnreadCount(blockers()));
notification_list()->MarkSinglePopupAsDisplayed(id0);
- EXPECT_EQ(1u, notification_list()->unread_count());
+ EXPECT_EQ(1u, notification_list()->UnreadCount(blockers()));
notification_list()->MarkSinglePopupAsDisplayed(id0);
- EXPECT_EQ(1u, notification_list()->unread_count());
+ EXPECT_EQ(1u, notification_list()->UnreadCount(blockers()));
notification_list()->MarkSinglePopupAsDisplayed(id1);
- EXPECT_EQ(0u, notification_list()->unread_count());
+ EXPECT_EQ(0u, notification_list()->UnreadCount(blockers()));
}
TEST_F(NotificationListTest, UpdateNotification) {
std::string id0 = AddNotification();
std::string replaced = id0 + "_replaced";
- EXPECT_EQ(1u, notification_list()->NotificationCount());
+ EXPECT_EQ(1u, notification_list()->NotificationCount(blockers()));
scoped_ptr<Notification> notification(
new Notification(message_center::NOTIFICATION_TYPE_SIMPLE,
replaced,
@@ -198,9 +194,9 @@ TEST_F(NotificationListTest, UpdateNotification) {
message_center::RichNotificationData(),
NULL));
notification_list()->UpdateNotificationMessage(id0, notification.Pass());
- EXPECT_EQ(1u, notification_list()->NotificationCount());
- const NotificationList::Notifications& notifications =
- notification_list()->GetNotifications();
+ EXPECT_EQ(1u, notification_list()->NotificationCount(blockers()));
+ const NotificationList::Notifications notifications =
+ notification_list()->GetVisibleNotifications(blockers());
EXPECT_EQ(replaced, (*notifications.begin())->id());
EXPECT_EQ(UTF8ToUTF16("newtitle"), (*notifications.begin())->title());
EXPECT_EQ(UTF8ToUTF16("newbody"), (*notifications.begin())->message());
@@ -210,7 +206,7 @@ TEST_F(NotificationListTest, GetNotificationsByNotifierId) {
NotifierId id0(NotifierId::APPLICATION, "ext0");
NotifierId id1(NotifierId::APPLICATION, "ext1");
NotifierId id2(GURL("http://example.com"));
- NotifierId id3(0);
+ NotifierId id3(NotifierId::SYSTEM_COMPONENT, "system-notifier");
scoped_ptr<Notification> notification(
new Notification(message_center::NOTIFICATION_TYPE_SIMPLE,
"id0",
@@ -334,34 +330,39 @@ TEST_F(NotificationListTest, OldPopupShouldNotBeHidden) {
}
TEST_F(NotificationListTest, Priority) {
- ASSERT_EQ(0u, notification_list()->NotificationCount());
- ASSERT_EQ(0u, notification_list()->unread_count());
+ ASSERT_EQ(0u, notification_list()->NotificationCount(blockers()));
+ ASSERT_EQ(0u, notification_list()->UnreadCount(blockers()));
// Default priority has the limit on the number of the popups.
for (size_t i = 0; i <= kMaxVisiblePopupNotifications; ++i)
AddNotification();
EXPECT_EQ(kMaxVisiblePopupNotifications + 1,
- notification_list()->NotificationCount());
+ notification_list()->NotificationCount(blockers()));
EXPECT_EQ(kMaxVisiblePopupNotifications, GetPopupCounts());
// Low priority: not visible to popups.
notification_list()->SetMessageCenterVisible(true, NULL);
notification_list()->SetMessageCenterVisible(false, NULL);
- EXPECT_EQ(0u, notification_list()->unread_count());
+ EXPECT_EQ(0u, notification_list()->UnreadCount(blockers()));
AddPriorityNotification(LOW_PRIORITY);
EXPECT_EQ(kMaxVisiblePopupNotifications + 2,
- notification_list()->NotificationCount());
- EXPECT_EQ(1u, notification_list()->unread_count());
+ notification_list()->NotificationCount(blockers()));
+ EXPECT_EQ(1u, notification_list()->UnreadCount(blockers()));
EXPECT_EQ(0u, GetPopupCounts());
// Minimum priority: doesn't update the unread count.
AddPriorityNotification(MIN_PRIORITY);
EXPECT_EQ(kMaxVisiblePopupNotifications + 3,
- notification_list()->NotificationCount());
- EXPECT_EQ(1u, notification_list()->unread_count());
+ notification_list()->NotificationCount(blockers()));
+ EXPECT_EQ(1u, notification_list()->UnreadCount(blockers()));
EXPECT_EQ(0u, GetPopupCounts());
- notification_list()->RemoveAllNotifications();
+ NotificationList::Notifications notifications =
+ notification_list()->GetVisibleNotifications(blockers());
+ for (NotificationList::Notifications::const_iterator iter =
+ notifications.begin(); iter != notifications.end(); ++iter) {
+ notification_list()->RemoveNotification((*iter)->id());
+ }
// Higher priority: no limits to the number of popups.
for (size_t i = 0; i < kMaxVisiblePopupNotifications * 2; ++i)
@@ -369,13 +370,13 @@ TEST_F(NotificationListTest, Priority) {
for (size_t i = 0; i < kMaxVisiblePopupNotifications * 2; ++i)
AddPriorityNotification(MAX_PRIORITY);
EXPECT_EQ(kMaxVisiblePopupNotifications * 4,
- notification_list()->NotificationCount());
+ notification_list()->NotificationCount(blockers()));
EXPECT_EQ(kMaxVisiblePopupNotifications * 4, GetPopupCounts());
}
TEST_F(NotificationListTest, HasPopupsWithPriority) {
- ASSERT_EQ(0u, notification_list()->NotificationCount());
- ASSERT_EQ(0u, notification_list()->unread_count());
+ ASSERT_EQ(0u, notification_list()->NotificationCount(blockers()));
+ ASSERT_EQ(0u, notification_list()->UnreadCount(blockers()));
AddPriorityNotification(MIN_PRIORITY);
AddPriorityNotification(MAX_PRIORITY);
@@ -384,8 +385,8 @@ TEST_F(NotificationListTest, HasPopupsWithPriority) {
}
TEST_F(NotificationListTest, HasPopupsWithSystemPriority) {
- ASSERT_EQ(0u, notification_list()->NotificationCount());
- ASSERT_EQ(0u, notification_list()->unread_count());
+ ASSERT_EQ(0u, notification_list()->NotificationCount(blockers()));
+ ASSERT_EQ(0u, notification_list()->UnreadCount(blockers()));
std::string normal_id = AddPriorityNotification(DEFAULT_PRIORITY);
std::string system_id = AddNotification();
@@ -411,7 +412,7 @@ TEST_F(NotificationListTest, HasPopupsWithSystemPriority) {
TEST_F(NotificationListTest, PriorityPromotion) {
std::string id0 = AddPriorityNotification(LOW_PRIORITY);
std::string replaced = id0 + "_replaced";
- EXPECT_EQ(1u, notification_list()->NotificationCount());
+ EXPECT_EQ(1u, notification_list()->NotificationCount(blockers()));
EXPECT_EQ(0u, GetPopupCounts());
message_center::RichNotificationData optional;
optional.priority = 1;
@@ -426,10 +427,10 @@ TEST_F(NotificationListTest, PriorityPromotion) {
optional,
NULL));
notification_list()->UpdateNotificationMessage(id0, notification.Pass());
- EXPECT_EQ(1u, notification_list()->NotificationCount());
+ EXPECT_EQ(1u, notification_list()->NotificationCount(blockers()));
EXPECT_EQ(1u, GetPopupCounts());
- const NotificationList::Notifications& notifications =
- notification_list()->GetNotifications();
+ const NotificationList::Notifications notifications =
+ notification_list()->GetVisibleNotifications(blockers());
EXPECT_EQ(replaced, (*notifications.begin())->id());
EXPECT_EQ(UTF8ToUTF16("newtitle"), (*notifications.begin())->title());
EXPECT_EQ(UTF8ToUTF16("newbody"), (*notifications.begin())->message());
@@ -555,8 +556,8 @@ TEST_F(NotificationListTest, NotificationOrderAndPriority) {
}
{
// Notifications: high priority comes ealier.
- const NotificationList::Notifications& notifications =
- notification_list()->GetNotifications();
+ const NotificationList::Notifications notifications =
+ notification_list()->GetVisibleNotifications(blockers());
EXPECT_EQ(3u, notifications.size());
NotificationList::Notifications::const_iterator iter =
notifications.begin();
@@ -572,7 +573,7 @@ TEST_F(NotificationListTest, MarkSinglePopupAsShown) {
std::string id1 = AddNotification();
std::string id2 = AddNotification();
std::string id3 = AddNotification();
- ASSERT_EQ(3u, notification_list()->NotificationCount());
+ ASSERT_EQ(3u, notification_list()->NotificationCount(blockers()));
ASSERT_EQ(std::min(static_cast<size_t>(3u), kMaxVisiblePopupNotifications),
GetPopupCounts());
notification_list()->MarkSinglePopupAsDisplayed(id1);
@@ -581,15 +582,15 @@ TEST_F(NotificationListTest, MarkSinglePopupAsShown) {
notification_list()->MarkSinglePopupAsShown(id2, true);
notification_list()->MarkSinglePopupAsShown(id3, false);
- EXPECT_EQ(3u, notification_list()->NotificationCount());
- EXPECT_EQ(1u, notification_list()->unread_count());
+ EXPECT_EQ(3u, notification_list()->NotificationCount(blockers()));
+ EXPECT_EQ(1u, notification_list()->UnreadCount(blockers()));
EXPECT_EQ(1u, GetPopupCounts());
NotificationList::PopupNotifications popups = GetPopups();
EXPECT_EQ(id1, (*popups.begin())->id());
// The notifications in the NotificationCenter are unaffected by popups shown.
NotificationList::Notifications notifications =
- notification_list()->GetNotifications();
+ notification_list()->GetVisibleNotifications(blockers());
NotificationList::Notifications::const_iterator iter = notifications.begin();
EXPECT_EQ(id3, (*iter)->id());
iter++;
@@ -608,13 +609,13 @@ TEST_F(NotificationListTest, UpdateAfterMarkedAsShown) {
const Notification* n1 = GetNotification(id1);
EXPECT_FALSE(n1->shown_as_popup());
- EXPECT_TRUE(n1->is_read());
+ EXPECT_TRUE(n1->IsRead());
notification_list()->MarkSinglePopupAsShown(id1, true);
n1 = GetNotification(id1);
EXPECT_TRUE(n1->shown_as_popup());
- EXPECT_TRUE(n1->is_read());
+ EXPECT_TRUE(n1->IsRead());
const std::string replaced("test-replaced-id");
scoped_ptr<Notification> notification(
@@ -632,7 +633,7 @@ TEST_F(NotificationListTest, UpdateAfterMarkedAsShown) {
EXPECT_TRUE(n1 == NULL);
const Notification* nr = GetNotification(replaced);
EXPECT_TRUE(nr->shown_as_popup());
- EXPECT_TRUE(nr->is_read());
+ EXPECT_TRUE(nr->IsRead());
}
TEST_F(NotificationListTest, QuietMode) {
@@ -640,12 +641,12 @@ TEST_F(NotificationListTest, QuietMode) {
AddNotification();
AddPriorityNotification(HIGH_PRIORITY);
AddPriorityNotification(MAX_PRIORITY);
- EXPECT_EQ(3u, notification_list()->NotificationCount());
+ EXPECT_EQ(3u, notification_list()->NotificationCount(blockers()));
EXPECT_EQ(0u, GetPopupCounts());
notification_list()->SetQuietMode(false);
AddNotification();
- EXPECT_EQ(4u, notification_list()->NotificationCount());
+ EXPECT_EQ(4u, notification_list()->NotificationCount(blockers()));
EXPECT_EQ(1u, GetPopupCounts());
// TODO(mukai): Add test of quiet mode with expiration.
@@ -654,13 +655,13 @@ TEST_F(NotificationListTest, QuietMode) {
// Verifies that unread_count doesn't become negative.
TEST_F(NotificationListTest, UnreadCountNoNegative) {
std::string id = AddNotification();
- EXPECT_EQ(1u, notification_list()->unread_count());
+ EXPECT_EQ(1u, notification_list()->UnreadCount(blockers()));
notification_list()->MarkSinglePopupAsDisplayed(id);
- EXPECT_EQ(0u, notification_list()->unread_count());
+ EXPECT_EQ(0u, notification_list()->UnreadCount(blockers()));
notification_list()->MarkSinglePopupAsShown(
id, false /* mark_notification_as_read */);
- EXPECT_EQ(1u, notification_list()->unread_count());
+ EXPECT_EQ(1u, notification_list()->UnreadCount(blockers()));
// Updates the notification and verifies unread_count doesn't change.
scoped_ptr<Notification> updated_notification(new Notification(
@@ -674,7 +675,7 @@ TEST_F(NotificationListTest, UnreadCountNoNegative) {
RichNotificationData(),
NULL));
notification_list()->AddNotification(updated_notification.Pass());
- EXPECT_EQ(1u, notification_list()->unread_count());
+ EXPECT_EQ(1u, notification_list()->UnreadCount(blockers()));
}
TEST_F(NotificationListTest, TestPushingShownNotification) {
diff --git a/ui/message_center/notifier_settings.cc b/ui/message_center/notifier_settings.cc
index 861e65b651..950d9a7065 100644
--- a/ui/message_center/notifier_settings.cc
+++ b/ui/message_center/notifier_settings.cc
@@ -10,44 +10,30 @@ namespace message_center {
NotifierId::NotifierId(NotifierType type,
const std::string& id)
: type(type),
- id(id),
- system_component_type(-1) {
- DCHECK(type == APPLICATION || type == SYNCED_NOTIFICATION_SERVICE);
+ id(id) {
+ DCHECK(type != WEB_PAGE);
DCHECK(!id.empty());
}
NotifierId::NotifierId(const GURL& url)
: type(WEB_PAGE),
- url(url),
- system_component_type(-1) {}
-
-NotifierId::NotifierId(int type)
- : type(SYSTEM_COMPONENT),
- system_component_type(type) {
- DCHECK_LE(0, system_component_type);
-}
+ url(url) {}
NotifierId::NotifierId()
- : type(SYSTEM_COMPONENT),
- system_component_type(-1) {
+ : type(SYSTEM_COMPONENT) {
}
bool NotifierId::operator==(const NotifierId& other) const {
if (type != other.type)
return false;
- switch (type) {
- case WEB_PAGE:
- return url == other.url;
- case SYSTEM_COMPONENT:
- return system_component_type == other.system_component_type;
- case APPLICATION:
- case SYNCED_NOTIFICATION_SERVICE:
- return id == other.id;
- }
+ if (profile_id != other.profile_id)
+ return false;
+
+ if (type == WEB_PAGE)
+ return url == other.url;
- NOTREACHED();
- return false;
+ return id == other.id;
}
Notifier::Notifier(const NotifierId& notifier_id,
diff --git a/ui/message_center/notifier_settings.h b/ui/message_center/notifier_settings.h
index 911142794c..b14e72be96 100644
--- a/ui/message_center/notifier_settings.h
+++ b/ui/message_center/notifier_settings.h
@@ -7,12 +7,23 @@
#include <string>
+#include "base/gtest_prod_util.h"
#include "base/strings/string16.h"
#include "ui/gfx/image/image.h"
#include "ui/message_center/message_center_export.h"
#include "url/gurl.h"
+FORWARD_DECLARE_TEST(MessageCenterTrayBridgeTest,
+ StatusItemOnlyAfterFirstNotification);
+
+namespace ash {
+class WebNotificationTrayTest;
+}
+
namespace message_center {
+namespace test {
+class MessagePopupCollectionTest;
+}
class NotifierSettingsDelegate;
class NotifierSettingsProvider;
@@ -33,32 +44,41 @@ struct MESSAGE_CENTER_EXPORT NotifierId {
SYNCED_NOTIFICATION_SERVICE,
};
- // Constructor for APPLICATION and SYNCED_NOTIFICATION_SERVICE type.
+ // Constructor for non WEB_PAGE type.
NotifierId(NotifierType type, const std::string& id);
// Constructor for WEB_PAGE type.
explicit NotifierId(const GURL& url);
- // Constructor for system component types. The type should be positive.
- explicit NotifierId(int type);
-
- // The default constructor which doesn't specify the notifier. Used for tests.
- NotifierId();
-
bool operator==(const NotifierId& other) const;
NotifierType type;
- // The identifier of the app notifier. Empty if it's not APPLICATION or
- // SYNCED_NOTIFICATION_SERVICE.
+ // The identifier of the app notifier. Empty if it's WEB_PAGE.
std::string id;
// The URL pattern of the notifer.
GURL url;
- // The type of system component notifier, usually used in ash. -1 if it's not
- // the system component. See also: ash/system/system_notifier.h
- int system_component_type;
+ // The identifier of the profile where the notification is created. This is
+ // used for ChromeOS multi-profile support and can be empty.
+ std::string profile_id;
+
+ private:
+ friend class MessageCenterTrayTest;
+ friend class test::MessagePopupCollectionTest;
+ friend class NotificationControllerTest;
+ friend class PopupCollectionTest;
+ friend class TrayViewControllerTest;
+ friend class ash::WebNotificationTrayTest;
+ FRIEND_TEST_ALL_PREFIXES(::MessageCenterTrayBridgeTest,
+ StatusItemOnlyAfterFirstNotification);
+ FRIEND_TEST_ALL_PREFIXES(PopupControllerTest, Creation);
+ FRIEND_TEST_ALL_PREFIXES(NotificationListTest, UnreadCountNoNegative);
+ FRIEND_TEST_ALL_PREFIXES(NotificationListTest, TestHasNotificationOfType);
+
+ // The default constructor which doesn't specify the notifier. Used for tests.
+ NotifierId();
};
// The struct to hold the information of notifiers. The information will be
diff --git a/ui/message_center/views/bounded_label.cc b/ui/message_center/views/bounded_label.cc
index 852d583bce..2b8423b686 100644
--- a/ui/message_center/views/bounded_label.cc
+++ b/ui/message_center/views/bounded_label.cc
@@ -168,7 +168,6 @@ void InnerBoundedLabel::OnBoundsChanged(const gfx::Rect& previous_bounds) {
void InnerBoundedLabel::OnPaint(gfx::Canvas* canvas) {
views::Label::OnPaintBackground(canvas);
- views::Label::OnPaintFocusBorder(canvas);
views::Label::OnPaintBorder(canvas);
int lines = owner_->GetLineLimit();
int height = GetSizeForWidthAndLines(width(), lines).height();
diff --git a/ui/message_center/views/message_center_button_bar.cc b/ui/message_center/views/message_center_button_bar.cc
index ef8e1b4535..9eb7246ae7 100644
--- a/ui/message_center/views/message_center_button_bar.cc
+++ b/ui/message_center/views/message_center_button_bar.cc
@@ -24,6 +24,7 @@
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/grid_layout.h"
+#include "ui/views/painter.h"
namespace message_center {
@@ -50,7 +51,6 @@ class NotificationCenterButton : public views::ToggleImageButton {
protected:
// Overridden from views::View:
virtual gfx::Size GetPreferredSize() OVERRIDE;
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
private:
gfx::Size size_;
@@ -76,17 +76,14 @@ NotificationCenterButton::NotificationCenterButton(
set_focusable(true);
set_request_focus_on_press(false);
+
+ SetFocusPainter(views::Painter::CreateSolidFocusPainter(
+ kFocusBorderColor,
+ gfx::Insets(1, 2, 2, 2)));
}
gfx::Size NotificationCenterButton::GetPreferredSize() { return size_; }
-void NotificationCenterButton::OnPaintFocusBorder(gfx::Canvas* canvas) {
- if (HasFocus()) {
- canvas->DrawRect(gfx::Rect(2, 1, width() - 4, height() - 3),
- kFocusBorderColor);
- }
-}
-
// MessageCenterButtonBar /////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
MessageCenterButtonBar::MessageCenterButtonBar(
diff --git a/ui/message_center/views/message_center_focus_border.cc b/ui/message_center/views/message_center_focus_border.cc
deleted file mode 100644
index 90a4630d22..0000000000
--- a/ui/message_center/views/message_center_focus_border.cc
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/message_center/views/message_center_focus_border.h"
-
-#include "ui/gfx/canvas.h"
-#include "ui/gfx/rect.h"
-#include "ui/message_center/message_center_style.h"
-#include "ui/views/view.h"
-
-namespace message_center {
-
-MessageCenterFocusBorder::MessageCenterFocusBorder() {}
-
-MessageCenterFocusBorder::~MessageCenterFocusBorder() {}
-
-void MessageCenterFocusBorder::Paint(const views::View& view,
- gfx::Canvas* canvas) const {
- gfx::Rect rect(view.GetLocalBounds());
- rect.Inset(2, 1, 2, 3);
- canvas->DrawRect(rect, kFocusBorderColor);
-}
-
-} // namespace message_center
diff --git a/ui/message_center/views/message_center_focus_border.h b/ui/message_center/views/message_center_focus_border.h
deleted file mode 100644
index de49bae0e2..0000000000
--- a/ui/message_center/views/message_center_focus_border.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_MESSAGE_CENTER_VIEWS_MESSAGE_CENTER_FOCUS_BORDER_H_
-#define UI_MESSAGE_CENTER_VIEWS_MESSAGE_CENTER_FOCUS_BORDER_H_
-
-#include "ui/views/focus_border.h"
-#include "ui/views/view.h"
-
-namespace message_center {
-
-// Focus border class that draws a 1px blue border inset more on the bottom than
-// on the sides.
-class MessageCenterFocusBorder : public views::FocusBorder {
- public:
- MessageCenterFocusBorder();
- virtual ~MessageCenterFocusBorder();
-
- private:
- // views::FocusBorder overrides:
- virtual void Paint(const views::View& view, gfx::Canvas* canvas) const
- OVERRIDE;
-
- DISALLOW_COPY_AND_ASSIGN(MessageCenterFocusBorder);
-};
-
-} // namespace message_center
-
-#endif // UI_MESSAGE_CENTER_VIEWS_MESSAGE_CENTER_FOCUS_BORDER_H_
diff --git a/ui/message_center/views/message_center_view.cc b/ui/message_center/views/message_center_view.cc
index d176ff73e2..44a0a9dae2 100644
--- a/ui/message_center/views/message_center_view.cc
+++ b/ui/message_center/views/message_center_view.cc
@@ -78,8 +78,6 @@ BoundedScrollView::BoundedScrollView(int min_height, int max_height)
: min_height_(min_height),
max_height_(max_height) {
set_notify_enter_exit_on_child(true);
- // Cancels the default dashed focus border.
- set_focus_border(NULL);
set_background(
views::Background::CreateSolidBackground(kMessageCenterBackgroundColor));
SetVerticalScrollBar(new views::OverlayScrollBar(false));
@@ -739,7 +737,7 @@ void MessageCenterView::OnAllNotificationsCleared() {
scroller_->SetEnabled(true);
button_bar_->SetAllButtonsEnabled(true);
button_bar_->SetCloseAllButtonEnabled(false);
- message_center_->RemoveAllNotifications(true); // Action by user.
+ message_center_->RemoveAllVisibleNotifications(true); // Action by user.
}
size_t MessageCenterView::NumMessageViewsForTest() const {
diff --git a/ui/message_center/views/message_popup_collection.cc b/ui/message_center/views/message_popup_collection.cc
index 541963e602..2474ad00e6 100644
--- a/ui/message_center/views/message_popup_collection.cc
+++ b/ui/message_center/views/message_popup_collection.cc
@@ -101,6 +101,10 @@ MessagePopupCollection::~MessagePopupCollection() {
screen->RemoveObserver(this);
message_center_->RemoveObserver(this);
+ CloseAllWidgets();
+}
+
+void MessagePopupCollection::MarkAllPopupsShown() {
std::set<std::string> closed_ids = CloseAllWidgets();
for (std::set<std::string>::iterator iter = closed_ids.begin();
iter != closed_ids.end(); iter++) {
diff --git a/ui/message_center/views/message_popup_collection.h b/ui/message_center/views/message_popup_collection.h
index d5ab32b163..9c7d617396 100644
--- a/ui/message_center/views/message_popup_collection.h
+++ b/ui/message_center/views/message_popup_collection.h
@@ -68,6 +68,8 @@ class MESSAGE_CENTER_EXPORT MessagePopupCollection
bool first_item_has_no_margin);
virtual ~MessagePopupCollection();
+ void MarkAllPopupsShown();
+
// Since these events are really coming from individual toast widgets,
// it helps to be able to keep track of the sender.
void OnMouseEntered(ToastContentsView* toast_entered);
diff --git a/ui/message_center/views/message_view.cc b/ui/message_center/views/message_view.cc
index 56e2202214..856231bae2 100644
--- a/ui/message_center/views/message_view.cc
+++ b/ui/message_center/views/message_view.cc
@@ -20,6 +20,7 @@
#include "ui/views/controls/button/image_button.h"
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/controls/scroll_view.h"
+#include "ui/views/painter.h"
#include "ui/views/shadow_border.h"
#include "ui/views/widget/widget.h"
@@ -171,6 +172,10 @@ MessageView::MessageView(const string16& display_source)
close->SetAccessibleName(l10n_util::GetStringUTF16(
IDS_MESSAGE_CENTER_CLOSE_NOTIFICATION_BUTTON_ACCESSIBLE_NAME));
close_button_.reset(close);
+
+ focus_painter_ = views::Painter::CreateSolidFocusPainter(
+ kFocusBorderColor,
+ gfx::Insets(0, 1, 3, 2)).Pass();
}
MessageView::~MessageView() {
@@ -239,6 +244,23 @@ bool MessageView::OnKeyReleased(const ui::KeyEvent& event) {
return true;
}
+void MessageView::OnPaint(gfx::Canvas* canvas) {
+ SlideOutView::OnPaint(canvas);
+ views::Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
+}
+
+void MessageView::OnFocus() {
+ SlideOutView::OnFocus();
+ // We paint a focus indicator.
+ SchedulePaint();
+}
+
+void MessageView::OnBlur() {
+ SlideOutView::OnBlur();
+ // We paint a focus indicator.
+ SchedulePaint();
+}
+
void MessageView::OnGestureEvent(ui::GestureEvent* event) {
if (event->type() == ui::ET_GESTURE_TAP) {
ClickOnNotification();
@@ -259,13 +281,6 @@ void MessageView::OnGestureEvent(ui::GestureEvent* event) {
event->SetHandled();
}
-void MessageView::OnPaintFocusBorder(gfx::Canvas* canvas) {
- if (HasFocus()) {
- canvas->DrawRect(gfx::Rect(1, 0, width() - 2, height() - 2),
- message_center::kFocusBorderColor);
- }
-}
-
void MessageView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
if (sender == close_button()) {
diff --git a/ui/message_center/views/message_view.h b/ui/message_center/views/message_view.h
index 961c050c56..341e9adbf8 100644
--- a/ui/message_center/views/message_view.h
+++ b/ui/message_center/views/message_view.h
@@ -5,6 +5,7 @@
#ifndef UI_MESSAGE_CENTER_VIEWS_MESSAGE_VIEW_H_
#define UI_MESSAGE_CENTER_VIEWS_MESSAGE_VIEW_H_
+#include "base/memory/scoped_ptr.h"
#include "base/strings/string16.h"
#include "ui/gfx/insets.h"
#include "ui/message_center/message_center_export.h"
@@ -14,6 +15,7 @@
namespace views {
class ImageButton;
+class Painter;
class ScrollView;
}
@@ -58,7 +60,9 @@ class MESSAGE_CENTER_EXPORT MessageView : public views::SlideOutView,
virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE;
virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE;
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
// Overridden from ui::EventHandler:
virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
@@ -83,6 +87,8 @@ class MESSAGE_CENTER_EXPORT MessageView : public views::SlideOutView,
string16 accessible_name_;
+ scoped_ptr<views::Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(MessageView);
};
diff --git a/ui/message_center/views/notification_view.cc b/ui/message_center/views/notification_view.cc
index bcd1ea9ff9..0531a0f263 100644
--- a/ui/message_center/views/notification_view.cc
+++ b/ui/message_center/views/notification_view.cc
@@ -26,12 +26,15 @@
#include "ui/message_center/views/bounded_label.h"
#include "ui/message_center/views/padded_button.h"
#include "ui/native_theme/native_theme.h"
+#include "ui/views/background.h"
+#include "ui/views/border.h"
#include "ui/views/controls/button/image_button.h"
#include "ui/views/controls/image_view.h"
#include "ui/views/controls/label.h"
#include "ui/views/controls/progress_bar.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/fill_layout.h"
+#include "ui/views/painter.h"
#include "ui/views/widget/widget.h"
#if defined(USE_AURA)
@@ -321,8 +324,9 @@ class NotificationButton : public views::CustomButton {
// Overridden from views::View:
virtual gfx::Size GetPreferredSize() OVERRIDE;
virtual int GetHeightForWidth(int width) OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
virtual void OnFocus() OVERRIDE;
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
// Overridden from views::CustomButton:
virtual void StateChanged() OVERRIDE;
@@ -330,12 +334,18 @@ class NotificationButton : public views::CustomButton {
private:
views::ImageView* icon_;
views::Label* title_;
+ scoped_ptr<views::Painter> focus_painter_;
+
+ DISALLOW_COPY_AND_ASSIGN(NotificationButton);
};
NotificationButton::NotificationButton(views::ButtonListener* listener)
: views::CustomButton(listener),
icon_(NULL),
- title_(NULL) {
+ title_(NULL),
+ focus_painter_(views::Painter::CreateSolidFocusPainter(
+ message_center::kFocusBorderColor,
+ gfx::Insets(1, 2, 2, 2))) {
set_focusable(true);
set_request_focus_on_press(false);
set_notify_enter_exit_on_child(true);
@@ -392,16 +402,22 @@ int NotificationButton::GetHeightForWidth(int width) {
return message_center::kButtonHeight;
}
+void NotificationButton::OnPaint(gfx::Canvas* canvas) {
+ CustomButton::OnPaint(canvas);
+ views::Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
+}
+
void NotificationButton::OnFocus() {
views::CustomButton::OnFocus();
ScrollRectToVisible(GetLocalBounds());
+ // We render differently when focused.
+ SchedulePaint();
}
-void NotificationButton::OnPaintFocusBorder(gfx::Canvas* canvas) {
- if (HasFocus()) {
- canvas->DrawRect(gfx::Rect(2, 1, width() - 4, height() - 3),
- message_center::kFocusBorderColor);
- }
+void NotificationButton::OnBlur() {
+ views::CustomButton::OnBlur();
+ // We render differently when focused.
+ SchedulePaint();
}
void NotificationButton::StateChanged() {
diff --git a/ui/message_center/views/notifier_settings_view.cc b/ui/message_center/views/notifier_settings_view.cc
index 47af26016c..399283b7b5 100644
--- a/ui/message_center/views/notifier_settings_view.cc
+++ b/ui/message_center/views/notifier_settings_view.cc
@@ -21,7 +21,6 @@
#include "ui/gfx/image/image.h"
#include "ui/gfx/size.h"
#include "ui/message_center/message_center_style.h"
-#include "ui/message_center/views/message_center_focus_border.h"
#include "ui/message_center/views/message_center_view.h"
#include "ui/views/background.h"
#include "ui/views/border.h"
@@ -39,6 +38,7 @@
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/fill_layout.h"
#include "ui/views/layout/grid_layout.h"
+#include "ui/views/painter.h"
#include "ui/views/widget/widget.h"
#if defined(USE_AURA)
@@ -124,6 +124,11 @@ const int kComputedTitleTopMargin =
const int kComputedTitleElementSpacing =
settings::kDescriptionToSwitcherSpace - kButtonPainterInsets - 1;
+// A function to create a focus border.
+scoped_ptr<views::Painter> CreateFocusPainter() {
+ return views::Painter::CreateSolidFocusPainter(kFocusBorderColor,
+ gfx::Insets(1, 2, 3, 2));
+}
// EntryView ------------------------------------------------------------------
@@ -131,7 +136,7 @@ const int kComputedTitleElementSpacing =
// middle. It also guarantee the left margin.
class EntryView : public views::View {
public:
- EntryView(views::View* contents);
+ explicit EntryView(views::View* contents);
virtual ~EntryView();
// views::View:
@@ -141,13 +146,17 @@ class EntryView : public views::View {
virtual void OnFocus() OVERRIDE;
virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE;
virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
private:
+ scoped_ptr<views::Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(EntryView);
};
-EntryView::EntryView(views::View* contents) {
- set_focus_border(new MessageCenterFocusBorder());
+EntryView::EntryView(views::View* contents)
+ : focus_painter_(CreateFocusPainter()) {
AddChildView(contents);
}
@@ -177,6 +186,8 @@ void EntryView::GetAccessibleState(ui::AccessibleViewState* state) {
void EntryView::OnFocus() {
views::View::OnFocus();
ScrollRectToVisible(GetLocalBounds());
+ // We render differently when focused.
+ SchedulePaint();
}
bool EntryView::OnKeyPressed(const ui::KeyEvent& event) {
@@ -187,6 +198,17 @@ bool EntryView::OnKeyReleased(const ui::KeyEvent& event) {
return child_at(0)->OnKeyReleased(event);
}
+void EntryView::OnPaint(gfx::Canvas* canvas) {
+ View::OnPaint(canvas);
+ views::Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
+}
+
+void EntryView::OnBlur() {
+ View::OnBlur();
+ // We render differently when focused.
+ SchedulePaint();
+}
+
} // namespace
@@ -290,7 +312,7 @@ NotifierSettingsView::NotifierButton::NotifierButton(
if (ShouldHaveLearnMoreButton()) {
// Create a more-info button that will be right-aligned.
learn_more_ = new views::ImageButton(this);
- learn_more_->set_focus_border(new MessageCenterFocusBorder());
+ learn_more_->SetFocusPainter(CreateFocusPainter());
learn_more_->set_request_focus_on_press(false);
learn_more_->set_focusable(true);
@@ -462,7 +484,6 @@ NotifierSettingsView::NotifierSettingsView(NotifierSettingsProvider* provider)
provider_->AddObserver(this);
set_focusable(true);
- set_focus_border(NULL);
set_background(
views::Background::CreateSolidBackground(kMessageCenterBackgroundColor));
if (get_use_acceleration_when_possible())
@@ -578,7 +599,7 @@ void NotifierSettingsView::UpdateContentsView(
kMenuButtonVerticalPadding, kMenuButtonLeftPadding,
kMenuButtonVerticalPadding, kMenuButtonRightPadding));
notifier_group_selector_->set_border(selector_border.release());
- notifier_group_selector_->set_focus_border(NULL);
+ notifier_group_selector_->SetFocusPainter(scoped_ptr<views::Painter>());
notifier_group_selector_->set_animate_on_state_change(false);
notifier_group_selector_->set_focusable(true);
contents_title_view->AddChildView(notifier_group_selector_);
diff --git a/ui/message_center/views/padded_button.cc b/ui/message_center/views/padded_button.cc
index 950e133aca..cb7810be65 100644
--- a/ui/message_center/views/padded_button.cc
+++ b/ui/message_center/views/padded_button.cc
@@ -9,13 +9,17 @@
#include "ui/gfx/canvas.h"
#include "ui/message_center/message_center_style.h"
#include "ui/views/controls/button/image_button.h"
+#include "ui/views/painter.h"
namespace message_center {
PaddedButton::PaddedButton(views::ButtonListener* listener)
- : views::ImageButton(listener) {
+ : views::ImageButton(listener) {
set_focusable(true);
set_request_focus_on_press(false);
+ SetFocusPainter(views::Painter::CreateSolidFocusPainter(
+ kFocusBorderColor,
+ gfx::Insets(1, 2, 2, 2)));
}
PaddedButton::~PaddedButton() {
@@ -65,7 +69,7 @@ void PaddedButton::OnPaint(gfx::Canvas* canvas) {
if (!overlay_image_.isNull())
canvas->DrawImageInt(overlay_image_, position.x(), position.y());
}
- OnPaintFocusBorder(canvas);
+ views::Painter::PaintFocusPainter(this, canvas, focus_painter());
}
void PaddedButton::OnFocus() {
@@ -73,13 +77,6 @@ void PaddedButton::OnFocus() {
ScrollRectToVisible(GetLocalBounds());
}
-void PaddedButton::OnPaintFocusBorder(gfx::Canvas* canvas) {
- if (HasFocus()) {
- canvas->DrawRect(gfx::Rect(2, 1, width() - 4, height() - 3),
- message_center::kFocusBorderColor);
- }
-}
-
gfx::Point PaddedButton::ComputePaddedImagePaintPosition(
const gfx::ImageSkia& image) {
gfx::Vector2d offset;
diff --git a/ui/message_center/views/padded_button.h b/ui/message_center/views/padded_button.h
index b484ab4104..04ae5c1d36 100644
--- a/ui/message_center/views/padded_button.h
+++ b/ui/message_center/views/padded_button.h
@@ -27,7 +27,6 @@ class PaddedButton : public views::ImageButton {
virtual gfx::Size GetPreferredSize() OVERRIDE;
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
virtual void OnFocus() OVERRIDE;
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
// The SetPadding() method also sets the button's image alignment (positive
// values yield left/top alignments, negative values yield right/bottom ones,
diff --git a/ui/message_center/views/toast_contents_view.cc b/ui/message_center/views/toast_contents_view.cc
index 53c96f904e..7ac18430c5 100644
--- a/ui/message_center/views/toast_contents_view.cc
+++ b/ui/message_center/views/toast_contents_view.cc
@@ -19,6 +19,7 @@
#include "ui/message_center/notification.h"
#include "ui/message_center/views/message_popup_collection.h"
#include "ui/message_center/views/message_view.h"
+#include "ui/views/background.h"
#include "ui/views/view.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h"
diff --git a/ui/metro_viewer/metro_viewer_messages.h b/ui/metro_viewer/metro_viewer_messages.h
index 3cddb2e6fa..d562461c91 100644
--- a/ui/metro_viewer/metro_viewer_messages.h
+++ b/ui/metro_viewer/metro_viewer_messages.h
@@ -97,8 +97,9 @@ IPC_MESSAGE_CONTROL0(MetroViewerHostMsg_ActivateDesktopDone)
// Messages sent from the browser to the viewer:
// Requests the viewer to activate desktop mode.
-IPC_MESSAGE_CONTROL1(MetroViewerHostMsg_ActivateDesktop,
- base::FilePath /* shortcut */);
+IPC_MESSAGE_CONTROL2(MetroViewerHostMsg_ActivateDesktop,
+ base::FilePath /* shortcut */,
+ bool /* ash exit */);
// Requests the viewer to open a URL in desktop mode.
IPC_MESSAGE_CONTROL2(MetroViewerHostMsg_OpenURLOnDesktop,
diff --git a/ui/native_theme/native_theme.target.darwin-arm.mk b/ui/native_theme/native_theme.target.darwin-arm.mk
index 5f1c2a745d..6d1f3fe8b8 100644
--- a/ui/native_theme/native_theme.target.darwin-arm.mk
+++ b/ui/native_theme/native_theme.target.darwin-arm.mk
@@ -69,6 +69,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -78,9 +79,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DNATIVE_THEME_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -109,8 +112,8 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
@@ -180,6 +183,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -189,9 +193,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DNATIVE_THEME_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -221,8 +227,8 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
diff --git a/ui/native_theme/native_theme.target.darwin-mips.mk b/ui/native_theme/native_theme.target.darwin-mips.mk
index a1e9895278..731d7931f0 100644
--- a/ui/native_theme/native_theme.target.darwin-mips.mk
+++ b/ui/native_theme/native_theme.target.darwin-mips.mk
@@ -68,6 +68,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -77,9 +78,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DNATIVE_THEME_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -108,8 +111,8 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
@@ -178,6 +181,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -187,9 +191,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DNATIVE_THEME_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -219,8 +225,8 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
diff --git a/ui/native_theme/native_theme.target.darwin-x86.mk b/ui/native_theme/native_theme.target.darwin-x86.mk
index ca49aeeec0..94de75cfe3 100644
--- a/ui/native_theme/native_theme.target.darwin-x86.mk
+++ b/ui/native_theme/native_theme.target.darwin-x86.mk
@@ -71,6 +71,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -80,9 +81,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DNATIVE_THEME_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -110,8 +113,8 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
@@ -184,6 +187,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -193,9 +197,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DNATIVE_THEME_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -224,8 +230,8 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
diff --git a/ui/native_theme/native_theme.target.linux-arm.mk b/ui/native_theme/native_theme.target.linux-arm.mk
index 5f1c2a745d..6d1f3fe8b8 100644
--- a/ui/native_theme/native_theme.target.linux-arm.mk
+++ b/ui/native_theme/native_theme.target.linux-arm.mk
@@ -69,6 +69,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -78,9 +79,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DNATIVE_THEME_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -109,8 +112,8 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
@@ -180,6 +183,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -189,9 +193,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DNATIVE_THEME_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -221,8 +227,8 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
diff --git a/ui/native_theme/native_theme.target.linux-mips.mk b/ui/native_theme/native_theme.target.linux-mips.mk
index a1e9895278..731d7931f0 100644
--- a/ui/native_theme/native_theme.target.linux-mips.mk
+++ b/ui/native_theme/native_theme.target.linux-mips.mk
@@ -68,6 +68,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -77,9 +78,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DNATIVE_THEME_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -108,8 +111,8 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
@@ -178,6 +181,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -187,9 +191,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DNATIVE_THEME_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -219,8 +225,8 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
diff --git a/ui/native_theme/native_theme.target.linux-x86.mk b/ui/native_theme/native_theme.target.linux-x86.mk
index ca49aeeec0..94de75cfe3 100644
--- a/ui/native_theme/native_theme.target.linux-x86.mk
+++ b/ui/native_theme/native_theme.target.linux-x86.mk
@@ -71,6 +71,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -80,9 +81,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DNATIVE_THEME_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -110,8 +113,8 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
@@ -184,6 +187,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -193,9 +197,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DNATIVE_THEME_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -224,8 +230,8 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
diff --git a/ui/oak/oak_aura_window_display.cc b/ui/oak/oak_aura_window_display.cc
index 18323f8766..e751a33239 100644
--- a/ui/oak/oak_aura_window_display.cc
+++ b/ui/oak/oak_aura_window_display.cc
@@ -99,7 +99,7 @@ int OakAuraWindowDisplay::RowCount() {
base::string16 OakAuraWindowDisplay::GetText(int row, int column_id) {
if (!window_)
- return EmptyString16();
+ return base::string16();
base::string16 text;
switch (row) {
@@ -153,7 +153,7 @@ base::string16 OakAuraWindowDisplay::GetText(int row, int column_id) {
NOTREACHED();
break;
}
- return EmptyString16();
+ return base::string16();
}
void OakAuraWindowDisplay::SetObserver(ui::TableModelObserver* observer) {
diff --git a/ui/resources/default_100_percent/common/app_list_mic_off.png b/ui/resources/default_100_percent/common/app_list_mic_off.png
new file mode 100644
index 0000000000..a749134851
--- /dev/null
+++ b/ui/resources/default_100_percent/common/app_list_mic_off.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/app_list_mic_on.png b/ui/resources/default_100_percent/common/app_list_mic_on.png
new file mode 100644
index 0000000000..49a2c33b06
--- /dev/null
+++ b/ui/resources/default_100_percent/common/app_list_mic_on.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/app_list_mic_recording.png b/ui/resources/default_100_percent/common/app_list_mic_recording.png
new file mode 100644
index 0000000000..fa68422e31
--- /dev/null
+++ b/ui/resources/default_100_percent/common/app_list_mic_recording.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom.png b/ui/resources/default_100_percent/common/combobox_button_bottom.png
new file mode 100644
index 0000000000..a34d777d42
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_bottom.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png b/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png
new file mode 100644
index 0000000000..4212716f7e
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_left.png b/ui/resources/default_100_percent/common/combobox_button_bottom_left.png
new file mode 100644
index 0000000000..0720ae3bed
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_bottom_left.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png b/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png
new file mode 100644
index 0000000000..1ecabdeb72
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png b/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png
new file mode 100644
index 0000000000..632f8d2859
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png b/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png
new file mode 100644
index 0000000000..bcfa9c27a6
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_right.png b/ui/resources/default_100_percent/common/combobox_button_bottom_right.png
new file mode 100644
index 0000000000..9f94872271
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_bottom_right.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png b/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png
new file mode 100644
index 0000000000..8938a40c0c
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png b/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png
new file mode 100644
index 0000000000..bcfa9c27a6
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_center.png b/ui/resources/default_100_percent/common/combobox_button_center.png
new file mode 100644
index 0000000000..31458478a1
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_center.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_center_hover.png b/ui/resources/default_100_percent/common/combobox_button_center_hover.png
new file mode 100644
index 0000000000..311daf2a7c
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_center_hover.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_center_left.png b/ui/resources/default_100_percent/common/combobox_button_center_left.png
new file mode 100644
index 0000000000..8e1afddd71
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_center_left.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png b/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png
new file mode 100644
index 0000000000..fdc8e6d21b
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png b/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png
new file mode 100644
index 0000000000..15677552f3
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_center_pressed.png b/ui/resources/default_100_percent/common/combobox_button_center_pressed.png
new file mode 100644
index 0000000000..5eb0a49994
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_center_pressed.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_center_right.png b/ui/resources/default_100_percent/common/combobox_button_center_right.png
new file mode 100644
index 0000000000..c29018e4a9
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_center_right.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png b/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png
new file mode 100644
index 0000000000..019adfc260
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png b/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png
new file mode 100644
index 0000000000..5eb0a49994
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png b/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png
new file mode 100644
index 0000000000..2d013b652b
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png b/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png
new file mode 100644
index 0000000000..ba2d03092d
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png b/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png
new file mode 100644
index 0000000000..4cc5330965
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_center.png b/ui/resources/default_100_percent/common/combobox_button_menu_center.png
new file mode 100644
index 0000000000..b90dee5682
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_menu_center.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png b/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png
new file mode 100644
index 0000000000..d1bc24342a
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png b/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png
new file mode 100644
index 0000000000..16ac060f05
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_top.png b/ui/resources/default_100_percent/common/combobox_button_menu_top.png
new file mode 100644
index 0000000000..8633cd2906
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_menu_top.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png b/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png
new file mode 100644
index 0000000000..73e2871241
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png b/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png
new file mode 100644
index 0000000000..f98fae470e
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_top.png b/ui/resources/default_100_percent/common/combobox_button_top.png
new file mode 100644
index 0000000000..90eeee3ef8
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_top.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_top_hover.png b/ui/resources/default_100_percent/common/combobox_button_top_hover.png
new file mode 100644
index 0000000000..8da4ee405f
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_top_hover.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_top_left.png b/ui/resources/default_100_percent/common/combobox_button_top_left.png
new file mode 100644
index 0000000000..2070bef78d
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_top_left.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png b/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png
new file mode 100644
index 0000000000..98f3b4a6aa
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png b/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png
new file mode 100644
index 0000000000..3baba2b75e
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_top_pressed.png b/ui/resources/default_100_percent/common/combobox_button_top_pressed.png
new file mode 100644
index 0000000000..c8a05608d9
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_top_pressed.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_top_right.png b/ui/resources/default_100_percent/common/combobox_button_top_right.png
new file mode 100644
index 0000000000..aaa309b0ba
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_top_right.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png b/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png
new file mode 100644
index 0000000000..24d26d5c4e
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png b/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png
new file mode 100644
index 0000000000..c8a05608d9
--- /dev/null
+++ b/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png
Binary files differ
diff --git a/ui/resources/default_100_percent/common/password_undo_arrow.png b/ui/resources/default_100_percent/common/password_undo_arrow.png
deleted file mode 100644
index 4b88067429..0000000000
--- a/ui/resources/default_100_percent/common/password_undo_arrow.png
+++ /dev/null
Binary files differ
diff --git a/ui/resources/default_200_percent/common/app_list_mic_off.png b/ui/resources/default_200_percent/common/app_list_mic_off.png
new file mode 100644
index 0000000000..4bf6416a82
--- /dev/null
+++ b/ui/resources/default_200_percent/common/app_list_mic_off.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/app_list_mic_on.png b/ui/resources/default_200_percent/common/app_list_mic_on.png
new file mode 100644
index 0000000000..66ffa2708e
--- /dev/null
+++ b/ui/resources/default_200_percent/common/app_list_mic_on.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/app_list_mic_recording.png b/ui/resources/default_200_percent/common/app_list_mic_recording.png
new file mode 100644
index 0000000000..3a55e7157a
--- /dev/null
+++ b/ui/resources/default_200_percent/common/app_list_mic_recording.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom.png b/ui/resources/default_200_percent/common/combobox_button_bottom.png
new file mode 100644
index 0000000000..347a8c5b74
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_bottom.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png b/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png
new file mode 100644
index 0000000000..ff8490eea6
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_left.png b/ui/resources/default_200_percent/common/combobox_button_bottom_left.png
new file mode 100644
index 0000000000..ca074d8160
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_bottom_left.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png b/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png
new file mode 100644
index 0000000000..8484e3ab74
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png b/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png
new file mode 100644
index 0000000000..d0eb1d5b06
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png b/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png
new file mode 100644
index 0000000000..e408d96838
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_right.png b/ui/resources/default_200_percent/common/combobox_button_bottom_right.png
new file mode 100644
index 0000000000..da8dac41f7
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_bottom_right.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png b/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png
new file mode 100644
index 0000000000..abdf403839
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png b/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png
new file mode 100644
index 0000000000..6ae7944f75
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_center.png b/ui/resources/default_200_percent/common/combobox_button_center.png
new file mode 100644
index 0000000000..4e12e60d6f
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_center.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_center_hover.png b/ui/resources/default_200_percent/common/combobox_button_center_hover.png
new file mode 100644
index 0000000000..238dd4ca54
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_center_hover.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_center_left.png b/ui/resources/default_200_percent/common/combobox_button_center_left.png
new file mode 100644
index 0000000000..8b5e3f8582
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_center_left.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png b/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png
new file mode 100644
index 0000000000..ff755aba4f
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png b/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png
new file mode 100644
index 0000000000..4d9ede747c
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_center_pressed.png b/ui/resources/default_200_percent/common/combobox_button_center_pressed.png
new file mode 100644
index 0000000000..ed2240fdf1
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_center_pressed.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_center_right.png b/ui/resources/default_200_percent/common/combobox_button_center_right.png
new file mode 100644
index 0000000000..41b32bb5f1
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_center_right.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png b/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png
new file mode 100644
index 0000000000..f198aed475
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png b/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png
new file mode 100644
index 0000000000..ed2240fdf1
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png b/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png
new file mode 100644
index 0000000000..0918a33ad7
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png b/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png
new file mode 100644
index 0000000000..fd822b01a0
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png b/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png
new file mode 100644
index 0000000000..6e7249b987
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_center.png b/ui/resources/default_200_percent/common/combobox_button_menu_center.png
new file mode 100644
index 0000000000..f115e943c2
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_menu_center.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png b/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png
new file mode 100644
index 0000000000..b93c29e0f5
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png b/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png
new file mode 100644
index 0000000000..1924c53ff9
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_top.png b/ui/resources/default_200_percent/common/combobox_button_menu_top.png
new file mode 100644
index 0000000000..a0b8bff9cd
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_menu_top.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png b/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png
new file mode 100644
index 0000000000..f071c91fd3
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png b/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png
new file mode 100644
index 0000000000..1cf11228bd
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_top.png b/ui/resources/default_200_percent/common/combobox_button_top.png
new file mode 100644
index 0000000000..06e5293341
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_top.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_top_hover.png b/ui/resources/default_200_percent/common/combobox_button_top_hover.png
new file mode 100644
index 0000000000..86bbd146fd
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_top_hover.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_top_left.png b/ui/resources/default_200_percent/common/combobox_button_top_left.png
new file mode 100644
index 0000000000..3da3b163ee
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_top_left.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png b/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png
new file mode 100644
index 0000000000..11ec5e91ba
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png b/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png
new file mode 100644
index 0000000000..965f4e8386
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_top_pressed.png b/ui/resources/default_200_percent/common/combobox_button_top_pressed.png
new file mode 100644
index 0000000000..10a468d33f
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_top_pressed.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_top_right.png b/ui/resources/default_200_percent/common/combobox_button_top_right.png
new file mode 100644
index 0000000000..010f8b58ce
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_top_right.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png b/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png
new file mode 100644
index 0000000000..3ade75c498
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png b/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png
new file mode 100644
index 0000000000..10a468d33f
--- /dev/null
+++ b/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/password_undo_arrow.png b/ui/resources/default_200_percent/common/password_undo_arrow.png
deleted file mode 100644
index 99fd22435e..0000000000
--- a/ui/resources/default_200_percent/common/password_undo_arrow.png
+++ /dev/null
Binary files differ
diff --git a/ui/resources/ui_resources.grd b/ui/resources/ui_resources.grd
index 3fd1115229..6a550cb909 100644
--- a/ui/resources/ui_resources.grd
+++ b/ui/resources/ui_resources.grd
@@ -26,6 +26,9 @@
<structure type="chrome_scaled_image" name="IDR_APP_LIST_TOOLS_NORMAL" file="common/app_list_tools_normal.png" />
<structure type="chrome_scaled_image" name="IDR_APP_LIST_TOOLS_PRESSED" file="common/app_list_tools_pressed.png" />
<structure type="chrome_scaled_image" name="IDR_APP_LIST_FOLDER_BACK_NORMAL" file="common/app_list_folder_back_normal.png" />
+ <structure type="chrome_scaled_image" name="IDR_APP_LIST_SPEECH_MIC_ON" file="common/app_list_mic_on.png" />
+ <structure type="chrome_scaled_image" name="IDR_APP_LIST_SPEECH_MIC_OFF" file="common/app_list_mic_off.png" />
+ <structure type="chrome_scaled_image" name="IDR_APP_LIST_SPEECH_MIC_RECORDING" file="common/app_list_mic_recording.png" />
<if expr="is_win">
<structure type="chrome_scaled_image" name="IDR_APP_LIST_USER_INDICATOR" file="win/app_list_user_indicator.png" />
</if>
@@ -207,6 +210,42 @@
<structure type="chrome_scaled_image" name="IDR_CLOSE_SA_H" file="close_sa_hover.png" />
<structure type="chrome_scaled_image" name="IDR_CLOSE_SA_P" file="close_sa_pressed.png" />
</if>
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_BOTTOM" file="common/combobox_button_bottom.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_BOTTOM" file="common/combobox_button_bottom_hover.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_BOTTOM" file="common/combobox_button_bottom_pressed.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_BOTTOM_LEFT" file="common/combobox_button_bottom_left.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_BOTTOM_LEFT" file="common/combobox_button_bottom_left_hover.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_BOTTOM_LEFT" file="common/combobox_button_bottom_left_pressed.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_BOTTOM_RIGHT" file="common/combobox_button_bottom_right.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_BOTTOM_RIGHT" file="common/combobox_button_bottom_right_hover.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_BOTTOM_RIGHT" file="common/combobox_button_bottom_right_pressed.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_CENTER" file="common/combobox_button_center.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_CENTER" file="common/combobox_button_center_hover.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_CENTER" file="common/combobox_button_center_pressed.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_LEFT" file="common/combobox_button_center_left.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_LEFT" file="common/combobox_button_center_left_hover.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_LEFT" file="common/combobox_button_center_left_pressed.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_RIGHT" file="common/combobox_button_center_right.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_RIGHT" file="common/combobox_button_center_right_hover.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_RIGHT" file="common/combobox_button_center_right_pressed.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_MENU_BOTTOM" file="common/combobox_button_menu_bottom.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_MENU_BOTTOM" file="common/combobox_button_menu_bottom_hover.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_MENU_BOTTOM" file="common/combobox_button_menu_bottom_pressed.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_MENU_CENTER" file="common/combobox_button_menu_center.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_MENU_CENTER" file="common/combobox_button_menu_center_hover.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_MENU_CENTER" file="common/combobox_button_menu_center_pressed.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_MENU_TOP" file="common/combobox_button_menu_top.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_MENU_TOP" file="common/combobox_button_menu_top_hover.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_MENU_TOP" file="common/combobox_button_menu_top_pressed.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_TOP" file="common/combobox_button_top.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_TOP" file="common/combobox_button_top_hover.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_TOP" file="common/combobox_button_top_pressed.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_TOP_LEFT" file="common/combobox_button_top_left.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_TOP_LEFT" file="common/combobox_button_top_left_hover.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_TOP_LEFT" file="common/combobox_button_top_left_pressed.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_TOP_RIGHT" file="common/combobox_button_top_right.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_H_TOP_RIGHT" file="common/combobox_button_top_right_hover.png" />
+ <structure type="chrome_scaled_image" name="IDR_COMBOBOX_BUTTON_P_TOP_RIGHT" file="common/combobox_button_top_right_pressed.png" />
<structure type="chrome_scaled_image" name="IDR_CONTENT_BOTTOM_CENTER" file="content_bottom_center.png" />
<structure type="chrome_scaled_image" name="IDR_CONTENT_BOTTOM_LEFT_CORNER" file="content_bottom_left_corner.png" />
<structure type="chrome_scaled_image" name="IDR_CONTENT_BOTTOM_RIGHT_CORNER" file="content_bottom_right_corner.png" />
@@ -308,7 +347,6 @@
<structure type="chrome_scaled_image" name="IDR_PANEL_TOP_RIGHT_CORNER" file="panel_top_right_corner.png" />
<structure type="chrome_scaled_image" name="IDR_PANEL_BOTTOM_LEFT_CORNER" file="panel_bottom_left_corner.png" />
<structure type="chrome_scaled_image" name="IDR_PANEL_BOTTOM_RIGHT_CORNER" file="panel_bottom_right_corner.png" />
- <structure type="chrome_scaled_image" name="IDR_PASSWORD_UNDO_ARROW" file="common/password_undo_arrow.png" />
<if expr="is_posix and not is_macosx and not is_ios and not pp_ifdef('use_aura')">
<structure type="chrome_scaled_image" name="IDR_PROGRESS_BAR" file="linux/linux-progress-bar.png" />
<structure type="chrome_scaled_image" name="IDR_PROGRESS_BORDER_LEFT" file="linux/linux-progress-border-left.png" />
diff --git a/ui/resources/ui_resources.target.darwin-arm.mk b/ui/resources/ui_resources.target.darwin-arm.mk
index 84d8e0e2cd..b024d3d04c 100644
--- a/ui/resources/ui_resources.target.darwin-arm.mk
+++ b/ui/resources/ui_resources.target.darwin-arm.mk
@@ -18,9 +18,9 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_local_pa
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ;
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ;
@@ -37,7 +37,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: gyp_share
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: $(LOCAL_PATH)/third_party/jstemplate/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/webui_resources.grd $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/webui/resources/css/alert_overlay.css $(LOCAL_PATH)/ui/webui/resources/css/apps/common.css $(LOCAL_PATH)/ui/webui/resources/css/apps/topbutton_bar.css $(LOCAL_PATH)/ui/webui/resources/css/bubble.css $(LOCAL_PATH)/ui/webui/resources/css/bubble_button.css $(LOCAL_PATH)/ui/webui/resources/css/butter_bar.css $(LOCAL_PATH)/ui/webui/resources/css/chrome_shared.css $(LOCAL_PATH)/ui/webui/resources/css/dialogs.css $(LOCAL_PATH)/ui/webui/resources/css/list.css $(LOCAL_PATH)/ui/webui/resources/css/menu.css $(LOCAL_PATH)/ui/webui/resources/css/menu_button.css $(LOCAL_PATH)/ui/webui/resources/css/overlay.css $(LOCAL_PATH)/ui/webui/resources/css/spinner.css $(LOCAL_PATH)/ui/webui/resources/css/table.css $(LOCAL_PATH)/ui/webui/resources/css/tabs.css $(LOCAL_PATH)/ui/webui/resources/css/throbber.css $(LOCAL_PATH)/ui/webui/resources/css/trash.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css.js $(LOCAL_PATH)/ui/webui/resources/css/widgets.css $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/check.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_black.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_white.png $(LOCAL_PATH)/ui/webui/resources/images/clouds.png $(LOCAL_PATH)/ui/webui/resources/images/disabled_select.png $(LOCAL_PATH)/ui/webui/resources/images/gear.png $(LOCAL_PATH)/ui/webui/resources/images/google-transparent.png $(LOCAL_PATH)/ui/webui/resources/images/help.png $(LOCAL_PATH)/ui/webui/resources/images/question_mark.png $(LOCAL_PATH)/ui/webui/resources/images/select.png $(LOCAL_PATH)/ui/webui/resources/images/spinner.svg $(LOCAL_PATH)/ui/webui/resources/images/throbber.svg $(LOCAL_PATH)/ui/webui/resources/images/trash.png $(LOCAL_PATH)/ui/webui/resources/js/assert.js $(LOCAL_PATH)/ui/webui/resources/js/cr.js $(LOCAL_PATH)/ui/webui/resources/js/cr/event_target.js $(LOCAL_PATH)/ui/webui/resources/js/cr/link_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/promise.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/alert_overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/array_data_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/autocomplete_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/card_slider.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/command.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/dialogs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/drag_wrapper.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_outline_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/grid.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_single_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/position_util.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/repeating_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_header.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tabs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/touch_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tree.js $(LOCAL_PATH)/ui/webui/resources/js/event_tracker.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_process.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template2.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template_no_process.js $(LOCAL_PATH)/ui/webui/resources/js/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/js/load_time_data.js $(LOCAL_PATH)/ui/webui/resources/js/local_strings.js $(LOCAL_PATH)/ui/webui/resources/js/media_common.js $(LOCAL_PATH)/ui/webui/resources/js/parse_html_subset.js $(LOCAL_PATH)/ui/webui/resources/js/util.js $(LOCAL_PATH)/ui/webui/resources/js/webui_resource_test.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ../webui/resources/webui_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ;
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ;
@@ -50,7 +50,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: gyp
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_unscaled_resources.grd $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_unscaled_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/ui_unscaled_resources.rc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h ;
diff --git a/ui/resources/ui_resources.target.darwin-mips.mk b/ui/resources/ui_resources.target.darwin-mips.mk
index 84d8e0e2cd..b024d3d04c 100644
--- a/ui/resources/ui_resources.target.darwin-mips.mk
+++ b/ui/resources/ui_resources.target.darwin-mips.mk
@@ -18,9 +18,9 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_local_pa
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ;
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ;
@@ -37,7 +37,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: gyp_share
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: $(LOCAL_PATH)/third_party/jstemplate/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/webui_resources.grd $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/webui/resources/css/alert_overlay.css $(LOCAL_PATH)/ui/webui/resources/css/apps/common.css $(LOCAL_PATH)/ui/webui/resources/css/apps/topbutton_bar.css $(LOCAL_PATH)/ui/webui/resources/css/bubble.css $(LOCAL_PATH)/ui/webui/resources/css/bubble_button.css $(LOCAL_PATH)/ui/webui/resources/css/butter_bar.css $(LOCAL_PATH)/ui/webui/resources/css/chrome_shared.css $(LOCAL_PATH)/ui/webui/resources/css/dialogs.css $(LOCAL_PATH)/ui/webui/resources/css/list.css $(LOCAL_PATH)/ui/webui/resources/css/menu.css $(LOCAL_PATH)/ui/webui/resources/css/menu_button.css $(LOCAL_PATH)/ui/webui/resources/css/overlay.css $(LOCAL_PATH)/ui/webui/resources/css/spinner.css $(LOCAL_PATH)/ui/webui/resources/css/table.css $(LOCAL_PATH)/ui/webui/resources/css/tabs.css $(LOCAL_PATH)/ui/webui/resources/css/throbber.css $(LOCAL_PATH)/ui/webui/resources/css/trash.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css.js $(LOCAL_PATH)/ui/webui/resources/css/widgets.css $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/check.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_black.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_white.png $(LOCAL_PATH)/ui/webui/resources/images/clouds.png $(LOCAL_PATH)/ui/webui/resources/images/disabled_select.png $(LOCAL_PATH)/ui/webui/resources/images/gear.png $(LOCAL_PATH)/ui/webui/resources/images/google-transparent.png $(LOCAL_PATH)/ui/webui/resources/images/help.png $(LOCAL_PATH)/ui/webui/resources/images/question_mark.png $(LOCAL_PATH)/ui/webui/resources/images/select.png $(LOCAL_PATH)/ui/webui/resources/images/spinner.svg $(LOCAL_PATH)/ui/webui/resources/images/throbber.svg $(LOCAL_PATH)/ui/webui/resources/images/trash.png $(LOCAL_PATH)/ui/webui/resources/js/assert.js $(LOCAL_PATH)/ui/webui/resources/js/cr.js $(LOCAL_PATH)/ui/webui/resources/js/cr/event_target.js $(LOCAL_PATH)/ui/webui/resources/js/cr/link_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/promise.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/alert_overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/array_data_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/autocomplete_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/card_slider.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/command.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/dialogs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/drag_wrapper.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_outline_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/grid.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_single_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/position_util.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/repeating_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_header.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tabs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/touch_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tree.js $(LOCAL_PATH)/ui/webui/resources/js/event_tracker.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_process.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template2.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template_no_process.js $(LOCAL_PATH)/ui/webui/resources/js/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/js/load_time_data.js $(LOCAL_PATH)/ui/webui/resources/js/local_strings.js $(LOCAL_PATH)/ui/webui/resources/js/media_common.js $(LOCAL_PATH)/ui/webui/resources/js/parse_html_subset.js $(LOCAL_PATH)/ui/webui/resources/js/util.js $(LOCAL_PATH)/ui/webui/resources/js/webui_resource_test.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ../webui/resources/webui_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ;
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ;
@@ -50,7 +50,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: gyp
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_unscaled_resources.grd $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_unscaled_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/ui_unscaled_resources.rc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h ;
diff --git a/ui/resources/ui_resources.target.darwin-x86.mk b/ui/resources/ui_resources.target.darwin-x86.mk
index 84d8e0e2cd..7a6971f901 100644
--- a/ui/resources/ui_resources.target.darwin-x86.mk
+++ b/ui/resources/ui_resources.target.darwin-x86.mk
@@ -18,9 +18,9 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_local_pa
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ;
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ;
@@ -37,7 +37,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: gyp_share
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: $(LOCAL_PATH)/third_party/jstemplate/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/webui_resources.grd $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/webui/resources/css/alert_overlay.css $(LOCAL_PATH)/ui/webui/resources/css/apps/common.css $(LOCAL_PATH)/ui/webui/resources/css/apps/topbutton_bar.css $(LOCAL_PATH)/ui/webui/resources/css/bubble.css $(LOCAL_PATH)/ui/webui/resources/css/bubble_button.css $(LOCAL_PATH)/ui/webui/resources/css/butter_bar.css $(LOCAL_PATH)/ui/webui/resources/css/chrome_shared.css $(LOCAL_PATH)/ui/webui/resources/css/dialogs.css $(LOCAL_PATH)/ui/webui/resources/css/list.css $(LOCAL_PATH)/ui/webui/resources/css/menu.css $(LOCAL_PATH)/ui/webui/resources/css/menu_button.css $(LOCAL_PATH)/ui/webui/resources/css/overlay.css $(LOCAL_PATH)/ui/webui/resources/css/spinner.css $(LOCAL_PATH)/ui/webui/resources/css/table.css $(LOCAL_PATH)/ui/webui/resources/css/tabs.css $(LOCAL_PATH)/ui/webui/resources/css/throbber.css $(LOCAL_PATH)/ui/webui/resources/css/trash.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css.js $(LOCAL_PATH)/ui/webui/resources/css/widgets.css $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/check.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_black.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_white.png $(LOCAL_PATH)/ui/webui/resources/images/clouds.png $(LOCAL_PATH)/ui/webui/resources/images/disabled_select.png $(LOCAL_PATH)/ui/webui/resources/images/gear.png $(LOCAL_PATH)/ui/webui/resources/images/google-transparent.png $(LOCAL_PATH)/ui/webui/resources/images/help.png $(LOCAL_PATH)/ui/webui/resources/images/question_mark.png $(LOCAL_PATH)/ui/webui/resources/images/select.png $(LOCAL_PATH)/ui/webui/resources/images/spinner.svg $(LOCAL_PATH)/ui/webui/resources/images/throbber.svg $(LOCAL_PATH)/ui/webui/resources/images/trash.png $(LOCAL_PATH)/ui/webui/resources/js/assert.js $(LOCAL_PATH)/ui/webui/resources/js/cr.js $(LOCAL_PATH)/ui/webui/resources/js/cr/event_target.js $(LOCAL_PATH)/ui/webui/resources/js/cr/link_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/promise.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/alert_overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/array_data_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/autocomplete_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/card_slider.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/command.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/dialogs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/drag_wrapper.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_outline_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/grid.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_single_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/position_util.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/repeating_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_header.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tabs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/touch_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tree.js $(LOCAL_PATH)/ui/webui/resources/js/event_tracker.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_process.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template2.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template_no_process.js $(LOCAL_PATH)/ui/webui/resources/js/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/js/load_time_data.js $(LOCAL_PATH)/ui/webui/resources/js/local_strings.js $(LOCAL_PATH)/ui/webui/resources/js/media_common.js $(LOCAL_PATH)/ui/webui/resources/js/parse_html_subset.js $(LOCAL_PATH)/ui/webui/resources/js/util.js $(LOCAL_PATH)/ui/webui/resources/js/webui_resource_test.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ../webui/resources/webui_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ;
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ;
@@ -50,7 +50,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: gyp
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_unscaled_resources.grd $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_unscaled_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/ui_unscaled_resources.rc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h ;
diff --git a/ui/resources/ui_resources.target.linux-arm.mk b/ui/resources/ui_resources.target.linux-arm.mk
index 84d8e0e2cd..b024d3d04c 100644
--- a/ui/resources/ui_resources.target.linux-arm.mk
+++ b/ui/resources/ui_resources.target.linux-arm.mk
@@ -18,9 +18,9 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_local_pa
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ;
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ;
@@ -37,7 +37,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: gyp_share
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: $(LOCAL_PATH)/third_party/jstemplate/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/webui_resources.grd $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/webui/resources/css/alert_overlay.css $(LOCAL_PATH)/ui/webui/resources/css/apps/common.css $(LOCAL_PATH)/ui/webui/resources/css/apps/topbutton_bar.css $(LOCAL_PATH)/ui/webui/resources/css/bubble.css $(LOCAL_PATH)/ui/webui/resources/css/bubble_button.css $(LOCAL_PATH)/ui/webui/resources/css/butter_bar.css $(LOCAL_PATH)/ui/webui/resources/css/chrome_shared.css $(LOCAL_PATH)/ui/webui/resources/css/dialogs.css $(LOCAL_PATH)/ui/webui/resources/css/list.css $(LOCAL_PATH)/ui/webui/resources/css/menu.css $(LOCAL_PATH)/ui/webui/resources/css/menu_button.css $(LOCAL_PATH)/ui/webui/resources/css/overlay.css $(LOCAL_PATH)/ui/webui/resources/css/spinner.css $(LOCAL_PATH)/ui/webui/resources/css/table.css $(LOCAL_PATH)/ui/webui/resources/css/tabs.css $(LOCAL_PATH)/ui/webui/resources/css/throbber.css $(LOCAL_PATH)/ui/webui/resources/css/trash.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css.js $(LOCAL_PATH)/ui/webui/resources/css/widgets.css $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/check.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_black.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_white.png $(LOCAL_PATH)/ui/webui/resources/images/clouds.png $(LOCAL_PATH)/ui/webui/resources/images/disabled_select.png $(LOCAL_PATH)/ui/webui/resources/images/gear.png $(LOCAL_PATH)/ui/webui/resources/images/google-transparent.png $(LOCAL_PATH)/ui/webui/resources/images/help.png $(LOCAL_PATH)/ui/webui/resources/images/question_mark.png $(LOCAL_PATH)/ui/webui/resources/images/select.png $(LOCAL_PATH)/ui/webui/resources/images/spinner.svg $(LOCAL_PATH)/ui/webui/resources/images/throbber.svg $(LOCAL_PATH)/ui/webui/resources/images/trash.png $(LOCAL_PATH)/ui/webui/resources/js/assert.js $(LOCAL_PATH)/ui/webui/resources/js/cr.js $(LOCAL_PATH)/ui/webui/resources/js/cr/event_target.js $(LOCAL_PATH)/ui/webui/resources/js/cr/link_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/promise.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/alert_overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/array_data_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/autocomplete_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/card_slider.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/command.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/dialogs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/drag_wrapper.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_outline_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/grid.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_single_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/position_util.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/repeating_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_header.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tabs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/touch_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tree.js $(LOCAL_PATH)/ui/webui/resources/js/event_tracker.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_process.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template2.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template_no_process.js $(LOCAL_PATH)/ui/webui/resources/js/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/js/load_time_data.js $(LOCAL_PATH)/ui/webui/resources/js/local_strings.js $(LOCAL_PATH)/ui/webui/resources/js/media_common.js $(LOCAL_PATH)/ui/webui/resources/js/parse_html_subset.js $(LOCAL_PATH)/ui/webui/resources/js/util.js $(LOCAL_PATH)/ui/webui/resources/js/webui_resource_test.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ../webui/resources/webui_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ;
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ;
@@ -50,7 +50,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: gyp
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_unscaled_resources.grd $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_unscaled_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/ui_unscaled_resources.rc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h ;
diff --git a/ui/resources/ui_resources.target.linux-mips.mk b/ui/resources/ui_resources.target.linux-mips.mk
index 84d8e0e2cd..b024d3d04c 100644
--- a/ui/resources/ui_resources.target.linux-mips.mk
+++ b/ui/resources/ui_resources.target.linux-mips.mk
@@ -18,9 +18,9 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_local_pa
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ;
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ;
@@ -37,7 +37,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: gyp_share
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: $(LOCAL_PATH)/third_party/jstemplate/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/webui_resources.grd $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/webui/resources/css/alert_overlay.css $(LOCAL_PATH)/ui/webui/resources/css/apps/common.css $(LOCAL_PATH)/ui/webui/resources/css/apps/topbutton_bar.css $(LOCAL_PATH)/ui/webui/resources/css/bubble.css $(LOCAL_PATH)/ui/webui/resources/css/bubble_button.css $(LOCAL_PATH)/ui/webui/resources/css/butter_bar.css $(LOCAL_PATH)/ui/webui/resources/css/chrome_shared.css $(LOCAL_PATH)/ui/webui/resources/css/dialogs.css $(LOCAL_PATH)/ui/webui/resources/css/list.css $(LOCAL_PATH)/ui/webui/resources/css/menu.css $(LOCAL_PATH)/ui/webui/resources/css/menu_button.css $(LOCAL_PATH)/ui/webui/resources/css/overlay.css $(LOCAL_PATH)/ui/webui/resources/css/spinner.css $(LOCAL_PATH)/ui/webui/resources/css/table.css $(LOCAL_PATH)/ui/webui/resources/css/tabs.css $(LOCAL_PATH)/ui/webui/resources/css/throbber.css $(LOCAL_PATH)/ui/webui/resources/css/trash.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css.js $(LOCAL_PATH)/ui/webui/resources/css/widgets.css $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/check.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_black.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_white.png $(LOCAL_PATH)/ui/webui/resources/images/clouds.png $(LOCAL_PATH)/ui/webui/resources/images/disabled_select.png $(LOCAL_PATH)/ui/webui/resources/images/gear.png $(LOCAL_PATH)/ui/webui/resources/images/google-transparent.png $(LOCAL_PATH)/ui/webui/resources/images/help.png $(LOCAL_PATH)/ui/webui/resources/images/question_mark.png $(LOCAL_PATH)/ui/webui/resources/images/select.png $(LOCAL_PATH)/ui/webui/resources/images/spinner.svg $(LOCAL_PATH)/ui/webui/resources/images/throbber.svg $(LOCAL_PATH)/ui/webui/resources/images/trash.png $(LOCAL_PATH)/ui/webui/resources/js/assert.js $(LOCAL_PATH)/ui/webui/resources/js/cr.js $(LOCAL_PATH)/ui/webui/resources/js/cr/event_target.js $(LOCAL_PATH)/ui/webui/resources/js/cr/link_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/promise.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/alert_overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/array_data_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/autocomplete_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/card_slider.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/command.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/dialogs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/drag_wrapper.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_outline_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/grid.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_single_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/position_util.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/repeating_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_header.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tabs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/touch_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tree.js $(LOCAL_PATH)/ui/webui/resources/js/event_tracker.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_process.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template2.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template_no_process.js $(LOCAL_PATH)/ui/webui/resources/js/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/js/load_time_data.js $(LOCAL_PATH)/ui/webui/resources/js/local_strings.js $(LOCAL_PATH)/ui/webui/resources/js/media_common.js $(LOCAL_PATH)/ui/webui/resources/js/parse_html_subset.js $(LOCAL_PATH)/ui/webui/resources/js/util.js $(LOCAL_PATH)/ui/webui/resources/js/webui_resource_test.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ../webui/resources/webui_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ;
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ;
@@ -50,7 +50,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: gyp
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_unscaled_resources.grd $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_unscaled_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/ui_unscaled_resources.rc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h ;
diff --git a/ui/resources/ui_resources.target.linux-x86.mk b/ui/resources/ui_resources.target.linux-x86.mk
index 84d8e0e2cd..7a6971f901 100644
--- a/ui/resources/ui_resources.target.linux-x86.mk
+++ b/ui/resources/ui_resources.target.linux-x86.mk
@@ -18,9 +18,9 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_local_pa
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
-$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/password_undo_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
+$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_resources.grd $(LOCAL_PATH)/ui/resources/default_100_percent/app_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_32.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/default_favicon_64.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/window_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_center.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_left_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/content_right_side.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_app_panel_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default.png $(LOCAL_PATH)/ui/resources/default_100_percent/frame_default_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-bar.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-left.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-border-right.png $(LOCAL_PATH)/ui/resources/default_100_percent/linux/linux-progress-value.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_bottom_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_left_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/panel_top_right_corner.png $(LOCAL_PATH)/ui/resources/default_100_percent/throbber.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_pointer_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/bubble_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_mask.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_2_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/close_dialog_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/browser_action_badge_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/buy_with_google_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkmark.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_bottom_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_center_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_bottom_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_center_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_menu_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_left_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/combobox_button_top_right_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/default_favicon.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_copy.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_link.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_move.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/drag_tip_nodrop.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/message_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_advanced_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_arrow_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_disabled.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_clear_all_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_close_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_do_not_disturb_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_expand_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/notification_settings_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/radio_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/text_selection_handle_small.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_big_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_small_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_big_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_bubble_shadow_spike_small_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_active_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_bottom_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_left.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/window_shadow_inactive_top_right.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_normal.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/action_box_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/cros/menu_droparrow.png $(LOCAL_PATH)/ui/resources/default_200_percent/throbber.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_hover_top_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_bottom_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_center.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_right.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_left.png $(LOCAL_PATH)/ui/resources/touch_100_percent/common/textbutton_pressed_top_right.png $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ;
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_resources.h ;
@@ -37,7 +37,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: gyp_share
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h: $(LOCAL_PATH)/third_party/jstemplate/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/webui_resources.grd $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_closed_rtl.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open.png $(LOCAL_PATH)/ui/resources/default_100_percent/common/folder_open_rtl.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/blue_button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/button_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_checked_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_focused_pressed.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_hover.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_inactive.png $(LOCAL_PATH)/ui/resources/default_200_percent/common/checkbox_pressed.png $(LOCAL_PATH)/ui/webui/resources/css/alert_overlay.css $(LOCAL_PATH)/ui/webui/resources/css/apps/common.css $(LOCAL_PATH)/ui/webui/resources/css/apps/topbutton_bar.css $(LOCAL_PATH)/ui/webui/resources/css/bubble.css $(LOCAL_PATH)/ui/webui/resources/css/bubble_button.css $(LOCAL_PATH)/ui/webui/resources/css/butter_bar.css $(LOCAL_PATH)/ui/webui/resources/css/chrome_shared.css $(LOCAL_PATH)/ui/webui/resources/css/dialogs.css $(LOCAL_PATH)/ui/webui/resources/css/list.css $(LOCAL_PATH)/ui/webui/resources/css/menu.css $(LOCAL_PATH)/ui/webui/resources/css/menu_button.css $(LOCAL_PATH)/ui/webui/resources/css/overlay.css $(LOCAL_PATH)/ui/webui/resources/css/spinner.css $(LOCAL_PATH)/ui/webui/resources/css/table.css $(LOCAL_PATH)/ui/webui/resources/css/tabs.css $(LOCAL_PATH)/ui/webui/resources/css/throbber.css $(LOCAL_PATH)/ui/webui/resources/css/trash.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css $(LOCAL_PATH)/ui/webui/resources/css/tree.css.js $(LOCAL_PATH)/ui/webui/resources/css/widgets.css $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/2x/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_hover.png $(LOCAL_PATH)/ui/webui/resources/images/apps/button_butter_bar_close_pressed.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_close.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_maximize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_minimize.png $(LOCAL_PATH)/ui/webui/resources/images/apps/topbar_button_settings.png $(LOCAL_PATH)/ui/webui/resources/images/check.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_black.png $(LOCAL_PATH)/ui/webui/resources/images/checkbox_white.png $(LOCAL_PATH)/ui/webui/resources/images/clouds.png $(LOCAL_PATH)/ui/webui/resources/images/disabled_select.png $(LOCAL_PATH)/ui/webui/resources/images/gear.png $(LOCAL_PATH)/ui/webui/resources/images/google-transparent.png $(LOCAL_PATH)/ui/webui/resources/images/help.png $(LOCAL_PATH)/ui/webui/resources/images/question_mark.png $(LOCAL_PATH)/ui/webui/resources/images/select.png $(LOCAL_PATH)/ui/webui/resources/images/spinner.svg $(LOCAL_PATH)/ui/webui/resources/images/throbber.svg $(LOCAL_PATH)/ui/webui/resources/images/trash.png $(LOCAL_PATH)/ui/webui/resources/js/assert.js $(LOCAL_PATH)/ui/webui/resources/js/cr.js $(LOCAL_PATH)/ui/webui/resources/js/cr/event_target.js $(LOCAL_PATH)/ui/webui/resources/js/cr/link_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/promise.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/alert_overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/array_data_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/autocomplete_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/bubble_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/card_slider.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/command.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/context_menu_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/dialogs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/drag_wrapper.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/focus_outline_manager.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/grid.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_controller.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/list_single_selection_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/menu_item.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/overlay.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/position_util.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/repeating_button.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_column_model.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_header.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_list.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/table/table_splitter.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tabs.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/touch_handler.js $(LOCAL_PATH)/ui/webui/resources/js/cr/ui/tree.js $(LOCAL_PATH)/ui/webui/resources/js/event_tracker.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_process.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template2.js $(LOCAL_PATH)/ui/webui/resources/js/i18n_template_no_process.js $(LOCAL_PATH)/ui/webui/resources/js/jstemplate_compiled.js $(LOCAL_PATH)/ui/webui/resources/js/load_time_data.js $(LOCAL_PATH)/ui/webui/resources/js/local_strings.js $(LOCAL_PATH)/ui/webui/resources/js/media_common.js $(LOCAL_PATH)/ui/webui/resources/js/parse_html_subset.js $(LOCAL_PATH)/ui/webui/resources/js/util.js $(LOCAL_PATH)/ui/webui/resources/js/webui_resource_test.js $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ../webui/resources/webui_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ../webui/resources/webui_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.cc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ;
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources_map.h: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/webui_resources.h ;
@@ -50,7 +50,7 @@ $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: gyp
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
$(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h: $(LOCAL_PATH)/tools/gritsettings/resource_ids $(LOCAL_PATH)/ui/resources/ui_unscaled_resources.grd $(LOCAL_PATH)/tools/grit/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit.py $(LOCAL_PATH)/tools/grit/grit/__init__.py $(LOCAL_PATH)/tools/grit/grit/clique.py $(LOCAL_PATH)/tools/grit/grit/clique_unittest.py $(LOCAL_PATH)/tools/grit/grit/constants.py $(LOCAL_PATH)/tools/grit/grit/exception.py $(LOCAL_PATH)/tools/grit/grit/extern/BogoFP.py $(LOCAL_PATH)/tools/grit/grit/extern/FP.py $(LOCAL_PATH)/tools/grit/grit/extern/__init__.py $(LOCAL_PATH)/tools/grit/grit/extern/tclib.py $(LOCAL_PATH)/tools/grit/grit/format/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml.py $(LOCAL_PATH)/tools/grit/grit/format/android_xml_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/c_format.py $(LOCAL_PATH)/tools/grit/grit/format/c_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json.py $(LOCAL_PATH)/tools/grit/grit/format/chrome_messages_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack.py $(LOCAL_PATH)/tools/grit/grit/format/data_pack_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline.py $(LOCAL_PATH)/tools/grit/grit/format/html_inline_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format.py $(LOCAL_PATH)/tools/grit/grit/format/js_map_format_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/PRESUBMIT.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/policy_template_generator_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/template_formatter.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writer_configuration.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/__init__.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adm_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/adml_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/admx_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/doc_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/json_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/mock_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_helper.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_strings_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/plist_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/reg_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/template_writer_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/writer_unittest_common.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_formatted_writer.py $(LOCAL_PATH)/tools/grit/grit/format/policy_templates/writers/xml_writer_base_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header.py $(LOCAL_PATH)/tools/grit/grit/format/rc_header_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/format/repack.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map.py $(LOCAL_PATH)/tools/grit/grit/format/resource_map_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/__init__.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template.py $(LOCAL_PATH)/tools/grit/grit/gather/admin_template_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image.py $(LOCAL_PATH)/tools/grit/grit/gather/chrome_scaled_image_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/igoogle_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/interface.py $(LOCAL_PATH)/tools/grit/grit/gather/json_loader.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings.py $(LOCAL_PATH)/tools/grit/grit/gather/muppet_strings_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json.py $(LOCAL_PATH)/tools/grit/grit/gather/policy_json_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/rc.py $(LOCAL_PATH)/tools/grit/grit/gather/rc_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/regexp.py $(LOCAL_PATH)/tools/grit/grit/gather/skeleton_gatherer.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html.py $(LOCAL_PATH)/tools/grit/grit/gather/tr_html_unittest.py $(LOCAL_PATH)/tools/grit/grit/gather/txt.py $(LOCAL_PATH)/tools/grit/grit/gather/txt_unittest.py $(LOCAL_PATH)/tools/grit/grit/grd_reader.py $(LOCAL_PATH)/tools/grit/grit/grd_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit/grit_runner.py $(LOCAL_PATH)/tools/grit/grit/grit_runner_unittest.py $(LOCAL_PATH)/tools/grit/grit/lazy_re.py $(LOCAL_PATH)/tools/grit/grit/lazy_re_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/base.py $(LOCAL_PATH)/tools/grit/grit/node/base_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/custom/__init__.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename.py $(LOCAL_PATH)/tools/grit/grit/node/custom/filename_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/empty.py $(LOCAL_PATH)/tools/grit/grit/node/include.py $(LOCAL_PATH)/tools/grit/grit/node/include_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/io.py $(LOCAL_PATH)/tools/grit/grit/node/io_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/mapping.py $(LOCAL_PATH)/tools/grit/grit/node/message.py $(LOCAL_PATH)/tools/grit/grit/node/message_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/misc.py $(LOCAL_PATH)/tools/grit/grit/node/misc_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/structure.py $(LOCAL_PATH)/tools/grit/grit/node/structure_unittest.py $(LOCAL_PATH)/tools/grit/grit/node/variant.py $(LOCAL_PATH)/tools/grit/grit/pseudo.py $(LOCAL_PATH)/tools/grit/grit/pseudo_rtl.py $(LOCAL_PATH)/tools/grit/grit/pseudo_unittest.py $(LOCAL_PATH)/tools/grit/grit/scons.py $(LOCAL_PATH)/tools/grit/grit/shortcuts.py $(LOCAL_PATH)/tools/grit/grit/shortcuts_unittests.py $(LOCAL_PATH)/tools/grit/grit/tclib.py $(LOCAL_PATH)/tools/grit/grit/tclib_unittest.py $(LOCAL_PATH)/tools/grit/grit/test_suite_all.py $(LOCAL_PATH)/tools/grit/grit/tool/__init__.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/android2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/build.py $(LOCAL_PATH)/tools/grit/grit/tool/build_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo.py $(LOCAL_PATH)/tools/grit/grit/tool/buildinfo_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/count.py $(LOCAL_PATH)/tools/grit/grit/tool/diff_structures.py $(LOCAL_PATH)/tools/grit/grit/tool/interface.py $(LOCAL_PATH)/tools/grit/grit/tool/menu_from_parts.py $(LOCAL_PATH)/tools/grit/grit/tool/newgrd.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/postprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_interface.py $(LOCAL_PATH)/tools/grit/grit/tool/preprocess_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd.py $(LOCAL_PATH)/tools/grit/grit/tool/rc2grd_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/resize.py $(LOCAL_PATH)/tools/grit/grit/tool/test.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_postprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/toolbar_preprocess.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc.py $(LOCAL_PATH)/tools/grit/grit/tool/transl2tc_unittest.py $(LOCAL_PATH)/tools/grit/grit/tool/unit.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb.py $(LOCAL_PATH)/tools/grit/grit/tool/xmb_unittest.py $(LOCAL_PATH)/tools/grit/grit/util.py $(LOCAL_PATH)/tools/grit/grit/util_unittest.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader.py $(LOCAL_PATH)/tools/grit/grit/xtb_reader_unittest.py $(LOCAL_PATH)/tools/grit/grit_info.py $(GYP_TARGET_DEPENDENCIES)
@echo "Gyp action: Generating resources from ui_unscaled_resources.grd ($@)"
- $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D use_concatenated_impulse_responses
+ $(hide)cd $(gyp_local_path)/ui/resources; mkdir -p $(gyp_shared_intermediate_dir)/ui/ui_resources/grit $(gyp_shared_intermediate_dir)/ui/ui_resources; python ../../tools/grit/grit.py -i ui_unscaled_resources.grd build -f ../../tools/gritsettings/resource_ids -o "$(gyp_shared_intermediate_dir)/ui/ui_resources" -D _chromium -E "CHROMIUM_BUILD=chromium" -D use_webaudio_enable_message -t android -E "ANDROID_JAVA_TAGGED_ONLY=true" -D enable_printing -D use_concatenated_impulse_responses
$(gyp_shared_intermediate_dir)/ui/ui_resources/ui_unscaled_resources.rc: $(gyp_shared_intermediate_dir)/ui/ui_resources/grit/ui_unscaled_resources.h ;
diff --git a/ui/shell_dialogs/DEPS b/ui/shell_dialogs/DEPS
index 32291d0bc0..acb8514c82 100644
--- a/ui/shell_dialogs/DEPS
+++ b/ui/shell_dialogs/DEPS
@@ -1,7 +1,6 @@
include_rules = [
"+grit/ui_strings.h",
"+jni",
- "+ui/android",
"+ui/aura",
"+ui/base",
"+ui/gfx",
diff --git a/ui/shell_dialogs/select_file_dialog_mac.mm b/ui/shell_dialogs/select_file_dialog_mac.mm
index 641fc2eada..a29c404701 100644
--- a/ui/shell_dialogs/select_file_dialog_mac.mm
+++ b/ui/shell_dialogs/select_file_dialog_mac.mm
@@ -266,7 +266,20 @@ void SelectFileDialogImpl::SelectFileImpl(
type_map_[dialog] = type;
if (type == SELECT_SAVEAS_FILE) {
- [dialog setCanSelectHiddenExtension:YES];
+ // When file extensions are hidden and removing the extension from
+ // the default filename gives one which still has an extension
+ // that OS X recognizes, it will get confused and think the user
+ // is trying to override the default extension. This happens with
+ // filenames like "foo.tar.gz" or "ball.of.tar.png". Work around
+ // this by never hiding extensions in that case.
+ base::FilePath::StringType penultimate_extension =
+ default_path.RemoveFinalExtension().FinalExtension();
+ if (!penultimate_extension.empty() &&
+ penultimate_extension.length() <= 5U) {
+ [dialog setExtensionHidden:NO];
+ } else {
+ [dialog setCanSelectHiddenExtension:YES];
+ }
} else {
NSOpenPanel* open_dialog = (NSOpenPanel*)dialog;
diff --git a/ui/shell_dialogs/select_file_dialog_win.cc b/ui/shell_dialogs/select_file_dialog_win.cc
index b285be5960..1f8e36458b 100644
--- a/ui/shell_dialogs/select_file_dialog_win.cc
+++ b/ui/shell_dialogs/select_file_dialog_win.cc
@@ -86,7 +86,7 @@ bool CallGetSaveFileName(OPENFILENAME* ofn) {
// Distinguish directories from regular files.
bool IsDirectory(const base::FilePath& path) {
base::PlatformFileInfo file_info;
- return file_util::GetFileInfo(path, &file_info) ?
+ return base::GetFileInfo(path, &file_info) ?
file_info.is_directory : path.EndsWithSeparator();
}
@@ -846,7 +846,7 @@ bool SelectFileDialogImpl::RunOpenMultiFileDialog(
// We use OFN_NOCHANGEDIR so that the user can rename or delete the directory
// without having to close Chrome first.
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER
- | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT;
+ | OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT | OFN_NOCHANGEDIR;
if (!filter.empty()) {
ofn.lpstrFilter = filter.c_str();
diff --git a/ui/shell_dialogs/shell_dialogs.target.darwin-arm.mk b/ui/shell_dialogs/shell_dialogs.target.darwin-arm.mk
index c74e22f330..bcf0ad12f6 100644
--- a/ui/shell_dialogs/shell_dialogs.target.darwin-arm.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.darwin-arm.mk
@@ -73,6 +73,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -82,9 +83,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSHELL_DIALOGS_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -186,6 +189,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -195,9 +199,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSHELL_DIALOGS_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
diff --git a/ui/shell_dialogs/shell_dialogs.target.darwin-mips.mk b/ui/shell_dialogs/shell_dialogs.target.darwin-mips.mk
index 97715a7cbf..f7004952fc 100644
--- a/ui/shell_dialogs/shell_dialogs.target.darwin-mips.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.darwin-mips.mk
@@ -72,6 +72,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -81,9 +82,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSHELL_DIALOGS_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -184,6 +187,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -193,9 +197,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSHELL_DIALOGS_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
diff --git a/ui/shell_dialogs/shell_dialogs.target.darwin-x86.mk b/ui/shell_dialogs/shell_dialogs.target.darwin-x86.mk
index e4e59fe68e..ef4383dc16 100644
--- a/ui/shell_dialogs/shell_dialogs.target.darwin-x86.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.darwin-x86.mk
@@ -75,6 +75,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -84,9 +85,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSHELL_DIALOGS_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -190,6 +193,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -199,9 +203,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSHELL_DIALOGS_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
diff --git a/ui/shell_dialogs/shell_dialogs.target.linux-arm.mk b/ui/shell_dialogs/shell_dialogs.target.linux-arm.mk
index c74e22f330..bcf0ad12f6 100644
--- a/ui/shell_dialogs/shell_dialogs.target.linux-arm.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.linux-arm.mk
@@ -73,6 +73,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -82,9 +83,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSHELL_DIALOGS_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -186,6 +189,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -195,9 +199,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSHELL_DIALOGS_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
diff --git a/ui/shell_dialogs/shell_dialogs.target.linux-mips.mk b/ui/shell_dialogs/shell_dialogs.target.linux-mips.mk
index 97715a7cbf..f7004952fc 100644
--- a/ui/shell_dialogs/shell_dialogs.target.linux-mips.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.linux-mips.mk
@@ -72,6 +72,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -81,9 +82,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSHELL_DIALOGS_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -184,6 +187,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -193,9 +197,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSHELL_DIALOGS_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
diff --git a/ui/shell_dialogs/shell_dialogs.target.linux-x86.mk b/ui/shell_dialogs/shell_dialogs.target.linux-x86.mk
index e4e59fe68e..ef4383dc16 100644
--- a/ui/shell_dialogs/shell_dialogs.target.linux-x86.mk
+++ b/ui/shell_dialogs/shell_dialogs.target.linux-x86.mk
@@ -75,6 +75,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -84,9 +85,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSHELL_DIALOGS_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -190,6 +193,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -199,9 +203,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSHELL_DIALOGS_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
diff --git a/ui/snapshot/DEPS b/ui/snapshot/DEPS
index a531974df4..f4c16623e5 100644
--- a/ui/snapshot/DEPS
+++ b/ui/snapshot/DEPS
@@ -1,7 +1,6 @@
include_rules = [
"+skia/ext",
"+third_party/skia",
- "+ui/android",
"+ui/aura",
"+ui/base",
"+ui/compositor",
diff --git a/ui/snapshot/snapshot.target.darwin-arm.mk b/ui/snapshot/snapshot.target.darwin-arm.mk
index c2d9fd9b3a..22515753bc 100644
--- a/ui/snapshot/snapshot.target.darwin-arm.mk
+++ b/ui/snapshot/snapshot.target.darwin-arm.mk
@@ -64,6 +64,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -73,9 +74,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSNAPSHOT_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -104,9 +107,9 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(LOCAL_PATH)/ui \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
@@ -175,6 +178,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -184,9 +188,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSNAPSHOT_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -216,9 +222,9 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(LOCAL_PATH)/ui \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
diff --git a/ui/snapshot/snapshot.target.darwin-mips.mk b/ui/snapshot/snapshot.target.darwin-mips.mk
index cbbbdcf9a8..c720c6ea1e 100644
--- a/ui/snapshot/snapshot.target.darwin-mips.mk
+++ b/ui/snapshot/snapshot.target.darwin-mips.mk
@@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -72,9 +73,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSNAPSHOT_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -103,9 +106,9 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(LOCAL_PATH)/ui \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
@@ -173,6 +176,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -182,9 +186,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSNAPSHOT_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -214,9 +220,9 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(LOCAL_PATH)/ui \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
diff --git a/ui/snapshot/snapshot.target.darwin-x86.mk b/ui/snapshot/snapshot.target.darwin-x86.mk
index f553904b17..2be2e353c6 100644
--- a/ui/snapshot/snapshot.target.darwin-x86.mk
+++ b/ui/snapshot/snapshot.target.darwin-x86.mk
@@ -66,6 +66,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -75,9 +76,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSNAPSHOT_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -105,9 +108,9 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(LOCAL_PATH)/ui \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
@@ -179,6 +182,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -188,9 +192,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSNAPSHOT_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -219,9 +225,9 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(LOCAL_PATH)/ui \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
diff --git a/ui/snapshot/snapshot.target.linux-arm.mk b/ui/snapshot/snapshot.target.linux-arm.mk
index c2d9fd9b3a..22515753bc 100644
--- a/ui/snapshot/snapshot.target.linux-arm.mk
+++ b/ui/snapshot/snapshot.target.linux-arm.mk
@@ -64,6 +64,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -73,9 +74,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSNAPSHOT_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -104,9 +107,9 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(LOCAL_PATH)/ui \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
@@ -175,6 +178,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -184,9 +188,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSNAPSHOT_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -216,9 +222,9 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(LOCAL_PATH)/ui \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
diff --git a/ui/snapshot/snapshot.target.linux-mips.mk b/ui/snapshot/snapshot.target.linux-mips.mk
index cbbbdcf9a8..c720c6ea1e 100644
--- a/ui/snapshot/snapshot.target.linux-mips.mk
+++ b/ui/snapshot/snapshot.target.linux-mips.mk
@@ -63,6 +63,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -72,9 +73,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSNAPSHOT_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -103,9 +106,9 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(LOCAL_PATH)/ui \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
@@ -173,6 +176,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -182,9 +186,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSNAPSHOT_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -214,9 +220,9 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(LOCAL_PATH)/ui \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
diff --git a/ui/snapshot/snapshot.target.linux-x86.mk b/ui/snapshot/snapshot.target.linux-x86.mk
index f553904b17..2be2e353c6 100644
--- a/ui/snapshot/snapshot.target.linux-x86.mk
+++ b/ui/snapshot/snapshot.target.linux-x86.mk
@@ -66,6 +66,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -75,9 +76,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSNAPSHOT_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -105,9 +108,9 @@ MY_DEFS_Debug := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Debug := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(LOCAL_PATH)/ui \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
@@ -179,6 +182,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -188,9 +192,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSNAPSHOT_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -219,9 +225,9 @@ MY_DEFS_Release := \
# Include paths placed before CFLAGS/CPPFLAGS
LOCAL_C_INCLUDES_Release := \
- $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+ $(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
$(LOCAL_PATH)/ui \
$(LOCAL_PATH) \
$(LOCAL_PATH)/skia/config \
diff --git a/ui/surface/accelerated_surface_transformer_win_unittest.cc b/ui/surface/accelerated_surface_transformer_win_unittest.cc
index 67460ad968..968720fe06 100644
--- a/ui/surface/accelerated_surface_transformer_win_unittest.cc
+++ b/ui/surface/accelerated_surface_transformer_win_unittest.cc
@@ -75,7 +75,7 @@ bool WritePNGFile(const SkBitmap& bitmap, const base::FilePath& file_path) {
if (gfx::PNGCodec::EncodeBGRASkBitmap(bitmap,
discard_transparency,
&png_data) &&
- file_util::CreateDirectory(file_path.DirName())) {
+ base::CreateDirectory(file_path.DirName())) {
char* data = reinterpret_cast<char*>(&png_data[0]);
int size = static_cast<int>(png_data.size());
return file_util::WriteFile(file_path, data, size) == size;
diff --git a/ui/surface/surface.target.darwin-arm.mk b/ui/surface/surface.target.darwin-arm.mk
index cfe6c7fd97..26bd403cfb 100644
--- a/ui/surface/surface.target.darwin-arm.mk
+++ b/ui/surface/surface.target.darwin-arm.mk
@@ -68,6 +68,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -77,9 +78,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSURFACE_IMPLEMENTATION' \
'-DMEDIA_DISABLE_LIBVPX' \
@@ -185,6 +188,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -194,9 +198,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSURFACE_IMPLEMENTATION' \
'-DMEDIA_DISABLE_LIBVPX' \
diff --git a/ui/surface/surface.target.darwin-mips.mk b/ui/surface/surface.target.darwin-mips.mk
index 8e3eb6fa23..fe80f19a74 100644
--- a/ui/surface/surface.target.darwin-mips.mk
+++ b/ui/surface/surface.target.darwin-mips.mk
@@ -67,6 +67,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -76,9 +77,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSURFACE_IMPLEMENTATION' \
'-DMEDIA_DISABLE_LIBVPX' \
@@ -183,6 +186,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -192,9 +196,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSURFACE_IMPLEMENTATION' \
'-DMEDIA_DISABLE_LIBVPX' \
diff --git a/ui/surface/surface.target.darwin-x86.mk b/ui/surface/surface.target.darwin-x86.mk
index af61877b35..e14a4ac428 100644
--- a/ui/surface/surface.target.darwin-x86.mk
+++ b/ui/surface/surface.target.darwin-x86.mk
@@ -70,6 +70,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -79,9 +80,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSURFACE_IMPLEMENTATION' \
'-DMEDIA_DISABLE_LIBVPX' \
@@ -189,6 +192,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -198,9 +202,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSURFACE_IMPLEMENTATION' \
'-DMEDIA_DISABLE_LIBVPX' \
diff --git a/ui/surface/surface.target.linux-arm.mk b/ui/surface/surface.target.linux-arm.mk
index cfe6c7fd97..26bd403cfb 100644
--- a/ui/surface/surface.target.linux-arm.mk
+++ b/ui/surface/surface.target.linux-arm.mk
@@ -68,6 +68,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -77,9 +78,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSURFACE_IMPLEMENTATION' \
'-DMEDIA_DISABLE_LIBVPX' \
@@ -185,6 +188,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -194,9 +198,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSURFACE_IMPLEMENTATION' \
'-DMEDIA_DISABLE_LIBVPX' \
diff --git a/ui/surface/surface.target.linux-mips.mk b/ui/surface/surface.target.linux-mips.mk
index 8e3eb6fa23..fe80f19a74 100644
--- a/ui/surface/surface.target.linux-mips.mk
+++ b/ui/surface/surface.target.linux-mips.mk
@@ -67,6 +67,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -76,9 +77,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSURFACE_IMPLEMENTATION' \
'-DMEDIA_DISABLE_LIBVPX' \
@@ -183,6 +186,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -192,9 +196,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSURFACE_IMPLEMENTATION' \
'-DMEDIA_DISABLE_LIBVPX' \
diff --git a/ui/surface/surface.target.linux-x86.mk b/ui/surface/surface.target.linux-x86.mk
index af61877b35..e14a4ac428 100644
--- a/ui/surface/surface.target.linux-x86.mk
+++ b/ui/surface/surface.target.linux-x86.mk
@@ -70,6 +70,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -79,9 +80,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSURFACE_IMPLEMENTATION' \
'-DMEDIA_DISABLE_LIBVPX' \
@@ -189,6 +192,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -198,9 +202,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DSURFACE_IMPLEMENTATION' \
'-DMEDIA_DISABLE_LIBVPX' \
diff --git a/ui/surface/transport_dib_posix.cc b/ui/surface/transport_dib_posix.cc
index cd9ac6266e..28095f2c94 100644
--- a/ui/surface/transport_dib_posix.cc
+++ b/ui/surface/transport_dib_posix.cc
@@ -13,7 +13,6 @@
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/shared_memory.h"
-#include "base/posix/eintr_wrapper.h"
#include "skia/ext/platform_canvas.h"
TransportDIB::TransportDIB()
diff --git a/ui/test/DEPS b/ui/test/DEPS
index a88b0715d6..b51da65b02 100644
--- a/ui/test/DEPS
+++ b/ui/test/DEPS
@@ -1,5 +1,4 @@
include_rules = [
- "+ui/android",
"+ui/base",
"+ui/gfx",
]
diff --git a/ui/ui.gyp b/ui/ui.gyp
index f6e95ae663..f939a65eae 100644
--- a/ui/ui.gyp
+++ b/ui/ui.gyp
@@ -491,6 +491,9 @@
],
}],
['OS=="mac"', {
+ 'dependencies': [
+ '../third_party/mozilla/mozilla.gyp:mozilla',
+ ],
'sources!': [
'base/dragdrop/drag_utils.cc',
'base/dragdrop/drag_utils.h',
@@ -634,9 +637,6 @@
'target_name': 'ui_cocoa_third_party_toolkits',
'type': '<(component)',
'sources': [
- # Build Apple sample code
- '../third_party/apple_sample_code/ImageAndTextCell.h',
- '../third_party/apple_sample_code/ImageAndTextCell.m',
# Build the necessary GTM sources
'../third_party/GTM/AppKit/GTMFadeTruncatingTextFieldCell.h',
'../third_party/GTM/AppKit/GTMFadeTruncatingTextFieldCell.m',
@@ -659,18 +659,9 @@
'../third_party/GTM/Foundation/GTMNSNumber+64Bit.m',
'../third_party/GTM/Foundation/GTMNSObject+KeyValueObserving.h',
'../third_party/GTM/Foundation/GTMNSObject+KeyValueObserving.m',
- # MolokoCacao additions
- '../third_party/molokocacao/NSBezierPath+MCAdditions.h',
- '../third_party/molokocacao/NSBezierPath+MCAdditions.m',
- # Build necessary Mozilla sources
- '../third_party/mozilla/NSScreen+Utils.h',
- '../third_party/mozilla/NSScreen+Utils.m',
- '../third_party/mozilla/NSWorkspace+Utils.h',
- '../third_party/mozilla/NSWorkspace+Utils.m',
],
'include_dirs': [
'..',
- '../third_party/apple',
'../third_party/GTM',
'../third_party/GTM/AppKit',
'../third_party/GTM/DebugUtils',
diff --git a/ui/ui.target.darwin-arm.mk b/ui/ui.target.darwin-arm.mk
index 061b104da8..23a6396916 100644
--- a/ui/ui.target.darwin-arm.mk
+++ b/ui/ui.target.darwin-arm.mk
@@ -110,6 +110,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -119,9 +120,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DUI_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
@@ -228,6 +231,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -237,9 +241,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DUI_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
diff --git a/ui/ui.target.darwin-mips.mk b/ui/ui.target.darwin-mips.mk
index 1b04eb02ee..7e47e6bba6 100644
--- a/ui/ui.target.darwin-mips.mk
+++ b/ui/ui.target.darwin-mips.mk
@@ -109,6 +109,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -118,9 +119,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DUI_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
@@ -226,6 +229,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -235,9 +239,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DUI_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
diff --git a/ui/ui.target.darwin-x86.mk b/ui/ui.target.darwin-x86.mk
index 34cdcc09fd..48bb9828e6 100644
--- a/ui/ui.target.darwin-x86.mk
+++ b/ui/ui.target.darwin-x86.mk
@@ -112,6 +112,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -121,9 +122,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DUI_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -232,6 +235,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -241,9 +245,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DUI_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
diff --git a/ui/ui.target.linux-arm.mk b/ui/ui.target.linux-arm.mk
index 061b104da8..23a6396916 100644
--- a/ui/ui.target.linux-arm.mk
+++ b/ui/ui.target.linux-arm.mk
@@ -110,6 +110,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -119,9 +120,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DUI_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
@@ -228,6 +231,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -237,9 +241,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DUI_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
diff --git a/ui/ui.target.linux-mips.mk b/ui/ui.target.linux-mips.mk
index 1b04eb02ee..7e47e6bba6 100644
--- a/ui/ui.target.linux-mips.mk
+++ b/ui/ui.target.linux-mips.mk
@@ -109,6 +109,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -118,9 +119,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DUI_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
@@ -226,6 +229,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -235,9 +239,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DUI_IMPLEMENTATION' \
'-DPOSIX_AVOID_MMAP' \
diff --git a/ui/ui.target.linux-x86.mk b/ui/ui.target.linux-x86.mk
index 34cdcc09fd..48bb9828e6 100644
--- a/ui/ui.target.linux-x86.mk
+++ b/ui/ui.target.linux-x86.mk
@@ -112,6 +112,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -121,9 +122,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DUI_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
@@ -232,6 +235,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -241,9 +245,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-DUI_IMPLEMENTATION' \
'-DSK_ENABLE_INST_COUNT=0' \
diff --git a/ui/ui_base_jni_headers.target.darwin-arm.mk b/ui/ui_base_jni_headers.target.darwin-arm.mk
index 964b4c25b3..4b5cca197d 100644
--- a/ui/ui_base_jni_headers.target.darwin-arm.mk
+++ b/ui/ui_base_jni_headers.target.darwin-arm.mk
@@ -126,6 +126,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -135,9 +136,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -205,6 +208,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -214,9 +218,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/ui_base_jni_headers.target.darwin-mips.mk b/ui/ui_base_jni_headers.target.darwin-mips.mk
index 34b810413d..192b12c967 100644
--- a/ui/ui_base_jni_headers.target.darwin-mips.mk
+++ b/ui/ui_base_jni_headers.target.darwin-mips.mk
@@ -125,6 +125,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -134,9 +135,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -203,6 +206,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -212,9 +216,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/ui_base_jni_headers.target.darwin-x86.mk b/ui/ui_base_jni_headers.target.darwin-x86.mk
index 521f5fa641..584c1d7ef0 100644
--- a/ui/ui_base_jni_headers.target.darwin-x86.mk
+++ b/ui/ui_base_jni_headers.target.darwin-x86.mk
@@ -128,6 +128,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -137,9 +138,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -210,6 +213,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -219,9 +223,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/ui_base_jni_headers.target.linux-arm.mk b/ui/ui_base_jni_headers.target.linux-arm.mk
index 964b4c25b3..4b5cca197d 100644
--- a/ui/ui_base_jni_headers.target.linux-arm.mk
+++ b/ui/ui_base_jni_headers.target.linux-arm.mk
@@ -126,6 +126,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -135,9 +136,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -205,6 +208,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -214,9 +218,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/ui_base_jni_headers.target.linux-mips.mk b/ui/ui_base_jni_headers.target.linux-mips.mk
index 34b810413d..192b12c967 100644
--- a/ui/ui_base_jni_headers.target.linux-mips.mk
+++ b/ui/ui_base_jni_headers.target.linux-mips.mk
@@ -125,6 +125,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -134,9 +135,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -203,6 +206,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -212,9 +216,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/ui_base_jni_headers.target.linux-x86.mk b/ui/ui_base_jni_headers.target.linux-x86.mk
index 521f5fa641..584c1d7ef0 100644
--- a/ui/ui_base_jni_headers.target.linux-x86.mk
+++ b/ui/ui_base_jni_headers.target.linux-x86.mk
@@ -128,6 +128,7 @@ MY_CFLAGS_Debug := \
MY_DEFS_Debug := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -137,9 +138,11 @@ MY_DEFS_Debug := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
@@ -210,6 +213,7 @@ MY_CFLAGS_Release := \
MY_DEFS_Release := \
'-DANGLE_DX11' \
+ '-DV8_DEPRECATION_WARNINGS' \
'-D_FILE_OFFSET_BITS=64' \
'-DNO_TCMALLOC' \
'-DDISABLE_NACL' \
@@ -219,9 +223,11 @@ MY_DEFS_Release := \
'-DENABLE_CONFIGURATION_POLICY' \
'-DDISCARDABLE_MEMORY_ALWAYS_SUPPORTED_NATIVELY' \
'-DSYSTEM_NATIVELY_SIGNALS_MEMORY_PRESSURE' \
+ '-DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC' \
'-DUSE_OPENSSL=1' \
'-DENABLE_EGLIMAGE=1' \
'-DCLD_VERSION=1' \
+ '-DENABLE_PRINTING=1' \
'-DENABLE_MANAGED_USERS=1' \
'-D__STDC_CONSTANT_MACROS' \
'-D__STDC_FORMAT_MACROS' \
diff --git a/ui/views/accessibility/native_view_accessibility_win.cc b/ui/views/accessibility/native_view_accessibility_win.cc
index f0f8e91e54..3e20cbbc4a 100644
--- a/ui/views/accessibility/native_view_accessibility_win.cc
+++ b/ui/views/accessibility/native_view_accessibility_win.cc
@@ -272,7 +272,7 @@ STDMETHODIMP NativeViewAccessibilityWin::accHitTest(
}
gfx::Point point(x_left, y_top);
- View::ConvertPointToTarget(NULL, view_, &point);
+ View::ConvertPointFromScreen(view_, &point);
// If the point is not inside this view, return false.
if (!view_->HitTestPoint(point)) {
diff --git a/ui/views/border.cc b/ui/views/border.cc
index eacd7b1dc5..f347c2a836 100644
--- a/ui/views/border.cc
+++ b/ui/views/border.cc
@@ -8,6 +8,7 @@
#include "base/memory/scoped_ptr.h"
#include "ui/gfx/canvas.h"
#include "ui/views/painter.h"
+#include "ui/views/view.h"
namespace views {
diff --git a/ui/views/border.h b/ui/views/border.h
index 3f06f6c85f..2e9c56bf4b 100644
--- a/ui/views/border.h
+++ b/ui/views/border.h
@@ -8,11 +8,11 @@
#include "base/basictypes.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/insets.h"
-#include "ui/views/view.h"
#include "ui/views/views_export.h"
namespace gfx{
class Canvas;
+class Size;
}
namespace views {
diff --git a/ui/views/bubble/bubble_border.cc b/ui/views/bubble/bubble_border.cc
index 237d91608d..aa9064ee97 100644
--- a/ui/views/bubble/bubble_border.cc
+++ b/ui/views/bubble/bubble_border.cc
@@ -12,8 +12,10 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/image/image_skia.h"
+#include "ui/gfx/rect.h"
#include "ui/gfx/skia_util.h"
#include "ui/views/painter.h"
+#include "ui/views/view.h"
namespace views {
diff --git a/ui/views/bubble/bubble_border.h b/ui/views/bubble/bubble_border.h
index 720b86f703..4fb961e6fb 100644
--- a/ui/views/bubble/bubble_border.h
+++ b/ui/views/bubble/bubble_border.h
@@ -12,6 +12,7 @@
namespace gfx {
class ImageSkia;
+class Rect;
}
namespace views {
diff --git a/ui/views/bubble/bubble_delegate.cc b/ui/views/bubble/bubble_delegate.cc
index 8c305c8f1b..515c400526 100644
--- a/ui/views/bubble/bubble_delegate.cc
+++ b/ui/views/bubble/bubble_delegate.cc
@@ -174,8 +174,12 @@ void BubbleDelegateView::OnWidgetActivationChanged(Widget* widget,
void BubbleDelegateView::OnWidgetBoundsChanged(Widget* widget,
const gfx::Rect& new_bounds) {
- if (move_with_anchor() && anchor_widget() == widget)
- SizeToContents();
+ if (anchor_widget() == widget) {
+ if (move_with_anchor())
+ SizeToContents();
+ else
+ GetWidget()->Close();
+ }
}
View* BubbleDelegateView::GetAnchorView() const {
diff --git a/ui/views/bubble/bubble_delegate_unittest.cc b/ui/views/bubble/bubble_delegate_unittest.cc
index 4c720885f0..91049007f0 100644
--- a/ui/views/bubble/bubble_delegate_unittest.cc
+++ b/ui/views/bubble/bubble_delegate_unittest.cc
@@ -244,6 +244,20 @@ TEST_F(BubbleDelegateTest, NonClientHitTest) {
}
}
+TEST_F(BubbleDelegateTest, CloseWhenAnchorWidgetBoundsChanged) {
+ scoped_ptr<Widget> anchor_widget(CreateTestWidget());
+ BubbleDelegateView* bubble_delegate = new BubbleDelegateView(
+ anchor_widget->GetContentsView(), BubbleBorder::NONE);
+ Widget* bubble_widget = BubbleDelegateView::CreateBubble(bubble_delegate);
+ test::TestWidgetObserver bubble_observer(bubble_widget);
+ EXPECT_FALSE(bubble_observer.widget_closed());
+
+ bubble_widget->Show();
+ EXPECT_TRUE(bubble_widget->IsVisible());
+ anchor_widget->SetBounds(gfx::Rect(10, 10, 100, 100));
+ EXPECT_FALSE(bubble_widget->IsVisible());
+}
+
// This class provides functionality to verify that the BubbleView shows up
// when we call BubbleDelegateView::StartFade(true) and is destroyed when we
// call BubbleDelegateView::StartFade(false).
diff --git a/ui/views/bubble/bubble_frame_view.cc b/ui/views/bubble/bubble_frame_view.cc
index 37b6c26c7c..ec60210b34 100644
--- a/ui/views/bubble/bubble_frame_view.cc
+++ b/ui/views/bubble/bubble_frame_view.cc
@@ -287,11 +287,13 @@ void BubbleFrameView::MirrorArrowIfOffScreen(
gfx::Rect mirror_bounds =
bubble_border_->GetBounds(anchor_rect, client_size);
// Restore the original arrow if mirroring doesn't show more of the bubble.
+ // Otherwise it should invoke parent's Layout() to layout the content based
+ // on the new bubble border.
if (GetOffScreenLength(monitor_rect, mirror_bounds, vertical) >=
GetOffScreenLength(monitor_rect, window_bounds, vertical))
bubble_border_->set_arrow(arrow);
- else
- SchedulePaint();
+ else if (parent())
+ parent()->Layout();
}
}
diff --git a/ui/views/bubble/tray_bubble_view.cc b/ui/views/bubble/tray_bubble_view.cc
index cab704f5ab..9259489397 100644
--- a/ui/views/bubble/tray_bubble_view.cc
+++ b/ui/views/bubble/tray_bubble_view.cc
@@ -179,7 +179,7 @@ class TrayBubbleContentMask : public ui::LayerDelegate {
explicit TrayBubbleContentMask(int corner_radius);
virtual ~TrayBubbleContentMask();
- ui::Layer* layer() { return &layer_; }
+ void set_bounds(gfx::Rect bounds) { bounds_ = bounds; }
// Overridden from LayerDelegate.
virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE;
@@ -187,25 +187,22 @@ class TrayBubbleContentMask : public ui::LayerDelegate {
virtual base::Closure PrepareForLayerBoundsChange() OVERRIDE;
private:
- ui::Layer layer_;
+ gfx::Rect bounds_;
SkScalar corner_radius_;
DISALLOW_COPY_AND_ASSIGN(TrayBubbleContentMask);
};
TrayBubbleContentMask::TrayBubbleContentMask(int corner_radius)
- : layer_(ui::LAYER_TEXTURED),
- corner_radius_(corner_radius) {
- layer_.set_delegate(this);
+ : corner_radius_(corner_radius) {
}
TrayBubbleContentMask::~TrayBubbleContentMask() {
- layer_.set_delegate(NULL);
}
void TrayBubbleContentMask::OnPaintLayer(gfx::Canvas* canvas) {
SkPath path;
- path.addRoundRect(gfx::RectToSkRect(gfx::Rect(layer()->bounds().size())),
+ path.addRoundRect(gfx::RectToSkRect(gfx::Rect(bounds_.size())),
corner_radius_, corner_radius_);
SkPaint paint;
paint.setAlpha(255);
@@ -325,6 +322,7 @@ TrayBubbleView::TrayBubbleView(gfx::NativeView parent_window,
mouse_actively_entered_(false) {
set_parent_window(parent_window);
set_notify_enter_exit_on_child(true);
+ set_move_with_anchor(true);
set_close_on_deactivate(init_params.close_on_deactivate);
set_margins(gfx::Insets());
bubble_border_ = new TrayBubbleBorder(this, GetAnchorView(), params_);
@@ -339,6 +337,10 @@ TrayBubbleView::TrayBubbleView(gfx::NativeView parent_window,
TrayBubbleView::~TrayBubbleView() {
mouse_watcher_.reset();
+
+ if (layer()->parent()->layer_mask_layer())
+ layer()->parent()->layer_mask_layer()->set_delegate(NULL);
+
// Inform host items (models) that their views are being destroyed.
if (delegate_)
delegate_->BubbleViewDestroyed();
@@ -349,8 +351,11 @@ void TrayBubbleView::InitializeAndShowBubble() {
SetAlignment(params_.arrow_alignment);
bubble_border_->UpdateArrowOffset();
- if (get_use_acceleration_when_possible())
- layer()->parent()->SetMaskLayer(bubble_content_mask_->layer());
+ if (get_use_acceleration_when_possible()) {
+ scoped_ptr<ui::Layer> mask_layer(new ui::Layer(ui::LAYER_TEXTURED));
+ mask_layer->set_delegate(bubble_content_mask_.get());
+ layer()->parent()->SetMaskLayer(mask_layer.Pass());
+ }
GetWidget()->Show();
UpdateBubble();
@@ -358,8 +363,11 @@ void TrayBubbleView::InitializeAndShowBubble() {
void TrayBubbleView::UpdateBubble() {
SizeToContents();
- if (get_use_acceleration_when_possible())
- bubble_content_mask_->layer()->SetBounds(layer()->bounds());
+ if (get_use_acceleration_when_possible()) {
+ bubble_content_mask_->set_bounds(layer()->bounds());
+ if (layer()->parent()->layer_mask_layer())
+ layer()->parent()->layer_mask_layer()->SetBounds(layer()->bounds());
+ }
GetWidget()->GetRootView()->SchedulePaint();
}
diff --git a/ui/views/controls/button/checkbox.cc b/ui/views/controls/button/checkbox.cc
index 640568972f..6db5802c4e 100644
--- a/ui/views/controls/button/checkbox.cc
+++ b/ui/views/controls/button/checkbox.cc
@@ -8,6 +8,7 @@
#include "ui/base/accessibility/accessible_view_state.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/views/controls/button/label_button_border.h"
+#include "ui/views/painter.h"
namespace views {
@@ -79,11 +80,13 @@ void Checkbox::SetChecked(bool checked) {
void Checkbox::Layout() {
LabelButton::Layout();
- // Construct a focus border that only surrounds the label area.
+ // Construct a focus painter that only surrounds the label area.
gfx::Rect rect = label()->GetMirroredBounds();
rect.Inset(-2, 3);
- set_focus_border(FocusBorder::CreateDashedFocusBorder(
- rect.x(), rect.y(), width() - rect.right(), height() - rect.bottom()));
+ SetFocusPainter(Painter::CreateDashedFocusPainterWithInsets(
+ gfx::Insets(rect.y(), rect.x(),
+ height() - rect.bottom(),
+ width() - rect.right())));
}
const char* Checkbox::GetClassName() const {
diff --git a/ui/views/controls/button/custom_button.cc b/ui/views/controls/button/custom_button.cc
index 4a15975d5b..2be2a2301e 100644
--- a/ui/views/controls/button/custom_button.cc
+++ b/ui/views/controls/button/custom_button.cc
@@ -9,6 +9,13 @@
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/gfx/animation/throb_animation.h"
#include "ui/gfx/screen.h"
+#include "ui/views/controls/button/blue_button.h"
+#include "ui/views/controls/button/checkbox.h"
+#include "ui/views/controls/button/image_button.h"
+#include "ui/views/controls/button/label_button.h"
+#include "ui/views/controls/button/menu_button.h"
+#include "ui/views/controls/button/radio_button.h"
+#include "ui/views/controls/button/text_button.h"
#include "ui/views/widget/widget.h"
namespace views {
@@ -22,6 +29,27 @@ const char CustomButton::kViewClassName[] = "CustomButton";
////////////////////////////////////////////////////////////////////////////////
// CustomButton, public:
+// static
+const CustomButton* CustomButton::AsCustomButton(const views::View* view) {
+ return AsCustomButton(const_cast<views::View*>(view));
+}
+
+CustomButton* CustomButton::AsCustomButton(views::View* view) {
+ if (view) {
+ const char* classname = view->GetClassName();
+ if (!strcmp(classname, Checkbox::kViewClassName) ||
+ !strcmp(classname, CustomButton::kViewClassName) ||
+ !strcmp(classname, ImageButton::kViewClassName) ||
+ !strcmp(classname, LabelButton::kViewClassName) ||
+ !strcmp(classname, RadioButton::kViewClassName) ||
+ !strcmp(classname, MenuButton::kViewClassName) ||
+ !strcmp(classname, TextButton::kViewClassName)) {
+ return static_cast<CustomButton*>(view);
+ }
+ }
+ return NULL;
+}
+
CustomButton::~CustomButton() {
}
@@ -201,8 +229,9 @@ void CustomButton::OnGestureEvent(ui::GestureEvent* event) {
if (event->type() == ui::ET_GESTURE_TAP && IsTriggerableEvent(*event)) {
// Set the button state to hot and start the animation fully faded in. The
- // TAP_UP event issued immediately after will set the state to STATE_NORMAL
- // beginning the fade out animation. See http://crbug.com/131184.
+ // GESTURE_END event issued immediately after will set the state to
+ // STATE_NORMAL beginning the fade out animation. See
+ // http://crbug.com/131184.
SetState(STATE_HOVERED);
hover_animation_->Reset(1.0);
NotifyClick(*event);
@@ -213,7 +242,8 @@ void CustomButton::OnGestureEvent(ui::GestureEvent* event) {
if (request_focus_on_press_)
RequestFocus();
event->StopPropagation();
- } else {
+ } else if (event->type() == ui::ET_GESTURE_TAP_CANCEL ||
+ event->type() == ui::ET_GESTURE_END) {
SetState(STATE_NORMAL);
}
if (!event->handled())
diff --git a/ui/views/controls/button/custom_button.h b/ui/views/controls/button/custom_button.h
index ecb49f60a3..c769d1b7b5 100644
--- a/ui/views/controls/button/custom_button.h
+++ b/ui/views/controls/button/custom_button.h
@@ -29,6 +29,9 @@ class VIEWS_EXPORT CustomButton : public Button,
// The menu button's class name.
static const char kViewClassName[];
+ static const CustomButton* AsCustomButton(const views::View* view);
+ static CustomButton* AsCustomButton(views::View* view);
+
virtual ~CustomButton();
// Get/sets the current display state of the button.
diff --git a/ui/views/controls/button/custom_button_unittest.cc b/ui/views/controls/button/custom_button_unittest.cc
index 061bbd6826..f7b11e648e 100644
--- a/ui/views/controls/button/custom_button_unittest.cc
+++ b/ui/views/controls/button/custom_button_unittest.cc
@@ -7,6 +7,13 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/layout.h"
#include "ui/gfx/screen.h"
+#include "ui/views/controls/button/checkbox.h"
+#include "ui/views/controls/button/image_button.h"
+#include "ui/views/controls/button/menu_button.h"
+#include "ui/views/controls/button/radio_button.h"
+#include "ui/views/controls/button/text_button.h"
+#include "ui/views/controls/link.h"
+#include "ui/views/controls/textfield/textfield.h"
#include "ui/views/test/views_test_base.h"
#if defined(USE_AURA)
@@ -31,6 +38,16 @@ class TestCustomButton : public CustomButton {
DISALLOW_COPY_AND_ASSIGN(TestCustomButton);
};
+#if defined(USE_AURA)
+void PerformGesture(CustomButton* button, ui::EventType event_type) {
+ ui::GestureEventDetails gesture_details(event_type, 0, 0);
+ base::TimeDelta time_stamp = base::TimeDelta::FromMicroseconds(0);
+ ui::GestureEvent gesture_event(gesture_details.type(), 0, 0, 0, time_stamp,
+ gesture_details, 1);
+ button->OnGestureEvent(&gesture_event);
+}
+#endif // USE_AURA
+
} // namespace
typedef ViewsTestBase CustomButtonTest;
@@ -101,4 +118,66 @@ TEST_F(CustomButtonTest, HoverStateOnVisibilityChange) {
#endif
}
+#if defined(USE_AURA)
+// Tests that gesture events correctly change the button state.
+TEST_F(CustomButtonTest, GestureEventsSetState) {
+ // Create a widget so that the CustomButton can query the hover state
+ // correctly.
+ scoped_ptr<Widget> widget(new Widget);
+ Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
+ params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.bounds = gfx::Rect(0, 0, 650, 650);
+ widget->Init(params);
+ widget->Show();
+
+ aura::test::TestCursorClient cursor_client(
+ widget->GetNativeView()->GetRootWindow());
+
+ TestCustomButton* button = new TestCustomButton(NULL);
+ widget->SetContentsView(button);
+
+ EXPECT_EQ(CustomButton::STATE_NORMAL, button->state());
+
+ PerformGesture(button, ui::ET_GESTURE_TAP_DOWN);
+ EXPECT_EQ(CustomButton::STATE_PRESSED, button->state());
+
+ PerformGesture(button, ui::ET_GESTURE_SHOW_PRESS);
+ EXPECT_EQ(CustomButton::STATE_PRESSED, button->state());
+
+ PerformGesture(button, ui::ET_GESTURE_TAP_CANCEL);
+ EXPECT_EQ(CustomButton::STATE_NORMAL, button->state());
+}
+
+#endif // USE_AURA
+
+// Make sure all subclasses of CustomButton are correctly recognized
+// as CustomButton.
+TEST_F(CustomButtonTest, AsCustomButton) {
+ string16 text;
+
+ TextButton text_button(NULL, text);
+ EXPECT_TRUE(CustomButton::AsCustomButton(&text_button));
+
+ ImageButton image_button(NULL);
+ EXPECT_TRUE(CustomButton::AsCustomButton(&image_button));
+
+ Checkbox checkbox(text);
+ EXPECT_TRUE(CustomButton::AsCustomButton(&checkbox));
+
+ RadioButton radio_button(text, 0);
+ EXPECT_TRUE(CustomButton::AsCustomButton(&radio_button));
+
+ MenuButton menu_button(NULL, text, NULL, false);
+ EXPECT_TRUE(CustomButton::AsCustomButton(&menu_button));
+
+ Label label;
+ EXPECT_FALSE(CustomButton::AsCustomButton(&label));
+
+ Link link(text);
+ EXPECT_FALSE(CustomButton::AsCustomButton(&link));
+
+ Textfield textfield(Textfield::STYLE_DEFAULT);
+ EXPECT_FALSE(CustomButton::AsCustomButton(&textfield));
+}
+
} // namespace views
diff --git a/ui/views/controls/button/image_button.cc b/ui/views/controls/button/image_button.cc
index 3811916d32..6a842346d2 100644
--- a/ui/views/controls/button/image_button.cc
+++ b/ui/views/controls/button/image_button.cc
@@ -10,6 +10,7 @@
#include "ui/gfx/canvas.h"
#include "ui/gfx/image/image_skia_operations.h"
#include "ui/gfx/scoped_canvas.h"
+#include "ui/views/painter.h"
#include "ui/views/widget/widget.h"
namespace views {
@@ -27,7 +28,8 @@ ImageButton::ImageButton(ButtonListener* listener)
h_alignment_(ALIGN_LEFT),
v_alignment_(ALIGN_TOP),
preferred_size_(kDefaultWidth, kDefaultHeight),
- draw_image_mirrored_(false) {
+ draw_image_mirrored_(false),
+ focus_painter_(Painter::CreateDashedFocusPainter()) {
// By default, we request that the gfx::Canvas passed to our View::OnPaint()
// implementation is flipped horizontally so that the button's images are
// mirrored when the UI directionality is right-to-left.
@@ -73,6 +75,10 @@ void ImageButton::SetImageAlignment(HorizontalAlignment h_align,
SchedulePaint();
}
+void ImageButton::SetFocusPainter(scoped_ptr<Painter> focus_painter) {
+ focus_painter_ = focus_painter.Pass();
+}
+
////////////////////////////////////////////////////////////////////////////////
// ImageButton, View overrides:
@@ -114,12 +120,25 @@ void ImageButton::OnPaint(gfx::Canvas* canvas) {
if (!overlay_image_.isNull())
canvas->DrawImageInt(overlay_image_, position.x(), position.y());
}
- OnPaintFocusBorder(canvas);
+
+ Painter::PaintFocusPainter(this, canvas, focus_painter());
}
////////////////////////////////////////////////////////////////////////////////
// ImageButton, protected:
+void ImageButton::OnFocus() {
+ View::OnFocus();
+ if (focus_painter_.get())
+ SchedulePaint();
+}
+
+void ImageButton::OnBlur() {
+ View::OnBlur();
+ if (focus_painter_.get())
+ SchedulePaint();
+}
+
gfx::ImageSkia ImageButton::GetImageToPaint() {
gfx::ImageSkia img;
diff --git a/ui/views/controls/button/image_button.h b/ui/views/controls/button/image_button.h
index dd6b4612bb..d74eceb130 100644
--- a/ui/views/controls/button/image_button.h
+++ b/ui/views/controls/button/image_button.h
@@ -13,6 +13,8 @@
namespace views {
+class Painter;
+
// An image button.
// Note that this type of button is not focusable by default and will not be
@@ -57,10 +59,7 @@ class VIEWS_EXPORT ImageButton : public CustomButton {
void SetImageAlignment(HorizontalAlignment h_align,
VerticalAlignment v_align);
- // Overridden from View:
- virtual gfx::Size GetPreferredSize() OVERRIDE;
- virtual const char* GetClassName() const OVERRIDE;
- virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+ void SetFocusPainter(scoped_ptr<Painter> focus_painter);
// Sets preferred size, so it could be correctly positioned in layout even if
// it is NULL.
@@ -73,7 +72,16 @@ class VIEWS_EXPORT ImageButton : public CustomButton {
draw_image_mirrored_ = mirrored;
}
+ // Overridden from View:
+ virtual gfx::Size GetPreferredSize() OVERRIDE;
+ virtual const char* GetClassName() const OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+
protected:
+ // Overridden from View:
+ virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
+
// Returns the image to paint. This is invoked from paint and returns a value
// from images.
virtual gfx::ImageSkia GetImageToPaint();
@@ -81,6 +89,8 @@ class VIEWS_EXPORT ImageButton : public CustomButton {
// Updates button background for |scale_factor|.
void UpdateButtonBackground(ui::ScaleFactor scale_factor);
+ Painter* focus_painter() { return focus_painter_.get(); }
+
// The images used to render the different states of this button.
gfx::ImageSkia images_[STATE_COUNT];
@@ -109,6 +119,8 @@ class VIEWS_EXPORT ImageButton : public CustomButton {
// resources.
bool draw_image_mirrored_;
+ scoped_ptr<Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(ImageButton);
};
diff --git a/ui/views/controls/button/image_button_unittest.cc b/ui/views/controls/button/image_button_unittest.cc
index dd57f6b53d..995b2056de 100644
--- a/ui/views/controls/button/image_button_unittest.cc
+++ b/ui/views/controls/button/image_button_unittest.cc
@@ -4,6 +4,7 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/layout.h"
+#include "ui/views/border.h"
#include "ui/views/controls/button/image_button.h"
#include "ui/views/test/views_test_base.h"
diff --git a/ui/views/controls/button/label_button.cc b/ui/views/controls/button/label_button.cc
index 243e92fffb..58e3fe6879 100644
--- a/ui/views/controls/button/label_button.cc
+++ b/ui/views/controls/button/label_button.cc
@@ -11,7 +11,7 @@
#include "ui/gfx/sys_color_change_listener.h"
#include "ui/native_theme/native_theme.h"
#include "ui/views/controls/button/label_button_border.h"
-#include "ui/views/focus_border.h"
+#include "ui/views/painter.h"
#include "ui/views/window/dialog_delegate.h"
#if defined(OS_WIN)
@@ -23,9 +23,6 @@ namespace {
// The spacing between the icon and text.
const int kSpacing = 5;
-// The length of the hover fade animation.
-const int kHoverAnimationDurationMs = 170;
-
// Default text and shadow colors for STYLE_BUTTON.
const SkColor kStyleButtonTextColor = SK_ColorBLACK;
const SkColor kStyleButtonShadowColor = SK_ColorWHITE;
@@ -35,6 +32,9 @@ const SkColor kStyleButtonShadowColor = SK_ColorWHITE;
namespace views {
// static
+const int LabelButton::kHoverAnimationDurationMs = 170;
+
+// static
const char LabelButton::kViewClassName[] = "LabelButton";
LabelButton::LabelButton(ButtonListener* listener, const string16& text)
@@ -146,8 +146,12 @@ void LabelButton::SetStyle(ButtonStyle style) {
style_ = style;
set_border(new LabelButtonBorder(style));
// Inset the button focus rect from the actual border; roughly match Windows.
- set_focus_border(style == STYLE_BUTTON ?
- NULL : FocusBorder::CreateDashedFocusBorder(3, 3, 3, 3));
+ if (style == STYLE_BUTTON) {
+ SetFocusPainter(scoped_ptr<Painter>());
+ } else {
+ SetFocusPainter(Painter::CreateDashedFocusPainterWithInsets(
+ gfx::Insets(3, 3, 3, 3)));
+ }
if (style == STYLE_BUTTON || style == STYLE_NATIVE_TEXTBUTTON) {
label_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
set_focusable(true);
@@ -159,6 +163,10 @@ void LabelButton::SetStyle(ButtonStyle style) {
ResetColorsFromNativeTheme();
}
+void LabelButton::SetFocusPainter(scoped_ptr<Painter> focus_painter) {
+ focus_painter_ = focus_painter.Pass();
+}
+
gfx::Size LabelButton::GetPreferredSize() {
// Use a temporary label copy for sizing to avoid calculation side-effects.
gfx::Font font = GetFont();
@@ -254,6 +262,23 @@ const char* LabelButton::GetClassName() const {
return kViewClassName;
}
+void LabelButton::OnPaint(gfx::Canvas* canvas) {
+ View::OnPaint(canvas);
+ Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
+}
+
+void LabelButton::OnFocus() {
+ View::OnFocus();
+ // Typically the border renders differently when focused.
+ SchedulePaint();
+}
+
+void LabelButton::OnBlur() {
+ View::OnBlur();
+ // Typically the border renders differently when focused.
+ SchedulePaint();
+}
+
void LabelButton::GetExtraParams(ui::NativeTheme::ExtraParams* params) const {
params->button.checked = false;
params->button.indeterminate = false;
diff --git a/ui/views/controls/button/label_button.h b/ui/views/controls/button/label_button.h
index c69ea037b1..ad7e226ad5 100644
--- a/ui/views/controls/button/label_button.h
+++ b/ui/views/controls/button/label_button.h
@@ -6,6 +6,7 @@
#define UI_VIEWS_CONTROLS_BUTTON_LABEL_BUTTON_H_
#include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/font.h"
#include "ui/gfx/image/image_skia.h"
@@ -16,10 +17,15 @@
namespace views {
+class Painter;
+
// LabelButton is an alternative to TextButton, it's not focusable by default.
class VIEWS_EXPORT LabelButton : public CustomButton,
public NativeThemeDelegate {
public:
+ // The length of the hover fade animation.
+ static const int kHoverAnimationDurationMs;
+
static const char kViewClassName[];
LabelButton(ButtonListener* listener, const string16& text);
@@ -65,13 +71,21 @@ class VIEWS_EXPORT LabelButton : public CustomButton,
ButtonStyle style() const { return style_; }
void SetStyle(ButtonStyle style);
- // Overridden from View:
+ void SetFocusPainter(scoped_ptr<Painter> focus_painter);
+
+ // View:
virtual gfx::Size GetPreferredSize() OVERRIDE;
virtual void Layout() OVERRIDE;
virtual const char* GetClassName() const OVERRIDE;
protected:
- Label* label() const { return label_; }
+ ImageView* image() const { return image_; }
+ Label* label() const { return label_; }
+
+ // View:
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
// Fill |params| with information about the button.
virtual void GetExtraParams(ui::NativeTheme::ExtraParams* params) const;
@@ -82,6 +96,9 @@ class VIEWS_EXPORT LabelButton : public CustomButton,
// Updates the image view to contain the appropriate button state image.
void UpdateImage();
+ // NativeThemeDelegate:
+ virtual gfx::Rect GetThemePaintRect() const OVERRIDE;
+
private:
FRIEND_TEST_ALL_PREFIXES(LabelButtonTest, Init);
FRIEND_TEST_ALL_PREFIXES(LabelButtonTest, Label);
@@ -89,16 +106,15 @@ class VIEWS_EXPORT LabelButton : public CustomButton,
FRIEND_TEST_ALL_PREFIXES(LabelButtonTest, LabelAndImage);
FRIEND_TEST_ALL_PREFIXES(LabelButtonTest, Font);
- // Overridden from CustomButton:
+ // CustomButton:
virtual void StateChanged() OVERRIDE;
- // Overridden from View:
+ // View:
virtual void ChildPreferredSizeChanged(View* child) OVERRIDE;
virtual void OnNativeThemeChanged(const ui::NativeTheme* theme) OVERRIDE;
- // Overridden from NativeThemeDelegate:
+ // NativeThemeDelegate:
virtual ui::NativeTheme::Part GetThemePart() const OVERRIDE;
- virtual gfx::Rect GetThemePaintRect() const OVERRIDE;
virtual ui::NativeTheme::State GetThemeState(
ui::NativeTheme::ExtraParams* params) const OVERRIDE;
virtual const gfx::Animation* GetThemeAnimation() const OVERRIDE;
@@ -131,6 +147,8 @@ class VIEWS_EXPORT LabelButton : public CustomButton,
// The button's overall style.
ButtonStyle style_;
+ scoped_ptr<Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(LabelButton);
};
diff --git a/ui/views/controls/button/label_button_border.cc b/ui/views/controls/button/label_button_border.cc
index 8307505b2e..d124764fd7 100644
--- a/ui/views/controls/button/label_button_border.cc
+++ b/ui/views/controls/button/label_button_border.cc
@@ -15,6 +15,7 @@
#include "ui/gfx/skia_util.h"
#include "ui/gfx/sys_color_change_listener.h"
#include "ui/native_theme/native_theme.h"
+#include "ui/views/border.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/native_theme_delegate.h"
@@ -58,7 +59,7 @@ void PaintHelper(LabelButtonBorder* border,
if (!painter && extra.button.is_focused)
painter = border->GetPainter(false, GetButtonState(state));
if (painter)
- painter->Paint(canvas, rect.size());
+ Painter::PaintPainterAt(canvas, painter, rect);
}
}
@@ -147,11 +148,6 @@ void LabelButtonBorder::Paint(const View& view, gfx::Canvas* canvas) {
rect.Inset(insets_);
canvas->FillRect(rect, extra.button.background_color);
}
-
- // Draw the Views focus border for the native theme style.
- if (style() == Button::STYLE_NATIVE_TEXTBUTTON &&
- view.focus_border() && extra.button.is_focused)
- view.focus_border()->Paint(view, canvas);
}
gfx::Insets LabelButtonBorder::GetInsets() const {
diff --git a/ui/views/controls/button/text_button.cc b/ui/views/controls/button/text_button.cc
index fcb0391087..e829405b9f 100644
--- a/ui/views/controls/button/text_button.cc
+++ b/ui/views/controls/button/text_button.cc
@@ -13,7 +13,7 @@
#include "ui/gfx/canvas.h"
#include "ui/gfx/image/image.h"
#include "ui/views/controls/button/button.h"
-#include "ui/views/focus_border.h"
+#include "ui/views/painter.h"
#include "ui/views/widget/widget.h"
#if defined(OS_WIN)
@@ -37,12 +37,11 @@ const int kPreferredPaddingVertical = 5;
const int kPreferredNativeThemePaddingHorizontal = 12;
const int kPreferredNativeThemePaddingVertical = 5;
-// By default the focus rect is drawn at the border of the view.
-// For a button, we inset the focus rect by 3 pixels so that it
-// doesn't draw on top of the button's border. This roughly matches
-// how the Windows native focus rect for buttons looks. A subclass
-// that draws a button with different padding may need to
-// override OnPaintFocusBorder and do something different.
+// By default the focus rect is drawn at the border of the view. For a button,
+// we inset the focus rect by 3 pixels so that it doesn't draw on top of the
+// button's border. This roughly matches how the Windows native focus rect for
+// buttons looks. A subclass that draws a button with different padding may need
+// to provide a different focus painter and do something different.
const int kFocusRectInset = 3;
// How long the hover fade animation should last.
@@ -218,7 +217,8 @@ TextButtonBase::TextButtonBase(ButtonListener* listener, const string16& text)
use_enabled_color_from_theme_(true),
use_disabled_color_from_theme_(true),
use_highlight_color_from_theme_(true),
- use_hover_color_from_theme_(true) {
+ use_hover_color_from_theme_(true),
+ focus_painter_(Painter::CreateDashedFocusPainter()) {
SetText(text);
// OnNativeThemeChanged sets the color member variables.
TextButtonBase::OnNativeThemeChanged(GetNativeTheme());
@@ -407,6 +407,18 @@ int TextButtonBase::ComputeCanvasStringFlags() const {
return flags;
}
+void TextButtonBase::OnFocus() {
+ View::OnFocus();
+ if (focus_painter_)
+ SchedulePaint();
+}
+
+void TextButtonBase::OnBlur() {
+ View::OnBlur();
+ if (focus_painter_)
+ SchedulePaint();
+}
+
void TextButtonBase::GetExtraParams(
ui::NativeTheme::ExtraParams* params) const {
params->button.checked = false;
@@ -452,11 +464,15 @@ gfx::Rect TextButtonBase::GetTextBounds() const {
return GetContentBounds(0);
}
+void TextButtonBase::SetFocusPainter(scoped_ptr<Painter> focus_painter) {
+ focus_painter_ = focus_painter.Pass();
+}
+
void TextButtonBase::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) {
if (mode == PB_NORMAL) {
OnPaintBackground(canvas);
OnPaintBorder(canvas);
- OnPaintFocusBorder(canvas);
+ Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
}
gfx::Rect text_bounds(GetTextBounds());
@@ -601,10 +617,9 @@ TextButton::TextButton(ButtonListener* listener, const string16& text)
icon_text_spacing_(kDefaultIconTextSpacing),
ignore_minimum_size_(true) {
set_border(new TextButtonDefaultBorder);
- set_focus_border(FocusBorder::CreateDashedFocusBorder(kFocusRectInset,
- kFocusRectInset,
- kFocusRectInset,
- kFocusRectInset));
+ SetFocusPainter(Painter::CreateDashedFocusPainterWithInsets(
+ gfx::Insets(kFocusRectInset, kFocusRectInset,
+ kFocusRectInset, kFocusRectInset)));
}
TextButton::~TextButton() {
diff --git a/ui/views/controls/button/text_button.h b/ui/views/controls/button/text_button.h
index 49f12c681d..18d2ba2721 100644
--- a/ui/views/controls/button/text_button.h
+++ b/ui/views/controls/button/text_button.h
@@ -166,6 +166,9 @@ class VIEWS_EXPORT TextButtonBase : public CustomButton,
bool show_multiple_icon_states() const { return show_multiple_icon_states_; }
void SetShowMultipleIconStates(bool show_multiple_icon_states);
+ void SetFocusPainter(scoped_ptr<Painter> focus_painter);
+ Painter* focus_painter() { return focus_painter_.get(); }
+
// Paint the button into the specified canvas. If |mode| is |PB_FOR_DRAG|, the
// function paints a drag image representation into the canvas.
enum PaintButtonMode { PB_NORMAL, PB_FOR_DRAG };
@@ -221,6 +224,10 @@ class VIEWS_EXPORT TextButtonBase : public CustomButton,
virtual ui::NativeTheme::State GetForegroundThemeState(
ui::NativeTheme::ExtraParams* params) const OVERRIDE;
+ // Overridden from View:
+ virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
+
virtual void GetExtraParams(ui::NativeTheme::ExtraParams* params) const;
virtual gfx::Rect GetTextBounds() const;
@@ -289,6 +296,8 @@ class VIEWS_EXPORT TextButtonBase : public CustomButton,
bool use_highlight_color_from_theme_;
bool use_hover_color_from_theme_;
+ scoped_ptr<Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(TextButtonBase);
};
diff --git a/ui/views/controls/combobox/combobox.cc b/ui/views/controls/combobox/combobox.cc
index 2600b174f0..41e9938461 100644
--- a/ui/views/controls/combobox/combobox.cc
+++ b/ui/views/controls/combobox/combobox.cc
@@ -12,16 +12,24 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/events/event.h"
#include "ui/events/keycodes/keyboard_codes.h"
+#include "ui/gfx/animation/throb_animation.h"
#include "ui/gfx/canvas.h"
+#include "ui/gfx/image/image.h"
+#include "ui/gfx/scoped_canvas.h"
#include "ui/native_theme/native_theme.h"
+#include "ui/views/background.h"
#include "ui/views/color_constants.h"
+#include "ui/views/controls/button/custom_button.h"
+#include "ui/views/controls/button/label_button.h"
#include "ui/views/controls/combobox/combobox_listener.h"
#include "ui/views/controls/focusable_border.h"
#include "ui/views/controls/menu/menu_runner.h"
+#include "ui/views/controls/menu/menu_runner_handler.h"
#include "ui/views/controls/menu/submenu_view.h"
#include "ui/views/controls/prefix_selector.h"
#include "ui/views/ime/input_method.h"
#include "ui/views/mouse_constants.h"
+#include "ui/views/painter.h"
#include "ui/views/widget/widget.h"
namespace views {
@@ -39,6 +47,8 @@ const int kMinComboboxWidth = 25;
// Size of the combobox arrow margins
const int kDisclosureArrowLeftPadding = 7;
const int kDisclosureArrowRightPadding = 7;
+const int kDisclosureArrowButtonLeftPadding = 11;
+const int kDisclosureArrowButtonRightPadding = 12;
// Define the id of the first item in the menu (since it needs to be > 0)
const int kFirstMenuItemId = 1000;
@@ -48,6 +58,19 @@ const SkColor kInvalidTextColor = SK_ColorWHITE;
// Used to indicate that no item is currently selected by the user.
const int kNoSelection = -1;
+const int kBodyButtonImages[] = IMAGE_GRID(IDR_COMBOBOX_BUTTON);
+const int kHoveredBodyButtonImages[] = IMAGE_GRID(IDR_COMBOBOX_BUTTON_H);
+const int kPressedBodyButtonImages[] = IMAGE_GRID(IDR_COMBOBOX_BUTTON_P);
+
+#define MENU_IMAGE_GRID(x) { \
+ x ## _MENU_TOP, x ## _MENU_CENTER, x ## _MENU_BOTTOM, }
+
+const int kMenuButtonImages[] = MENU_IMAGE_GRID(IDR_COMBOBOX_BUTTON);
+const int kHoveredMenuButtonImages[] = MENU_IMAGE_GRID(IDR_COMBOBOX_BUTTON_H);
+const int kPressedMenuButtonImages[] = MENU_IMAGE_GRID(IDR_COMBOBOX_BUTTON_P);
+
+#undef MENU_IMAGE_GRID
+
// The background to use for invalid comboboxes.
class InvalidBackground : public Background {
public:
@@ -66,6 +89,23 @@ class InvalidBackground : public Background {
DISALLOW_COPY_AND_ASSIGN(InvalidBackground);
};
+// The transparent button which holds a button state but is not rendered.
+class TransparentButton : public CustomButton {
+ public:
+ TransparentButton(ButtonListener* listener)
+ : CustomButton(listener) {
+ SetAnimationDuration(LabelButton::kHoverAnimationDurationMs);
+ }
+ virtual ~TransparentButton() {}
+
+ double GetAnimationValue() const {
+ return hover_animation_->GetCurrentValue();
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TransparentButton);
+};
+
// Returns the next or previous valid index (depending on |increment|'s value).
// Skips separator or disabled indices. Returns -1 if there is no valid adjacent
// index.
@@ -81,6 +121,102 @@ int GetAdjacentIndex(ui::ComboboxModel* model, int increment, int index) {
return kNoSelection;
}
+// Returns the image resource ids of an array for the body button.
+//
+// TODO(hajimehoshi): This function should return the images for the 'disabled'
+// status. (crbug/270052)
+//
+// TODO(hajimehoshi): Currently, |focused| is ignored. This should return the
+// images for the 'focused' status. (crbug/270052)
+const int* GetBodyButtonImageIds(bool focused,
+ Button::ButtonState state,
+ size_t* num) {
+ DCHECK(num);
+ *num = 9;
+ switch (state) {
+ case Button::STATE_DISABLED:
+ return kBodyButtonImages;
+ case Button::STATE_NORMAL:
+ return kBodyButtonImages;
+ case Button::STATE_HOVERED:
+ return kHoveredBodyButtonImages;
+ case Button::STATE_PRESSED:
+ return kPressedBodyButtonImages;
+ default:
+ NOTREACHED();
+ }
+ return NULL;
+}
+
+// Returns the image resource ids of an array for the menu button.
+const int* GetMenuButtonImageIds(bool focused,
+ Button::ButtonState state,
+ size_t* num) {
+ DCHECK(num);
+ *num = 3;
+ switch (state) {
+ case Button::STATE_DISABLED:
+ return kMenuButtonImages;
+ case Button::STATE_NORMAL:
+ return kMenuButtonImages;
+ case Button::STATE_HOVERED:
+ return kHoveredMenuButtonImages;
+ case Button::STATE_PRESSED:
+ return kPressedMenuButtonImages;
+ default:
+ NOTREACHED();
+ }
+ return NULL;
+}
+
+// Returns the images for the menu buttons.
+std::vector<const gfx::ImageSkia*> GetMenuButtonImages(
+ bool focused,
+ Button::ButtonState state) {
+ const int* ids;
+ size_t num_ids;
+ ids = GetMenuButtonImageIds(focused, state, &num_ids);
+ std::vector<const gfx::ImageSkia*> images;
+ images.reserve(num_ids);
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ for (size_t i = 0; i < num_ids; i++)
+ images.push_back(rb.GetImageSkiaNamed(ids[i]));
+ return images;
+}
+
+// Paints three images in a column at the given location. The center image is
+// stretched so as to fit the given height.
+void PaintImagesVertically(gfx::Canvas* canvas,
+ const gfx::ImageSkia& top_image,
+ const gfx::ImageSkia& center_image,
+ const gfx::ImageSkia& bottom_image,
+ int x, int y, int width, int height) {
+ canvas->DrawImageInt(top_image,
+ 0, 0, top_image.width(), top_image.height(),
+ x, y, width, top_image.height(), false);
+ y += top_image.height();
+ int center_height = height - top_image.height() - bottom_image.height();
+ canvas->DrawImageInt(center_image,
+ 0, 0, center_image.width(), center_image.height(),
+ x, y, width, center_height, false);
+ y += center_height;
+ canvas->DrawImageInt(bottom_image,
+ 0, 0, bottom_image.width(), bottom_image.height(),
+ x, y, width, bottom_image.height(), false);
+}
+
+// Paints the arrow button.
+void PaintArrowButton(
+ gfx::Canvas* canvas,
+ const std::vector<const gfx::ImageSkia*>& arrow_button_images,
+ int x, int height) {
+ PaintImagesVertically(canvas,
+ *arrow_button_images[0],
+ *arrow_button_images[1],
+ *arrow_button_images[2],
+ x, 0, arrow_button_images[0]->width(), height);
+}
+
} // namespace
// static
@@ -91,17 +227,46 @@ const char Combobox::kViewClassName[] = "views/Combobox";
Combobox::Combobox(ui::ComboboxModel* model)
: model_(model),
+ style_(STYLE_SHOW_DROP_DOWN_ON_CLICK),
listener_(NULL),
selected_index_(model_->GetDefaultIndex()),
invalid_(false),
- text_border_(new FocusableBorder()),
disclosure_arrow_(ui::ResourceBundle::GetSharedInstance().GetImageNamed(
IDR_MENU_DROPARROW).ToImageSkia()),
- dropdown_open_(false) {
+ dropdown_open_(false),
+ text_button_(new TransparentButton(this)),
+ arrow_button_(new TransparentButton(this)) {
model_->AddObserver(this);
UpdateFromModel();
set_focusable(true);
- set_border(text_border_);
+ UpdateBorder();
+
+ // Initialize the button images.
+ Button::ButtonState button_states[] = {
+ Button::STATE_DISABLED,
+ Button::STATE_NORMAL,
+ Button::STATE_HOVERED,
+ Button::STATE_PRESSED,
+ };
+ for (int i = 0; i < 2; i++) {
+ for (size_t state_index = 0; state_index < arraysize(button_states);
+ state_index++) {
+ Button::ButtonState state = button_states[state_index];
+ size_t num;
+ bool focused = !!i;
+ const int* ids = GetBodyButtonImageIds(focused, state, &num);
+ body_button_painters_[focused][state].reset(
+ Painter::CreateImageGridPainter(ids));
+ menu_button_images_[focused][state] = GetMenuButtonImages(focused, state);
+ }
+ }
+
+ text_button_->SetVisible(true);
+ arrow_button_->SetVisible(true);
+ text_button_->set_focusable(false);
+ arrow_button_->set_focusable(false);
+ AddChildView(text_button_);
+ AddChildView(arrow_button_);
}
Combobox::~Combobox() {
@@ -114,6 +279,16 @@ const gfx::Font& Combobox::GetFont() {
return rb.GetFont(ui::ResourceBundle::BaseFont);
}
+void Combobox::SetStyle(Style style) {
+ if (style_ == style)
+ return;
+
+ style_ = style;
+
+ UpdateBorder();
+ PreferredSizeChanged();
+}
+
void Combobox::ModelChanged() {
selected_index_ = std::min(0, model_->GetItemCount());
UpdateFromModel();
@@ -140,14 +315,14 @@ void Combobox::SetAccessibleName(const string16& name) {
}
void Combobox::SetInvalid(bool invalid) {
+ if (invalid == invalid_)
+ return;
+
invalid_ = invalid;
- if (invalid) {
- text_border_->SetColor(kWarningColor);
- set_background(new InvalidBackground());
- } else {
- text_border_->UseDefaultColor();
- set_background(NULL);
- }
+
+ set_background(invalid_ ? new InvalidBackground() : NULL);
+ UpdateBorder();
+ SchedulePaint();
}
ui::TextInputClient* Combobox::GetTextInputClient() {
@@ -156,6 +331,30 @@ ui::TextInputClient* Combobox::GetTextInputClient() {
return selector_.get();
}
+void Combobox::Layout() {
+ PrefixDelegate::Layout();
+
+ gfx::Insets insets = GetInsets();
+ int text_button_width = 0;
+ int arrow_button_width = 0;
+
+ switch (style_) {
+ case STYLE_SHOW_DROP_DOWN_ON_CLICK: {
+ arrow_button_width = width();
+ break;
+ }
+ case STYLE_NOTIFY_ON_CLICK: {
+ arrow_button_width = GetDisclosureArrowLeftPadding() +
+ disclosure_arrow_->width() + GetDisclosureArrowRightPadding();
+ text_button_width = width() - arrow_button_width;
+ break;
+ }
+ }
+
+ int arrow_button_x = std::max(0, text_button_width);
+ text_button_->SetBounds(0, 0, std::max(0, text_button_width), height());
+ arrow_button_->SetBounds(arrow_button_x, 0, arrow_button_width, height());
+}
bool Combobox::IsItemChecked(int id) const {
return false;
@@ -201,9 +400,8 @@ gfx::Size Combobox::GetPreferredSize() {
// the minimum width for the dropdown list.
gfx::Insets insets = GetInsets();
int total_width = std::max(kMinComboboxWidth, content_size_.width()) +
- insets.width() + kDisclosureArrowLeftPadding +
- disclosure_arrow_->width() + kDisclosureArrowRightPadding;
-
+ insets.width() + GetDisclosureArrowLeftPadding() +
+ disclosure_arrow_->width() + GetDisclosureArrowRightPadding();
return gfx::Size(total_width, content_size_.height() + insets.height());
}
@@ -220,22 +418,6 @@ bool Combobox::SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) {
return dropdown_open_;
}
-bool Combobox::OnMousePressed(const ui::MouseEvent& mouse_event) {
- RequestFocus();
- const base::TimeDelta delta = base::Time::Now() - closed_time_;
- if (mouse_event.IsLeftMouseButton() &&
- (delta.InMilliseconds() > kMinimumMsBetweenButtonClicks)) {
- UpdateFromModel();
- ShowDropDownMenu(ui::MENU_SOURCE_MOUSE);
- }
-
- return true;
-}
-
-bool Combobox::OnMouseDragged(const ui::MouseEvent& mouse_event) {
- return true;
-}
-
bool Combobox::OnKeyPressed(const ui::KeyEvent& e) {
// TODO(oshima): handle IME.
DCHECK_EQ(e.type(), ui::ET_KEY_PRESSED);
@@ -280,6 +462,20 @@ bool Combobox::OnKeyPressed(const ui::KeyEvent& e) {
new_index = GetAdjacentIndex(model(), -1, selected_index_);
break;
+ // Click the button only when the button style mode.
+ case ui::VKEY_SPACE:
+ if (style_ == STYLE_NOTIFY_ON_CLICK) {
+ // When pressing space, the click event will be raised after the key is
+ // released.
+ text_button_->SetState(Button::STATE_PRESSED);
+ }
+ break;
+
+ // Click the button only when the button style mode.
+ case ui::VKEY_RETURN:
+ HandleClickEvent();
+ break;
+
default:
return false;
}
@@ -297,36 +493,44 @@ bool Combobox::OnKeyPressed(const ui::KeyEvent& e) {
}
bool Combobox::OnKeyReleased(const ui::KeyEvent& e) {
- return false; // crbug.com/127520
-}
+ if (style_ != STYLE_NOTIFY_ON_CLICK)
+ return false; // crbug.com/127520
-void Combobox::OnGestureEvent(ui::GestureEvent* gesture) {
- if (gesture->type() == ui::ET_GESTURE_TAP) {
- UpdateFromModel();
- ShowDropDownMenu(ui::MENU_SOURCE_TOUCH);
- gesture->StopPropagation();
- return;
- }
- View::OnGestureEvent(gesture);
+ if (e.key_code() == ui::VKEY_SPACE)
+ HandleClickEvent();
+
+ return false;
}
void Combobox::OnPaint(gfx::Canvas* canvas) {
- OnPaintBackground(canvas);
- PaintText(canvas);
- OnPaintBorder(canvas);
+ switch (style_) {
+ case STYLE_SHOW_DROP_DOWN_ON_CLICK: {
+ OnPaintBackground(canvas);
+ PaintText(canvas);
+ OnPaintBorder(canvas);
+ break;
+ }
+ case STYLE_NOTIFY_ON_CLICK: {
+ PaintButtons(canvas);
+ PaintText(canvas);
+ break;
+ }
+ }
}
void Combobox::OnFocus() {
GetInputMethod()->OnFocus();
- text_border_->set_has_focus(true);
View::OnFocus();
+ // Border renders differently when focused.
+ SchedulePaint();
}
void Combobox::OnBlur() {
GetInputMethod()->OnBlur();
if (selector_)
selector_->OnViewBlur();
- text_border_->set_has_focus(false);
+ // Border renders differently when focused.
+ SchedulePaint();
}
void Combobox::GetAccessibleState(ui::AccessibleViewState* state) {
@@ -341,6 +545,28 @@ void Combobox::OnModelChanged() {
ModelChanged();
}
+void Combobox::ButtonPressed(Button* sender, const ui::Event& event) {
+ RequestFocus();
+
+ if (sender == text_button_) {
+ HandleClickEvent();
+ } else {
+ DCHECK_EQ(arrow_button_, sender);
+ // TODO(hajimehoshi): Fix the problem that the arrow button blinks when
+ // cliking this while the dropdown menu is opened.
+ const base::TimeDelta delta = base::Time::Now() - closed_time_;
+ if (delta.InMilliseconds() <= kMinimumMsBetweenButtonClicks)
+ return;
+
+ ui::MenuSourceType source_type = ui::MENU_SOURCE_MOUSE;
+ if (event.IsKeyEvent())
+ source_type = ui::MENU_SOURCE_KEYBOARD;
+ else if (event.IsGestureEvent() || event.IsTouchEvent())
+ source_type = ui::MENU_SOURCE_TOUCH;
+ ShowDropDownMenu(source_type);
+ }
+}
+
void Combobox::UpdateFromModel() {
int max_width = 0;
const gfx::Font& font = Combobox::GetFont();
@@ -369,6 +595,15 @@ void Combobox::UpdateFromModel() {
content_size_.SetSize(max_width, font.GetHeight());
}
+void Combobox::UpdateBorder() {
+ FocusableBorder* border = new FocusableBorder();
+ if (style_ == STYLE_NOTIFY_ON_CLICK)
+ border->SetInsets(8, 13, 8, 13);
+ if (invalid_)
+ border->SetColor(kWarningColor);
+ set_border(border);
+}
+
void Combobox::AdjustBoundsForRTLUI(gfx::Rect* rect) const {
rect->set_x(GetMirroredXForRect(*rect));
}
@@ -376,7 +611,7 @@ void Combobox::AdjustBoundsForRTLUI(gfx::Rect* rect) const {
void Combobox::PaintText(gfx::Canvas* canvas) {
gfx::Insets insets = GetInsets();
- canvas->Save();
+ gfx::ScopedCanvas scoped_canvas(canvas);
canvas->ClipRect(GetContentsBounds());
int x = insets.left();
@@ -392,8 +627,8 @@ void Combobox::PaintText(gfx::Canvas* canvas) {
selected_index_ = 0;
string16 text = model()->GetItemAt(selected_index_);
- int disclosure_arrow_offset = width() - disclosure_arrow_->width()
- - kDisclosureArrowLeftPadding - kDisclosureArrowRightPadding;
+ int disclosure_arrow_offset = width() - disclosure_arrow_->width() -
+ GetDisclosureArrowLeftPadding() - GetDisclosureArrowRightPadding();
const gfx::Font& font = Combobox::GetFont();
int text_width = font.GetStringWidth(text);
@@ -404,7 +639,8 @@ void Combobox::PaintText(gfx::Canvas* canvas) {
AdjustBoundsForRTLUI(&text_bounds);
canvas->DrawStringInt(text, font, text_color, text_bounds);
- gfx::Rect arrow_bounds(disclosure_arrow_offset + kDisclosureArrowLeftPadding,
+ int arrow_x = disclosure_arrow_offset + GetDisclosureArrowLeftPadding();
+ gfx::Rect arrow_bounds(arrow_x,
height() / 2 - disclosure_arrow_->height() / 2,
disclosure_arrow_->width(),
disclosure_arrow_->height());
@@ -416,8 +652,63 @@ void Combobox::PaintText(gfx::Canvas* canvas) {
paint.setXfermodeMode(SkXfermode::kDstOut_Mode);
canvas->DrawImageInt(*disclosure_arrow_, arrow_bounds.x(), arrow_bounds.y(),
paint);
+}
+
+void Combobox::PaintButtons(gfx::Canvas* canvas) {
+ DCHECK(style_ == STYLE_NOTIFY_ON_CLICK);
+
+ gfx::ScopedCanvas scoped_canvas(canvas);
+ if (base::i18n::IsRTL()) {
+ canvas->Translate(gfx::Vector2d(width(), 0));
+ canvas->Scale(-1, 1);
+ }
+
+ bool focused = HasFocus();
+ const std::vector<const gfx::ImageSkia*>& arrow_button_images =
+ menu_button_images_[focused][
+ arrow_button_->state() == Button::STATE_HOVERED ?
+ Button::STATE_NORMAL : arrow_button_->state()];
+
+ int text_button_hover_alpha =
+ text_button_->state() == Button::STATE_PRESSED ? 0 :
+ static_cast<int>(static_cast<TransparentButton*>(text_button_)->
+ GetAnimationValue() * 255);
+ if (text_button_hover_alpha < 255) {
+ canvas->SaveLayerAlpha(255 - text_button_hover_alpha);
+ Painter* text_button_painter =
+ body_button_painters_[focused][
+ text_button_->state() == Button::STATE_HOVERED ?
+ Button::STATE_NORMAL : text_button_->state()].get();
+ Painter::PaintPainterAt(canvas, text_button_painter,
+ gfx::Rect(0, 0, text_button_->width(), height()));
+ canvas->Restore();
+ }
+ if (0 < text_button_hover_alpha) {
+ canvas->SaveLayerAlpha(text_button_hover_alpha);
+ Painter* text_button_hovered_painter =
+ body_button_painters_[focused][Button::STATE_HOVERED].get();
+ Painter::PaintPainterAt(canvas, text_button_hovered_painter,
+ gfx::Rect(0, 0, text_button_->width(), height()));
+ canvas->Restore();
+ }
- canvas->Restore();
+ int arrow_button_hover_alpha =
+ arrow_button_->state() == Button::STATE_PRESSED ? 0 :
+ static_cast<int>(static_cast<TransparentButton*>(arrow_button_)->
+ GetAnimationValue() * 255);
+ if (arrow_button_hover_alpha < 255) {
+ canvas->SaveLayerAlpha(255 - arrow_button_hover_alpha);
+ PaintArrowButton(canvas, arrow_button_images, arrow_button_->x(), height());
+ canvas->Restore();
+ }
+ if (0 < arrow_button_hover_alpha) {
+ canvas->SaveLayerAlpha(arrow_button_hover_alpha);
+ const std::vector<const gfx::ImageSkia*>& arrow_button_hovered_images =
+ menu_button_images_[focused][Button::STATE_HOVERED];
+ PaintArrowButton(canvas, arrow_button_hovered_images,
+ arrow_button_->x(), height());
+ canvas->Restore();
+ }
}
void Combobox::ShowDropDownMenu(ui::MenuSourceType source_type) {
@@ -427,8 +718,8 @@ void Combobox::ShowDropDownMenu(ui::MenuSourceType source_type) {
// Extend the menu to the width of the combobox.
MenuItemView* menu = dropdown_list_menu_runner_->GetMenu();
SubmenuView* submenu = menu->CreateSubmenu();
- submenu->set_minimum_preferred_width(size().width() -
- (kMenuBorderWidthLeft + kMenuBorderWidthRight));
+ submenu->set_minimum_preferred_width(
+ size().width() - (kMenuBorderWidthLeft + kMenuBorderWidthRight));
gfx::Rect lb = GetLocalBounds();
gfx::Point menu_position(lb.origin());
@@ -441,16 +732,25 @@ void Combobox::ShowDropDownMenu(ui::MenuSourceType source_type) {
View::ConvertPointToScreen(this, &menu_position);
if (menu_position.x() < 0)
- menu_position.set_x(0);
+ menu_position.set_x(0);
gfx::Rect bounds(menu_position, lb.size());
+ Button::ButtonState original_state = Button::STATE_NORMAL;
+ if (arrow_button_) {
+ original_state = arrow_button_->state();
+ arrow_button_->SetState(Button::STATE_PRESSED);
+ }
dropdown_open_ = true;
if (dropdown_list_menu_runner_->RunMenuAt(GetWidget(), NULL, bounds,
- MenuItemView::TOPLEFT, source_type, MenuRunner::COMBOBOX) ==
- MenuRunner::MENU_DELETED)
+ MenuItemView::TOPLEFT, source_type,
+ MenuRunner::COMBOBOX) ==
+ MenuRunner::MENU_DELETED) {
return;
+ }
dropdown_open_ = false;
+ if (arrow_button_)
+ arrow_button_->SetState(original_state);
closed_time_ = base::Time::Now();
// Need to explicitly clear mouse handler so that events get sent
@@ -460,10 +760,11 @@ void Combobox::ShowDropDownMenu(ui::MenuSourceType source_type) {
}
void Combobox::OnSelectionChanged() {
- if (listener_)
- listener_->OnSelectedIndexChanged(this);
NotifyAccessibilityEvent(ui::AccessibilityTypes::EVENT_VALUE_CHANGED, false);
SchedulePaint();
+ if (listener_)
+ listener_->OnSelectedIndexChanged(this);
+ // |this| may now be deleted.
}
int Combobox::MenuCommandToIndex(int menu_command_id) const {
@@ -474,4 +775,34 @@ int Combobox::MenuCommandToIndex(int menu_command_id) const {
return index;
}
+int Combobox::GetDisclosureArrowLeftPadding() const {
+ switch (style_) {
+ case STYLE_SHOW_DROP_DOWN_ON_CLICK:
+ return kDisclosureArrowLeftPadding;
+ case STYLE_NOTIFY_ON_CLICK:
+ return kDisclosureArrowButtonLeftPadding;
+ }
+ NOTREACHED();
+ return 0;
+}
+
+int Combobox::GetDisclosureArrowRightPadding() const {
+ switch (style_) {
+ case STYLE_SHOW_DROP_DOWN_ON_CLICK:
+ return kDisclosureArrowRightPadding;
+ case STYLE_NOTIFY_ON_CLICK:
+ return kDisclosureArrowButtonRightPadding;
+ }
+ NOTREACHED();
+ return 0;
+}
+
+void Combobox::HandleClickEvent() {
+ if (style_ != STYLE_NOTIFY_ON_CLICK)
+ return;
+
+ if (listener_)
+ listener_->OnComboboxTextButtonClicked(this);
+}
+
} // namespace views
diff --git a/ui/views/controls/combobox/combobox.h b/ui/views/controls/combobox/combobox.h
index 91469d8073..8ec45c9e21 100644
--- a/ui/views/controls/combobox/combobox.h
+++ b/ui/views/controls/combobox/combobox.h
@@ -9,12 +9,15 @@
#include "base/time/time.h"
#include "ui/base/models/combobox_model_observer.h"
+#include "ui/gfx/animation/animation_delegate.h"
#include "ui/gfx/native_widget_types.h"
+#include "ui/views/controls/button/button.h"
#include "ui/views/controls/menu/menu_delegate.h"
#include "ui/views/controls/prefix_delegate.h"
namespace gfx {
class Font;
+class SlideAnimation;
}
namespace ui {
@@ -24,16 +27,30 @@ class ComboboxModel;
namespace views {
class ComboboxListener;
+class ComboboxMenuRunner;
+class CustomButton;
class FocusableBorder;
class MenuRunner;
+class MenuRunnerHandler;
+class Painter;
class PrefixSelector;
// A non-editable combobox (aka a drop-down list or selector).
-class VIEWS_EXPORT Combobox
- : public MenuDelegate,
- public PrefixDelegate,
- public ui::ComboboxModelObserver {
+// Combobox has two distinct parts, the drop down arrow and the text. When the
+// user clicks on the text the drop down is either shown
+// (STYLE_SHOW_DROP_DOWN_ON_CLICK) or the listener is notified
+// (STYLE_NOTIFY_ON_CLICK).
+class VIEWS_EXPORT Combobox : public MenuDelegate,
+ public PrefixDelegate,
+ public ui::ComboboxModelObserver,
+ public ButtonListener {
public:
+ // The style of the combobox.
+ enum Style {
+ STYLE_SHOW_DROP_DOWN_ON_CLICK,
+ STYLE_NOTIFY_ON_CLICK,
+ };
+
// The combobox's class name.
static const char kViewClassName[];
@@ -46,6 +63,8 @@ class VIEWS_EXPORT Combobox
// Sets the listener which will be called when a selection has been made.
void set_listener(ComboboxListener* listener) { listener_ = listener; }
+ void SetStyle(Style style);
+
// Informs the combobox that its model changed.
void ModelChanged();
@@ -72,16 +91,14 @@ class VIEWS_EXPORT Combobox
virtual gfx::Size GetPreferredSize() OVERRIDE;
virtual const char* GetClassName() const OVERRIDE;
virtual bool SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) OVERRIDE;
- virtual bool OnMousePressed(const ui::MouseEvent& mouse_event) OVERRIDE;
- virtual bool OnMouseDragged(const ui::MouseEvent& mouse_event) OVERRIDE;
virtual bool OnKeyPressed(const ui::KeyEvent& e) OVERRIDE;
virtual bool OnKeyReleased(const ui::KeyEvent& e) OVERRIDE;
- virtual void OnGestureEvent(ui::GestureEvent* gesture) OVERRIDE;
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
virtual void OnFocus() OVERRIDE;
virtual void OnBlur() OVERRIDE;
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
virtual ui::TextInputClient* GetTextInputClient() OVERRIDE;
+ virtual void Layout() OVERRIDE;
// Overridden from MenuDelegate:
virtual bool IsItemChecked(int id) const OVERRIDE;
@@ -98,16 +115,28 @@ class VIEWS_EXPORT Combobox
// Overriden from ComboboxModelObserver:
virtual void OnModelChanged() OVERRIDE;
+ // Overriden from ButtonListener:
+ virtual void ButtonPressed(Button* sender, const ui::Event& event) OVERRIDE;
+
private:
+ FRIEND_TEST_ALL_PREFIXES(ComboboxTest, Click);
+ FRIEND_TEST_ALL_PREFIXES(ComboboxTest, NotifyOnClickWithMouse);
+
// Updates the combobox's content from its model.
void UpdateFromModel();
+ // Updates the border according to the current state.
+ void UpdateBorder();
+
// Given bounds within our View, this helper mirrors the bounds if necessary.
void AdjustBoundsForRTLUI(gfx::Rect* rect) const;
- // Draw the selected value of the drop down list
+ // Draws the selected value of the drop down list
void PaintText(gfx::Canvas* canvas);
+ // Draws the button images.
+ void PaintButtons(gfx::Canvas* canvas);
+
// Show the drop down list
void ShowDropDownMenu(ui::MenuSourceType source_type);
@@ -117,9 +146,18 @@ class VIEWS_EXPORT Combobox
// Converts a menu command ID to a menu item index.
int MenuCommandToIndex(int menu_command_id) const;
+ int GetDisclosureArrowLeftPadding() const;
+ int GetDisclosureArrowRightPadding() const;
+
+ // Handles the clicking event.
+ void HandleClickEvent();
+
// Our model. Not owned.
ui::ComboboxModel* model_;
+ // The visual style of this combobox.
+ Style style_;
+
// Our listener. Not owned. Notified when the selected index change.
ComboboxListener* listener_;
@@ -135,9 +173,6 @@ class VIEWS_EXPORT Combobox
// A helper used to select entries by keyboard input.
scoped_ptr<PrefixSelector> selector_;
- // The reference to the border class. The object is owned by View::border_.
- FocusableBorder* text_border_;
-
// The disclosure arrow next to the currently selected item from the list.
const gfx::ImageSkia* disclosure_arrow_;
@@ -158,6 +193,22 @@ class VIEWS_EXPORT Combobox
// The maximum dimensions of the content in the dropdown
gfx::Size content_size_;
+ // The painters or images that are used when |style_| is STYLE_BUTTONS. The
+ // first index means the state of unfocused or focused.
+ // The images are owned by ResourceBundle.
+ scoped_ptr<Painter> body_button_painters_[2][Button::STATE_COUNT];
+ std::vector<const gfx::ImageSkia*>
+ menu_button_images_[2][Button::STATE_COUNT];
+
+ // The transparent buttons to handle events and render buttons. These are
+ // placed on top of this combobox as child views, accept event and manage the
+ // button states. These are not rendered but when |style_| is
+ // STYLE_NOTIFY_ON_CLICK, a Combobox renders the button images according to
+ // these button states.
+ // The base View takes the ownerships of these as child views.
+ CustomButton* text_button_;
+ CustomButton* arrow_button_;
+
DISALLOW_COPY_AND_ASSIGN(Combobox);
};
diff --git a/ui/views/controls/combobox/combobox_listener.h b/ui/views/controls/combobox/combobox_listener.h
index 987f4f442d..2609f64702 100644
--- a/ui/views/controls/combobox/combobox_listener.h
+++ b/ui/views/controls/combobox/combobox_listener.h
@@ -15,6 +15,10 @@ class ComboboxListener {
public:
virtual void OnSelectedIndexChanged(Combobox* combobox) = 0;
+ // Handles when the combobox's style is the button style and the button is
+ // clicked.
+ virtual void OnComboboxTextButtonClicked(Combobox* combobox) {}
+
protected:
virtual ~ComboboxListener() {}
};
diff --git a/ui/views/controls/combobox/combobox_unittest.cc b/ui/views/controls/combobox/combobox_unittest.cc
index 3637c087b1..172ead35f2 100644
--- a/ui/views/controls/combobox/combobox_unittest.cc
+++ b/ui/views/controls/combobox/combobox_unittest.cc
@@ -6,19 +6,51 @@
#include <set>
+#include "base/basictypes.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/base/models/combobox_model.h"
#include "ui/events/event.h"
#include "ui/events/keycodes/keyboard_codes.h"
+#include "ui/views/controls/combobox/combobox_listener.h"
+#include "ui/views/controls/menu/menu_runner.h"
+#include "ui/views/controls/menu/menu_runner_handler.h"
#include "ui/views/ime/mock_input_method.h"
+#include "ui/views/test/menu_runner_test_api.h"
#include "ui/views/test/views_test_base.h"
#include "ui/views/widget/widget.h"
+namespace views {
+
namespace {
+// An dummy implementation of MenuRunnerHandler to check if the dropdown menu is
+// shown or not.
+class TestMenuRunnerHandler : public MenuRunnerHandler {
+ public:
+ TestMenuRunnerHandler()
+ : executed_(false) {}
+
+ bool executed() const { return executed_; }
+
+ virtual MenuRunner::RunResult RunMenuAt(Widget* parent,
+ MenuButton* button,
+ const gfx::Rect& bounds,
+ MenuItemView::AnchorPosition anchor,
+ ui::MenuSourceType source_type,
+ int32 types) OVERRIDE {
+ executed_ = true;
+ return MenuRunner::NORMAL_EXIT;
+ }
+
+ private:
+ bool executed_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestMenuRunnerHandler);
+};
+
// A wrapper of Combobox to intercept the result of OnKeyPressed() and
// OnKeyReleased() methods.
-class TestCombobox : public views::Combobox {
+class TestCombobox : public Combobox {
public:
explicit TestCombobox(ui::ComboboxModel* model)
: Combobox(model),
@@ -28,13 +60,13 @@ class TestCombobox : public views::Combobox {
virtual bool OnKeyPressed(const ui::KeyEvent& e) OVERRIDE {
key_received_ = true;
- key_handled_ = views::Combobox::OnKeyPressed(e);
+ key_handled_ = Combobox::OnKeyPressed(e);
return key_handled_;
}
virtual bool OnKeyReleased(const ui::KeyEvent& e) OVERRIDE {
key_received_ = true;
- key_handled_ = views::Combobox::OnKeyReleased(e);
+ key_handled_ = Combobox::OnKeyReleased(e);
return key_handled_;
}
@@ -83,9 +115,58 @@ class TestComboboxModel : public ui::ComboboxModel {
DISALLOW_COPY_AND_ASSIGN(TestComboboxModel);
};
-} // namespace
+class EvilListener : public ComboboxListener {
+ public:
+ EvilListener() : deleted_(false) {};
+ virtual ~EvilListener() {};
-namespace views {
+ // ComboboxListener:
+ virtual void OnSelectedIndexChanged(Combobox* combobox) OVERRIDE {
+ delete combobox;
+ deleted_ = true;
+ }
+
+ bool deleted() const { return deleted_; }
+
+ private:
+ bool deleted_;
+
+ DISALLOW_COPY_AND_ASSIGN(EvilListener);
+};
+
+class TestComboboxListener : public views::ComboboxListener {
+ public:
+ TestComboboxListener()
+ : on_selected_index_changed_called_(false),
+ on_combobox_text_button_clicked_called_(false) {
+ }
+ virtual ~TestComboboxListener() {}
+
+ virtual void OnSelectedIndexChanged(views::Combobox* combobox) OVERRIDE {
+ on_selected_index_changed_called_ = true;
+ }
+
+ virtual void OnComboboxTextButtonClicked(views::Combobox* combobox) OVERRIDE {
+ on_combobox_text_button_clicked_called_ = true;
+ }
+
+ bool on_selected_index_changed_called() const {
+ return on_selected_index_changed_called_;
+ }
+
+ bool on_combobox_text_button_clicked_called() const {
+ return on_combobox_text_button_clicked_called_;
+ }
+
+ private:
+ bool on_selected_index_changed_called_;
+ bool on_combobox_text_button_clicked_called_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TestComboboxListener);
+};
+
+} // namespace
class ComboboxTest : public ViewsTestBase {
public:
@@ -106,7 +187,7 @@ class ComboboxTest : public ViewsTestBase {
widget_ = new Widget;
Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
- params.bounds = gfx::Rect(100, 100, 100, 100);
+ params.bounds = gfx::Rect(200, 200, 200, 200);
widget_->Init(params);
View* container = new View();
widget_->SetContentsView(container);
@@ -119,11 +200,16 @@ class ComboboxTest : public ViewsTestBase {
input_method_->OnFocus();
combobox_->RequestFocus();
+ combobox_->SizeToPreferredSize();
}
protected:
void SendKeyEvent(ui::KeyboardCode key_code) {
- ui::KeyEvent event(ui::ET_KEY_PRESSED, key_code, 0, false);
+ SendKeyEventWithType(key_code, ui::ET_KEY_PRESSED);
+ }
+
+ void SendKeyEventWithType(ui::KeyboardCode key_code, ui::EventType type) {
+ ui::KeyEvent event(type, key_code, 0, false);
input_method_->DispatchKeyEvent(event);
}
@@ -131,6 +217,17 @@ class ComboboxTest : public ViewsTestBase {
return widget_->GetFocusManager()->GetFocusedView();
}
+ void PerformClick(const gfx::Point& point) {
+ ui::MouseEvent pressed_event = ui::MouseEvent(ui::ET_MOUSE_PRESSED, point,
+ point,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ widget_->OnMouseEvent(&pressed_event);
+ ui::MouseEvent released_event = ui::MouseEvent(ui::ET_MOUSE_RELEASED, point,
+ point,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ widget_->OnMouseEvent(&released_event);
+ }
+
// We need widget to populate wrapper class.
Widget* widget_;
@@ -340,4 +437,102 @@ TEST_F(ComboboxTest, SelectValue) {
EXPECT_EQ(1, combobox_->selected_index());
}
+TEST_F(ComboboxTest, ListenerHandlesDelete) {
+ TestComboboxModel model;
+ TestCombobox* combobox = new TestCombobox(&model); // Deleted on change.
+ EvilListener evil_listener;
+ combobox->set_listener(&evil_listener);
+ ASSERT_NO_FATAL_FAILURE(combobox->ExecuteCommand(2));
+ EXPECT_TRUE(evil_listener.deleted());
+}
+
+TEST_F(ComboboxTest, Click) {
+ InitCombobox();
+
+ TestComboboxListener listener;
+ combobox_->set_listener(&listener);
+
+ combobox_->Layout();
+
+ // Click the left side. The menu is shown.
+ TestMenuRunnerHandler* test_menu_runner_handler = new TestMenuRunnerHandler();
+ scoped_ptr<MenuRunnerHandler> menu_runner_handler(test_menu_runner_handler);
+ test::MenuRunnerTestAPI test_api(
+ combobox_->dropdown_list_menu_runner_.get());
+ test_api.SetMenuRunnerHandler(menu_runner_handler.Pass());
+ PerformClick(gfx::Point(combobox_->x() + 1,
+ combobox_->y() + combobox_->height() / 2));
+ EXPECT_FALSE(listener.on_combobox_text_button_clicked_called());
+ EXPECT_TRUE(test_menu_runner_handler->executed());
+}
+
+TEST_F(ComboboxTest, NotifyOnClickWithReturnKey) {
+ InitCombobox();
+
+ TestComboboxListener listener;
+ combobox_->set_listener(&listener);
+
+ // With STYLE_SHOW_DROP_DOWN_ON_CLICK, the click event is ignored.
+ SendKeyEvent(ui::VKEY_RETURN);
+ EXPECT_FALSE(listener.on_combobox_text_button_clicked_called());
+
+ // With STYLE_NOTIFY_ON_CLICK, the click event is notified.
+ combobox_->SetStyle(Combobox::STYLE_NOTIFY_ON_CLICK);
+ SendKeyEvent(ui::VKEY_RETURN);
+ EXPECT_TRUE(listener.on_combobox_text_button_clicked_called());
+}
+
+TEST_F(ComboboxTest, NotifyOnClickWithSpaceKey) {
+ InitCombobox();
+
+ TestComboboxListener listener;
+ combobox_->set_listener(&listener);
+
+ // With STYLE_SHOW_DROP_DOWN_ON_CLICK, the click event is ignored.
+ SendKeyEvent(ui::VKEY_SPACE);
+ EXPECT_FALSE(listener.on_combobox_text_button_clicked_called());
+ SendKeyEventWithType(ui::VKEY_SPACE, ui::ET_KEY_RELEASED);
+ EXPECT_FALSE(listener.on_combobox_text_button_clicked_called());
+
+ // With STYLE_NOTIFY_ON_CLICK, the click event is notified after releasing.
+ combobox_->SetStyle(Combobox::STYLE_NOTIFY_ON_CLICK);
+ SendKeyEvent(ui::VKEY_SPACE);
+ EXPECT_FALSE(listener.on_combobox_text_button_clicked_called());
+ SendKeyEventWithType(ui::VKEY_SPACE, ui::ET_KEY_RELEASED);
+ EXPECT_TRUE(listener.on_combobox_text_button_clicked_called());
+}
+
+TEST_F(ComboboxTest, NotifyOnClickWithMouse) {
+ InitCombobox();
+
+ TestComboboxListener listener;
+ combobox_->set_listener(&listener);
+
+ combobox_->SetStyle(Combobox::STYLE_NOTIFY_ON_CLICK);
+ combobox_->Layout();
+
+ // Click the right side (arrow button). The menu is shown.
+ TestMenuRunnerHandler* test_menu_runner_handler = new TestMenuRunnerHandler();
+ scoped_ptr<MenuRunnerHandler> menu_runner_handler(test_menu_runner_handler);
+ scoped_ptr<test::MenuRunnerTestAPI> test_api(
+ new test::MenuRunnerTestAPI(combobox_->dropdown_list_menu_runner_.get()));
+ test_api->SetMenuRunnerHandler(menu_runner_handler.Pass());
+
+ PerformClick(gfx::Point(combobox_->x() + combobox_->width() - 1,
+ combobox_->y() + combobox_->height() / 2));
+ EXPECT_FALSE(listener.on_combobox_text_button_clicked_called());
+ EXPECT_TRUE(test_menu_runner_handler->executed());
+
+ // Click the left side (text button). The click event is notified.
+ test_menu_runner_handler = new TestMenuRunnerHandler();
+ menu_runner_handler.reset(test_menu_runner_handler);
+ test_api.reset(
+ new test::MenuRunnerTestAPI(combobox_->dropdown_list_menu_runner_.get()));
+ test_api->SetMenuRunnerHandler(menu_runner_handler.Pass());
+ PerformClick(gfx::Point(combobox_->x() + 1,
+ combobox_->y() + combobox_->height() / 2));
+ EXPECT_TRUE(listener.on_combobox_text_button_clicked_called());
+ EXPECT_FALSE(test_menu_runner_handler->executed());
+}
+
} // namespace views
diff --git a/ui/views/controls/focusable_border.cc b/ui/views/controls/focusable_border.cc
index c3a4af47e5..9789ed5076 100644
--- a/ui/views/controls/focusable_border.cc
+++ b/ui/views/controls/focusable_border.cc
@@ -22,8 +22,7 @@ const int kRightInsetSize = 4;
namespace views {
FocusableBorder::FocusableBorder()
- : has_focus_(false),
- insets_(kTopInsetSize, kLeftInsetSize,
+ : insets_(kTopInsetSize, kLeftInsetSize,
kBottomInsetSize, kRightInsetSize),
override_color_(SK_ColorWHITE),
use_default_color_(true) {
@@ -46,8 +45,8 @@ void FocusableBorder::Paint(const View& view, gfx::Canvas* canvas) {
SkColor color = override_color_;
if (use_default_color_) {
color = view.GetNativeTheme()->GetSystemColor(
- has_focus_ ? ui::NativeTheme::kColorId_FocusedBorderColor :
- ui::NativeTheme::kColorId_UnfocusedBorderColor);
+ view.HasFocus() ? ui::NativeTheme::kColorId_FocusedBorderColor :
+ ui::NativeTheme::kColorId_UnfocusedBorderColor);
}
paint.setColor(color);
diff --git a/ui/views/controls/focusable_border.h b/ui/views/controls/focusable_border.h
index 18b7583385..bad888e8af 100644
--- a/ui/views/controls/focusable_border.h
+++ b/ui/views/controls/focusable_border.h
@@ -25,11 +25,6 @@ class VIEWS_EXPORT FocusableBorder : public Border {
// Sets the insets of the border.
void SetInsets(int top, int left, int bottom, int right);
- // Sets the focus state.
- void set_has_focus(bool has_focus) {
- has_focus_ = has_focus;
- }
-
// Sets the color of this border.
void SetColor(SkColor color);
// Reverts the color of this border to the system default.
@@ -41,7 +36,6 @@ class VIEWS_EXPORT FocusableBorder : public Border {
virtual gfx::Size GetMinimumSize() const OVERRIDE;
private:
- bool has_focus_;
gfx::Insets insets_;
// The color to paint the border when |use_default_color_| is false.
diff --git a/ui/views/controls/image_view.cc b/ui/views/controls/image_view.cc
index bc2ad8e0d4..2bbf91cab9 100644
--- a/ui/views/controls/image_view.cc
+++ b/ui/views/controls/image_view.cc
@@ -10,6 +10,7 @@
#include "ui/base/accessibility/accessible_view_state.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/insets.h"
+#include "ui/views/painter.h"
namespace views {
@@ -19,7 +20,8 @@ ImageView::ImageView()
vert_alignment_(CENTER),
interactive_(true),
last_paint_scale_(0.f),
- last_painted_bitmap_pixels_(NULL) {
+ last_painted_bitmap_pixels_(NULL),
+ focus_painter_(Painter::CreateDashedFocusPainter()) {
}
ImageView::~ImageView() {
@@ -73,6 +75,10 @@ void ImageView::ResetImageSize() {
image_size_set_ = false;
}
+void ImageView::SetFocusPainter(scoped_ptr<Painter> focus_painter) {
+ focus_painter_ = focus_painter.Pass();
+}
+
gfx::Size ImageView::GetPreferredSize() {
gfx::Insets insets = GetInsets();
if (image_size_set_) {
@@ -126,31 +132,22 @@ gfx::Point ImageView::ComputeImageOrigin(const gfx::Size& image_size) const {
return gfx::Point(x, y);
}
-void ImageView::OnPaint(gfx::Canvas* canvas) {
- View::OnPaint(canvas);
-
- last_paint_scale_ = canvas->image_scale();
- last_painted_bitmap_pixels_ = NULL;
-
- if (image_.isNull())
- return;
+void ImageView::OnFocus() {
+ View::OnFocus();
+ if (focus_painter_.get())
+ SchedulePaint();
+}
- gfx::Rect image_bounds(GetImageBounds());
- if (image_bounds.IsEmpty())
- return;
+void ImageView::OnBlur() {
+ View::OnBlur();
+ if (focus_painter_.get())
+ SchedulePaint();
+}
- if (image_bounds.size() != gfx::Size(image_.width(), image_.height())) {
- // Resize case
- SkPaint paint;
- paint.setFilterBitmap(true);
- canvas->DrawImageInt(image_, 0, 0, image_.width(), image_.height(),
- image_bounds.x(), image_bounds.y(), image_bounds.width(),
- image_bounds.height(), true, paint);
- } else {
- canvas->DrawImageInt(image_, image_bounds.x(), image_bounds.y());
- }
- last_painted_bitmap_pixels_ =
- image_.GetRepresentation(last_paint_scale_).sk_bitmap().getPixels();
+void ImageView::OnPaint(gfx::Canvas* canvas) {
+ View::OnPaint(canvas);
+ OnPaintImage(canvas);
+ Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
}
void ImageView::GetAccessibleState(ui::AccessibleViewState* state) {
@@ -200,4 +197,30 @@ bool ImageView::HitTestRect(const gfx::Rect& rect) const {
return interactive_ ? View::HitTestRect(rect) : false;
}
+
+void ImageView::OnPaintImage(gfx::Canvas* canvas) {
+ last_paint_scale_ = canvas->image_scale();
+ last_painted_bitmap_pixels_ = NULL;
+
+ if (image_.isNull())
+ return;
+
+ gfx::Rect image_bounds(GetImageBounds());
+ if (image_bounds.IsEmpty())
+ return;
+
+ if (image_bounds.size() != gfx::Size(image_.width(), image_.height())) {
+ // Resize case
+ SkPaint paint;
+ paint.setFilterBitmap(true);
+ canvas->DrawImageInt(image_, 0, 0, image_.width(), image_.height(),
+ image_bounds.x(), image_bounds.y(), image_bounds.width(),
+ image_bounds.height(), true, paint);
+ } else {
+ canvas->DrawImageInt(image_, image_bounds.x(), image_bounds.y());
+ }
+ last_painted_bitmap_pixels_ =
+ image_.GetRepresentation(last_paint_scale_).sk_bitmap().getPixels();
+}
+
} // namespace views
diff --git a/ui/views/controls/image_view.h b/ui/views/controls/image_view.h
index b40cb83461..b0f4ce852f 100644
--- a/ui/views/controls/image_view.h
+++ b/ui/views/controls/image_view.h
@@ -14,6 +14,8 @@ class Canvas;
namespace views {
+class Painter;
+
/////////////////////////////////////////////////////////////////////////////
//
// ImageView class.
@@ -75,8 +77,12 @@ class VIEWS_EXPORT ImageView : public View {
void set_interactive(bool interactive) { interactive_ = interactive; }
+ void SetFocusPainter(scoped_ptr<Painter> focus_painter);
+
// Overriden from View:
virtual gfx::Size GetPreferredSize() OVERRIDE;
+ virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
virtual bool GetTooltipText(const gfx::Point& p,
@@ -84,6 +90,8 @@ class VIEWS_EXPORT ImageView : public View {
virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE;
private:
+ void OnPaintImage(gfx::Canvas* canvas);
+
// Returns true if |img| is the same as the last image we painted. This is
// intended to be a quick check, not exhaustive. In other words it's possible
// for this to return false even though the images are in fact equal.
@@ -121,6 +129,8 @@ class VIEWS_EXPORT ImageView : public View {
// safe to cache.
void* last_painted_bitmap_pixels_;
+ scoped_ptr<views::Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(ImageView);
};
diff --git a/ui/views/controls/label_unittest.cc b/ui/views/controls/label_unittest.cc
index b64d98c597..c36b5de788 100644
--- a/ui/views/controls/label_unittest.cc
+++ b/ui/views/controls/label_unittest.cc
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "ui/views/controls/label.h"
+
#include "base/i18n/rtl.h"
#include "base/strings/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -9,15 +11,13 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/canvas.h"
#include "ui/views/border.h"
-#include "ui/views/controls/label.h"
namespace views {
// All text sizing measurements (width and height) should be greater than this.
const int kMinTextDimension = 4;
-// Disabled. http://crbug.com/316955
-TEST(LabelTest, DISABLED_FontPropertySymbol) {
+TEST(LabelTest, FontPropertySymbol) {
Label label;
std::string font_name("symbol");
gfx::Font font(font_name, 26);
diff --git a/ui/views/controls/link.cc b/ui/views/controls/link.cc
index b2bcc8f692..5a5729acc9 100644
--- a/ui/views/controls/link.cc
+++ b/ui/views/controls/link.cc
@@ -11,6 +11,7 @@
#include "ui/base/accessibility/accessible_view_state.h"
#include "ui/events/event.h"
#include "ui/events/keycodes/keyboard_codes.h"
+#include "ui/gfx/canvas.h"
#include "ui/gfx/color_utils.h"
#include "ui/gfx/font.h"
#include "ui/views/controls/link_listener.h"
@@ -62,6 +63,25 @@ gfx::NativeCursor Link::GetCursor(const ui::MouseEvent& event) {
#endif
}
+void Link::OnPaint(gfx::Canvas* canvas) {
+ Label::OnPaint(canvas);
+
+ if (HasFocus())
+ canvas->DrawFocusRect(GetLocalBounds());
+}
+
+void Link::OnFocus() {
+ Label::OnFocus();
+ // We render differently focused.
+ SchedulePaint();
+}
+
+void Link::OnBlur() {
+ Label::OnBlur();
+ // We render differently focused.
+ SchedulePaint();
+}
+
bool Link::HitTestRect(const gfx::Rect& rect) const {
// We need to allow clicks on the link. So we override the implementation in
// Label and use the default implementation of View.
diff --git a/ui/views/controls/link.h b/ui/views/controls/link.h
index 9230acbb29..f6a876de86 100644
--- a/ui/views/controls/link.h
+++ b/ui/views/controls/link.h
@@ -37,6 +37,9 @@ class VIEWS_EXPORT Link : public Label {
virtual void OnEnabledChanged() OVERRIDE;
virtual const char* GetClassName() const OVERRIDE;
virtual gfx::NativeCursor GetCursor(const ui::MouseEvent& event) OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnFocus() OVERRIDE;
+ virtual void OnBlur() OVERRIDE;
virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE;
virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE;
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc
index 0035ae3773..3b0e5d552c 100644
--- a/ui/views/controls/menu/menu_controller.cc
+++ b/ui/views/controls/menu/menu_controller.cc
@@ -46,6 +46,7 @@
#endif
#if defined(OS_WIN)
+#include "ui/views/win/hwnd_message_handler.h"
#include "ui/views/win/hwnd_util.h"
#endif
@@ -103,18 +104,17 @@ bool TitleMatchesMnemonic(MenuItemView* menu, char16 key) {
} // namespace
// Returns the first descendant of |view| that is hot tracked.
-static View* GetFirstHotTrackedView(View* view) {
+static CustomButton* GetFirstHotTrackedView(View* view) {
if (!view)
return NULL;
-
- if (!strcmp(view->GetClassName(), CustomButton::kViewClassName)) {
- CustomButton* button = static_cast<CustomButton*>(view);
+ CustomButton* button = CustomButton::AsCustomButton(view);
+ if (button) {
if (button->IsHotTracked())
return button;
}
for (int i = 0; i < view->child_count(); ++i) {
- View* hot_view = GetFirstHotTrackedView(view->child_at(i));
+ CustomButton* hot_view = GetFirstHotTrackedView(view->child_at(i));
if (hot_view)
return hot_view;
}
@@ -385,6 +385,27 @@ MenuItemView* MenuController::Run(Widget* parent,
// Close any open menus.
SetSelection(NULL, SELECTION_UPDATE_IMMEDIATELY | SELECTION_EXIT);
+#if defined(OS_WIN) && defined(USE_AURA)
+ // On Windows, if we select the menu item by touch and if the window at the
+ // location is another window on the same thread, that window gets a
+ // WM_MOUSEACTIVATE message and ends up activating itself, which is not
+ // correct. We workaround this by setting a property on the window at the
+ // current cursor location. We check for this property in our
+ // WM_MOUSEACTIVATE handler and don't activate the window if the property is
+ // set.
+ if (item_selected_by_touch_) {
+ item_selected_by_touch_ = false;
+ POINT cursor_pos;
+ ::GetCursorPos(&cursor_pos);
+ HWND window = ::WindowFromPoint(cursor_pos);
+ if (::GetWindowThreadProcessId(window, NULL) ==
+ ::GetCurrentThreadId()) {
+ ::SetProp(window, views::kIgnoreTouchMouseActivateForWindow,
+ reinterpret_cast<HANDLE>(true));
+ }
+ }
+#endif
+
if (nested_menu) {
DCHECK(!menu_stack_.empty());
// We're running from within a menu, restore the previous state.
@@ -426,7 +447,6 @@ MenuItemView* MenuController::Run(Widget* parent,
menu_button_->SetState(CustomButton::STATE_NORMAL);
menu_button_->SchedulePaint();
}
-
return result;
}
@@ -601,6 +621,7 @@ void MenuController::OnGestureEvent(SubmenuView* source,
if (part.menu->GetDelegate()->IsTriggerableEvent(
part.menu, *event)) {
Accept(part.menu, event->flags());
+ item_selected_by_touch_ = true;
}
event->StopPropagation();
} else if (part.type == MenuPart::MENU_ITEM) {
@@ -808,12 +829,9 @@ void MenuController::SetSelection(MenuItemView* menu_item,
bool pending_item_changed = pending_state_.item != menu_item;
if (pending_item_changed && pending_state_.item) {
- View* current_hot_view = GetFirstHotTrackedView(pending_state_.item);
- if (current_hot_view && !strcmp(current_hot_view->GetClassName(),
- CustomButton::kViewClassName)) {
- CustomButton* button = static_cast<CustomButton*>(current_hot_view);
+ CustomButton* button = GetFirstHotTrackedView(pending_state_.item);
+ if (button)
button->SetHotTracked(false);
- }
}
// Notify the old path it isn't selected.
@@ -955,7 +973,7 @@ void MenuController::StartDrag(SubmenuView* source,
// the selected item, so need to map to screen first then to item.
gfx::Point press_loc(location);
View::ConvertPointToScreen(source->GetScrollViewContainer(), &press_loc);
- View::ConvertPointToTarget(NULL, item, &press_loc);
+ View::ConvertPointFromScreen(item, &press_loc);
gfx::Point widget_loc(press_loc);
View::ConvertPointToWidget(item, &widget_loc);
scoped_ptr<gfx::Canvas> canvas(GetCanvasForDragImage(
@@ -1173,7 +1191,8 @@ MenuController::MenuController(ui::NativeTheme* theme,
menu_config_(theme),
closing_event_time_(base::TimeDelta()),
menu_start_time_(base::TimeTicks()),
- accept_on_f4_(false) {
+ accept_on_f4_(false),
+ item_selected_by_touch_(false) {
active_instance_ = this;
}
@@ -1189,16 +1208,14 @@ MenuController::~MenuController() {
MenuController::SendAcceleratorResultType
MenuController::SendAcceleratorToHotTrackedView() {
- View* hot_view = GetFirstHotTrackedView(pending_state_.item);
+ CustomButton* hot_view = GetFirstHotTrackedView(pending_state_.item);
if (!hot_view)
return ACCELERATOR_NOT_PROCESSED;
ui::Accelerator accelerator(ui::VKEY_RETURN, ui::EF_NONE);
hot_view->AcceleratorPressed(accelerator);
- if (!strcmp(hot_view->GetClassName(), CustomButton::kViewClassName)) {
- CustomButton* button = static_cast<CustomButton*>(hot_view);
- button->SetHotTracked(true);
- }
+ CustomButton* button = static_cast<CustomButton*>(hot_view);
+ button->SetHotTracked(true);
return (exit_type_ == EXIT_NONE) ?
ACCELERATOR_PROCESSED : ACCELERATOR_PROCESSED_EXIT;
}
@@ -1428,7 +1445,7 @@ bool MenuController::GetMenuPartByScreenCoordinateImpl(
// Is the mouse over the scroll buttons?
gfx::Point scroll_view_loc = screen_loc;
View* scroll_view_container = menu->GetScrollViewContainer();
- View::ConvertPointToTarget(NULL, scroll_view_container, &scroll_view_loc);
+ View::ConvertPointFromScreen(scroll_view_container, &scroll_view_loc);
if (scroll_view_loc.x() < 0 ||
scroll_view_loc.x() >= scroll_view_container->width() ||
scroll_view_loc.y() < 0 ||
@@ -1445,7 +1462,7 @@ bool MenuController::GetMenuPartByScreenCoordinateImpl(
// Not over the scroll button. Check the actual menu.
if (DoesSubmenuContainLocation(menu, screen_loc)) {
gfx::Point menu_loc = screen_loc;
- View::ConvertPointToTarget(NULL, menu, &menu_loc);
+ View::ConvertPointFromScreen(menu, &menu_loc);
part->menu = GetMenuItemAt(menu, menu_loc.x(), menu_loc.y());
part->type = MenuPart::MENU_ITEM;
part->submenu = menu;
@@ -1463,7 +1480,7 @@ bool MenuController::GetMenuPartByScreenCoordinateImpl(
bool MenuController::DoesSubmenuContainLocation(SubmenuView* submenu,
const gfx::Point& screen_loc) {
gfx::Point view_loc = screen_loc;
- View::ConvertPointToTarget(NULL, submenu, &view_loc);
+ View::ConvertPointFromScreen(submenu, &view_loc);
gfx::Rect vis_rect = submenu->GetVisibleBounds();
return vis_rect.Contains(view_loc.x(), view_loc.y());
}
@@ -1944,23 +1961,19 @@ void MenuController::IncrementSelection(int delta) {
}
if (item->has_children()) {
- View* hot_view = GetFirstHotTrackedView(item);
- if (hot_view &&
- !strcmp(hot_view->GetClassName(), CustomButton::kViewClassName)) {
- CustomButton* button = static_cast<CustomButton*>(hot_view);
+ CustomButton* button = GetFirstHotTrackedView(item);
+ if (button) {
button->SetHotTracked(false);
View* to_make_hot = GetNextFocusableView(item, button, delta == 1);
- if (to_make_hot &&
- !strcmp(to_make_hot->GetClassName(), CustomButton::kViewClassName)) {
- CustomButton* button_hot = static_cast<CustomButton*>(to_make_hot);
+ CustomButton* button_hot = CustomButton::AsCustomButton(to_make_hot);
+ if (button_hot) {
button_hot->SetHotTracked(true);
return;
}
} else {
View* to_make_hot = GetInitialFocusableView(item, delta == 1);
- if (to_make_hot &&
- !strcmp(to_make_hot->GetClassName(), CustomButton::kViewClassName)) {
- CustomButton* button_hot = static_cast<CustomButton*>(to_make_hot);
+ CustomButton* button_hot = CustomButton::AsCustomButton(to_make_hot);
+ if (button_hot) {
button_hot->SetHotTracked(true);
return;
}
@@ -1979,11 +1992,9 @@ void MenuController::IncrementSelection(int delta) {
break;
SetSelection(to_select, SELECTION_DEFAULT);
View* to_make_hot = GetInitialFocusableView(to_select, delta == 1);
- if (to_make_hot && !strcmp(to_make_hot->GetClassName(),
- CustomButton::kViewClassName)) {
- CustomButton* button_hot = static_cast<CustomButton*>(to_make_hot);
+ CustomButton* button_hot = CustomButton::AsCustomButton(to_make_hot);
+ if (button_hot)
button_hot->SetHotTracked(true);
- }
break;
}
}
@@ -2203,7 +2214,7 @@ void MenuController::UpdateActiveMouseView(SubmenuView* event_source,
// more complex hierarchies it'll need to change.
View::ConvertPointToScreen(event_source->GetScrollViewContainer(),
&target_menu_loc);
- View::ConvertPointToTarget(NULL, target_menu, &target_menu_loc);
+ View::ConvertPointFromScreen(target_menu, &target_menu_loc);
target = target_menu->GetEventHandlerForPoint(target_menu_loc);
if (target == target_menu || !target->enabled())
target = NULL;
@@ -2248,7 +2259,7 @@ void MenuController::SendMouseReleaseToActiveView(SubmenuView* event_source,
gfx::Point target_loc(event.location());
View::ConvertPointToScreen(event_source->GetScrollViewContainer(),
&target_loc);
- View::ConvertPointToTarget(NULL, active_mouse_view, &target_loc);
+ View::ConvertPointFromScreen(active_mouse_view, &target_loc);
ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, target_loc, target_loc,
event.flags());
// Reset active mouse view before sending mouse released. That way if it calls
diff --git a/ui/views/controls/menu/menu_controller.h b/ui/views/controls/menu/menu_controller.h
index f99e3f5132..1404d54e5d 100644
--- a/ui/views/controls/menu/menu_controller.h
+++ b/ui/views/controls/menu/menu_controller.h
@@ -587,6 +587,9 @@ class VIEWS_EXPORT MenuController : public base::MessageLoop::Dispatcher,
// Whether the menu should accept on F4, like Windows native Combobox menus.
bool accept_on_f4_;
+ // Set to true if the menu item was selected by touch.
+ bool item_selected_by_touch_;
+
DISALLOW_COPY_AND_ASSIGN(MenuController);
};
diff --git a/ui/views/controls/menu/menu_item_view.h b/ui/views/controls/menu/menu_item_view.h
index 9acb4847ec..2d394bae2f 100644
--- a/ui/views/controls/menu/menu_item_view.h
+++ b/ui/views/controls/menu/menu_item_view.h
@@ -27,11 +27,6 @@ namespace gfx {
class Font;
}
-namespace ui {
-class MenuModel;
-class NativeTheme;
-}
-
namespace views {
namespace internal {
diff --git a/ui/views/controls/menu/menu_runner.cc b/ui/views/controls/menu/menu_runner.cc
index bf5680febb..e254dbffc5 100644
--- a/ui/views/controls/menu/menu_runner.cc
+++ b/ui/views/controls/menu/menu_runner.cc
@@ -7,14 +7,13 @@
#include <set>
#include "base/memory/weak_ptr.h"
-#include "base/metrics/histogram.h"
#include "ui/base/models/menu_model.h"
#include "ui/views/controls/button/menu_button.h"
#include "ui/views/controls/menu/menu_controller.h"
#include "ui/views/controls/menu/menu_controller_delegate.h"
#include "ui/views/controls/menu/menu_delegate.h"
#include "ui/views/controls/menu/menu_model_adapter.h"
-#include "ui/views/controls/menu/submenu_view.h"
+#include "ui/views/controls/menu/menu_runner_handler.h"
#include "ui/views/widget/widget.h"
#if defined(OS_WIN)
@@ -25,35 +24,6 @@ namespace views {
namespace internal {
-void RecordSelectedIndexes(const MenuItemView* menu_item) {
- if (!menu_item)
- return;
- const MenuItemView* parent = menu_item->GetParentMenuItem();
- if (!parent)
- return;
-
- SubmenuView* submenu = parent->GetSubmenu();
- for (int i = 0; i < submenu->GetMenuItemCount(); ++i) {
- if (submenu->GetMenuItemAt(i) == menu_item) {
- UMA_HISTOGRAM_COUNTS_100("MenuSelection.Index", i);
- break;
- }
- }
-
- RecordSelectedIndexes(parent);
-}
-
-void RecordMenuStats(MenuItemView* result, base::TimeDelta time_elapsed) {
- // Report if user made a selection.
- UMA_HISTOGRAM_BOOLEAN("MenuSelection.Result", result != NULL);
-
- if (result) {
- // Report how much time it took to make a selection.
- UMA_HISTOGRAM_TIMES("MenuSelection.Time", time_elapsed);
- RecordSelectedIndexes(result);
- }
-}
-
// Manages the menu. To destroy a MenuRunnerImpl invoke Release(). Release()
// deletes immediately if the menu isn't showing. If the menu is showing
// Release() cancels the menu and when the nested RunMenuAt() call returns
@@ -224,7 +194,6 @@ MenuRunner::RunResult MenuRunnerImpl::RunMenuAt(
!for_drop_ && ShouldShowMnemonics(button));
// Run the loop.
- base::TimeTicks start_time = base::TimeTicks::Now();
int mouse_event_flags = 0;
MenuItemView* result = controller->Run(parent, button, menu_, bounds, anchor,
(types & MenuRunner::CONTEXT_MENU) != 0,
@@ -235,7 +204,6 @@ MenuRunner::RunResult MenuRunnerImpl::RunMenuAt(
// Drop menus return immediately. We finish processing in DropMenuClosed.
return MenuRunner::NORMAL_EXIT;
}
- RecordMenuStats(result, base::TimeTicks::Now() - start_time);
return MenuDone(result, mouse_event_flags);
}
@@ -345,6 +313,11 @@ MenuRunner::RunResult MenuRunner::RunMenuAt(Widget* parent,
MenuItemView::AnchorPosition anchor,
ui::MenuSourceType source_type,
int32 types) {
+ if (runner_handler_.get()) {
+ return runner_handler_->RunMenuAt(parent, button, bounds, anchor,
+ source_type, types);
+ }
+
// The parent of the nested menu will have created a DisplayChangeListener, so
// we avoid creating a DisplayChangeListener if nested. Drop menus are
// transient, so we don't cancel in that case.
@@ -384,4 +357,9 @@ base::TimeDelta MenuRunner::closing_event_time() const {
return holder_->closing_event_time();
}
+void MenuRunner::SetRunnerHandler(
+ scoped_ptr<MenuRunnerHandler> runner_handler) {
+ runner_handler_ = runner_handler.Pass();
+}
+
} // namespace views
diff --git a/ui/views/controls/menu/menu_runner.h b/ui/views/controls/menu/menu_runner.h
index 277ffd5334..6b46362f18 100644
--- a/ui/views/controls/menu/menu_runner.h
+++ b/ui/views/controls/menu/menu_runner.h
@@ -18,6 +18,7 @@ namespace views {
class MenuButton;
class MenuModelAdapter;
+class MenuRunnerHandler;
class Widget;
namespace internal {
@@ -25,6 +26,10 @@ class DisplayChangeListener;
class MenuRunnerImpl;
}
+namespace test {
+class MenuRunnerTestAPI;
+}
+
// MenuRunner is responsible for showing (running) the menu and additionally
// owning the MenuItemView. RunMenuAt() runs a nested message loop. It is safe
// to delete MenuRunner at any point, but MenuRunner internally only deletes the
@@ -112,10 +117,19 @@ class VIEWS_EXPORT MenuRunner {
base::TimeDelta closing_event_time() const;
private:
+ friend class test::MenuRunnerTestAPI;
+
+ // Sets an implementation of RunMenuAt. This is intended to be used at test.
+ void SetRunnerHandler(scoped_ptr<MenuRunnerHandler> runner_handler);
+
scoped_ptr<MenuModelAdapter> menu_model_adapter_;
internal::MenuRunnerImpl* holder_;
+ // An implementation of RunMenuAt. This is usually NULL and ignored. If this
+ // is not NULL, this implementation will be used.
+ scoped_ptr<MenuRunnerHandler> runner_handler_;
+
scoped_ptr<internal::DisplayChangeListener> display_change_listener_;
DISALLOW_COPY_AND_ASSIGN(MenuRunner);
diff --git a/ui/views/controls/menu/menu_runner_handler.h b/ui/views/controls/menu/menu_runner_handler.h
new file mode 100644
index 0000000000..46f801af68
--- /dev/null
+++ b/ui/views/controls/menu/menu_runner_handler.h
@@ -0,0 +1,31 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_HANDLER_H_
+#define UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_HANDLER_H_
+
+#include "base/basictypes.h"
+#include "ui/views/controls/menu/menu_item_view.h"
+
+namespace views {
+
+class MenuButton;
+class Widget;
+
+// Used internally by MenuRunner to show the menu. Can be set in tests (see
+// MenuRunnerTestApi) for mocking running of the menu.
+class VIEWS_EXPORT MenuRunnerHandler {
+ public:
+ virtual ~MenuRunnerHandler() {}
+ virtual MenuRunner::RunResult RunMenuAt(Widget* parent,
+ MenuButton* button,
+ const gfx::Rect& bounds,
+ MenuItemView::AnchorPosition anchor,
+ ui::MenuSourceType source_type,
+ int32 types) = 0;
+};
+
+} // namespace views
+
+#endif // UI_VIEWS_CONTROLS_MENU_MENU_RUNNER_HANDLER_H_
diff --git a/ui/views/controls/native/native_view_host.cc b/ui/views/controls/native/native_view_host.cc
index 760f856cd2..28b1fe3aec 100644
--- a/ui/views/controls/native/native_view_host.cc
+++ b/ui/views/controls/native/native_view_host.cc
@@ -17,7 +17,7 @@ const char NativeViewHost::kViewClassName[] = "NativeViewHost";
const char kWidgetNativeViewHostKey[] = "WidgetNativeViewHost";
#if defined(USE_AURA)
-// Views implmenetatxion draws the focus.
+// Views implementation draws the focus.
// TODO(oshima): Eliminate this flag and consolidate
// the focus border code.
const bool NativeViewHost::kRenderNativeControlFocus = false;
diff --git a/ui/views/controls/slider.cc b/ui/views/controls/slider.cc
index 3b449f0708..242ff5e660 100644
--- a/ui/views/controls/slider.cc
+++ b/ui/views/controls/slider.cc
@@ -171,6 +171,19 @@ void Slider::SetAccessibleName(const string16& name) {
accessible_name_ = name;
}
+void Slider::OnPaintFocus(gfx::Canvas* canvas) {
+ if (!HasFocus())
+ return;
+
+ if (!focus_border_color_) {
+ canvas->DrawFocusRect(GetLocalBounds());
+ } else if (HasFocus()) {
+ canvas->DrawSolidFocusRect(
+ gfx::Rect(1, 1, width() - 3, height() - 3),
+ focus_border_color_);
+ }
+}
+
gfx::Size Slider::GetPreferredSize() {
const int kSizeMajor = 200;
const int kSizeMinor = 40;
@@ -248,6 +261,7 @@ void Slider::OnPaint(gfx::Canvas* canvas) {
canvas->DrawImageInt(*thumb_, thumb_x, button_cy);
}
View::OnPaint(canvas);
+ OnPaintFocus(canvas);
}
bool Slider::OnMousePressed(const ui::MouseEvent& event) {
@@ -316,13 +330,4 @@ void Slider::GetAccessibleState(ui::AccessibleViewState* state) {
base::StringPrintf("%d%%", (int)(value_ * 100 + 0.5)));
}
-void Slider::OnPaintFocusBorder(gfx::Canvas* canvas) {
- if (!focus_border_color_) {
- View::OnPaintFocusBorder(canvas);
- } else if (HasFocus()) {
- canvas->DrawRect(gfx::Rect(1, 1, width() - 3, height() - 3),
- focus_border_color_);
- }
-}
-
} // namespace views
diff --git a/ui/views/controls/slider.h b/ui/views/controls/slider.h
index 3c17e94af2..cec24c2755 100644
--- a/ui/views/controls/slider.h
+++ b/ui/views/controls/slider.h
@@ -41,8 +41,7 @@ class VIEWS_EXPORT SliderListener {
virtual ~SliderListener() {}
};
-class VIEWS_EXPORT Slider : public View,
- public gfx::AnimationDelegate {
+class VIEWS_EXPORT Slider : public View, public gfx::AnimationDelegate {
public:
enum Orientation {
HORIZONTAL,
@@ -80,6 +79,8 @@ class VIEWS_EXPORT Slider : public View,
// Moves the button to the specified point and updates the value accordingly.
void MoveButtonTo(const gfx::Point& point);
+ void OnPaintFocus(gfx::Canvas* canvas);
+
// views::View overrides:
virtual gfx::Size GetPreferredSize() OVERRIDE;
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
@@ -88,7 +89,6 @@ class VIEWS_EXPORT Slider : public View,
virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE;
virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE;
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
// ui::EventHandler overrides:
virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
diff --git a/ui/views/controls/styled_label_unittest.cc b/ui/views/controls/styled_label_unittest.cc
index dac53930f2..18595edf3d 100644
--- a/ui/views/controls/styled_label_unittest.cc
+++ b/ui/views/controls/styled_label_unittest.cc
@@ -9,6 +9,7 @@
#include "base/strings/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/core/SkColor.h"
+#include "ui/views/border.h"
#include "ui/views/controls/link.h"
#include "ui/views/controls/styled_label.h"
#include "ui/views/controls/styled_label_listener.h"
diff --git a/ui/views/controls/textfield/native_textfield_views.cc b/ui/views/controls/textfield/native_textfield_views.cc
index d02c71fe8b..f8fc36217d 100644
--- a/ui/views/controls/textfield/native_textfield_views.cc
+++ b/ui/views/controls/textfield/native_textfield_views.cc
@@ -180,6 +180,11 @@ void NativeTextfieldViews::OnGestureEvent(ui::GestureEvent* event) {
OnAfterUserAction();
event->SetHandled();
break;
+ case ui::ET_GESTURE_SCROLL_END:
+ case ui::ET_SCROLL_FLING_START:
+ CreateTouchSelectionControllerAndNotifyIt();
+ event->SetHandled();
+ break;
case ui::ET_GESTURE_TAP:
if (event->details().tap_count() == 1) {
CreateTouchSelectionControllerAndNotifyIt();
@@ -342,7 +347,6 @@ void NativeTextfieldViews::OnDragDone() {
}
void NativeTextfieldViews::OnPaint(gfx::Canvas* canvas) {
- text_border_->set_has_focus(textfield_->HasFocus());
OnPaintBackground(canvas);
PaintTextAndCursor(canvas);
if (textfield_->draw_border())
@@ -995,25 +999,19 @@ bool NativeTextfieldViews::GetCompositionCharacterBounds(
if (!HasCompositionText())
return false;
const gfx::Range& composition_range = GetRenderText()->GetCompositionRange();
- const uint32 left_cursor_pos = composition_range.start() + index;
- const uint32 right_cursor_pos = composition_range.start() + index + 1;
DCHECK(!composition_range.is_empty());
- if (composition_range.end() < right_cursor_pos)
+
+ size_t text_index = composition_range.start() + index;
+ if (composition_range.end() <= text_index)
+ return false;
+ if (!GetRenderText()->IsCursorablePosition(text_index)) {
+ text_index = GetRenderText()->IndexOfAdjacentGrapheme(
+ text_index, gfx::CURSOR_BACKWARD);
+ }
+ if (text_index < composition_range.start())
return false;
- const gfx::SelectionModel start_position(left_cursor_pos,
- gfx::CURSOR_BACKWARD);
- const gfx::SelectionModel end_position(right_cursor_pos,
- gfx::CURSOR_BACKWARD);
- gfx::Rect start_cursor = GetRenderText()->GetCursorBounds(start_position,
- false);
- gfx::Rect end_cursor = GetRenderText()->GetCursorBounds(end_position, false);
-
- // TextInputClient::GetCompositionCharacterBounds is expected to fill |rect|
- // in screen coordinates and GetCaretBounds returns screen coordinates.
- *rect = gfx::Rect(start_cursor.x(),
- start_cursor.y(),
- end_cursor.x() - start_cursor.x(),
- start_cursor.height());
+ const gfx::SelectionModel caret(text_index, gfx::CURSOR_BACKWARD);
+ *rect = GetRenderText()->GetCursorBounds(caret, false);
ConvertRectToScreen(this, rect);
return true;
diff --git a/ui/views/controls/textfield/native_textfield_views_unittest.cc b/ui/views/controls/textfield/native_textfield_views_unittest.cc
index b003cce195..33196ec315 100644
--- a/ui/views/controls/textfield/native_textfield_views_unittest.cc
+++ b/ui/views/controls/textfield/native_textfield_views_unittest.cc
@@ -99,9 +99,10 @@ class GetTextHelper {
// Convenience to make constructing a GestureEvent simpler.
class GestureEventForTest : public ui::GestureEvent {
public:
- GestureEventForTest(ui::EventType type, int x, int y, int flags)
- : GestureEvent(type, x, y, flags, base::TimeDelta(),
- ui::GestureEventDetails(type, 0.0f, 0.0f), 0) {
+ GestureEventForTest(ui::EventType type, int x, int y, float delta_x,
+ float delta_y)
+ : GestureEvent(type, x, y, 0, base::TimeDelta(),
+ ui::GestureEventDetails(type, delta_x, delta_y), 0) {
}
private:
@@ -1797,6 +1798,41 @@ TEST_F(NativeTextfieldViewsTest, GetCompositionCharacterBoundsTest) {
EXPECT_FALSE(client->GetCompositionCharacterBounds(char_count + 100, &rect));
}
+TEST_F(NativeTextfieldViewsTest, GetCompositionCharacterBounds_ComplexText) {
+ InitTextfield(Textfield::STYLE_DEFAULT);
+
+ const char16 kUtf16Chars[] = {
+ // U+0020 SPACE
+ 0x0020,
+ // U+1F408 (CAT) as surrogate pair
+ 0xd83d, 0xdc08,
+ // U+5642 as Ideographic Variation Sequences
+ 0x5642, 0xDB40, 0xDD00,
+ // U+260E (BLACK TELEPHONE) as Emoji Variation Sequences
+ 0x260E, 0xFE0F,
+ // U+0020 SPACE
+ 0x0020,
+ };
+ const size_t kUtf16CharsCount = arraysize(kUtf16Chars);
+
+ ui::CompositionText composition;
+ composition.text.assign(kUtf16Chars, kUtf16Chars + kUtf16CharsCount);
+ ui::TextInputClient* client = textfield_->GetTextInputClient();
+ client->SetCompositionText(composition);
+
+ // Make sure GetCompositionCharacterBounds never fails for index.
+ gfx::Rect rects[kUtf16CharsCount];
+ gfx::Rect prev_cursor = GetCursorBounds();
+ for (uint32 i = 0; i < kUtf16CharsCount; ++i)
+ EXPECT_TRUE(client->GetCompositionCharacterBounds(i, &rects[i]));
+
+ // Here we might expect the following results but it actually depends on how
+ // Uniscribe or HarfBuzz treats them with given font.
+ // - rects[1] == rects[2]
+ // - rects[3] == rects[4] == rects[5]
+ // - rects[6] == rects[7]
+}
+
// The word we select by double clicking should remain selected regardless of
// where we drag the mouse afterwards without releasing the left button.
TEST_F(NativeTextfieldViewsTest, KeepInitiallySelectedWord) {
@@ -1836,9 +1872,7 @@ TEST_F(NativeTextfieldViewsTest, TouchSelectionAndDraggingTest) {
CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableTouchEditing);
// Tapping on the textfield should turn on the TouchSelectionController.
- ui::GestureEvent tap(ui::ET_GESTURE_TAP, eventX, eventY, 0, base::TimeDelta(),
- ui::GestureEventDetails(ui::ET_GESTURE_TAP, 1.0f, 0.0f),
- 0);
+ GestureEventForTest tap(ui::ET_GESTURE_TAP, eventX, eventY, 1.0f, 0.0f);
textfield_view_->OnGestureEvent(&tap);
EXPECT_TRUE(GetTouchSelectionController());
@@ -1848,9 +1882,11 @@ TEST_F(NativeTextfieldViewsTest, TouchSelectionAndDraggingTest) {
// With touch editing enabled, long press should not show context menu.
// Instead, select word and invoke TouchSelectionController.
- GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, eventX, eventY, 0);
+ GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, eventX, eventY, 0.0f,
+ 0.0f);
textfield_view_->OnGestureEvent(&tap_down);
- GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, eventX, eventY, 0);
+ GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, eventX, eventY,
+ 0.0f, 0.0f);
textfield_view_->OnGestureEvent(&long_press);
EXPECT_STR_EQ("hello", textfield_->GetSelectedText());
EXPECT_TRUE(GetTouchSelectionController());
@@ -1870,11 +1906,52 @@ TEST_F(NativeTextfieldViewsTest, TouchSelectionAndDraggingTest) {
textfield_view_->OnGestureEvent(&tap_down);
// Create a new long press event since the previous one is not marked handled.
- GestureEventForTest long_press2(ui::ET_GESTURE_LONG_PRESS, eventX, eventY, 0);
+ GestureEventForTest long_press2(ui::ET_GESTURE_LONG_PRESS, eventX, eventY,
+ 0.0f, 0.0f);
textfield_view_->OnGestureEvent(&long_press2);
EXPECT_STR_EQ("hello", textfield_->GetSelectedText());
EXPECT_FALSE(GetTouchSelectionController());
}
+
+TEST_F(NativeTextfieldViewsTest, TouchScrubbingSelection) {
+ InitTextfield(Textfield::STYLE_DEFAULT);
+ textfield_->SetText(ASCIIToUTF16("hello world"));
+ EXPECT_FALSE(GetTouchSelectionController());
+
+ CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableTouchEditing);
+
+ // Simulate touch-scrubbing.
+ int scrubbing_start = GetCursorPositionX(1);
+ int scrubbing_end = GetCursorPositionX(6);
+
+ GestureEventForTest tap_down(ui::ET_GESTURE_TAP_DOWN, scrubbing_start, 0,
+ 0.0f, 0.0f);
+ textfield_view_->OnGestureEvent(&tap_down);
+
+ GestureEventForTest tap_cancel(ui::ET_GESTURE_TAP_CANCEL, scrubbing_start, 0,
+ 0.0f, 0.0f);
+ textfield_view_->OnGestureEvent(&tap_cancel);
+
+ GestureEventForTest scroll_begin(ui::ET_GESTURE_SCROLL_BEGIN, scrubbing_start,
+ 0, 0.0f, 0.0f);
+ textfield_view_->OnGestureEvent(&scroll_begin);
+
+ GestureEventForTest scroll_update(ui::ET_GESTURE_SCROLL_UPDATE, scrubbing_end,
+ 0, scrubbing_end - scrubbing_start, 0.0f);
+ textfield_view_->OnGestureEvent(&scroll_update);
+
+ GestureEventForTest scroll_end(ui::ET_GESTURE_SCROLL_END, scrubbing_end, 0,
+ 0.0f, 0.0f);
+ textfield_view_->OnGestureEvent(&scroll_end);
+
+ GestureEventForTest end(ui::ET_GESTURE_END, scrubbing_end, 0, 0.0f, 0.0f);
+ textfield_view_->OnGestureEvent(&end);
+
+ // In the end, part of text should have been selected and handles should have
+ // appeared.
+ EXPECT_STR_EQ("ello ", textfield_->GetSelectedText());
+ EXPECT_TRUE(GetTouchSelectionController());
+}
#endif
// Long_Press gesture in NativeTextfieldViews can initiate a drag and drop now.
@@ -1891,8 +1968,8 @@ TEST_F(NativeTextfieldViewsTest, TestLongPressInitiatesDragDrop) {
switches::kEnableTouchDragDrop);
// Create a long press event in the selected region should start a drag.
- GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS,
- kStringPoint.x(), kStringPoint.y(), 0);
+ GestureEventForTest long_press(ui::ET_GESTURE_LONG_PRESS, kStringPoint.x(),
+ kStringPoint.y(), 0.0f, 0.0f);
textfield_view_->OnGestureEvent(&long_press);
EXPECT_TRUE(textfield_view_->CanStartDragForView(NULL,
kStringPoint, kStringPoint));
diff --git a/ui/views/controls/textfield/textfield.cc b/ui/views/controls/textfield/textfield.cc
index de847da97f..04003ba57f 100644
--- a/ui/views/controls/textfield/textfield.cc
+++ b/ui/views/controls/textfield/textfield.cc
@@ -23,6 +23,7 @@
#include "ui/views/controls/textfield/native_textfield_views.h"
#include "ui/views/controls/textfield/native_textfield_wrapper.h"
#include "ui/views/controls/textfield/textfield_controller.h"
+#include "ui/views/painter.h"
#include "ui/views/views_delegate.h"
#include "ui/views/widget/widget.h"
@@ -78,8 +79,8 @@ Textfield::Textfield()
GetDefaultTextfieldObscuredRevealDuration();
}
- if (!NativeViewHost::kRenderNativeControlFocus)
- set_focus_border(NULL);
+ if (NativeViewHost::kRenderNativeControlFocus)
+ focus_painter_ = Painter::CreateDashedFocusPainter();
}
Textfield::Textfield(StyleFlags style)
@@ -108,8 +109,8 @@ Textfield::Textfield(StyleFlags style)
GetDefaultTextfieldObscuredRevealDuration();
}
- if (!NativeViewHost::kRenderNativeControlFocus)
- set_focus_border(NULL);
+ if (NativeViewHost::kRenderNativeControlFocus)
+ focus_painter_ = Painter::CreateDashedFocusPainter();
}
Textfield::~Textfield() {
@@ -407,6 +408,10 @@ void Textfield::ExecuteCommand(int command_id) {
native_wrapper_->ExecuteTextCommand(command_id);
}
+void Textfield::SetFocusPainter(scoped_ptr<Painter> focus_painter) {
+ focus_painter_ = focus_painter.Pass();
+}
+
bool Textfield::HasTextBeingDragged() {
return native_wrapper_->HasTextBeingDragged();
}
@@ -449,9 +454,10 @@ bool Textfield::SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) {
return e.key_code() == ui::VKEY_BACK || e.IsUnicodeKeyCode();
}
-void Textfield::OnPaintFocusBorder(gfx::Canvas* canvas) {
+void Textfield::OnPaint(gfx::Canvas* canvas) {
+ View::OnPaint(canvas);
if (NativeViewHost::kRenderNativeControlFocus)
- View::OnPaintFocusBorder(canvas);
+ Painter::PaintFocusPainter(this, canvas, focus_painter_.get());
}
bool Textfield::OnKeyPressed(const ui::KeyEvent& e) {
@@ -479,11 +485,17 @@ void Textfield::OnFocus() {
// keyboard messages.
View::OnFocus();
}
+
+ // Border typically draws focus indicator.
+ SchedulePaint();
}
void Textfield::OnBlur() {
if (native_wrapper_)
native_wrapper_->HandleBlur();
+
+ // Border typically draws focus indicator.
+ SchedulePaint();
}
void Textfield::GetAccessibleState(ui::AccessibleViewState* state) {
diff --git a/ui/views/controls/textfield/textfield.h b/ui/views/controls/textfield/textfield.h
index 2c10b8e797..307e562c20 100644
--- a/ui/views/controls/textfield/textfield.h
+++ b/ui/views/controls/textfield/textfield.h
@@ -9,6 +9,7 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/strings/string16.h"
#include "base/time/time.h"
@@ -38,7 +39,7 @@ class TextInputClient;
namespace views {
class ImageView;
-
+class Painter;
class TextfieldController;
// This class implements a View that wraps a native text (edit) field.
@@ -239,6 +240,8 @@ class VIEWS_EXPORT Textfield : public View {
// Performs the action associated with the specified command id.
void ExecuteCommand(int command_id);
+ void SetFocusPainter(scoped_ptr<Painter> focus_painter);
+
// Provided only for testing:
gfx::NativeView GetTestingHandle() const {
return native_wrapper_ ? native_wrapper_->GetTestingHandle() : NULL;
@@ -257,7 +260,7 @@ class VIEWS_EXPORT Textfield : public View {
virtual void AboutToRequestFocusFromTabTraversal(bool reverse) OVERRIDE;
virtual bool SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) OVERRIDE;
virtual void OnEnabledChanged() OVERRIDE;
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
virtual bool OnKeyPressed(const ui::KeyEvent& e) OVERRIDE;
virtual bool OnKeyReleased(const ui::KeyEvent& e) OVERRIDE;
virtual bool OnMouseDragged(const ui::MouseEvent& e) OVERRIDE;
@@ -343,6 +346,8 @@ class VIEWS_EXPORT Textfield : public View {
// Used to bind callback functions to this object.
base::WeakPtrFactory<Textfield> weak_ptr_factory_;
+ scoped_ptr<Painter> focus_painter_;
+
DISALLOW_COPY_AND_ASSIGN(Textfield);
};
diff --git a/ui/views/controls/tree/tree_view.cc b/ui/views/controls/tree/tree_view.cc
index 78d4693e4a..055b9b9c2a 100644
--- a/ui/views/controls/tree/tree_view.cc
+++ b/ui/views/controls/tree/tree_view.cc
@@ -42,6 +42,9 @@ static const int kTextHorizontalPadding = 2;
// How much children are indented from their parent.
static const int kIndent = 20;
+// static
+const char TreeView::kViewClassName[] = "TreeView";
+
namespace {
// Returns the color id for the background of selected text. |has_focus|
@@ -238,6 +241,12 @@ void TreeView::SetSelectedNode(TreeModelNode* model_node) {
// remove explicitly resetting selected_node_ before invoking this.
if (controller_ && (changed || was_empty_selection))
controller_->OnTreeViewSelectionChanged(this);
+
+ if (changed) {
+ // TODO(dmazzoni): Decide if EVENT_SELECTION_CHANGED is a better choice for
+ // sub-item selection event.
+ NotifyAccessibilityEvent(ui::AccessibilityTypes::EVENT_FOCUS, true);
+ }
}
TreeModelNode* TreeView::GetSelectedNode() {
@@ -381,7 +390,7 @@ void TreeView::ShowContextMenu(const gfx::Point& p,
// Only invoke View's implementation (which notifies the
// ContextMenuController) if over a node.
gfx::Point local_point(p);
- ConvertPointToTarget(NULL, this, &local_point);
+ ConvertPointFromScreen(this, &local_point);
int row = (local_point.y() - kVerticalInset) / row_height_;
int depth = 0;
InternalNode* node = GetNodeByRow(row, &depth);
@@ -397,6 +406,16 @@ void TreeView::ShowContextMenu(const gfx::Point& p,
void TreeView::GetAccessibleState(ui::AccessibleViewState* state) {
state->role = ui::AccessibilityTypes::ROLE_OUTLINE;
state->state = ui::AccessibilityTypes::STATE_READONLY;
+ if (!selected_node_)
+ return;
+
+ // Get selected item info.
+ state->role = ui::AccessibilityTypes::ROLE_OUTLINEITEM;
+ state->name = selected_node_->model_node()->GetTitle();
+}
+
+const char* TreeView::GetClassName() const {
+ return kViewClassName;
}
void TreeView::TreeNodesAdded(TreeModel* model,
diff --git a/ui/views/controls/tree/tree_view.h b/ui/views/controls/tree/tree_view.h
index da2a5205a6..de571c789b 100644
--- a/ui/views/controls/tree/tree_view.h
+++ b/ui/views/controls/tree/tree_view.h
@@ -36,6 +36,9 @@ class VIEWS_EXPORT TreeView : public ui::TreeModelObserver,
public FocusChangeListener,
public PrefixDelegate {
public:
+ // The tree view's class name.
+ static const char kViewClassName[];
+
TreeView();
virtual ~TreeView();
@@ -122,6 +125,7 @@ class VIEWS_EXPORT TreeView : public ui::TreeModelObserver,
virtual void ShowContextMenu(const gfx::Point& p,
ui::MenuSourceType source_type) OVERRIDE;
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
+ virtual const char* GetClassName() const OVERRIDE;
// TreeModelObserver overrides:
virtual void TreeNodesAdded(ui::TreeModel* model,
diff --git a/ui/views/controls/webview/web_dialog_view.cc b/ui/views/controls/webview/web_dialog_view.cc
index 079200cfac..7f88f022f5 100644
--- a/ui/views/controls/webview/web_dialog_view.cc
+++ b/ui/views/controls/webview/web_dialog_view.cc
@@ -100,6 +100,11 @@ void WebDialogView::ViewHierarchyChanged(
}
bool WebDialogView::CanClose() {
+ // Don't close UI if |delegate_| does not allow users to close it by
+ // clicking on "x" button or pressing Esc shortcut key on hosting dialog.
+ if (!delegate_->CanCloseDialog() && !close_contents_called_)
+ return false;
+
// If CloseContents() is called before CanClose(), which is called by
// RenderViewHostImpl::ClosePageIgnoringUnloadEvents, it indicates
// beforeunload event should not be fired during closing.
diff --git a/ui/views/controls/webview/webview.cc b/ui/views/controls/webview/webview.cc
index eef661f3fe..f2ea02f48f 100644
--- a/ui/views/controls/webview/webview.cc
+++ b/ui/views/controls/webview/webview.cc
@@ -35,8 +35,6 @@ WebView::WebView(content::BrowserContext* browser_context)
is_embedding_fullscreen_widget_(false),
browser_context_(browser_context),
allow_accelerators_(false) {
- // WebView shouldn't render focus.
- set_focus_border(NULL);
AddChildView(wcv_holder_);
NativeViewAccessibility::RegisterWebView(this);
}
diff --git a/ui/views/corewm/capture_controller_unittest.cc b/ui/views/corewm/capture_controller_unittest.cc
index f6ac7b378e..558a4030f5 100644
--- a/ui/views/corewm/capture_controller_unittest.cc
+++ b/ui/views/corewm/capture_controller_unittest.cc
@@ -166,8 +166,7 @@ TEST_F(CaptureControllerTest, TouchTargetResetOnCaptureChange) {
ui::ET_TOUCH_PRESSED, gfx::Point(), 0, 0, ui::EventTimeForNow(), 1.0f,
1.0f, 1.0f, 1.0f);
EXPECT_EQ(static_cast<ui::GestureConsumer*>(w2.get()),
- ui::GestureRecognizer::Get()->GetTouchLockedTarget(
- &touch_event));
+ ui::GestureRecognizer::Get()->GetTouchLockedTarget(touch_event));
}
} // namespace views
diff --git a/ui/views/corewm/tooltip_aura.cc b/ui/views/corewm/tooltip_aura.cc
index 7988ebee57..7c11bd80bb 100644
--- a/ui/views/corewm/tooltip_aura.cc
+++ b/ui/views/corewm/tooltip_aura.cc
@@ -11,6 +11,8 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/screen.h"
#include "ui/gfx/text_elider.h"
+#include "ui/views/background.h"
+#include "ui/views/border.h"
#include "ui/views/corewm/corewm_switches.h"
#include "ui/views/widget/widget.h"
diff --git a/ui/views/corewm/tooltip_controller.cc b/ui/views/corewm/tooltip_controller.cc
index 9d1abf9a83..b411688397 100644
--- a/ui/views/corewm/tooltip_controller.cc
+++ b/ui/views/corewm/tooltip_controller.cc
@@ -227,7 +227,6 @@ void TooltipController::OnWindowDestroyed(aura::Window* window) {
if (tooltip_window_ == window) {
tooltip_->Hide();
tooltip_shown_timeout_map_.erase(tooltip_window_);
- tooltip_window_->RemoveObserver(this);
tooltip_window_ = NULL;
}
}
diff --git a/ui/views/event_utils.h b/ui/views/event_utils.h
index 3527c507d4..095487b152 100644
--- a/ui/views/event_utils.h
+++ b/ui/views/event_utils.h
@@ -20,6 +20,12 @@ namespace views {
VIEWS_EXPORT bool RepostLocatedEvent(gfx::NativeWindow window,
const ui::LocatedEvent& event);
+#if defined(OS_WIN) && defined(USE_AURA)
+// Reposts a located event to the HWND passed in.
+VIEWS_EXPORT bool RepostLocatedEventWin(HWND window,
+ const ui::LocatedEvent& event);
+#endif
+
} // namespace views
#endif // UI_VIEWS_EVENT_UTILS_H_
diff --git a/ui/views/event_utils_aura.cc b/ui/views/event_utils_aura.cc
index 9a42656a3d..e3d07d9f31 100644
--- a/ui/views/event_utils_aura.cc
+++ b/ui/views/event_utils_aura.cc
@@ -10,6 +10,7 @@
#include "ui/aura/root_window.h"
#include "ui/events/event.h"
#include "ui/gfx/point.h"
+#include "ui/views/views_delegate.h"
using aura::client::ScreenPositionClient;
@@ -20,6 +21,13 @@ bool RepostLocatedEvent(gfx::NativeWindow window,
if (!window)
return false;
+#if defined(OS_WIN)
+ if (ViewsDelegate::views_delegate &&
+ !ViewsDelegate::views_delegate->IsWindowInMetro(window)) {
+ return RepostLocatedEventWin(
+ window->GetDispatcher()->host()->GetAcceleratedWidget(), event);
+ }
+#endif
aura::Window* root_window = window->GetRootWindow();
gfx::Point root_loc(event.location());
diff --git a/ui/views/event_utils_win.cc b/ui/views/event_utils_win.cc
index 38c05c988f..3e908889df 100644
--- a/ui/views/event_utils_win.cc
+++ b/ui/views/event_utils_win.cc
@@ -13,8 +13,13 @@
namespace views {
-bool RepostLocatedEvent(gfx::NativeWindow window,
+#if defined(USE_AURA)
+bool RepostLocatedEventWin(HWND window,
+ const ui::LocatedEvent& event) {
+#else
+bool RepostLocatedEvent(gfx::NativeWindow window
const ui::LocatedEvent& event) {
+#endif
if (!window)
return false;
@@ -45,10 +50,10 @@ bool RepostLocatedEvent(gfx::NativeWindow window,
int window_x = screen_loc.x();
int window_y = screen_loc.y();
if (in_client_area) {
- RECT window_bounds;
- GetWindowRect(window, &window_bounds);
- window_x -= window_bounds.left;
- window_y -= window_bounds.top;
+ POINT pt = {window_x, window_y};
+ ScreenToClient(window, &pt);
+ window_x = pt.x;
+ window_y = pt.y;
}
WPARAM target = in_client_area ? event.native_event().wParam : nc_hit_result;
diff --git a/ui/views/examples/button_example.cc b/ui/views/examples/button_example.cc
index de81072d9e..eecba5833e 100644
--- a/ui/views/examples/button_example.cc
+++ b/ui/views/examples/button_example.cc
@@ -8,6 +8,7 @@
#include "grit/ui_resources.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/image/image.h"
+#include "ui/views/background.h"
#include "ui/views/controls/button/blue_button.h"
#include "ui/views/controls/button/image_button.h"
#include "ui/views/controls/button/label_button.h"
diff --git a/ui/views/examples/double_split_view_example.cc b/ui/views/examples/double_split_view_example.cc
index 2bac8e180b..fb1f099a1f 100644
--- a/ui/views/examples/double_split_view_example.cc
+++ b/ui/views/examples/double_split_view_example.cc
@@ -4,6 +4,7 @@
#include "ui/views/examples/double_split_view_example.h"
+#include "ui/views/background.h"
#include "ui/views/controls/single_split_view.h"
#include "ui/views/layout/grid_layout.h"
diff --git a/ui/views/examples/examples_main.cc b/ui/views/examples/examples_main.cc
index 4880469269..28864c477c 100644
--- a/ui/views/examples/examples_main.cc
+++ b/ui/views/examples/examples_main.cc
@@ -2,6 +2,18 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/at_exit.h"
+#include "base/command_line.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+
int main(int argc, char** argv) {
+ base::AtExitManager at_exit;
+ CommandLine::Init(argc, argv);
+
+ base::MessageLoop message_loop(base::MessageLoop::TYPE_UI);
+
+ base::RunLoop().Run();
+
return 0;
}
diff --git a/ui/views/examples/examples_window.cc b/ui/views/examples/examples_window.cc
index 52f8c7dc3e..041199286d 100644
--- a/ui/views/examples/examples_window.cc
+++ b/ui/views/examples/examples_window.cc
@@ -10,6 +10,7 @@
#include "base/strings/utf_string_conversions.h"
#include "ui/base/models/combobox_model.h"
#include "ui/base/ui_base_paths.h"
+#include "ui/views/background.h"
#include "ui/views/controls/combobox/combobox.h"
#include "ui/views/controls/label.h"
#include "ui/views/examples/bubble_example.h"
diff --git a/ui/views/examples/examples_window_with_content.cc b/ui/views/examples/examples_window_with_content.cc
index 6f297c1d1b..3cfe14bbad 100644
--- a/ui/views/examples/examples_window_with_content.cc
+++ b/ui/views/examples/examples_window_with_content.cc
@@ -11,6 +11,7 @@
#include "content/public/browser/browser_context.h"
#include "ui/base/models/combobox_model.h"
#include "ui/base/ui_base_paths.h"
+#include "ui/views/background.h"
#include "ui/views/controls/combobox/combobox.h"
#include "ui/views/controls/label.h"
#include "ui/views/examples/bubble_example.h"
diff --git a/ui/views/examples/multiline_example.cc b/ui/views/examples/multiline_example.cc
index da362f00de..b192384638 100644
--- a/ui/views/examples/multiline_example.cc
+++ b/ui/views/examples/multiline_example.cc
@@ -7,6 +7,8 @@
#include "base/strings/utf_string_conversions.h"
#include "ui/events/event.h"
#include "ui/gfx/render_text.h"
+#include "ui/views/background.h"
+#include "ui/views/border.h"
#include "ui/views/controls/label.h"
#include "ui/views/controls/textfield/textfield.h"
#include "ui/views/layout/grid_layout.h"
diff --git a/ui/views/examples/scroll_view_example.cc b/ui/views/examples/scroll_view_example.cc
index b2d7bd6ddf..38b18fc5e7 100644
--- a/ui/views/examples/scroll_view_example.cc
+++ b/ui/views/examples/scroll_view_example.cc
@@ -6,6 +6,7 @@
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
+#include "ui/views/background.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/controls/button/radio_button.h"
#include "ui/views/layout/grid_layout.h"
diff --git a/ui/views/examples/single_split_view_example.cc b/ui/views/examples/single_split_view_example.cc
index 70e4b19875..97fb36b798 100644
--- a/ui/views/examples/single_split_view_example.cc
+++ b/ui/views/examples/single_split_view_example.cc
@@ -4,6 +4,7 @@
#include "ui/views/examples/single_split_view_example.h"
+#include "ui/views/background.h"
#include "ui/views/controls/single_split_view.h"
#include "ui/views/layout/grid_layout.h"
diff --git a/ui/views/examples/text_example.cc b/ui/views/examples/text_example.cc
index e0f2352d1c..ec43ac15b9 100644
--- a/ui/views/examples/text_example.cc
+++ b/ui/views/examples/text_example.cc
@@ -8,6 +8,7 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/font_list.h"
+#include "ui/views/border.h"
#include "ui/views/controls/button/checkbox.h"
#include "ui/views/controls/combobox/combobox.h"
#include "ui/views/controls/label.h"
diff --git a/ui/views/examples/widget_example.cc b/ui/views/examples/widget_example.cc
index e50700030a..3722ba0467 100644
--- a/ui/views/examples/widget_example.cc
+++ b/ui/views/examples/widget_example.cc
@@ -5,6 +5,7 @@
#include "ui/views/examples/widget_example.h"
#include "base/strings/utf_string_conversions.h"
+#include "ui/views/background.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/controls/label.h"
#include "ui/views/layout/box_layout.h"
diff --git a/ui/views/focus/focus_traversal_unittest.cc b/ui/views/focus/focus_traversal_unittest.cc
index e3f93e7f92..03bf165daa 100644
--- a/ui/views/focus/focus_traversal_unittest.cc
+++ b/ui/views/focus/focus_traversal_unittest.cc
@@ -8,6 +8,8 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/base/models/combobox_model.h"
+#include "ui/views/background.h"
+#include "ui/views/border.h"
#include "ui/views/controls/button/checkbox.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/controls/button/radio_button.h"
diff --git a/ui/views/focus_border.cc b/ui/views/focus_border.cc
deleted file mode 100644
index 68fd430750..0000000000
--- a/ui/views/focus_border.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/views/focus_border.h"
-
-#include "ui/gfx/canvas.h"
-#include "ui/gfx/rect.h"
-#include "ui/views/view.h"
-
-namespace views {
-namespace {
-class DashedFocusBorder : public FocusBorder {
- public:
- DashedFocusBorder(
- int left_inset, int top_inset, int right_inset, int bottom_inset)
- : left_inset_(left_inset),
- top_inset_(top_inset),
- right_inset_(right_inset),
- bottom_inset_(bottom_inset) {
- }
-
- virtual void Paint(const View& view, gfx::Canvas* canvas) const OVERRIDE {
- gfx::Rect rect(view.GetLocalBounds());
- rect.Inset(left_inset_, top_inset_, right_inset_, bottom_inset_);
- canvas->DrawFocusRect(rect);
- }
-
- private:
- int left_inset_;
- int top_inset_;
- int right_inset_;
- int bottom_inset_;
-
- DISALLOW_COPY_AND_ASSIGN(DashedFocusBorder);
-};
-} // namespace
-
-FocusBorder::~FocusBorder() {
-}
-
-// static
-FocusBorder* FocusBorder::CreateDashedFocusBorder() {
- return new DashedFocusBorder(0, 0, 0, 0);
-}
-
-// static
-FocusBorder* FocusBorder::CreateDashedFocusBorder(
- int left, int top, int right, int bottom) {
- return new DashedFocusBorder(left, top, right, bottom);
-}
-
-FocusBorder::FocusBorder() {
-}
-
-} // namespace views
diff --git a/ui/views/focus_border.h b/ui/views/focus_border.h
deleted file mode 100644
index 15a3477883..0000000000
--- a/ui/views/focus_border.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_VIEWS_FOCUS_BORDER_H_
-#define UI_VIEWS_FOCUS_BORDER_H_
-
-#include "ui/views/views_export.h"
-#include "base/basictypes.h"
-
-namespace gfx {
-class Canvas;
-}
-
-namespace views {
-class View;
-
-////////////////////////////////////////////////////////////////////////////////
-//
-// Focus border class.
-//
-// The focus border class is used to display an indication of focus on a view.
-// To set a focus border on a view, call SetFocusBorder on the view. Once set
-// on a view, the focus border is owned by the view.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-class VIEWS_EXPORT FocusBorder {
- public:
- virtual ~FocusBorder();
-
- // Creates the default inset dashed line focus border.
- static FocusBorder* CreateDashedFocusBorder();
- static FocusBorder* CreateDashedFocusBorder(
- int left, int top, int right, int bottom);
-
- // Renders the focus border for the specified view.
- virtual void Paint(const View& view, gfx::Canvas* canvas) const = 0;
-
- protected:
- FocusBorder();
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FocusBorder);
-};
-
-} // namespace views
-
-#endif // UI_VIEWS_FOCUS_BORDER_H_
diff --git a/ui/views/ime/input_method_bridge_unittest.cc b/ui/views/ime/input_method_bridge_unittest.cc
index 64a1247073..64144cf450 100644
--- a/ui/views/ime/input_method_bridge_unittest.cc
+++ b/ui/views/ime/input_method_bridge_unittest.cc
@@ -5,7 +5,7 @@
#include "ui/aura/client/aura_constants.h"
#include "ui/aura/window.h"
#include "ui/base/ime/dummy_input_method_delegate.h"
-#include "ui/base/ime/fake_input_method.h"
+#include "ui/base/ime/input_method_minimal.h"
#include "ui/base/ime/text_input_client.h"
#include "ui/views/ime/input_method.h"
#include "ui/views/test/views_test_base.h"
@@ -19,7 +19,7 @@ typedef ViewsTestBase InputMethodBridgeTest;
TEST_F(InputMethodBridgeTest, DestructTest) {
ui::internal::DummyInputMethodDelegate input_method_delegate;
- ui::FakeInputMethod input_method(&input_method_delegate);
+ ui::InputMethodMinimal input_method(&input_method_delegate);
GetContext()->SetProperty(aura::client::kRootWindowInputMethodKey,
static_cast<ui::InputMethod*>(&input_method));
diff --git a/ui/views/linux_ui/linux_ui.h b/ui/views/linux_ui/linux_ui.h
index 8355e98776..152b364282 100644
--- a/ui/views/linux_ui/linux_ui.h
+++ b/ui/views/linux_ui/linux_ui.h
@@ -103,6 +103,9 @@ class VIEWS_EXPORT LinuxUI : public ui::LinuxInputMethodContextFactory,
// Removes the observer from the LinuxUI's list.
virtual void RemoveWindowButtonOrderObserver(
WindowButtonOrderObserver* observer) = 0;
+
+ // Determines whether the user's window manager is Unity.
+ virtual bool UnityIsRunning() = 0;
};
} // namespace views
diff --git a/ui/views/painter.cc b/ui/views/painter.cc
index ce84a58e8d..b6a2e7d4c6 100644
--- a/ui/views/painter.cc
+++ b/ui/views/painter.cc
@@ -15,12 +15,83 @@
#include "ui/gfx/insets.h"
#include "ui/gfx/point.h"
#include "ui/gfx/rect.h"
-
+#include "ui/views/view.h"
namespace views {
namespace {
+// DashedFocusPainter ----------------------------------------------------------
+
+class DashedFocusPainter : public Painter {
+ public:
+ explicit DashedFocusPainter(const gfx::Insets& insets);
+ virtual ~DashedFocusPainter();
+
+ // Painter:
+ virtual gfx::Size GetMinimumSize() const OVERRIDE;
+ virtual void Paint(gfx::Canvas* canvas, const gfx::Size& size) OVERRIDE;
+
+ private:
+ const gfx::Insets insets_;
+
+ DISALLOW_COPY_AND_ASSIGN(DashedFocusPainter);
+};
+
+DashedFocusPainter::DashedFocusPainter(const gfx::Insets& insets)
+ : insets_(insets) {
+}
+
+DashedFocusPainter::~DashedFocusPainter() {
+}
+
+gfx::Size DashedFocusPainter::GetMinimumSize() const {
+ return gfx::Size();
+}
+
+void DashedFocusPainter::Paint(gfx::Canvas* canvas, const gfx::Size& size) {
+ gfx::Rect rect(size);
+ rect.Inset(insets_);
+ canvas->DrawFocusRect(rect);
+}
+
+// SolidFocusPainter -----------------------------------------------------------
+
+class SolidFocusPainter : public Painter {
+ public:
+ SolidFocusPainter(SkColor color, const gfx::Insets& insets);
+ virtual ~SolidFocusPainter();
+
+ // Painter:
+ virtual gfx::Size GetMinimumSize() const OVERRIDE;
+ virtual void Paint(gfx::Canvas* canvas, const gfx::Size& size) OVERRIDE;
+
+ private:
+ const SkColor color_;
+ const gfx::Insets insets_;
+
+ DISALLOW_COPY_AND_ASSIGN(SolidFocusPainter);
+};
+
+SolidFocusPainter::SolidFocusPainter(SkColor color,
+ const gfx::Insets& insets)
+ : color_(color),
+ insets_(insets) {
+}
+
+SolidFocusPainter::~SolidFocusPainter() {
+}
+
+gfx::Size SolidFocusPainter::GetMinimumSize() const {
+ return gfx::Size();
+}
+
+void SolidFocusPainter::Paint(gfx::Canvas* canvas, const gfx::Size& size) {
+ gfx::Rect rect(size);
+ rect.Inset(insets_);
+ canvas->DrawSolidFocusRect(rect, color_);
+}
+
// GradientPainter ------------------------------------------------------------
class GradientPainter : public Painter {
@@ -88,7 +159,6 @@ void GradientPainter::Paint(gfx::Canvas* canvas, const gfx::Size& size) {
SkIntToScalar(size.height()), paint);
}
-
// ImagePainter ---------------------------------------------------------------
// ImagePainter stores and paints nine images as a scalable grid.
@@ -239,6 +309,14 @@ void Painter::PaintPainterAt(gfx::Canvas* canvas,
}
// static
+void Painter::PaintFocusPainter(View* view,
+ gfx::Canvas* canvas,
+ Painter* focus_painter) {
+ if (focus_painter && view->HasFocus())
+ PaintPainterAt(canvas, focus_painter, view->GetLocalBounds());
+}
+
+// static
Painter* Painter::CreateHorizontalGradient(SkColor c1, SkColor c2) {
SkColor colors[2];
colors[0] = c1;
@@ -274,6 +352,23 @@ Painter* Painter::CreateImageGridPainter(const int image_ids[]) {
return new ImagePainter(image_ids);
}
+// static
+scoped_ptr<Painter> Painter::CreateDashedFocusPainter() {
+ return scoped_ptr<Painter>(new DashedFocusPainter(gfx::Insets())).Pass();
+}
+
+// static
+scoped_ptr<Painter> Painter::CreateDashedFocusPainterWithInsets(
+ const gfx::Insets& insets) {
+ return scoped_ptr<Painter>(new DashedFocusPainter(insets)).Pass();
+}
+
+// static
+scoped_ptr<Painter> Painter::CreateSolidFocusPainter(
+ SkColor color,
+ const gfx::Insets& insets) {
+ return scoped_ptr<Painter>(new SolidFocusPainter(color, insets)).Pass();
+}
// HorizontalPainter ----------------------------------------------------------
diff --git a/ui/views/painter.h b/ui/views/painter.h
index c0ff443d3a..3799e91e86 100644
--- a/ui/views/painter.h
+++ b/ui/views/painter.h
@@ -7,6 +7,7 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/views/views_export.h"
@@ -25,6 +26,8 @@ class Size;
namespace views {
+class View;
+
// Painter, as the name implies, is responsible for painting in a particular
// region. Think of Painter as a Border or Background that can be painted
// in any region of a View.
@@ -39,6 +42,12 @@ class VIEWS_EXPORT Painter {
Painter* painter,
const gfx::Rect& rect);
+ // Convenience that paints |focus_painter| only if |view| HasFocus() and
+ // |focus_painter| is non-NULL.
+ static void PaintFocusPainter(View* view,
+ gfx::Canvas* canvas,
+ Painter* focus_painter);
+
// Creates a painter that draws a gradient between the two colors.
static Painter* CreateHorizontalGradient(SkColor c1, SkColor c2);
static Painter* CreateVerticalGradient(SkColor c1, SkColor c2);
@@ -65,6 +74,13 @@ class VIEWS_EXPORT Painter {
// Top-Left/Top/Top-Right/Left/[Center]/Right/Bottom-Left/Bottom/Bottom-Right.
static Painter* CreateImageGridPainter(const int image_ids[]);
+ // Factory methods for creating painters intended for rendering focus.
+ static scoped_ptr<Painter> CreateDashedFocusPainter();
+ static scoped_ptr<Painter> CreateDashedFocusPainterWithInsets(
+ const gfx::Insets& insets);
+ static scoped_ptr<Painter> CreateSolidFocusPainter(SkColor color,
+ const gfx::Insets& insets);
+
// Returns the minimum size this painter can paint without obvious graphical
// problems (e.g. overlapping images).
virtual gfx::Size GetMinimumSize() const = 0;
diff --git a/ui/views/shadow_border.cc b/ui/views/shadow_border.cc
index 3513e77df3..3cd21c9660 100644
--- a/ui/views/shadow_border.cc
+++ b/ui/views/shadow_border.cc
@@ -6,8 +6,10 @@
#include "ui/gfx/canvas.h"
#include "ui/gfx/insets.h"
+#include "ui/gfx/rect.h"
#include "ui/gfx/shadow_value.h"
#include "ui/gfx/skia_util.h"
+#include "ui/views/view.h"
namespace views {
diff --git a/ui/views/test/menu_runner_test_api.cc b/ui/views/test/menu_runner_test_api.cc
new file mode 100644
index 0000000000..c2977000d8
--- /dev/null
+++ b/ui/views/test/menu_runner_test_api.cc
@@ -0,0 +1,26 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/views/test/menu_runner_test_api.h"
+
+#include "ui/views/controls/menu/menu_runner.h"
+#include "ui/views/controls/menu/menu_runner_handler.h"
+
+namespace views {
+namespace test {
+
+MenuRunnerTestAPI::MenuRunnerTestAPI(MenuRunner* menu_runner)
+ : menu_runner_(menu_runner) {
+}
+
+MenuRunnerTestAPI::~MenuRunnerTestAPI() {
+}
+
+void MenuRunnerTestAPI::SetMenuRunnerHandler(
+ scoped_ptr<MenuRunnerHandler> menu_runner_handler) {
+ menu_runner_->SetRunnerHandler(menu_runner_handler.Pass());
+}
+
+} // test
+} // views
diff --git a/ui/views/test/menu_runner_test_api.h b/ui/views/test/menu_runner_test_api.h
new file mode 100644
index 0000000000..a9e2b8e8fb
--- /dev/null
+++ b/ui/views/test/menu_runner_test_api.h
@@ -0,0 +1,37 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_VIEWS_TEST_MENU_RUNNER_TEST_API_H_
+#define UI_VIEWS_TEST_MENU_RUNNER_TEST_API_H_
+
+#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
+
+namespace views {
+
+class MenuRunner;
+class MenuRunnerHandler;
+
+namespace test {
+
+// A wrapper of MenuRunner to use testing methods of MenuRunner.
+class MenuRunnerTestAPI {
+ public:
+ explicit MenuRunnerTestAPI(MenuRunner* menu_runner);
+ ~MenuRunnerTestAPI();
+
+ // Sets the menu runner handler.
+ void SetMenuRunnerHandler(scoped_ptr<MenuRunnerHandler> menu_runner_handler);
+
+ private:
+ MenuRunner* menu_runner_;
+
+ DISALLOW_COPY_AND_ASSIGN(MenuRunnerTestAPI);
+};
+
+} // namespace test
+
+} // namespace views
+
+#endif // UI_VIEWS_TEST_MENU_RUNNER_TEST_API_H_
diff --git a/ui/views/test/test_views_delegate.h b/ui/views/test/test_views_delegate.h
index 913766a07a..7816b687f2 100644
--- a/ui/views/test/test_views_delegate.h
+++ b/ui/views/test/test_views_delegate.h
@@ -50,6 +50,10 @@ class TestViewsDelegate : public ViewsDelegate {
virtual HICON GetDefaultWindowIcon() const OVERRIDE {
return NULL;
}
+
+ virtual bool IsWindowInMetro(gfx::NativeWindow window) const {
+ return false;
+ }
#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
virtual gfx::ImageSkia* GetDefaultWindowIcon() const OVERRIDE;
#endif
diff --git a/ui/views/view.cc b/ui/views/view.cc
index 7157509735..ee4ed58da3 100644
--- a/ui/views/view.cc
+++ b/ui/views/view.cc
@@ -22,6 +22,7 @@
#include "ui/compositor/compositor.h"
#include "ui/compositor/layer.h"
#include "ui/compositor/layer_animator.h"
+#include "ui/events/event_target_iterator.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/interpolated_transform.h"
#include "ui/gfx/path.h"
@@ -35,6 +36,7 @@
#include "ui/native_theme/native_theme.h"
#include "ui/views/accessibility/native_view_accessibility.h"
#include "ui/views/background.h"
+#include "ui/views/border.h"
#include "ui/views/context_menu_controller.h"
#include "ui/views/drag_controller.h"
#include "ui/views/layout/layout_manager.h"
@@ -160,7 +162,6 @@ View::View()
registered_for_visible_bounds_notification_(false),
clip_insets_(0, 0, 0, 0),
needs_layout_(true),
- focus_border_(FocusBorder::CreateDashedFocusBorder()),
flip_canvas_on_paint_for_rtl_ui_(false),
paint_to_layer_(false),
accelerator_focus_manager_(NULL),
@@ -663,52 +664,38 @@ View* View::GetSelectedViewForGroup(int group) {
void View::ConvertPointToTarget(const View* source,
const View* target,
gfx::Point* point) {
+ DCHECK(source);
+ DCHECK(target);
if (source == target)
return;
- // |source| can be NULL.
const View* root = GetHierarchyRoot(target);
- if (source) {
- CHECK_EQ(GetHierarchyRoot(source), root);
+ CHECK_EQ(GetHierarchyRoot(source), root);
- if (source != root)
- source->ConvertPointForAncestor(root, point);
- }
+ if (source != root)
+ source->ConvertPointForAncestor(root, point);
if (target != root)
target->ConvertPointFromAncestor(root, point);
-
- // API defines NULL |source| as returning the point in screen coordinates.
- if (!source) {
- *point -=
- root->GetWidget()->GetClientAreaBoundsInScreen().OffsetFromOrigin();
- }
}
// static
void View::ConvertRectToTarget(const View* source,
const View* target,
gfx::RectF* rect) {
+ DCHECK(source);
+ DCHECK(target);
if (source == target)
return;
- // |source| can be NULL.
const View* root = GetHierarchyRoot(target);
- if (source) {
- CHECK_EQ(GetHierarchyRoot(source), root);
+ CHECK_EQ(GetHierarchyRoot(source), root);
- if (source != root)
- source->ConvertRectForAncestor(root, rect);
- }
+ if (source != root)
+ source->ConvertRectForAncestor(root, rect);
if (target != root)
target->ConvertRectFromAncestor(root, rect);
-
- // API defines NULL |source| as returning the point in screen coordinates.
- if (!source) {
- rect->set_origin(rect->origin() -
- root->GetWidget()->GetClientAreaBoundsInScreen().OffsetFromOrigin());
- }
}
// static
@@ -813,6 +800,14 @@ void View::Paint(gfx::Canvas* canvas) {
PaintCommon(canvas);
}
+void View::set_background(Background* b) {
+ background_.reset(b);
+}
+
+void View::set_border(Border* b) {
+ border_.reset(b);
+}
+
ui::ThemeProvider* View::GetThemeProvider() const {
const Widget* widget = GetWidget();
return widget ? widget->GetThemeProvider() : NULL;
@@ -993,7 +988,7 @@ bool View::IsMouseHovered() {
gfx::Point cursor_pos(gfx::Screen::GetScreenFor(
GetWidget()->GetNativeView())->GetCursorScreenPoint());
- ConvertPointToTarget(NULL, this, &cursor_pos);
+ ConvertPointFromScreen(this, &cursor_pos);
return HitTestPoint(cursor_pos);
}
@@ -1118,6 +1113,15 @@ ui::EventTarget* View::GetParentTarget() {
return parent_;
}
+scoped_ptr<ui::EventTargetIterator> View::GetChildIterator() const {
+ return scoped_ptr<ui::EventTargetIterator>(
+ new ui::EventTargetIteratorImpl<View>(children_));
+}
+
+ui::EventTargeter* View::GetEventTargeter() {
+ return NULL;
+}
+
// Accelerators ----------------------------------------------------------------
void View::AddAccelerator(const ui::Accelerator& accelerator) {
@@ -1394,7 +1398,6 @@ void View::PaintChildren(gfx::Canvas* canvas) {
void View::OnPaint(gfx::Canvas* canvas) {
TRACE_EVENT1("views", "View::OnPaint", "class", GetClassName());
OnPaintBackground(canvas);
- OnPaintFocusBorder(canvas);
OnPaintBorder(canvas);
}
@@ -1416,15 +1419,6 @@ void View::OnPaintBorder(gfx::Canvas* canvas) {
}
}
-void View::OnPaintFocusBorder(gfx::Canvas* canvas) {
- if (focus_border_.get() && HasFocus()) {
- TRACE_EVENT2("views", "views::OnPaintFocusBorder",
- "width", canvas->sk_canvas()->getDevice()->width(),
- "height", canvas->sk_canvas()->getDevice()->height());
- focus_border_->Paint(*this, canvas);
- }
-}
-
// Accelerated Painting --------------------------------------------------------
void View::SetFillsBoundsOpaquely(bool fills_bounds_opaquely) {
@@ -1596,14 +1590,10 @@ void View::OnBlur() {
}
void View::Focus() {
- if (focus_border_.get())
- SchedulePaint();
OnFocus();
}
void View::Blur() {
- if (focus_border_.get())
- SchedulePaint();
OnBlur();
}
diff --git a/ui/views/view.h b/ui/views/view.h
index ef60e84a58..e391dbe6b8 100644
--- a/ui/views/view.h
+++ b/ui/views/view.h
@@ -26,12 +26,11 @@
#include "ui/compositor/layer_owner.h"
#include "ui/events/event.h"
#include "ui/events/event_target.h"
+#include "ui/gfx/insets.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/vector2d.h"
-#include "ui/views/background.h"
-#include "ui/views/border.h"
-#include "ui/views/focus_border.h"
+#include "ui/views/views_export.h"
#if defined(OS_WIN)
#include "base/win/scoped_comptr.h"
@@ -62,7 +61,6 @@ class Background;
class Border;
class ContextMenuController;
class DragController;
-class FocusBorder;
class FocusManager;
class FocusTraversable;
class InputMethod;
@@ -456,7 +454,7 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
//
// |source| and |target| must be in the same widget, but doesn't need to be in
// the same view hierarchy.
- // |source| can be NULL in which case it means the screen coordinate system.
+ // Neither |source| nor |target| can be NULL.
static void ConvertPointToTarget(const View* source,
const View* target,
gfx::Point* point);
@@ -466,7 +464,7 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
//
// |source| and |target| must be in the same widget, but doesn't need to be in
// the same view hierarchy.
- // |source| can be NULL in which case it means the screen coordinate system.
+ // Neither |source| nor |target| can be NULL.
static void ConvertRectToTarget(const View* source,
const View* target,
gfx::RectF* rect);
@@ -510,20 +508,15 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
virtual void Paint(gfx::Canvas* canvas);
// The background object is owned by this object and may be NULL.
- void set_background(Background* b) { background_.reset(b); }
+ void set_background(Background* b);
const Background* background() const { return background_.get(); }
Background* background() { return background_.get(); }
// The border object is owned by this object and may be NULL.
- void set_border(Border* b) { border_.reset(b); }
+ void set_border(Border* b);
const Border* border() const { return border_.get(); }
Border* border() { return border_.get(); }
- // The focus_border object is owned by this object and may be NULL.
- void set_focus_border(FocusBorder* b) { focus_border_.reset(b); }
- const FocusBorder* focus_border() const { return focus_border_.get(); }
- FocusBorder* focus_border() { return focus_border_.get(); }
-
// Get the theme provider from the parent widget.
virtual ui::ThemeProvider* GetThemeProvider() const;
@@ -722,6 +715,8 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
// Overridden from ui::EventTarget:
virtual bool CanAcceptEvent(const ui::Event& event) OVERRIDE;
virtual ui::EventTarget* GetParentTarget() OVERRIDE;
+ virtual scoped_ptr<ui::EventTargetIterator> GetChildIterator() const OVERRIDE;
+ virtual ui::EventTargeter* GetEventTargeter() OVERRIDE;
// Overridden from ui::EventHandler:
virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE;
@@ -1090,10 +1085,6 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
// Override to paint a border not specified by SetBorder().
virtual void OnPaintBorder(gfx::Canvas* canvas);
- // Override to paint a focus border not specified by set_focus_border() around
- // relevant contents. The focus border is usually a dotted rectangle.
- virtual void OnPaintFocusBorder(gfx::Canvas* canvas);
-
// Accelerated painting ------------------------------------------------------
// Returns the offset from this view to the nearest ancestor with a layer. If
@@ -1111,12 +1102,11 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
// recurses through all children. This is used when adding a layer to an
// existing view to make sure all descendants that have layers are parented to
// the right layer.
- virtual void MoveLayerToParent(ui::Layer* parent_layer,
- const gfx::Point& point);
+ void MoveLayerToParent(ui::Layer* parent_layer, const gfx::Point& point);
// Called to update the bounds of any child layers within this View's
// hierarchy when something happens to the hierarchy.
- virtual void UpdateChildLayerBounds(const gfx::Vector2d& offset);
+ void UpdateChildLayerBounds(const gfx::Vector2d& offset);
// Overridden from ui::LayerDelegate:
virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE;
@@ -1514,9 +1504,6 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
// Border.
scoped_ptr<Border> border_;
- // Focus border.
- scoped_ptr<FocusBorder> focus_border_;
-
// RTL painting --------------------------------------------------------------
// Indicates whether or not the gfx::Canvas object passed to View::Paint()
diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc
index 964efdfa39..e680160e11 100644
--- a/ui/views/view_unittest.cc
+++ b/ui/views/view_unittest.cc
@@ -27,7 +27,6 @@
#include "ui/views/controls/textfield/textfield.h"
#include "ui/views/focus/accelerator_handler.h"
#include "ui/views/focus/view_storage.h"
-#include "ui/views/focus_border.h"
#include "ui/views/test/views_test_base.h"
#include "ui/views/view.h"
#include "ui/views/views_delegate.h"
@@ -2212,9 +2211,7 @@ TEST_F(ViewTest, FocusBlurPaints) {
parent_view.scheduled_paint_rects_.clear();
child_view1->scheduled_paint_rects_.clear();
- // If no FocusBorder is installed then focus changes shouldn't
- // SchedulePaint().
- child_view1->set_focus_border(NULL);
+ // Focus change shouldn't trigger paints.
child_view1->DoFocus();
EXPECT_TRUE(parent_view.scheduled_paint_rects_.empty());
@@ -2223,15 +2220,6 @@ TEST_F(ViewTest, FocusBlurPaints) {
child_view1->DoBlur();
EXPECT_TRUE(parent_view.scheduled_paint_rects_.empty());
EXPECT_TRUE(child_view1->scheduled_paint_rects_.empty());
-
- // Repeat with a FocusBorder, should now paint.
- child_view1->set_focus_border(FocusBorder::CreateDashedFocusBorder());
- child_view1->DoFocus();
- EXPECT_FALSE(child_view1->scheduled_paint_rects_.empty());
- child_view1->scheduled_paint_rects_.clear();
-
- child_view1->DoBlur();
- EXPECT_FALSE(child_view1->scheduled_paint_rects_.empty());
}
// Verifies SetBounds(same bounds) doesn't trigger a SchedulePaint().
@@ -2432,6 +2420,32 @@ TEST_F(ViewTest, ConversionsWithTransform) {
}
}
+// Tests conversion methods to and from screen coordinates.
+TEST_F(ViewTest, ConversionsToFromScreen) {
+ scoped_ptr<Widget> widget(new Widget);
+ Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
+ params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+ params.bounds = gfx::Rect(50, 50, 650, 650);
+ widget->Init(params);
+
+ View* child = new View;
+ widget->GetRootView()->AddChildView(child);
+ child->SetBounds(10, 10, 100, 200);
+ gfx::Transform t;
+ t.Scale(0.5, 0.5);
+ child->SetTransform(t);
+
+ gfx::Point point_in_screen(100, 90);
+ gfx::Point point_in_child(80,60);
+
+ gfx::Point point = point_in_screen;
+ View::ConvertPointFromScreen(child, &point);
+ EXPECT_EQ(point_in_child.ToString(), point.ToString());
+
+ View::ConvertPointToScreen(child, &point);
+ EXPECT_EQ(point_in_screen.ToString(), point.ToString());
+}
+
// Tests conversion methods for rectangles.
TEST_F(ViewTest, ConvertRectWithTransform) {
scoped_ptr<Widget> widget(new Widget);
diff --git a/ui/views/views.gyp b/ui/views/views.gyp
index aba39deb7d..e853e765d0 100644
--- a/ui/views/views.gyp
+++ b/ui/views/views.gyp
@@ -136,6 +136,7 @@
'controls/menu/menu_model_adapter.h',
'controls/menu/menu_runner.cc',
'controls/menu/menu_runner.h',
+ 'controls/menu/menu_runner_handler.h',
'controls/menu/menu_scroll_view_container.cc',
'controls/menu/menu_scroll_view_container.h',
'controls/menu/menu_separator.h',
@@ -293,8 +294,6 @@
'focus/view_storage.h',
'focus/widget_focus_manager.cc',
'focus/widget_focus_manager.h',
- 'focus_border.cc',
- 'focus_border.h',
'ime/input_method_base.cc',
'ime/input_method_base.h',
'ime/input_method_bridge.cc',
@@ -343,11 +342,11 @@
'touchui/touch_selection_controller_impl.h',
'view.cc',
'view.h',
+ 'view_aura.cc',
'view_constants.cc',
'view_constants.h',
'view_constants_aura.cc',
'view_constants_aura.h',
- 'view_aura.cc',
'view_model.cc',
'view_model.h',
'view_model_utils.cc',
@@ -499,6 +498,7 @@
['include', 'controls/menu/native_menu_win.h'],
['include', 'corewm/tooltip_win.cc'],
['include', 'corewm/tooltip_win.h'],
+ ['include', 'event_utils_win.cc'],
['include', 'widget/desktop_aura/desktop_screen_win.cc'],
['include', 'widget/desktop_aura/desktop_drag_drop_client_win.cc'],
['include', 'widget/desktop_aura/desktop_drop_target_win.cc'],
@@ -629,6 +629,8 @@
'test/child_modal_window.h',
'test/desktop_test_views_delegate.cc',
'test/desktop_test_views_delegate.h',
+ 'test/menu_runner_test_api.cc',
+ 'test/menu_runner_test_api.h',
'test/test_views.cc',
'test/test_views.h',
'test/test_views_delegate.cc',
@@ -940,6 +942,9 @@
{
'target_name': 'views_examples_exe',
'type': 'executable',
+ 'dependencies': [
+ '../../base/base.gyp:base',
+ ],
'sources': [
'examples/examples_main.cc',
],
diff --git a/ui/views/views_delegate.h b/ui/views/views_delegate.h
index 243ed14439..85fa50b5aa 100644
--- a/ui/views/views_delegate.h
+++ b/ui/views/views_delegate.h
@@ -89,6 +89,9 @@ class VIEWS_EXPORT ViewsDelegate {
#if defined(OS_WIN)
// Retrieves the default window icon to use for windows if none is specified.
virtual HICON GetDefaultWindowIcon() const = 0;
+ // Returns true if the window passed in is in the Windows 8 metro
+ // environment.
+ virtual bool IsWindowInMetro(gfx::NativeWindow window) const = 0;
#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
virtual gfx::ImageSkia* GetDefaultWindowIcon() const = 0;
#endif
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
index aa6db8ee19..70ba57a6f9 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
@@ -580,9 +580,10 @@ void DesktopNativeWidgetAura::GetWindowPlacement(
desktop_root_window_host_->GetWindowPlacement(bounds, maximized);
}
-void DesktopNativeWidgetAura::SetWindowTitle(const string16& title) {
- if (content_window_)
- desktop_root_window_host_->SetWindowTitle(title);
+bool DesktopNativeWidgetAura::SetWindowTitle(const string16& title) {
+ if (!content_window_)
+ return false;
+ return desktop_root_window_host_->SetWindowTitle(title);
}
void DesktopNativeWidgetAura::SetWindowIcons(const gfx::ImageSkia& window_icon,
@@ -641,6 +642,8 @@ void DesktopNativeWidgetAura::StackAbove(gfx::NativeView native_view) {
}
void DesktopNativeWidgetAura::StackAtTop() {
+ if (content_window_)
+ desktop_root_window_host_->StackAtTop();
}
void DesktopNativeWidgetAura::StackBelow(gfx::NativeView native_view) {
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.h b/ui/views/widget/desktop_aura/desktop_native_widget_aura.h
index 9fe207ae74..494dbc41a0 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.h
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.h
@@ -113,7 +113,7 @@ class VIEWS_EXPORT DesktopNativeWidgetAura
virtual void GetWindowPlacement(
gfx::Rect* bounds,
ui::WindowShowState* maximized) const OVERRIDE;
- virtual void SetWindowTitle(const string16& title) OVERRIDE;
+ virtual bool SetWindowTitle(const string16& title) OVERRIDE;
virtual void SetWindowIcons(const gfx::ImageSkia& window_icon,
const gfx::ImageSkia& app_icon) OVERRIDE;
virtual void InitModalType(ui::ModalType modal_type) OVERRIDE;
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host.h b/ui/views/widget/desktop_aura/desktop_root_window_host.h
index 77c61503f4..c66cee9254 100644
--- a/ui/views/widget/desktop_aura/desktop_root_window_host.h
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host.h
@@ -84,6 +84,7 @@ class VIEWS_EXPORT DesktopRootWindowHost {
virtual bool IsVisible() const = 0;
virtual void SetSize(const gfx::Size& size) = 0;
+ virtual void StackAtTop() = 0;
virtual void CenterWindow(const gfx::Size& size) = 0;
virtual void GetWindowPlacement(gfx::Rect* bounds,
ui::WindowShowState* show_state) const = 0;
@@ -111,7 +112,8 @@ class VIEWS_EXPORT DesktopRootWindowHost {
virtual void SetAlwaysOnTop(bool always_on_top) = 0;
virtual bool IsAlwaysOnTop() const = 0;
- virtual void SetWindowTitle(const string16& title) = 0;
+ // Returns true if the title changed.
+ virtual bool SetWindowTitle(const string16& title) = 0;
virtual void ClearNativeFocus() = 0;
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc b/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc
index 5e5cf4a271..12ca812f0b 100644
--- a/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host_win.cc
@@ -226,6 +226,10 @@ void DesktopRootWindowHostWin::SetSize(const gfx::Size& size) {
message_handler_->SetSize(expanded);
}
+void DesktopRootWindowHostWin::StackAtTop() {
+ message_handler_->StackAtTop();
+}
+
void DesktopRootWindowHostWin::CenterWindow(const gfx::Size& size) {
gfx::Size size_in_pixels = gfx::win::DIPToScreenSize(size);
message_handler_->CenterWindow(size_in_pixels);
@@ -321,8 +325,8 @@ bool DesktopRootWindowHostWin::IsAlwaysOnTop() const {
return message_handler_->IsAlwaysOnTop();
}
-void DesktopRootWindowHostWin::SetWindowTitle(const string16& title) {
- message_handler_->SetTitle(title);
+bool DesktopRootWindowHostWin::SetWindowTitle(const string16& title) {
+ return message_handler_->SetTitle(title);
}
void DesktopRootWindowHostWin::ClearNativeFocus() {
@@ -365,6 +369,11 @@ NonClientFrameView* DesktopRootWindowHostWin::CreateNonClientFrameView() {
void DesktopRootWindowHostWin::SetFullscreen(bool fullscreen) {
message_handler_->fullscreen_handler()->SetFullscreen(fullscreen);
+ // TODO(sky): workaround for ScopedFullscreenVisibility showing window
+ // directly. Instead of this should listen for visibility changes and then
+ // update window.
+ if (message_handler_->IsVisible() && !content_window_->TargetVisibility())
+ content_window_->Show();
SetWindowTransparency();
}
@@ -433,6 +442,8 @@ void DesktopRootWindowHostWin::ToggleFullScreen() {
gfx::Rect DesktopRootWindowHostWin::GetBounds() const {
// Match the logic in HWNDMessageHandler::ClientAreaSizeChanged().
+ if (IsMinimized())
+ return gfx::Rect();
gfx::Rect bounds(WidgetSizeIsClientSize() ?
message_handler_->GetClientAreaBoundsInScreen() :
message_handler_->GetWindowBoundsInScreen());
@@ -820,8 +831,8 @@ bool DesktopRootWindowHostWin::HandleKeyEvent(const ui::KeyEvent& event) {
bool DesktopRootWindowHostWin::HandleUntranslatedKeyEvent(
const ui::KeyEvent& event) {
- scoped_ptr<ui::KeyEvent> duplicate_event(event.Copy());
- return delegate_->OnHostKeyEvent(duplicate_event.get());
+ ui::KeyEvent duplicate_event(event);
+ return delegate_->OnHostKeyEvent(&duplicate_event);
}
void DesktopRootWindowHostWin::HandleTouchEvent(
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_win.h b/ui/views/widget/desktop_aura/desktop_root_window_host_win.h
index 6ac7f6f916..bfe42e160c 100644
--- a/ui/views/widget/desktop_aura/desktop_root_window_host_win.h
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host_win.h
@@ -59,6 +59,7 @@ class VIEWS_EXPORT DesktopRootWindowHostWin
const gfx::Rect& restored_bounds) OVERRIDE;
virtual bool IsVisible() const OVERRIDE;
virtual void SetSize(const gfx::Size& size) OVERRIDE;
+ virtual void StackAtTop() OVERRIDE;
virtual void CenterWindow(const gfx::Size& size) OVERRIDE;
virtual void GetWindowPlacement(
gfx::Rect* bounds,
@@ -79,7 +80,7 @@ class VIEWS_EXPORT DesktopRootWindowHostWin
virtual bool HasCapture() const OVERRIDE;
virtual void SetAlwaysOnTop(bool always_on_top) OVERRIDE;
virtual bool IsAlwaysOnTop() const OVERRIDE;
- virtual void SetWindowTitle(const string16& title) OVERRIDE;
+ virtual bool SetWindowTitle(const string16& title) OVERRIDE;
virtual void ClearNativeFocus() OVERRIDE;
virtual Widget::MoveLoopResult RunMoveLoop(
const gfx::Vector2d& drag_offset,
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc
index 6efc822b36..545e0cde55 100644
--- a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.cc
@@ -135,13 +135,16 @@ DesktopRootWindowHostX11::DesktopRootWindowHostX11(
native_widget_delegate_(native_widget_delegate),
desktop_native_widget_aura_(desktop_native_widget_aura),
content_window_(NULL),
- window_parent_(NULL) {
+ window_parent_(NULL),
+ custom_window_shape_(NULL) {
}
DesktopRootWindowHostX11::~DesktopRootWindowHostX11() {
root_window_->window()->ClearProperty(kHostForRootWindow);
aura::client::SetWindowMoveClient(root_window_->window(), NULL);
desktop_native_widget_aura_->OnDesktopRootWindowHostDestroyed(root_window_);
+ if (custom_window_shape_)
+ XDestroyRegion(custom_window_shape_);
}
// static
@@ -352,6 +355,10 @@ void DesktopRootWindowHostX11::SetSize(const gfx::Size& size) {
NOTIMPLEMENTED();
}
+void DesktopRootWindowHostX11::StackAtTop() {
+ XRaiseWindow(xdisplay_, xwindow_);
+}
+
void DesktopRootWindowHostX11::CenterWindow(const gfx::Size& size) {
gfx::Rect parent_bounds = GetWorkAreaBoundsInScreen();
@@ -445,20 +452,16 @@ gfx::Rect DesktopRootWindowHostX11::GetWorkAreaBoundsInScreen() const {
}
void DesktopRootWindowHostX11::SetShape(gfx::NativeRegion native_region) {
- if (native_region) {
- Region region = gfx::CreateRegionFromSkRegion(*native_region);
- XShapeCombineRegion(
- xdisplay_, xwindow_, ShapeBounding, 0, 0, region, false);
- XDestroyRegion(region);
- } else {
- ResetWindowRegion();
- }
-
+ if (custom_window_shape_)
+ XDestroyRegion(custom_window_shape_);
+ custom_window_shape_ = gfx::CreateRegionFromSkRegion(*native_region);
+ ResetWindowRegion();
delete native_region;
}
void DesktopRootWindowHostX11::Activate() {
X11DesktopHandler::get()->ActivateWindow(xwindow_);
+ native_widget_delegate_->AsWidget()->SetInitialFocus();
}
void DesktopRootWindowHostX11::Deactivate() {
@@ -492,7 +495,7 @@ void DesktopRootWindowHostX11::Restore() {
}
bool DesktopRootWindowHostX11::IsMaximized() const {
- return (HasWMSpecProperty("_NET_WM_STATE_MAXIMIZED_VERT") ||
+ return (HasWMSpecProperty("_NET_WM_STATE_MAXIMIZED_VERT") &&
HasWMSpecProperty("_NET_WM_STATE_MAXIMIZED_HORZ"));
}
@@ -516,9 +519,11 @@ bool DesktopRootWindowHostX11::IsAlwaysOnTop() const {
return is_always_on_top_;
}
-void DesktopRootWindowHostX11::SetWindowTitle(const string16& title) {
+bool DesktopRootWindowHostX11::SetWindowTitle(const string16& title) {
+ if (window_title_ == title)
+ return false;
+ window_title_ = title;
std::string utf8str = UTF16ToUTF8(title);
-
XChangeProperty(xdisplay_,
xwindow_,
atom_cache_.GetAtom("_NET_WM_NAME"),
@@ -527,12 +532,12 @@ void DesktopRootWindowHostX11::SetWindowTitle(const string16& title) {
PropModeReplace,
reinterpret_cast<const unsigned char*>(utf8str.c_str()),
utf8str.size());
-
// TODO(erg): This is technically wrong. So XStoreName and friends expect
// this in Host Portable Character Encoding instead of UTF-8, which I believe
// is Compound Text. This shouldn't matter 90% of the time since this is the
// fallback to the UTF8 property above.
XStoreName(xdisplay_, xwindow_, utf8str.c_str());
+ return true;
}
void DesktopRootWindowHostX11::ClearNativeFocus() {
@@ -726,6 +731,8 @@ void DesktopRootWindowHostX11::Show() {
base::MessagePumpX11::Current()->BlockUntilWindowMapped(xwindow_);
window_mapped_ = true;
}
+
+ native_widget_delegate_->AsWidget()->SetInitialFocus();
}
void DesktopRootWindowHostX11::Hide() {
@@ -1112,7 +1119,25 @@ void DesktopRootWindowHostX11::DispatchMouseEvent(ui::MouseEvent* event) {
}
}
+void DesktopRootWindowHostX11::DispatchTouchEvent(ui::TouchEvent* event) {
+ if (g_current_capture && g_current_capture != this &&
+ event->type() == ui::ET_TOUCH_PRESSED) {
+ event->ConvertLocationToTarget(root_window_->window(),
+ g_current_capture->root_window_->window());
+ g_current_capture->delegate_->OnHostTouchEvent(event);
+ } else {
+ delegate_->OnHostTouchEvent(event);
+ }
+}
+
void DesktopRootWindowHostX11::ResetWindowRegion() {
+ // If a custom window shape was supplied then apply it.
+ if (custom_window_shape_) {
+ XShapeCombineRegion(
+ xdisplay_, xwindow_, ShapeBounding, 0, 0, custom_window_shape_, false);
+ return;
+ }
+
if (!IsMaximized()) {
gfx::Path window_mask;
views::Widget* widget = native_widget_delegate_->AsWidget();
@@ -1277,17 +1302,17 @@ bool DesktopRootWindowHostX11::Dispatch(const base::NativeEvent& event) {
int num_coalesced = 0;
switch (type) {
- // case ui::ET_TOUCH_MOVED:
- // num_coalesced = CoalescePendingMotionEvents(xev, &last_event);
- // if (num_coalesced > 0)
- // xev = &last_event;
- // // fallthrough
- // case ui::ET_TOUCH_PRESSED:
- // case ui::ET_TOUCH_RELEASED: {
- // ui::TouchEvent touchev(xev);
- // delegate_->OnHostTouchEvent(&touchev);
- // break;
- // }
+ case ui::ET_TOUCH_MOVED:
+ num_coalesced = ui::CoalescePendingMotionEvents(xev, &last_event);
+ if (num_coalesced > 0)
+ xev = &last_event;
+ // fallthrough
+ case ui::ET_TOUCH_PRESSED:
+ case ui::ET_TOUCH_RELEASED: {
+ ui::TouchEvent touchev(xev);
+ DispatchTouchEvent(&touchev);
+ break;
+ }
case ui::ET_MOUSE_MOVED:
case ui::ET_MOUSE_DRAGGED:
case ui::ET_MOUSE_PRESSED:
diff --git a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.h b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.h
index a9e2db44d7..76a0821a6d 100644
--- a/ui/views/widget/desktop_aura/desktop_root_window_host_x11.h
+++ b/ui/views/widget/desktop_aura/desktop_root_window_host_x11.h
@@ -5,6 +5,7 @@
#ifndef UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_ROOT_WINDOW_HOST_X11_H_
#define UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_ROOT_WINDOW_HOST_X11_H_
+#include <X11/extensions/shape.h>
#include <X11/Xlib.h>
// Get rid of a macro from Xlib.h that conflicts with Aura's RootWindow class.
@@ -84,6 +85,7 @@ class VIEWS_EXPORT DesktopRootWindowHostX11 :
const gfx::Rect& restored_bounds) OVERRIDE;
virtual bool IsVisible() const OVERRIDE;
virtual void SetSize(const gfx::Size& size) OVERRIDE;
+ virtual void StackAtTop() OVERRIDE;
virtual void CenterWindow(const gfx::Size& size) OVERRIDE;
virtual void GetWindowPlacement(
gfx::Rect* bounds,
@@ -104,7 +106,7 @@ class VIEWS_EXPORT DesktopRootWindowHostX11 :
virtual bool HasCapture() const OVERRIDE;
virtual void SetAlwaysOnTop(bool always_on_top) OVERRIDE;
virtual bool IsAlwaysOnTop() const OVERRIDE;
- virtual void SetWindowTitle(const string16& title) OVERRIDE;
+ virtual bool SetWindowTitle(const string16& title) OVERRIDE;
virtual void ClearNativeFocus() OVERRIDE;
virtual Widget::MoveLoopResult RunMoveLoop(
const gfx::Vector2d& drag_offset,
@@ -180,6 +182,11 @@ private:
// and dispatch it to that host instead.
void DispatchMouseEvent(ui::MouseEvent* event);
+ // Dispatches a touch event, taking capture into account. If a different host
+ // has capture, then touch-press events are translated to its coordinate space
+ // and dispatched to that host instead.
+ void DispatchTouchEvent(ui::TouchEvent* event);
+
// Resets the window region for the current widget bounds if necessary.
void ResetWindowRegion();
@@ -260,6 +267,9 @@ private:
ObserverList<DesktopRootWindowHostObserverX11> observer_list_;
+ // Copy of custom window shape specified via SetShape(), if any.
+ ::Region custom_window_shape_;
+
// The current root window host that has capture. While X11 has something
// like Windows SetCapture()/ReleaseCapture(), it is entirely implicit and
// there are no notifications when this changes. We need to track this so we
@@ -271,6 +281,8 @@ private:
// destroyed.
static std::list<XID>* open_windows_;
+ string16 window_title_;
+
DISALLOW_COPY_AND_ASSIGN(DesktopRootWindowHostX11);
};
diff --git a/ui/views/widget/desktop_aura/desktop_screen_x11.cc b/ui/views/widget/desktop_aura/desktop_screen_x11.cc
index f17c3f23d9..332b81c59c 100644
--- a/ui/views/widget/desktop_aura/desktop_screen_x11.cc
+++ b/ui/views/widget/desktop_aura/desktop_screen_x11.cc
@@ -271,9 +271,7 @@ bool DesktopScreenX11::Dispatch(const base::NativeEvent& event) {
} else if (event->type - xrandr_event_base_ == RRNotify) {
// There's some sort of observer dispatch going on here, but I don't think
// it's the screen's?
- DLOG(ERROR) << "DesktopScreenX11::Dispatch() -> RRNotify";
-
- if (configure_timer_.get()) {
+ if (configure_timer_.get() && configure_timer_->IsRunning()) {
configure_timer_->Reset();
} else {
configure_timer_.reset(new base::OneShotTimer<DesktopScreenX11>());
diff --git a/ui/views/widget/drop_target_win.cc b/ui/views/widget/drop_target_win.cc
index dfe15f9af2..56b0be1aef 100644
--- a/ui/views/widget/drop_target_win.cc
+++ b/ui/views/widget/drop_target_win.cc
@@ -33,7 +33,7 @@ DWORD DropTargetWin::OnDragOver(IDataObject* data_object,
POINT cursor_position,
DWORD effect) {
gfx::Point root_view_location(cursor_position.x, cursor_position.y);
- View::ConvertPointToTarget(NULL, helper_.root_view(), &root_view_location);
+ View::ConvertPointFromScreen(helper_.root_view(), &root_view_location);
OSExchangeData data(new OSExchangeDataProviderWin(data_object));
int drop_operation =
helper_.OnDragOver(data, root_view_location,
@@ -50,7 +50,7 @@ DWORD DropTargetWin::OnDrop(IDataObject* data_object,
POINT cursor_position,
DWORD effect) {
gfx::Point root_view_location(cursor_position.x, cursor_position.y);
- View::ConvertPointToTarget(NULL, helper_.root_view(), &root_view_location);
+ View::ConvertPointFromScreen(helper_.root_view(), &root_view_location);
OSExchangeData data(new OSExchangeDataProviderWin(data_object));
int drop_operation = ui::DragDropTypes::DropEffectToDragOperation(effect);
diff --git a/ui/views/widget/native_widget_aura.cc b/ui/views/widget/native_widget_aura.cc
index 17aa7d1b1f..c5c93072aa 100644
--- a/ui/views/widget/native_widget_aura.cc
+++ b/ui/views/widget/native_widget_aura.cc
@@ -345,9 +345,13 @@ void NativeWidgetAura::GetWindowPlacement(
ui::SHOW_STATE_DEFAULT;
}
-void NativeWidgetAura::SetWindowTitle(const string16& title) {
- if (window_)
- window_->set_title(title);
+bool NativeWidgetAura::SetWindowTitle(const string16& title) {
+ if (!window_)
+ return false;
+ if (window_->title() == title)
+ return false;
+ window_->set_title(title);
+ return true;
}
void NativeWidgetAura::SetWindowIcons(const gfx::ImageSkia& window_icon,
diff --git a/ui/views/widget/native_widget_aura.h b/ui/views/widget/native_widget_aura.h
index f43257e69c..c79c003f99 100644
--- a/ui/views/widget/native_widget_aura.h
+++ b/ui/views/widget/native_widget_aura.h
@@ -79,7 +79,7 @@ class VIEWS_EXPORT NativeWidgetAura
virtual void GetWindowPlacement(
gfx::Rect* bounds,
ui::WindowShowState* maximized) const OVERRIDE;
- virtual void SetWindowTitle(const string16& title) OVERRIDE;
+ virtual bool SetWindowTitle(const string16& title) OVERRIDE;
virtual void SetWindowIcons(const gfx::ImageSkia& window_icon,
const gfx::ImageSkia& app_icon) OVERRIDE;
virtual void InitModalType(ui::ModalType modal_type) OVERRIDE;
diff --git a/ui/views/widget/native_widget_private.h b/ui/views/widget/native_widget_private.h
index b4b2e3d531..2cee9533a6 100644
--- a/ui/views/widget/native_widget_private.h
+++ b/ui/views/widget/native_widget_private.h
@@ -151,8 +151,8 @@ class VIEWS_EXPORT NativeWidgetPrivate : public NativeWidget {
gfx::Rect* bounds,
ui::WindowShowState* show_state) const = 0;
- // Sets the NativeWindow title.
- virtual void SetWindowTitle(const string16& title) = 0;
+ // Sets the NativeWindow title. Returns true if the title changed.
+ virtual bool SetWindowTitle(const string16& title) = 0;
// Sets the Window icons. |window_icon| is a 16x16 icon suitable for use in
// a title bar. |app_icon| is a larger size for use in the host environment
diff --git a/ui/views/widget/native_widget_win.cc b/ui/views/widget/native_widget_win.cc
index d0f20a6cc3..afe0973678 100644
--- a/ui/views/widget/native_widget_win.cc
+++ b/ui/views/widget/native_widget_win.cc
@@ -232,8 +232,8 @@ void NativeWidgetWin::GetWindowPlacement(
*bounds = gfx::win::ScreenToDIPRect(*bounds);
}
-void NativeWidgetWin::SetWindowTitle(const string16& title) {
- message_handler_->SetTitle(title);
+bool NativeWidgetWin::SetWindowTitle(const string16& title) {
+ return message_handler_->SetTitle(title);
}
void NativeWidgetWin::SetWindowIcons(const gfx::ImageSkia& window_icon,
diff --git a/ui/views/widget/native_widget_win.h b/ui/views/widget/native_widget_win.h
index afe0f539c3..8f27e09cf7 100644
--- a/ui/views/widget/native_widget_win.h
+++ b/ui/views/widget/native_widget_win.h
@@ -94,7 +94,7 @@ class VIEWS_EXPORT NativeWidgetWin : public internal::NativeWidgetPrivate,
virtual void GetWindowPlacement(
gfx::Rect* bounds,
ui::WindowShowState* show_state) const OVERRIDE;
- virtual void SetWindowTitle(const string16& title) OVERRIDE;
+ virtual bool SetWindowTitle(const string16& title) OVERRIDE;
virtual void SetWindowIcons(const gfx::ImageSkia& window_icon,
const gfx::ImageSkia& app_icon) OVERRIDE;
virtual void InitModalType(ui::ModalType modal_type) OVERRIDE;
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
index 469d4560cb..dc1ace9dab 100644
--- a/ui/views/widget/widget.cc
+++ b/ui/views/widget/widget.cc
@@ -807,7 +807,8 @@ void Widget::UpdateWindowTitle() {
// the native frame is being used, since this also updates the taskbar, etc.
string16 window_title = widget_delegate_->GetWindowTitle();
base::i18n::AdjustStringForLocaleDirection(&window_title);
- native_widget_->SetWindowTitle(window_title);
+ if (!native_widget_->SetWindowTitle(window_title))
+ return;
non_client_view_->UpdateWindowTitle();
// If the non-client view is rendering its own title, it'll need to relayout
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
index c24f2e1925..cb29c4e65d 100644
--- a/ui/views/widget/widget_unittest.cc
+++ b/ui/views/widget/widget_unittest.cc
@@ -1598,6 +1598,63 @@ TEST_F(WidgetTest, SingleWindowClosing) {
EXPECT_EQ(1, delegate->count());
}
+class WidgetWindowTitleTest : public WidgetTest {
+ protected:
+ void RunTest(bool desktop_native_widget) {
+ Widget* widget = new Widget(); // Destroyed by CloseNow() below.
+ Widget::InitParams init_params =
+ CreateParams(Widget::InitParams::TYPE_WINDOW);
+ widget->Init(init_params);
+
+#if defined(USE_AURA) && !defined(OS_CHROMEOS)
+ if (desktop_native_widget)
+ init_params.native_widget = new DesktopNativeWidgetAura(widget);
+#else
+ DCHECK(!desktop_native_widget)
+ << "DesktopNativeWidget does not exist on non-Aura or on ChromeOS.";
+#endif
+
+ internal::NativeWidgetPrivate* native_widget =
+ widget->native_widget_private();
+
+ string16 empty;
+ string16 s1(UTF8ToUTF16("Title1"));
+ string16 s2(UTF8ToUTF16("Title2"));
+ string16 s3(UTF8ToUTF16("TitleLong"));
+
+ // The widget starts with no title, setting empty should not change
+ // anything.
+ EXPECT_FALSE(native_widget->SetWindowTitle(empty));
+ // Setting the title to something non-empty should cause a change.
+ EXPECT_TRUE(native_widget->SetWindowTitle(s1));
+ // Setting the title to something else with the same length should cause a
+ // change.
+ EXPECT_TRUE(native_widget->SetWindowTitle(s2));
+ // Setting the title to something else with a different length should cause
+ // a change.
+ EXPECT_TRUE(native_widget->SetWindowTitle(s3));
+ // Setting the title to the same thing twice should not cause a change.
+ EXPECT_FALSE(native_widget->SetWindowTitle(s3));
+
+ widget->CloseNow();
+ }
+};
+
+TEST_F(WidgetWindowTitleTest, SetWindowTitleChanged_NativeWidget) {
+ // Use the default NativeWidget.
+ bool desktop_native_widget = false;
+ RunTest(desktop_native_widget);
+}
+
+// DesktopNativeWidget does not exist on non-Aura or on ChromeOS.
+#if defined(USE_AURA) && !defined(OS_CHROMEOS)
+TEST_F(WidgetWindowTitleTest, SetWindowTitleChanged_DesktopNativeWidget) {
+ // Override to use a DesktopNativeWidget.
+ bool desktop_native_widget = true;
+ RunTest(desktop_native_widget);
+}
+#endif // USE_AURA && !OS_CHROMEOS
+
// Used by SetTopLevelCorrectly to track calls to OnBeforeWidgetInit().
class VerifyTopLevelDelegate : public TestViewsDelegate {
public:
@@ -2055,6 +2112,39 @@ TEST_F(WidgetTest, WindowMouseModalityTest) {
top_level_widget.CloseNow();
}
+#if defined(USE_AURA)
+// Verifies nativeview visbility matches that of Widget visibility when
+// SetFullscreen is invoked.
+TEST_F(WidgetTest, FullscreenStatePropagated) {
+ Widget::InitParams init_params =
+ CreateParams(Widget::InitParams::TYPE_WINDOW);
+ init_params.show_state = ui::SHOW_STATE_NORMAL;
+ init_params.bounds = gfx::Rect(0, 0, 500, 500);
+ init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+
+ {
+ Widget top_level_widget;
+ top_level_widget.Init(init_params);
+ top_level_widget.SetFullscreen(true);
+ EXPECT_EQ(top_level_widget.IsVisible(),
+ top_level_widget.GetNativeView()->IsVisible());
+ top_level_widget.CloseNow();
+ }
+
+#if !defined(OS_CHROMEOS)
+ {
+ Widget top_level_widget;
+ init_params.native_widget = new DesktopNativeWidgetAura(&top_level_widget);
+ top_level_widget.Init(init_params);
+ top_level_widget.SetFullscreen(true);
+ EXPECT_EQ(top_level_widget.IsVisible(),
+ top_level_widget.GetNativeView()->IsVisible());
+ top_level_widget.CloseNow();
+ }
+#endif
+}
+#endif
+
#if defined(OS_WIN)
// Provides functionality to test widget activation via an activation flag
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
index 9eede1ddf5..1c25faf15e 100644
--- a/ui/views/win/hwnd_message_handler.cc
+++ b/ui/views/win/hwnd_message_handler.cc
@@ -377,6 +377,7 @@ HWNDMessageHandler::HWNDMessageHandler(HWNDMessageHandlerDelegate* delegate)
use_system_default_icon_(false),
restore_focus_when_enabled_(false),
restored_enabled_(false),
+ current_cursor_(NULL),
previous_cursor_(NULL),
active_mouse_tracking_flags_(0),
is_right_mouse_pressed_on_caption_(false),
@@ -386,7 +387,6 @@ HWNDMessageHandler::HWNDMessageHandler(HWNDMessageHandlerDelegate* delegate)
use_layered_buffer_(false),
layered_alpha_(255),
waiting_for_redraw_layered_window_contents_(false),
- can_update_layered_window_(true),
is_first_nccalc_(true),
autohide_factory_(this),
id_generator_(0) {
@@ -543,7 +543,8 @@ void HWNDMessageHandler::CenterWindow(const gfx::Size& size) {
}
void HWNDMessageHandler::SetRegion(HRGN region) {
- SetWindowRgn(hwnd(), region, TRUE);
+ custom_window_region_.Set(region);
+ ResetWindowRegion(false, true);
}
void HWNDMessageHandler::StackAbove(HWND other_hwnd) {
@@ -752,13 +753,24 @@ void HWNDMessageHandler::SetVisibilityChangedAnimationsEnabled(bool enabled) {
}
}
-void HWNDMessageHandler::SetTitle(const string16& title) {
+bool HWNDMessageHandler::SetTitle(const string16& title) {
+ string16 current_title;
+ size_t len_with_null = GetWindowTextLength(hwnd()) + 1;
+ if (len_with_null == 1 && title.length() == 0)
+ return false;
+ if (len_with_null - 1 == title.length() &&
+ GetWindowText(
+ hwnd(), WriteInto(&current_title, len_with_null), len_with_null) &&
+ current_title == title)
+ return false;
SetWindowText(hwnd(), title.c_str());
+ return true;
}
void HWNDMessageHandler::SetCursor(HCURSOR cursor) {
if (cursor) {
previous_cursor_ = ::SetCursor(cursor);
+ current_cursor_ = cursor;
} else if (previous_cursor_) {
::SetCursor(previous_cursor_);
previous_cursor_ = NULL;
@@ -768,17 +780,9 @@ void HWNDMessageHandler::SetCursor(HCURSOR cursor) {
void HWNDMessageHandler::FrameTypeChanged() {
// Called when the frame type could possibly be changing (theme change or
// DWM composition change).
- if (base::win::GetVersion() >= base::win::VERSION_VISTA) {
- // We need to toggle the rendering policy of the DWM/glass frame as we
- // change from opaque to glass. "Non client rendering enabled" means that
- // the DWM's glass non-client rendering is enabled, which is why
- // DWMNCRP_ENABLED is used for the native frame case. _DISABLED means the
- // DWM doesn't render glass, and so is used in the custom frame case.
- DWMNCRENDERINGPOLICY policy = !delegate_->IsUsingCustomFrame() ?
- DWMNCRP_ENABLED : DWMNCRP_DISABLED;
- DwmSetWindowAttribute(hwnd(), DWMWA_NCRENDERING_POLICY,
- &policy, sizeof(DWMNCRENDERINGPOLICY));
- }
+
+ // Update rendering of the DWM/glass frame depending on the new frame type.
+ UpdateDwmNcRenderingPolicy();
// Don't redraw the window here, because we need to hide and show the window
// which will also trigger a redraw.
@@ -1099,7 +1103,7 @@ void HWNDMessageHandler::ResetWindowRegion(bool force, bool redraw) {
// automatically makes clicks on transparent pixels fall through, that isn't
// the case with WS_EX_COMPOSITED. So, we route WS_EX_COMPOSITED through to
// the delegate to allow for a custom hit mask.
- if ((window_ex_style() & WS_EX_COMPOSITED) == 0 &&
+ if ((window_ex_style() & WS_EX_COMPOSITED) == 0 && !custom_window_region_ &&
(!delegate_->IsUsingCustomFrame() || !delegate_->IsWidgetWindow())) {
if (force)
SetWindowRgn(hwnd(), NULL, redraw);
@@ -1114,7 +1118,10 @@ void HWNDMessageHandler::ResetWindowRegion(bool force, bool redraw) {
CRect window_rect;
GetWindowRect(hwnd(), &window_rect);
HRGN new_region;
- if (IsMaximized()) {
+ if (custom_window_region_) {
+ new_region = ::CreateRectRgn(0, 0, 0, 0);
+ ::CombineRgn(new_region, custom_window_region_.Get(), NULL, RGN_COPY);
+ } else if (IsMaximized()) {
HMONITOR monitor = MonitorFromWindow(hwnd(), MONITOR_DEFAULTTONEAREST);
MONITORINFO mi;
mi.cbSize = sizeof mi;
@@ -1139,6 +1146,16 @@ void HWNDMessageHandler::ResetWindowRegion(bool force, bool redraw) {
DeleteObject(current_rgn);
}
+void HWNDMessageHandler::UpdateDwmNcRenderingPolicy() {
+ if (base::win::GetVersion() < base::win::VERSION_VISTA)
+ return;
+ DWMNCRENDERINGPOLICY policy = DWMNCRP_ENABLED;
+ if (remove_standard_frame_ || delegate_->IsUsingCustomFrame())
+ policy = DWMNCRP_DISABLED;
+ DwmSetWindowAttribute(hwnd(), DWMWA_NCRENDERING_POLICY,
+ &policy, sizeof(DWMNCRENDERINGPOLICY));
+}
+
LRESULT HWNDMessageHandler::DefWindowProcWithRedrawLock(UINT message,
WPARAM w_param,
LPARAM l_param) {
@@ -1297,6 +1314,7 @@ LRESULT HWNDMessageHandler::OnCreate(CREATESTRUCT* create_struct) {
0);
if (remove_standard_frame_) {
+ UpdateDwmNcRenderingPolicy();
SetWindowLong(hwnd(), GWL_STYLE,
GetWindowLong(hwnd(), GWL_STYLE) & ~WS_CAPTION);
SendFrameChanged();
@@ -1461,6 +1479,17 @@ LRESULT HWNDMessageHandler::OnMouseActivate(UINT message,
WPARAM w_param,
LPARAM l_param) {
#if defined(USE_AURA)
+ // On Windows, if we select the menu item by touch and if the window at the
+ // location is another window on the same thread, that window gets a
+ // WM_MOUSEACTIVATE message and ends up activating itself, which is not
+ // correct. We workaround this by setting a property on the window at the
+ // current cursor location. We check for this property in our
+ // WM_MOUSEACTIVATE handler and don't activate the window if the property is
+ // set.
+ if (::GetProp(hwnd(), kIgnoreTouchMouseActivateForWindow)) {
+ ::RemoveProp(hwnd(), kIgnoreTouchMouseActivateForWindow);
+ return MA_NOACTIVATE;
+ }
// A child window activation should be treated as if we lost activation.
POINT cursor_pos = {0};
::GetCursorPos(&cursor_pos);
@@ -1952,14 +1981,14 @@ LRESULT HWNDMessageHandler::OnSetCursor(UINT message,
cursor = IDC_SIZENESW;
break;
case HTCLIENT:
- // Client-area mouse events set the proper cursor from View::GetCursor.
- return 0;
+ SetCursor(current_cursor_);
+ return 1;
default:
// Use the default value, IDC_ARROW.
break;
}
- SetCursor(LoadCursor(NULL, cursor));
- return 0;
+ ::SetCursor(LoadCursor(NULL, cursor));
+ return 1;
}
void HWNDMessageHandler::OnSetFocus(HWND last_focused_window) {
@@ -2213,7 +2242,8 @@ void HWNDMessageHandler::OnWindowPosChanged(WINDOWPOS* window_pos) {
}
void HWNDMessageHandler::HandleTouchEvents(const TouchEvents& touch_events) {
- for (size_t i = 0; i < touch_events.size(); ++i)
+ base::WeakPtr<HWNDMessageHandler> ref(weak_factory_.GetWeakPtr());
+ for (size_t i = 0; i < touch_events.size() && ref; ++i)
delegate_->HandleTouchEvent(touch_events[i]);
}
diff --git a/ui/views/win/hwnd_message_handler.h b/ui/views/win/hwnd_message_handler.h
index d08fbd8cc9..9bcec62bf2 100644
--- a/ui/views/win/hwnd_message_handler.h
+++ b/ui/views/win/hwnd_message_handler.h
@@ -19,6 +19,7 @@
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/strings/string16.h"
+#include "base/win/scoped_gdi_object.h"
#include "base/win/win_util.h"
#include "ui/base/accessibility/accessibility_types.h"
#include "ui/base/ui_base_types.h"
@@ -174,16 +175,13 @@ class VIEWS_EXPORT HWNDMessageHandler :
void SetVisibilityChangedAnimationsEnabled(bool enabled);
- void SetTitle(const string16& title);
+ // Returns true if the title changed.
+ bool SetTitle(const string16& title);
void SetCursor(HCURSOR cursor);
void FrameTypeChanged();
- // Disable Layered Window updates by setting to false.
- void set_can_update_layered_window(bool can_update_layered_window) {
- can_update_layered_window_ = can_update_layered_window;
- }
void SchedulePaintInRect(const gfx::Rect& rect);
void SetOpacity(BYTE opacity);
@@ -254,6 +252,11 @@ class VIEWS_EXPORT HWNDMessageHandler :
// frame windows.
void ResetWindowRegion(bool force, bool redraw);
+ // Enables or disables rendering of the non-client (glass) area by DWM,
+ // under Vista and above, depending on whether the caller has requested a
+ // custom frame.
+ void UpdateDwmNcRenderingPolicy();
+
// Calls DefWindowProc, safely wrapping the call in a ScopedRedrawLock to
// prevent frame flicker. DefWindowProc handling can otherwise render the
// classic-look window title bar directly.
@@ -440,6 +443,9 @@ class VIEWS_EXPORT HWNDMessageHandler :
// true.
bool restored_enabled_;
+ // The current cursor.
+ HCURSOR current_cursor_;
+
// The last cursor that was active before the current one was selected. Saved
// so that we can restore it.
HCURSOR previous_cursor_;
@@ -509,13 +515,12 @@ class VIEWS_EXPORT HWNDMessageHandler :
// Set to true when waiting for RedrawLayeredWindowContents().
bool waiting_for_redraw_layered_window_contents_;
- // True if we are allowed to update the layered window from the DIB backing
- // store if necessary.
- bool can_update_layered_window_;
-
// True the first time nccalc is called on a sizable widget
bool is_first_nccalc_;
+ // Copy of custom window region specified via SetRegion(), if any.
+ base::win::ScopedRegion custom_window_region_;
+
// A factory used to lookup appbar autohide edges.
base::WeakPtrFactory<HWNDMessageHandler> autohide_factory_;
@@ -525,6 +530,11 @@ class VIEWS_EXPORT HWNDMessageHandler :
DISALLOW_COPY_AND_ASSIGN(HWNDMessageHandler);
};
+// This window property if set on the window does not activate the window for a
+// touch based WM_MOUSEACTIVATE message.
+const wchar_t kIgnoreTouchMouseActivateForWindow[] =
+ L"Chrome.IgnoreMouseActivate";
+
} // namespace views
#endif // UI_VIEWS_WIN_HWND_MESSAGE_HANDLER_H_
diff --git a/ui/views/window/custom_frame_view.cc b/ui/views/window/custom_frame_view.cc
index 838a79c83f..313e88ca83 100644
--- a/ui/views/window/custom_frame_view.cc
+++ b/ui/views/window/custom_frame_view.cc
@@ -388,54 +388,68 @@ void CustomFrameView::PaintRestoredClientEdge(gfx::Canvas* canvas) {
int client_area_top = client_area_bounds.y();
ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
- const gfx::ImageSkia* top_left = rb.GetImageNamed(
- IDR_APP_TOP_LEFT).ToImageSkia();
- const gfx::ImageSkia* top = rb.GetImageNamed(
- IDR_APP_TOP_CENTER).ToImageSkia();
- const gfx::ImageSkia* top_right = rb.GetImageNamed(
- IDR_APP_TOP_RIGHT).ToImageSkia();
- const gfx::ImageSkia* right = rb.GetImageNamed(
- IDR_CONTENT_RIGHT_SIDE).ToImageSkia();
- const gfx::ImageSkia* bottom_right = rb.GetImageNamed(
- IDR_CONTENT_BOTTOM_RIGHT_CORNER).ToImageSkia();
- const gfx::ImageSkia* bottom = rb.GetImageNamed(
- IDR_CONTENT_BOTTOM_CENTER).ToImageSkia();
- const gfx::ImageSkia* bottom_left = rb.GetImageNamed(
- IDR_CONTENT_BOTTOM_LEFT_CORNER).ToImageSkia();
- const gfx::ImageSkia* left = rb.GetImageNamed(
- IDR_CONTENT_LEFT_SIDE).ToImageSkia();
-
- // Top.
- int top_edge_y = client_area_top - top->height();
- canvas->DrawImageInt(*top_left, client_area_bounds.x() - top_left->width(),
+
+ // Top: left, center, right sides.
+ const gfx::ImageSkia* top_left = rb.GetImageSkiaNamed(IDR_APP_TOP_LEFT);
+ const gfx::ImageSkia* top_center = rb.GetImageSkiaNamed(IDR_APP_TOP_CENTER);
+ const gfx::ImageSkia* top_right = rb.GetImageSkiaNamed(IDR_APP_TOP_RIGHT);
+ int top_edge_y = client_area_top - top_center->height();
+ canvas->DrawImageInt(*top_left,
+ client_area_bounds.x() - top_left->width(),
top_edge_y);
- canvas->TileImageInt(*top, client_area_bounds.x(), top_edge_y,
- client_area_bounds.width(), top->height());
+ canvas->TileImageInt(*top_center,
+ client_area_bounds.x(),
+ top_edge_y,
+ client_area_bounds.width(),
+ top_center->height());
canvas->DrawImageInt(*top_right, client_area_bounds.right(), top_edge_y);
- // Right.
+ // Right side.
+ const gfx::ImageSkia* right = rb.GetImageSkiaNamed(IDR_CONTENT_RIGHT_SIDE);
int client_area_bottom =
std::max(client_area_top, client_area_bounds.bottom());
int client_area_height = client_area_bottom - client_area_top;
- canvas->TileImageInt(*right, client_area_bounds.right(), client_area_top,
- right->width(), client_area_height);
+ canvas->TileImageInt(*right,
+ client_area_bounds.right(),
+ client_area_top,
+ right->width(),
+ client_area_height);
+
+ // Bottom: left, center, right sides.
+ const gfx::ImageSkia* bottom_left =
+ rb.GetImageSkiaNamed(IDR_CONTENT_BOTTOM_LEFT_CORNER);
+ const gfx::ImageSkia* bottom_center =
+ rb.GetImageSkiaNamed(IDR_CONTENT_BOTTOM_CENTER);
+ const gfx::ImageSkia* bottom_right =
+ rb.GetImageSkiaNamed(IDR_CONTENT_BOTTOM_RIGHT_CORNER);
- // Bottom.
- canvas->DrawImageInt(*bottom_right, client_area_bounds.right(),
- client_area_bottom);
- canvas->TileImageInt(*bottom, client_area_bounds.x(), client_area_bottom,
- client_area_bounds.width(), bottom_right->height());
canvas->DrawImageInt(*bottom_left,
- client_area_bounds.x() - bottom_left->width(), client_area_bottom);
+ client_area_bounds.x() - bottom_left->width(),
+ client_area_bottom);
+
+ canvas->TileImageInt(*bottom_center,
+ client_area_bounds.x(),
+ client_area_bottom,
+ client_area_bounds.width(),
+ bottom_right->height());
- // Left.
- canvas->TileImageInt(*left, client_area_bounds.x() - left->width(),
- client_area_top, left->width(), client_area_height);
+ canvas->DrawImageInt(*bottom_right,
+ client_area_bounds.right(),
+ client_area_bottom);
+ // Left side.
+ const gfx::ImageSkia* left = rb.GetImageSkiaNamed(IDR_CONTENT_LEFT_SIDE);
+ canvas->TileImageInt(*left,
+ client_area_bounds.x() - left->width(),
+ client_area_top,
+ left->width(),
+ client_area_height);
// Draw the color to fill in the edges.
- canvas->FillRect(gfx::Rect(client_area_bounds.x() - 1, client_area_top - 1,
- client_area_bounds.width() + 1, client_area_bottom - client_area_top + 1),
- kClientEdgeColor);
+ canvas->FillRect(gfx::Rect(client_area_bounds.x() - 1,
+ client_area_top - 1,
+ client_area_bounds.width() + 1,
+ client_area_bottom - client_area_top + 1),
+ kClientEdgeColor);
}
SkColor CustomFrameView::GetFrameColor() const {
diff --git a/ui/views/window/dialog_client_view.cc b/ui/views/window/dialog_client_view.cc
index 643d6de071..eb83230e05 100644
--- a/ui/views/window/dialog_client_view.cc
+++ b/ui/views/window/dialog_client_view.cc
@@ -7,6 +7,7 @@
#include <algorithm>
#include "ui/events/keycodes/keyboard_codes.h"
+#include "ui/views/background.h"
#include "ui/views/controls/button/blue_button.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/layout/layout_constants.h"
diff --git a/ui/web_dialogs/web_dialog_delegate.cc b/ui/web_dialogs/web_dialog_delegate.cc
index ed414101ab..d3688e04cb 100644
--- a/ui/web_dialogs/web_dialog_delegate.cc
+++ b/ui/web_dialogs/web_dialog_delegate.cc
@@ -14,6 +14,10 @@ void WebDialogDelegate::GetMinimumDialogSize(gfx::Size* size) const {
GetDialogSize(size);
}
+bool WebDialogDelegate::CanCloseDialog() const {
+ return true;
+}
+
void WebDialogDelegate::OnDialogCloseFromWebUI(
const std::string& json_retval) {
OnDialogClosed(json_retval);
diff --git a/ui/web_dialogs/web_dialog_delegate.h b/ui/web_dialogs/web_dialog_delegate.h
index 8416c1f15e..2bd772f018 100644
--- a/ui/web_dialogs/web_dialog_delegate.h
+++ b/ui/web_dialogs/web_dialog_delegate.h
@@ -63,6 +63,12 @@ class WEB_DIALOGS_EXPORT WebDialogDelegate {
// Gets the JSON string input to use when showing the dialog.
virtual std::string GetDialogArgs() const = 0;
+ // Returns true to signal that the dialog can be closed. Specialized
+ // WebDialogDelegate subclasses can override this default behavior to allow
+ // the close to be blocked until the user corrects mistakes, accepts an
+ // agreement, etc.
+ virtual bool CanCloseDialog() const;
+
// A callback to notify the delegate that |source|'s loading state has
// changed.
virtual void OnLoadingStateChanged(content::WebContents* source) {}
diff --git a/ui/webui/resources/js/cr/ui/autocomplete_list.js b/ui/webui/resources/js/cr/ui/autocomplete_list.js
index 6dd04f3717..378e7c6830 100644
--- a/ui/webui/resources/js/cr/ui/autocomplete_list.js
+++ b/ui/webui/resources/js/cr/ui/autocomplete_list.js
@@ -173,6 +173,14 @@ cr.define('cr.ui', function() {
input.addEventListener('keydown', this.textFieldKeyHandler_, true);
input.addEventListener('input', this.textFieldInputHandler_);
+
+ if (!this.boundSyncWidthAndPositionToInput_) {
+ this.boundSyncWidthAndPositionToInput_ =
+ this.syncWidthAndPositionToInput.bind(this);
+ }
+ // We need to call syncWidthAndPositionToInput whenever page zoom level or
+ // page size is changed.
+ window.addEventListener('resize', this.boundSyncWidthAndPositionToInput_);
},
/**
@@ -187,6 +195,10 @@ cr.define('cr.ui', function() {
input.removeEventListener('input', this.textFieldInputHandler_);
this.targetInput_ = null;
this.suggestions = [];
+ if (this.boundSyncWidthAndPositionToInput_) {
+ window.removeEventListener(
+ 'resize', this.boundSyncWidthAndPositionToInput_);
+ }
},
/**
@@ -203,6 +215,13 @@ cr.define('cr.ui', function() {
},
/**
+ * syncWidthAndPositionToInput function bound to |this|.
+ * @type {Function}
+ * @private
+ */
+ boundSyncWidthAndPositionToInput_: undefined,
+
+ /**
* @return {HTMLElement} The text field the autocomplete popup is currently
* attached to, if any.
*/
diff --git a/ui/webui/resources/js/cr/ui/command.js b/ui/webui/resources/js/cr/ui/command.js
index 540db042f0..e06cd68577 100644
--- a/ui/webui/resources/js/cr/ui/command.js
+++ b/ui/webui/resources/js/cr/ui/command.js
@@ -186,6 +186,17 @@ cr.define('cr.ui', function() {
cr.defineProperty(Command, 'checked', cr.PropertyKind.BOOL_ATTR);
/**
+ * The flag that prevents the shortcut text from being displayed on menu.
+ *
+ * If false, the keyboard shortcut text (eg. "Ctrl+X" for the cut command)
+ * is displayed in menu when the command is assosiated with a menu item.
+ * Otherwise, no text is displayed.
+ *
+ * @type {boolean}
+ */
+ cr.defineProperty(Command, 'hideShortcutText', cr.PropertyKind.BOOL_ATTR);
+
+ /**
* Dispatches a canExecute event on the target.
* @param {cr.ui.Command} command The command that we are testing for.
* @param {Element} target The target element to dispatch the event on.
diff --git a/ui/webui/resources/js/cr/ui/list.js b/ui/webui/resources/js/cr/ui/list.js
index 6377273124..1dc38b6dc2 100644
--- a/ui/webui/resources/js/cr/ui/list.js
+++ b/ui/webui/resources/js/cr/ui/list.js
@@ -711,6 +711,11 @@ cr.define('cr.ui', function() {
var top = this.getItemTop(index);
var clientHeight = this.clientHeight;
+ var cs = getComputedStyle(this);
+ var paddingY = parseInt(cs.paddingTop, 10) +
+ parseInt(cs.paddingBottom, 10);
+ var availableHeight = clientHeight - paddingY;
+
var self = this;
// Function to adjust the tops of viewport and row.
function scrollToAdjustTop() {
@@ -719,27 +724,20 @@ cr.define('cr.ui', function() {
};
// Function to adjust the bottoms of viewport and row.
function scrollToAdjustBottom() {
- var cs = getComputedStyle(self);
- var paddingY = parseInt(cs.paddingTop, 10) +
- parseInt(cs.paddingBottom, 10);
-
- if (top + itemHeight > scrollTop + clientHeight - paddingY) {
- self.scrollTop = top + itemHeight - clientHeight + paddingY;
- return true;
- }
- return false;
+ self.scrollTop = top + itemHeight - availableHeight;
+ return true;
};
// Check if the entire of given indexed row can be shown in the viewport.
- if (itemHeight <= clientHeight) {
+ if (itemHeight <= availableHeight) {
if (top < scrollTop)
return scrollToAdjustTop();
- if (scrollTop + clientHeight < top + itemHeight)
+ if (scrollTop + availableHeight < top + itemHeight)
return scrollToAdjustBottom();
} else {
if (scrollTop < top)
return scrollToAdjustTop();
- if (top + itemHeight < scrollTop + clientHeight)
+ if (top + itemHeight < scrollTop + availableHeight)
return scrollToAdjustBottom();
}
return false;
@@ -1300,24 +1298,23 @@ cr.define('cr.ui', function() {
//
// [1] For example, clicking non-focusable area gives focus on the first
// form control in the item.
- if (!tryFocusOnAncestor(e.target, listItem) &&
+ if (!containsFocusableElement(e.target, listItem) &&
listItem.contains(listItem.ownerDocument.activeElement)) {
e.preventDefault();
}
}
/**
- * Try focusing on |eventTarget| or its ancestor under |root|.
+ * Check if |start| or its ancestor under |root| is focusable.
* This is a helper for handleMouseDown.
- * @param {!Element} start An element which we start to try.
- * @param {!Element} root An element which we finish to try.
- * @return {boolean} True if we focused on an element successfully.
+ * @param {!Element} start An element which we start to check.
+ * @param {!Element} root An element which we finish to check.
+ * @return {boolean} True if we found a focusable element.
*/
- function tryFocusOnAncestor(start, root) {
+ function containsFocusableElement(start, root) {
for (var element = start; element && element != root;
element = element.parentElement) {
- element.focus();
- if (root.ownerDocument.activeElement == element)
+ if (element.tabIndex >= 0 && !element.disabled)
return true;
}
return false;
diff --git a/ui/webui/resources/js/cr/ui/menu_item.js b/ui/webui/resources/js/cr/ui/menu_item.js
index 89054e2ccb..9adb83dbd6 100644
--- a/ui/webui/resources/js/cr/ui/menu_item.js
+++ b/ui/webui/resources/js/cr/ui/menu_item.js
@@ -128,7 +128,9 @@ cr.define('cr.ui', function() {
updateShortcut_: function() {
this.removeAttribute('shortcutText');
- if (!(this.command_ && this.command_.shortcut))
+ if (!this.command_ ||
+ !this.command_.shortcut ||
+ this.command_.hideShortcutText)
return;
var shortcuts = this.command_.shortcut.split(/\s+/);
diff --git a/ui/webui/resources/js/util.js b/ui/webui/resources/js/util.js
index 1fc1364858..caf421e385 100644
--- a/ui/webui/resources/js/util.js
+++ b/ui/webui/resources/js/util.js
@@ -120,6 +120,26 @@ function parseQueryParams(location) {
return params;
}
+/**
+ * Creates a new URL by appending or replacing the given query key and value.
+ * Not supporting URL with username and password.
+ * @param {object} location The original URL.
+ * @param {string} key The query parameter name.
+ * @param {string} value The query parameter value.
+ * @return {string} The constructed new URL.
+ */
+function setQueryParam(location, key, value) {
+ var query = parseQueryParams(location);
+ query[encodeURIComponent(key)] = encodeURIComponent(value);
+
+ var newQuery = '';
+ for (var q in query) {
+ newQuery += (newQuery ? '&' : '?') + q + '=' + query[q];
+ }
+
+ return location.origin + location.pathname + newQuery + location.hash;
+}
+
function findAncestorByClass(el, className) {
return findAncestor(el, function(el) {
if (el.classList)